setup "number wrap number"

repeat with i = 1 to 20
	repeat with j = 1 to 20
		test i wrap j is ((i - 1) mod j) + 1
		test i wrap -j is i wrap j
		test -i wrap j is -(i wrap j)
		test -i wrap -j is -(i wrap j)
	end repeat
end repeat

teardown


setup "array wrap number"

local tA1, tA2

repeat with i = 1 to 10
	put i into tA1[i]
end repeat

put tA1 wrap 3 into tA2

repeat with i = 1 to 10
	test tA2[i] is (tA1[i] wrap 3)
end repeat

// empty array entry is 0
put empty into tA1
put empty into tA1[0]
put tA1 wrap 3 into tA2
test tA2[0] is 0

teardown


setup "array wrap array"

local tA1, tA2, tA3

repeat with i = 1 to 10
	put i into tA1[i]
	put (11 - i) into tA2[i]
end repeat

put tA1 wrap tA2 into tA3

repeat with i = 1 to 10
	test tA3[i] is (tA1[i] wrap tA2[i])
end repeat

teardown


setup "wrap errors"

local tA1, tA2
// div by zero
test-error 5 wrap 0
put 5 into tA1[0]
put 0 into tA2[0]
test-error tA1 wrap 0
test-error tA1 wrap tA2

// missing array entries
put 6 into tA1[1]
put 1 into tA2[0]
test-error tA1 wrap tA2

// non-number array entries
put "abc" into tA2[1]
test-error tA1 wrap tA2
test-error tA2 wrap tA1

teardown
