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


procedure test(integer start, stop, step, string legend, bool bFor)
    sequence res = {}
    if bFor then
        try
            for i=start to stop by step do
                res &= i
                if length(res)>9 then exit end if
            end for
            res = sprint(res)
        catch e
            res = e[E_USER]
        end try
    else
        integer i = start
        while (step>=0 and i<=stop)
           or (step<=0 and i>=stop) do
            res &= i
            if length(res)>9 then exit end if
--          if i=stop then exit end if
--          if step=0 then exit end if
            i += step
        end while
        res = sprint(res)
    end if
    printf(1,"%-43s: %s\n",{legend,res})
end procedure
 
for i=1 to 2 do
    ?iff(i=1?"for":"while")
    test(-2, 2, 1, "Normal"                                     ,i=1)
    test(-2, 2, 0, "Zero increment"                             ,i=1)
    test(-2, 2,-1, "Increments away from stop value"            ,i=1)
    test(-2, 2,10, "First increment is beyond stop value"       ,i=1)
    test( 2,-2, 1, "Start more than stop: positive increment"   ,i=1)
    test( 2, 2, 1, "Start equal stop: positive increment"       ,i=1)
    test( 2, 2,-1, "Start equal stop: negative increment"       ,i=1)
    test( 2, 2, 0, "Start equal stop: zero increment"           ,i=1)
    test( 0, 0, 0, "Start equal stop equal zero: zero increment",i=1)
    puts(1,"\n")
end for
