Loops/Wrong ranges

You are encouraged to solve this task according to the task description, using any language you may know.
Some languages have syntax or function(s) to generate a range of numeric values from a start value, a stop value, and an increment.

The purpose of this task is to select the range syntax/function that would generate at least two increasing numbers when given a stop value more than the start value and a positive increment of less than half the difference.   You are then to use that same syntax/function but with different parameters; and show, here, what would happen.

Use these values if possible:



start 
stop 
increment 
Comment


 -2
2
1
Normal


 -2
2
0
Zero increment


 -2
2
-1
Increments away from stop value


 -2
2
10
First increment is beyond stop value


2
-2
1
Start more than stop: positive increment


2
2
1
Start equal stop: positive increment


2
2
-1
Start equal stop: negative increment


2
2
0
Start equal stop: zero increment


0
0
0
Start equal stop equal zero: zero increment

Related tasks

   Loop over multiple arrays simultaneously
   Loops/Break
   Loops/Continue
   Loops/Do-while
   Loops/Downward for
   Loops/For
   Loops/For with a specified step
   Loops/Foreach
   Loops/Increment loop index within loop body
   Loops/Infinite
   Loops/N plus one half
   Loops/Nested
   Loops/While
   Loops/with multiple ranges
   Loops/Wrong ranges


begin
    % sets the first n elements of s to the sequences of values specified by start, stop and increment    %
    % s( 0 ) is set to the number of elements of s that have been set, in case the sequence ends before n %
    procedure sequence ( integer array s ( * )
                       ; integer value n, start, stop, increment
                       ) ;
    begin
        integer sPos;
        for j := 0 until n do s( j ) := 0;
        sPos  := 1;
        for j := start step increment until stop do begin
            if sPos > n then goto done;
               s( sPos ) := j;
               s( 0    ) := s( 0 ) + 1;
               sPos      := sPos + 1;
       end for_j ;
done:
    end sequence ;
    % tests the sequence procedure %
    procedure testSequence( integer    value start, stop, increment
                          ; string(48) value legend
                          ) ;
    begin
        integer array s ( 0 :: 10 );
        sequence( s, 10, start, stop, increment );
        s_w := 0; % set output formating %
        i_w := 4;
        write( legend, ": " );
        for i := 1 until s( 0 ) do writeon( s( i ) )
    end testSequence ;
    % task trest cases %
    testSequence( -2,  2,  1, "Normal"                                      );
    testSequence( -2,  2,  0, "Zero increment"                              );
    testSequence( -2,  2, -1, "Increments away from stop value"             );
    testSequence( -2,  2, 10, "First increment is beyond stop value"        );
    testSequence(  2, -2,  1, "Start more than stop: positive increment"    );
    testSequence(  2,  2,  1, "Start equal stop: positive increment"        );
    testSequence(  2,  2, -1, "Start equal stop: negative increment"        );
    testSequence(  2,  2,  0, "Start equal stop: zero increment"            );
    testSequence(  0,  0,  0, "Start equal stop equal zero: zero increment" )
end.