Own-Programming-Language-Tu.../test/resources/modules/std/range.own

94 lines
2.1 KiB
Plaintext

use "std"
use "types"
use "functional"
def testRangeParams() {
x = range(10)
assertEquals(10, length(x))
assertEquals(0, x[0])
assertEquals(9, x[9])
}
def testRangeParamsFromTo() {
x = range(4, 10)
assertEquals(6, length(x))
assertEquals(4, x[0])
assertEquals(9, x[5])
}
def testRangeParamsWithStep() {
x = range(4, 10, 2)
assertEquals(3, length(x))
assertEquals(4, x[0])
assertEquals(8, x[2])
}
def testRangeParamsReversed() {
x = range(10, 4, -1)
assertEquals(6, length(x))
assertEquals(10, x[0])
assertEquals(5, x[5])
}
def testRangeLength() {
assertEquals(10, length(range(0, 10, 1)))
assertEquals(5, length(range(0, 10, 2)))
assertEquals(4, length(range(0, 10, 3)))
assertEquals(3, length(range(0, 10, 4)))
assertEquals(2, length(range(0, 10, 5)))
assertEquals(1, length(range(0, 10, 15)))
}
def testRangeReversedLength() {
assertEquals(10, length(range(10, 0, -1)))
assertEquals(5, length(range(10, 0, -2)))
assertEquals(4, length(range(10, 0, -3)))
assertEquals(3, length(range(10, 0, -4)))
assertEquals(2, length(range(10, 0, -5)))
assertEquals(1, length(range(10, 0, -15)))
}
def testRangeHuge() {
x = range(-1002003004005006007, 1002003004005006007)
assertEquals(-1002003004005006000, x[7])
x = range(-1002003004005006007, 1002003004005006007, 100000000000)
assertEquals(20040061, length(x))
x = range(-10000000, 20000000)
assertEquals(30000000, length(x))
assertEquals(0, x[10000000])
}
def testRangeAsString() {
x = range(1, 6)
assertEquals("[1, 2, 3, 4, 5]", string(x))
x = range(1, 6, 2)
assertEquals("[1, 3, 5]", string(x))
assertEquals(string([1,3,5]), string(x))
}
def testRangeIterate() {
sum = 0
for x : range(5) {
sum += x
}
assertEquals(10, sum)
}
def testRangeFunctionalForeach() {
i = 0
foreach(range(5), def(x) = assertEquals(i++, x))
}
def testRangeFunctionalReduce() {
sum = reduce(range(5), 0, def(x, y) = x + y)
assertEquals(10, sum)
}
def testRangeInvalid() {
assertEquals(0, length(range(-100)))
assertEquals(0, length(range(0, -100, 1)))
assertEquals(0, length(range(0, 100, 0)))
}