Test Suite for Iphigeneia ========================= This test suite is in the format of Falderal version 0.9. -> Functionality "Interpret Iphigeneia program" is implemented by -> shell command "bin/iphi %(test-body-file)" -> Tests for functionality "Interpret Iphigeneia program" Test 'var ... in ...' and assignment. | var k in k := 5 = k=5 Test 'begin ... end'. | var k in begin | k := 5; | k := k + 1 | end = k=6 Test nested 'var ... in ...' and arithmetic operators. | var i in var j in var k in begin | i := 2; | j := 3; | k := i + j; (* 5 *) | i := j * k; (* 15 *) | j := i / 2; (* 7 *) | j := j - 1 (* 6 *) | end = j=6 = i=15 = k=5 Test 'if ... then ... else' command with negative result. | var i in var j in begin | i := 2; | if i > 4 then | j := i * 2 | else | j := i + 1 | end = j=3 = i=2 Test 'if ... then ... else' command with positive result. | var i in var j in begin | i := 2; | j := 1; | if i < 4 & j = 1 then | j := i * 6 | else | j := i + 1 | end = j=12 = i=2 Test 'while ... do ...'. | var i in var j in begin | i := 100; | j := 0; | while i > 0 do begin | j := j + i; | i := i - 1 | end | end = i=0 = j=5050 Test 'while ... do ...'. | var a in var b in var c in | begin | a := 10; | b := 1; | c := 2; | while a > 0 do | begin | b := b * c; | c := c + b; | a := a - 1 | end | end = a=0 = c=140982598893793678070294688422804665931354981644880911847733136248186424030732278900819020480668973702640170212905160639132296847654374706155245147715674612235227680384069415566749494180212370357849936526549755341591854042821940420766722160615645816921368300 = b=140982598893793678070294688422804665931354981644880911847733136248186424030732278900819020480668973702640170212905160639132296847278898210361175931159590631877400396153764977561991761037132722898953457959352992281368361865140291306311370294857131871923863552 Test 'if ... then ... else' expression with negative result. | var a in var b in var c in | begin | a := 10; | b := 2; | c := if a > 20 then a - b else a / b | end = c=5 = b=2 = a=10 Test 'if ... then ... else' expression with positive result. | var a in var b in var c in | begin | a := 10; | b := 2; | c := if a < 20 then a - b else a / b | end = c=8 = b=2 = a=10 Test 'let ... in ...'. | var a in a := let b = 7 in 10 - b; = a=3 Test 'valueof ... in ...'. | var a in var b in begin | a := 10; | b := valueof c in begin | c := a * 2 | end + 7 | end = b=27 = a=10 Test that 'var ... in ...' does not shadow. | var a in var b in | begin | a := 1; | b := 2; | var a in | a := 3 | end = ["Variable a already declared"] Test that 'let ... in ...' does shadow. | var a in var b in | begin | a := 2; | b := 3; | a := let b = 7 in a * b | end = a=14 = b=3 Test 'loop ...' and 'repeat'. | var a in a := | let c = 5 in let d = 1 in | loop | if c = 0 then | d | else | let d = d * c in | let c = c - 1 in | repeat = a=120