1
# test bytecode interpreter - expressions
3
# Copyright (c) 2006 Claudio Calvelli, all rights reserved.
5
# CLC-INTERCAL is copyrighted software. However, permission to use, modify,
6
# and distribute it is granted provided that the conditions set out in the
7
# licence agreement are met. See files README and COPYING in the distribution.
9
use Language::INTERCAL::GenericIO '1.-94.-4', qw($devnull);
10
use Language::INTERCAL::Interpreter '1.-94.-4';
11
use Language::INTERCAL::ByteCode '1.-94.-4', qw(:BC reg_code);
12
use Language::INTERCAL::Splats '1.-94.-4', qw(:SP);
14
use vars qw(@all_tests);
16
require 't/expressions';
20
my $maxtest = 2 * scalar @all_tests;
21
print "1..$maxtest\n";
24
for my $tester (@all_tests) {
25
my ($name, $opcode, $base, $in, $out, $splat) = @$tester;
26
my $obj = new Language::INTERCAL::Interpreter;
27
$obj->object->setbug(0, 0);
28
my @x = (BC_STO, ref $opcode ? @$opcode : $opcode);
31
next if $r->[0] =~ /^%/;
32
push @x, reg_code($r->[0]);
37
push @x, reg_code($out->[0]);
40
push @c, pack('C*', BC_STS, BC($cp++), BC(1), BC(0), BC(0), @x);
41
push @c, pack('C*', BC_STS, BC($cp++), BC(1), BC(0), BC(0), BC_GUP);
43
$obj->object->source('source');
44
$obj->object->code(\@c);
47
$obj->setreg($r->[0], $r->[1]);
49
$obj->setreg('%BA', $base);
50
$obj->setreg('@OSFH', $devnull);
51
$obj->setreg('@TRFH', $devnull);
52
$obj->start()->run()->stop();
55
print STDERR "Failed $name\n";
56
print "not ok ", $testnum++, "\n";
57
print "not ok ", $testnum++, "\n";
62
print defined $splat && $os == $splat ? "" : "not ", "ok ", $testnum++, "\n";
63
print defined $splat && $os == $splat ? "" : "not ", "ok ", $testnum++, "\n";
64
print STDERR "Failed $name\n" unless defined $splat && $os == $splat;
67
print defined $splat ? "not " : "", "ok ", $testnum++, "\n";
68
print STDERR "Failed $name\n" if defined $splat;
70
my $v = eval { $obj->getreg($out->[0])->number };
72
print STDERR "Failed $name\n";
73
print "not ok ", $testnum++, "\n";
76
print STDERR "Failed $name\n" if $v != $out->[1];
77
print $v == $out->[1] ? '' : 'not ', "ok ", $testnum++, "\n";