updating copyright
[language-befunge.git] / t / 5-befunge / d-dir.t
blob6cbe1f46d29ac89a53b3bfc8847ec32401ee866d
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 # -- direction changing
13 use strict;
14 use warnings;
16 use Test::More tests => 19;
17 use Test::Output;
19 use Language::Befunge;
20 my $bef = Language::Befunge->new;
23 # go west
24 $bef->store_code( '<q.a' );
25 stdout_is { $bef->run_code } '10 ', 'go west';
28 # go south
29 $bef->store_code( <<'END_OF_CODE' );
34 END_OF_CODE
35 stdout_is { $bef->run_code } '10 ', 'go south';
38 # go north
39 $bef->store_code( <<'END_OF_CODE' );
44 END_OF_CODE
45 stdout_is { $bef->run_code } '10 ', 'go north';
48 # go east
49 $bef->store_code( <<'END_OF_CODE' );
50 v   > a . q
51 >   ^
52 END_OF_CODE
53 stdout_is { $bef->run_code } '10 ', 'go east';
56 # go away
57 $bef->store_code( <<'END_OF_CODE' );
58 v    > 2.q
59 >  #v? 1.q
60      > 3.q
61     >  4.q
62 END_OF_CODE
63 stdout_like { $bef->run_code } qr/^[1-4] $/, 'go away';
66 # turn left
67 $bef->store_code( <<'END_OF_CODE' );
68 v  > 1.q
69 >  [
70    > 2.q
71 END_OF_CODE
72 stdout_is { $bef->run_code } '1 ', 'turn left, from west';
73 $bef->store_code( <<'END_OF_CODE' );
74 v  > 1.q
75 <  [
76    > 2.q
77 END_OF_CODE
78 stdout_is { $bef->run_code } '2 ', 'turn left, from east';
79 $bef->store_code( <<'END_OF_CODE' );
80 >     v
81   q.2 [ 1.q
82 END_OF_CODE
83 stdout_is { $bef->run_code } '1 ', 'turn left, from north';
84 $bef->store_code( <<'END_OF_CODE' );
85 >     ^
86   q.2 [ 1.q
87 END_OF_CODE
88 stdout_is { $bef->run_code } '2 ', 'turn left, from south';
91 # turn right
92 $bef->store_code( <<'END_OF_CODE' );
93 v  > 1.q
94 >  ]
95    > 2.q
96 END_OF_CODE
97 stdout_is { $bef->run_code } '2 ', 'turn right, from west';
98 $bef->store_code( <<'END_OF_CODE' );
99 v  > 1.q
100 <  ]
101    > 2.q
102 END_OF_CODE
103 stdout_is { $bef->run_code } '1 ', 'turn right, from east';
104 $bef->store_code( <<'END_OF_CODE' );
105 >     v
106   q.2 ] 1.q
107 END_OF_CODE
108 stdout_is { $bef->run_code } '2 ', 'turn right, from north';
109 $bef->store_code( <<'END_OF_CODE' );
110 >     ^
111   q.2 ] 1.q
112 END_OF_CODE
113 stdout_is { $bef->run_code } '1 ', 'turn right, from south';
116 # reverse
117 $bef->store_code( <<'END_OF_CODE' );
118 >  #vr 2.q
119     >  1.q
120 END_OF_CODE
121 stdout_is { $bef->run_code } '1 ', 'reverse, from west';
122 $bef->store_code( <<'END_OF_CODE' );
123 <  q.2  rv#
124    q.1   <
125 END_OF_CODE
126 stdout_is { $bef->run_code } '1 ', 'reverse, from east';
127 $bef->store_code( <<'END_OF_CODE' );
128 >     v
129       #
130       > 1.q
131       r
132       > 2.q
133 END_OF_CODE
134 stdout_is { $bef->run_code } '1 ', 'reverse, from north';
135 $bef->store_code( <<'END_OF_CODE' );
136 >     ^
137       > 2.q
138       r
139       > 1.q
140       #
141 END_OF_CODE
142 stdout_is { $bef->run_code } '1 ', 'reverse, from south';
145 # absolute vector
146 $bef->store_code( <<'END_OF_CODE' );
148    1
149     .
150      q
151 END_OF_CODE
152 stdout_is { $bef->run_code } '1 ', 'absolute vectore, diagonal';
153 $bef->store_code( <<'END_OF_CODE' );
154 101-x
155    q
156   .
158 END_OF_CODE
159 stdout_is { $bef->run_code } '1 ', 'absolute vectore, diagonal out of bounds';
160 $bef->run_code;