- Tests for rotate-up and savec
Simon --- stacks.t.old Sat Apr 6 13:47:09 2002 +++ stacks.t Sat Apr 6 14:58:01 2002 @@ -1,6 +1,6 @@ #! perl -w -use Parrot::Test tests => 20; +use Parrot::Test tests => 28; use Test::More; # Tests for stack operations, currently push*, push_*_c and pop* @@ -296,6 +296,179 @@ 213 OUTPUT +output_is(<<"CODE", <<'OUTPUT', 'rotate -1'); + set I0, 1 + save I0 + set I0, 2 + save I0 + set I0, 3 + save I0 + rotate_up -1 + restore I0 + print I0 + restore I0 + print I0 + restore I0 + print I0 + print "\\n" + end +CODE +321 +OUTPUT + +output_is(<<"CODE", <<'OUTPUT', 'rotate -2'); + set I0, 1 + save I0 + set I0, 2 + save I0 + set I0, 3 + save I0 + rotate_up -2 + restore I0 + print I0 + restore I0 + print I0 + restore I0 + print I0 + print "\\n" + end +CODE +231 +OUTPUT + +output_is(<<"CODE", <<'OUTPUT', 'rotate -3'); + set I0, 1 + save I0 + set I0, 2 + save I0 + set I0, 3 + save I0 + rotate_up -3 + restore I0 + print I0 + restore I0 + print I0 + restore I0 + print I0 + print "\\n" + end +CODE +132 +OUTPUT + +output_is(<<'CODE', <<'OUTPUT', 'rotate with a full stack chunk'); + set I0, 0 +FOO: save I0 + inc I0 + lt I0, 256, FOO + + rotate_up 2 + + restore I1 + print I1 + print "\n" + end +CODE +254 +OUTPUT + +output_is(<<'CODE', <<'OUTPUT', 'rotate across stack chunk boundary'); + set I0, 0 +FOO: save I0 + inc I0 + lt I0, 257, FOO + + rotate_up 2 + + restore I1 + print I1 + print "\n" + end +CODE +255 +OUTPUT + +output_is(<<'CODE', <<'OUTPUT', 'rotate by stack chunk size'); + set I0, 0 +FOO: save I0 + inc I0 + lt I0, 300, FOO + + rotate_up -256 + + restore I1 + print I1 + print "\n" + end +CODE +44 +OUTPUT + +output_is(<<'CODE', <<'OUTPUT', 'rotate by more than stack chunk size'); + set I0, 0 +FOO: save I0 + inc I0 + lt I0, 300, FOO + + rotate_up -257 + + restore I1 + print I1 + print "\n" + end +CODE +43 +OUTPUT + +output_is(<<"CODE", <<'OUTPUT', 'rotate up by more than stack size'); + set I0, 1 + save I0 + set I0, 2 + save I0 + rotate_up 3 + end +CODE +Stack too shallow! +OUTPUT + +output_is(<<"CODE", <<'OUTPUT', 'rotate down by more than stack size'); + set I0, 1 + save I0 + set I0, 2 + save I0 + rotate_up -3 + end +CODE +Stack too shallow! +OUTPUT + +output_is(<<'CODE', <<'OUTPUT', 'save/savec for strings'); + set S0, "Foobar" + savec S0 + chopn S0, 3 + print S0 + print "\n" + restore S2 + print S2 + print "\n" + + set S1, "Foobar" + save S1 + chopn S1, 3 + print S1 + print "\n" + restore S3 + print S3 + print "\n" + end + +CODE +Foo +Foobar +Foo +Foo +OUTPUT + output_is(<<CODE, <<OUTPUT, "save, restore"); @{[ $fp_equality_macro ]} set I0, 1