updating copyright
[language-befunge.git] / t / 4-interpreter / unefunge.t
blob469cc1cd53cbed10efeb2807dc5a1b2194c394bb
1 #!perl
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 strict;
12 use warnings;
14 use Language::Befunge;
15 use aliased 'Language::Befunge::Vector' => 'LBV';
17 use Test::More tests => 11;
18 use Test::Output;
20 my $unef;
23 # basic constructor.
24 $unef = Language::Befunge->new( {file=>'t/_resources/q.bf', syntax=>'unefunge98'} );
25 stdout_is { $unef->run_code } '', 'basic constructor';
28 # custom constructor.
29 $unef = Language::Befunge->new({
30     syntax  => 'unefunge98',
31     storage => 'Language::Befunge::Storage::Generic::Vec' });
32 is(ref($unef->get_storage), 'Language::Befunge::Storage::Generic::Vec', 'storage specified');
33 $unef = Language::Befunge->new({
34     syntax   => 'unefunge98',
35     wrapping => 'Language::Befunge::Wrapping::LaheySpace' });
36 is(ref($unef->get_wrapping), 'Language::Befunge::Wrapping::LaheySpace', 'wrapping specified');
37 $unef = Language::Befunge->new({
38     syntax => 'unefunge98',
39     ops    => 'Language::Befunge::Ops::GenericFunge98' });
40 ok(exists($$unef{ops}{m}), 'ops specified');
41 $unef = Language::Befunge->new({
42     syntax => 'unefunge98',
43     dims   => 4 });
44 is($$unef{dimensions}, 4, 'dims specified');
47 # basic reading.
48 $unef = Language::Befunge->new( {syntax=>'unefunge98'} );
49 $unef->read_file( "t/_resources/q.bf" );
50 stdout_is { $unef->run_code } '', 'basic reading';
53 # basic storing.
54 $unef->store_code( <<'END_OF_CODE' );
56 END_OF_CODE
57 stdout_is { $unef->run_code } '', 'basic storing';
60 # interpreter must treat non-characters as if they were an 'r' instruction.
61 $unef->store_code( <<'END_OF_CODE' );
62 01-ap#q1.2 q
63 END_OF_CODE
64 stdout_is { $unef->run_code } '1 2 ', 'non-chars treated as "r" instruction';
67 # interpreter must treat non-commands as if they were an 'r' instruction.
68 $unef->store_code( <<'END_OF_CODE' );
69 01+ap#q1.2 q
70 END_OF_CODE
71 stdout_is { $unef->run_code } '1 2 ', 'non-commands treated as "r" instruction';
74 # unefunge interpreter treats north/south instructions as unknown characters.
75 $unef->store_code( <<"END_OF_CODE" );
76 1#q.2^3.q
77 END_OF_CODE
78 stdout_is { $unef->run_code } '1 2 ', 'north/south treated as "r" instruction';
81 # rectangle() just returns the original string again
82 is( $unef->get_storage->rectangle( LBV->new(0), LBV->new(9) ),
83     '1#q.2^3.q', 'rectangle works' );