Test Suite for Iphigeneia
Functionality "Interpret Iphigeneia program" is implemented by
shell command "(cat >foo.txt && src/iphi foo.txt)"
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
