1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
|
01234567
GOOD: , works
GOOD: : duplicates
GOOD: empty stack pops zero
GOOD: 2-2 = 0
GOOD: | works
GOOD: 0! = 1
GOOD: 7! = 0
GOOD: 8*0 = 0
GOOD: # < jumps into <
GOOD: \ swaps
GOOD: 01` = 0
GOOD: 10` = 1
GOOD: 900pg gets 9
GOOD: p modifies space
Befunge-98 detected.
GOOD: wraparound works
GOOD: a pushes 10
GOOD: b-f push 11-15
GOOD: [ turns left
GOOD: ] turns right
GOOD: instructions between ; are skipped
UNDEF: # across left edge skips easternmost cell in file
UNDEF: # across left edge hits easternmost cell on line
GOOD: 0k^ doesn't execute ^
GOOD: 1k[ turns left from k
GOOD: 4k # jumps 4 times from k
GOOD: 2k ;;;5 executes 5 thrice
GOOD: 2k# jumps twice from k
GOOD: ak47k$ leaves 3 fours on stack
GOOD: 2k6 leaves 3 sixes on stack
GOOD: putting to and getting (-3 -2) worked, assuming working negative Funge-Space
GOOD: 9 / 2 = 4
GOOD: 9 % 2 = 1
About to test division by zero...
GOOD: 1 / 0 = 0
GOOD: 1 % 0 = 0
GOOD: SGML spaces
GOOD: n clears 15-cell stack: assuming it works
GOOD: r reflects
GOOD: 21w turns right
GOOD: ' pushes 20
GOOD: 'vs^ goes through
GOOD: 'vs places v
GOOD: z doesn't reflect
GOOD: 3j jumps over 3 cells
GOOD: 04-j jumps backward the right number of cells
GOOD: 1j ^ jumps into ^
GOOD: 10x goes east
GOOD: 1-1x goes southwest
GOOD: 32x sets delta to (3, 2)
Assuming we can trust x...
GOOD: wraparound with non-cardinal delta appears to work
GOOD: { transfers cells correctly
GOOD: { sets storage offset correctly, and p uses it
GOOD: } resets storage offset
GOOD: } transfers cells correctly
GOOD: { with negative argument works
GOOD: } with negative argument works
GOOD: } reflects when stack stack has only one stack
GOOD: u reflects when stack stack has only one stack
GOOD: u with zero count does nothing
GOOD: u with a positive count transfers cells correctly
GOOD: u with a negative count transfers cells correctly
y claims all of the following:
That buffered I/O is being used
That the number of bytes per cell is 8
That the interpreter's handprint is 1048578
That the interpreter's version is 1
That the behaviour of = is unavailable
That the system's path separator is /
That this Funge has 2dimensions
That the ID of the current IP is 0
That the team number of the current IP is 0
That the position of the IP was ( 6489)
That the delta of the IP was ( -10)
That the offset of the IP was ( 00)
That the least point containing a non-space cell is ( -3-2)
That the greatest point, relative to that point, is ( 183911)
That the day of the month is 15
That the month is 8
That the year is 2022
That the time is 20: 20: 47
That the size of the stack stack is 1
That the stack sizes are [ 0] from top to bottom
That the command-line arguments were: [ "test" "sanity" ]
That the environment variables are:
FOO=BAR
ENV=TEST
Best that the above claims are manually verified to be correct.
GOOD: 1y works
GOOD: 5y works
GOOD: dy works
GOOD: 1y and 5y do not disagree about =
No reliable cross-platform method of testing: assume = works
UNDEF: i not implemented according to 1y - cannot test it
UNDEF: can't test o without working i, may overwrite some existing file
1y says this is not Concurrent Funge-98, won't test t...
GOOD: y acts as pick instruction if given large enough argument
GOOD: ] turns flying IP right
GOOD: : on empty stack makes stack size 2 according to y
GOOD: \ on empty stack makes stack size 2 according to y
GOOD: ( pops correctly
GOOD: ) pops correctly
Here's how your interpreter deals with some possibilities unmentioned in the specification...
UNDEF: k with a negative argument executes 0 times or less often than the absolute value of the argument
UNDEF: the empty string wrapped around the edge of space contains 1character(s) (hopefully spaces)
UNDEF: ( with a negative count reflects and pops 0 times or less than the absolute value of the count
UNDEF: ) with a negative count reflects and pops 0 times or less than the absolute value of the count
GOOD: null byte in string and zero compare as equal
GOOD: ' followed by a byte greater than 127 works
GOOD: form feed does not appear to exist in Funge-Space
GOOD: y reports shrunk bounds correctly after spacing top-left corner
GOOD: y reports shrunk bounds correctly after spacing right edge
GOOD: y reports shrunk bounds correctly after spacing bottom edge
The Befunge-98 core has been completely tested.
Moving on to fingerprints.
A line (consider it UNDEF, though not marked as such) will be emitted for each fingerprint tested for, whether or not the interpreter supports it.
If the interpreter loads the fingerprint, subsequent lines will be GOOD or BAD depending on whether the interpreter behaves according to the fingerprint's specification.
Fingerprints will be unloaded after being tested. If ) does not work, it will fail silently.
Testing fingerprint NULL... not loaded.
Testing fingerprint HRTI... not loaded.
Testing fingerprint MODE... not loaded.
Testing fingerprint MODU... not loaded.
Testing fingerprint ORTH... not loaded.
Testing fingerprint PERL... not loaded.
Testing fingerprint REFC... not loaded.
Testing fingerprint ROMA... not loaded.
Testing fingerprint TOYS... not loaded.
Testing fingerprint TURT... not loaded.
Testing fingerprint BASE... not loaded.
Testing fingerprint CPLI... not loaded.
Testing fingerprint DATE... not loaded.
Testing fingerprint DIRF... not loaded.
Testing fingerprint EVAR... not loaded.
Testing fingerprint FILE... not loaded.
Testing fingerprint FING... not loaded.
Testing fingerprint FIXP... not loaded.
Testing fingerprint FPSP... not loaded.
Testing fingerprint FPDP... not loaded.
Testing fingerprint 3DSP... not loaded.
Testing fingerprint FRTH... not loaded.
Testing fingerprint IIPC... not loaded.
Testing fingerprint IMAP... not loaded.
Testing fingerprint INDV... not loaded.
Testing fingerprint REXP... not loaded.
Testing fingerprint SOCK... not loaded.
Testing fingerprint STRN... not loaded.
Testing fingerprint SUBR... not loaded.
Testing fingerprint TIME... not loaded.
Testing fingerprint JSTR... not loaded.
About to test detailed () behaviour with two fingerprints.
MODU and ROMA were chosen for their simplicity (for implementers) and partially overlapping instruction set.
UNDEF: ROMA not found.
The Mycology Befunge-98 test suite is practically done.
Trying to quit with q. If the return status is 15, consider it GOOD...
|