anchor.diff:      ).
   
   
  +atm_string_value_validation_test(_Config) ->
  +    validate_value_test_base(
  +        #atm_data_spec{type = atm_string_type},
  +        [<<"">>, <<"NaN">>, <<"!@#$%^&*()">>],
  +        lists:map(fun(Value) ->
  +            {Value, ?ERROR_ATM_DATA_TYPE_UNVERIFIED(Value, atm_string_type)} end,
  +            [5, [5], #{<<"key">> => 5}]
  +        )
  +    ).
  +
  +
   %% @private
   validate_value_test_base(AtmDataSpec, ValidValues, InvalidValuesAndExpErrors) ->
       AtmWorkflowExecutionAuth = create_workflow_execution_auth(),
  
positive.code: 
  %% tests
  -export([
      validate_atm_range_value/1
  ]).
  
  groups() -> [
      {all_tests, [parallel], [
          validate_atm_range_value
      ]}
  ].
  
  
negative.code: %%%===================================================================
  
  
  atm_integer_value_validation_test(_Config) ->
      validate_value_test_base(
          #atm_data_spec{type = atm_integer_type},
          [-10, 0, 10],
          lists:map(fun(Value) ->
              {Value, ?ERROR_ATM_DATA_TYPE_UNVERIFIED(Value, atm_integer_type)} end,
              [5.5, [5], #{<<"key">> => 5}]
          )
      ).
  
  
  atm_object_value_validation_test(_Config) ->
      validate_value_test_base(
          #atm_data_spec{type = atm_object_type},
          [
              #{<<"key1">> => <<"value">>},
              #{<<"key2">> => 5},
              #{<<"key3">> => [5]},
              #{<<"key4">> => #{<<"key">> => <<"value">>}},
  
              % atm values are encoded and decoded on system boundaries and as such
              % "improper" json terms (objects with non-binary keys) should never
              % appear in the system ("implicit" validation). Because of that
              % lower layers (tested here) will not check it and would accept
              % any valid map
              #{5 => 6}
          ],
          lists:map(fun(Value) ->
              {Value, ?ERROR_ATM_DATA_TYPE_UNVERIFIED(Value, atm_object_type)} end,
              [5.5, <<"NaN">>, [5]]
          )
      ).
  
  
  atm_onedatafs_credentials_value_validation_test(_Config) ->
      validate_value_test_base(
          #atm_data_spec{type = atm_onedatafs_credentials_type},
          [
              % atm_onedatafs_credentials_value can be specified only as an argument
              % to lambda (they will be generated by op right before lambda invocation).
              % They can not appear in any other context and as such practically no
              % validation, beside checking they are map, is performed.
              #{<<"key1">> => <<"value">>},
              #{<<"key2">> => 5},
              #{<<"key3">> => [5]},
              #{<<"key4">> => #{<<"key">> => <<"value">>}},
              #{5 => 6}
          ],
          lists:map(fun(Value) ->
              {Value, ?ERROR_ATM_DATA_TYPE_UNVERIFIED(Value, atm_onedatafs_credentials_type)} end,
              [5.5, <<"NaN">>, [5]]
          )
      ).
  
  
  atm_range_value_validation_test(_Config) ->
      validate_value_test_base(
          #atm_data_spec{type = atm_range_type},
          [
  