# loop through values, not indices
a = ['foo', 'bar', 'baz']
for val in a:
	assert.ok(val in a)

for i in range(len(a)):
	assert.ok(a[i] in a)

for i, val in enumerate(a): # testing that comments are allowed here
	assert.equal(a[i], val)

# nesting
final = []
for i in [1,2]:
	for j in [4,5,6]:
		final.push((i,j))
assert.deepEqual(final, [[1,4], [1,5], [1,6], [2,4], [2,5], [2,6]])

i = 0
while i < len(a):
	assert.ok(a[i] in a)
	i += 1

counter = 5
factorial = 1
do:
	factorial *= counter
	counter -= 1
.while counter > 0
assert.equal(factorial, 120)

# to and til
inclusive = [3 to 5]
exclusive = [3 til 6]
assert.deepEqual(inclusive, exclusive)
assert.deepEqual(inclusive, [3,4,5])

# precision test
precise_inclusive = [1 to 3.01]     # this will stop short of 3.01 because we only use integers
precise_exclusive = [1 til 3.01]    # this will include 3 because 3 is less than 3.01
assert.deepEqual(precise_inclusive, precise_exclusive)

# reverse direction
backwards_inclusive = [10 to 3]
backwards_exclusive = [10 til 2]
assert.deepEqual(backwards_inclusive, backwards_exclusive)

# long variants that don't get optimized
long_inclusive = [3 to 80]
long_exclusive = [3 til 81]
assert.deepEqual(long_inclusive, long_exclusive)
assert.deepEqual(long_inclusive, range(3, 81))
long_backwards_inclusive = [100 to 3]
long_backwards_exclusive = [100 til 2]
assert.deepEqual(long_backwards_inclusive, long_backwards_exclusive)


# for-in
hash = {
    "foo": 1,
    "bar": 1,
    "baz": 1,
}
i = 0
for key in hash:
    assert.equal(key, a[i])
    i += 1

word = "test"
i = 0
for letter in word:
    assert.equal(letter, word[i])
    i += 1
