anchor.diff:  
   %% tests
   -export([
  -    iterate_one_by_one_with_end_100/1,
  -    iterate_one_by_one_with_start_25_end_100/1,
  -    iterate_one_by_one_with_start_25_end_100_step_4/1,
  -    iterate_one_by_one_with_start_50_end_minus_50_step_minus_2/1,
  -    iterate_in_chunks_10_with_start_minus_50_end_50_step_4/1
  +    create_store_with_invalid_args_test/1,
  +
  +    stream_one_by_one_with_end_100_test/1,
  +    stream_one_by_one_with_start_25_end_100_test/1,
  +    stream_one_by_one_with_start_25_end_100_step_4_test/1,
  +    stream_one_by_one_with_start_50_end_minus_50_step_minus_2_test/1,
  +    stream_one_by_one_with_start_10_end_10_step_1_test/1,
  +
  +    stream_in_chunks_5_with_start_10_end_50_step_2_test/1,
  +    stream_in_chunks_10_with_start_1_end_2_step_10_test/1,
  +    stream_in_chunks_10_with_start_minus_50_end_50_step_4_test/1,
  +    stream_in_chunks_7_with_start_50_end_minus_50_step_minus_3_test/1,
  +    stream_in_chunks_3_with_start_10_end_10_step_2_test/1
   ]).
   
   groups() -> [
       {all_tests, [parallel], [
  -        iterate_one_by_one_with_end_100,
  -        iterate_one_by_one_with_start_25_end_100,
  -        iterate_one_by_one_with_start_25_end_100_step_4,
  -        iterate_one_by_one_with_start_50_end_minus_50_step_minus_2,
  -        iterate_in_chunks_10_with_start_minus_50_end_50_step_4
  +        create_store_with_invalid_args_test,
  +
  +        stream_one_by_one_with_end_100_test,
  +        stream_one_by_one_with_start_25_end_100_test,
  +        stream_one_by_one_with_start_25_end_100_step_4_test,
  +        stream_one_by_one_with_start_50_end_minus_50_step_minus_2_test,
  +        stream_one_by_one_with_start_10_end_10_step_1_test,
  +
  +        stream_in_chunks_5_with_start_10_end_50_step_2_test,
  +        stream_in_chunks_10_with_start_1_end_2_step_10_test,
  +        stream_in_chunks_10_with_start_minus_50_end_50_step_4_test,
  +        stream_in_chunks_7_with_start_50_end_minus_50_step_minus_3_test,
  +        stream_in_chunks_3_with_start_10_end_10_step_2_test
       ]}
   ].
   
  
positive.code: %%%===================================================================
  
  
  iterate_one_by_one_with_end_100(_Config) ->
      iterate_test_base(
          #{<<"end">> => 100},
          #atm_store_stream_schema{mode = #serial_mode{}},
          lists:seq(0, 100)
      ).
  
  
  iterate_one_by_one_with_start_25_end_100(_Config) ->
      iterate_test_base(
          #{<<"start">> => 25, <<"end">> => 100},
          #atm_store_stream_schema{mode = #serial_mode{}},
          lists:seq(25, 100)
      ).
  
  
  iterate_one_by_one_with_start_25_end_100_step_4(_Config) ->
      iterate_test_base(
          #{<<"start">> => 25, <<"end">> => 100, <<"step">> => 4},
          #atm_store_stream_schema{mode = #serial_mode{}},
          lists:seq(25, 100, 4)
      ).
  
  
  iterate_one_by_one_with_start_50_end_minus_50_step_minus_2(_Config) ->
      iterate_test_base(
          #{<<"start">> => 50, <<"end">> => -50, <<"step">> => -2},
          #atm_store_stream_schema{mode = #serial_mode{}},
          lists:seq(50, -50, -2)
      ).
  
  
  iterate_in_chunks_10_with_start_minus_50_end_50_step_4(_Config) ->
      iterate_test_base(
          #{<<"start">> => -50, <<"end">> => 50, <<"step">> => 4},
          #atm_store_stream_schema{mode = #bulk_mode{size = 10}},
          split_into_chunks(10, [], lists:seq(-50, 50, 4))
      ).
  
  
  %% @private
  -spec iterate_test_base(
      atm_store_api:init_args(),
      atm_store_stream_schema(),
      [item()] | [[item()]]
  ) ->
      ok | no_return().
  iterate_test_base(AtmRangeStoreInitArgs, AtmStoreStreamSchema, ExpItems) ->
      Node = oct_background:get_random_provider_node(krakow),
  
      {ok, AtmRangeStoreId} = create_store(Node, ?ATM_RANGE_STORE_SCHEMA, AtmRangeStoreInitArgs),
      AtmStoreStream = create_store_stream(Node, AtmStoreStreamSchema, AtmRangeStoreId),
  
      assert_all_items_listed(AtmStoreStream, ExpItems).
  
  
  %% @private
  -spec assert_all_items_listed(atm_store_stream:stream(), [item()] | [[item()]]) ->
      ok | no_return().
  assert_all_items_listed(AtmStoreStream, []) ->
      ?assertEqual(stop, iterator:get_next(AtmStoreStream)),
      ok;
  assert_all_items_listed(AtmStoreStream0, [ExpItem | RestItems]) ->
      {ok, _, _, AtmStoreStream1} = ?assertMatch(
          {ok, ExpItem, _, _}, iterator:get_next(AtmStoreStream0)
      ),
      assert_all_items_listed(AtmStoreStream1, RestItems).
  
  
  %%%===================================================================
  
negative.code:     rpc:call(Node, atm_store_api, init_stream, [AtmStoreStreamSchema, AtmStoreId]).
  
  
  %% @private
  -spec iterator_get_next(node(), iterator:iterator()) ->
      {ok, iterator:item(), iterator:marker(), iterator:iterato()} | stop.
  iterator_get_next(Node, Iterator) ->
      rpc:call(Node, iterator, get_next, [Iterator]).
  
  
  %===================================================================
  % SetUp and TearDown functions
  %===================================================================
  