3 # This file is part of Language::Befunge.
4 # Copyright (c) 2001-2009 Jerome Quelin, all rights reserved.
6 # This program is free software; you can redistribute it and/or modify
7 # it under the same terms as Perl itself.
11 use Language::Befunge::Ops;
16 use Language::Befunge::Interpreter;
17 use Language::Befunge::IP;
18 use Language::Befunge::Ops;
19 use Language::Befunge::Vector;
20 use Test::More tests => 8;
27 $lbi = Language::Befunge::Interpreter->new;
28 $ip = Language::Befunge::IP->new;
29 $v = Language::Befunge::Vector->new(1,0);
31 $lbi->set_curip( $ip );
32 my $pid = fork_input("321\n");
33 Language::Befunge::Ops::stdio_in_num( $lbi );
35 is( $ip->get_position, '(0,0)', 'stdio_in_num does not move ip' );
36 is( $ip->get_delta, '(1,0)', 'stdio_in_num does not reflect (yet)' );
37 is( $ip->spop, 321, 'stdio_in_num pushes value on ip' );
39 Language::Befunge::Ops::stdio_in_num( $lbi );
40 is( $ip->spop, 0, 'stdio_in_num read nothing' );
41 is( $ip->get_delta, '(-1,0)', 'stdio_in_num reflects on eof' );
43 # again (for coverage)
44 Language::Befunge::Ops::stdio_in_num( $lbi );
45 is( $ip->spop, 0, 'stdio_in_num read nothing' );
48 $pid = fork_input("99999999999\n");
49 Language::Befunge::Ops::stdio_in_num( $lbi );
51 is( $ip->spop, 2**31-1, 'stdio_in_num saturates on overflow' );
54 $pid = fork_input("-99999999999\n");
55 Language::Befunge::Ops::stdio_in_num( $lbi );
57 is( $ip->spop, -2**31, 'stdio_in_num saturates on underflow' );
63 my $pipe = IO::Pipe->new();
70 alarm(5); # timeout on failure