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 hits 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 (-1 -1) 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 t is implemented That buffered I/O is being used That the number of bytes per cell is 4 That the interpreter's handprint is 1128682830 That the interpreter's version is 40 That the behaviour of = is unavailable That the system's path separator is / That this Funge has 2 dimensions 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 ( 64 89 ) That the delta of the IP was ( -1 0 ) That the offset of the IP was ( 0 0 ) That the least point containing a non-space cell is ( -1 -1 ) That the greatest point, relative to that point, is ( 180 795 ) That the day of the month is 1 That the month is 5 That the year is 2009 That the time is 00 : 08 : 44 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: [ "/tmp/input.23753" ] That the environment variables are: HOME=/home/egobot PWD=/home/egobot/egobot/multibot_cmds PATH=/usr/local/bin:/usr/bin:/bin:/usr/games USER=egobot SHELL=/bin/bash TERM=screen 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 Concurrent Funge-98 Going to test concurrent execution with 2 IPs. * EgoBot has quit (Excess Flood) 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... loaded. GOOD: all of A-Z reflected Testing fingerprint HRTI... loaded. UNDEF: G gives clock granularity as 2 microseconds GOOD: T reflected when called before M UNDEF: S pushed 880044 UNDEF: T after M pushed 3 and a second T, after 675 ys, pushed 1845 GOOD: ET reflected Testing fingerprint MODE... not loaded. Testing fingerprint MODU... loaded. GOOD: a04-M pushes -2 Assuming that "C-language integer remainder" refers to C99 C, it used to be undefined... GOOD: a04-R pushes 2 GOOD: 0a-04-R pushes -2 GOOD: 0a-04-U pushes 2 Testing fingerprint ORTH... loaded. GOOD: 56A pushes 4 GOOD: 56E pushes 3 GOOD: 56O pushes 7 GOOD: G works GOOD: P works GOOD: Cannot test S reliably. If this line begins with "GOOD: ", it worked. GOOD: X seems to work GOOD: Y seems to work GOOD: V changes dx correctly GOOD: W changes dy correctly GOOD: 0Z ramps GOOD: 1Z doesn't ramp Testing fingerprint PERL... not loaded. Testing fingerprint REFC... loaded. UNDEF: 12R34R56R pushed the scalars [ 1 2 3 ] GOOD: D returned first vector GOOD: D returned second vector GOOD: D returned third vector GOOD: D returned first vector the second time Testing fingerprint ROMA... loaded. GOOD: I pushes 1 GOOD: V pushes 5 GOOD: X pushes 10 GOOD: L pushes 50 GOOD: C pushes 100 GOOD: D pushes 500 GOOD: M pushes 1000 Testing fingerprint TOYS... loaded. GOOD: A works UNDEF: 12B leaves stack as [ -1 3 ] (from top to bottom) GOOD: 3DDD is zero GOOD: IIDD is zero GOOD: 123456789abcdefE is 120 GOOD: 112345P is 120 GOOD: 882*1-N is -127 GOOD: 64H is 96 GOOD: b7*03-H is 9 UNDEF: 0f-03-H is -2, meaning H did a signed right shift GOOD: C works as a basic copy GOOD: K works as a basic copy GOOD: M works as a basic move GOOD: V works as a basic move GOOD: overlapping copy with C works GOOD: overlapping copy with K works GOOD: overlapping move with M works GOOD: overlapping move with V works GOOD: S works UNDEF: F pops j after i GOOD: F works GOOD: G works GOOD: 1J moves itself south one row GOOD: 01-J moves itself north one row GOOD: 01-O moves its row one column to the west GOOD: 1O moves its row one column to the east GOOD: L gets left-hand space GOOD: L gets left-hand normal cell GOOD: R gets right-hand space GOOD: R gets right-hand normal cell GOOD: Q works GOOD: 00T goes right GOOD: 01T goes down UNDEF: 02T reflects GOOD: U transmuted into all of ><^v GOOD: 000p000W goes through GOOD: 000p100W waits indefinitely GOOD: 000p01-00W reflects GOOD: X works GOOD: Y works UNDEF: Z in Befunge reflects Testing fingerprint TURT... not loaded. Testing fingerprint BASE... loaded. UNDEF: B outputs 40 as 101000 UNDEF: H outputs 40 as 28 UNDEF: O outputs 40 as 50 UNDEF: N outputs 40 in base 0 as nothing: it reflected UNDEF: N outputs 40 in base 1 as 0000000000000000000000000000000000000000 UNDEF: N outputs 40 in base 2 as 101000 UNDEF: N outputs 40 in base 3 as 1111 UNDEF: N outputs 40 in base 4 as 220 UNDEF: N outputs 40 in base 5 as 130 * EgoBot has quit (Excess Flood) UNDEF: N outputs 40 in base 40 as nothing: it reflected Testing fingerprint CPLI... loaded. GOOD: ( 1+2i) + (3+4i) is ( 4+6i) according to A GOOD: ( 3+4i) - (2+ i) is ( 1+3i) according to S GOOD: ( 1+2i) * (3+4i) is (10-5i) according to M GOOD: (88-4i) / (9+4i) is ( 8-4i) according to D GOOD: 34V is 5 UNDEF: abO outputs 10+11i UNDEF: 0a-bO outputs -10+11i UNDEF: a0b-O outputs 10-11i UNDEF: 0a-0b-O outputs -10-11i Testing fingerprint DATE... loaded. GOOD: C pushed [2131,08,31] given 2500000 GOOD: C pushed [-9999,04,01] given -1930544 GOOD: J pushes 98645 given [-4444,12,24] GOOD: J reflects given [0,0,0] GOOD: J pushes 990634 given [-2001,2,29] GOOD: J pushes -1119007 given [-7777,2,29] GOOD: A claims 2008-04-01 minus 32 days is 2008-02-29 GOOD: D claims the number of days from 2008-04-01 to 2008-02-29 is -32 GOOD: T claims the 366th day of 2008 is 2008-12-31 GOOD: T reflects given day 400 of 2008 GOOD: W claims 2008-08-14 was a Thursday GOOD: Y claims 2008-08-14 was the 227th day of the year GOOD: Y reflects given [0,1,1] GOOD: Y reflects given [1,0,1] GOOD: Y reflects given [1,1,0] GOOD: Y reflects given [2008,15,1] GOOD: Y reflects given [2008,1,32] Testing fingerprint DIRF... not loaded. Testing fingerprint EVAR... not loaded. Testing fingerprint FILE... not loaded. Testing fingerprint FIXP... loaded. GOOD: b6A is 2 GOOD: 93O is 11 GOOD: c6X is 10 GOOD: C says cos(35) is 0.8192 or 0.8191 GOOD: I says sin(35) is 0.5736 or 0.5735 GOOD: T says tan(35) is 0.7002 GOOD: B says acos(1) is 0 GOOD: B says acos(0) is 90 GOOD: B says acos(-1) is 180 GOOD: J says asin(0.3) is 17.4576 UNDEF: 2aaaa****J pushes -2147483648 GOOD: U says atan(2348.2368) is 89.9756 UNDEF: called 3D 9 times and got [ 2 1 0 2 2 2 0 2 2 ] GOOD: 01-N is 1 GOOD: 0S is 0 GOOD: 2S is 1 GOOD: 03-S is -1 GOOD: 5V is 05-V GOOD: P says 16777216 * pi is 52707178 or 52707179 GOOD: Q says sqrt(200) is 14 GOOD: 23R is 8 GOOD: 203-R is 0 GOOD: 02-3R is -8 GOOD: 02-03-R is 0 GOOD: 02R is 0 UNDEF: 002-R pushes -2147483648 GOOD: 20R is 1 GOOD: 02-0R is 1 UNDEF: 00R pushes 1 Testing fingerprint FPSP... loaded. Because floating point equality is, with epsilons, too tricky, and without them, poorly defined, and because rounding with I is too inaccurate, results of calculations will be UNDEF. The precisely correct answer will follow, to 6 decimal places: the calculated result can be compared to it. UNDEF: cFP outputs 12.000000 UNDEF: 0"1234.567890"R results in 1234.567871 GOOD: 8FI is 8 UNDEF: aFeFA results in 24.000000 (24) UNDEF: cF7FS results in 5.000000 (5) UNDEF: 6FaFM results in 60.000000 (60) * EgoBot has quit (Excess Flood) UNDEF: ASMDF say 355/113 is 3.141593 (3.141593) UNDEF: D says 1/0 is inf (NaN or +infinity) UNDEF: D says -1/0 is -inf (NaN or -infinity) UNDEF: B says sin(4.2) is -0.871576 (-0.871576) UNDEF: C says cos(42) is -0.399985 (-0.399985) UNDEF: T says tan(-.42) is -0.446573 (-0.446573) UNDEF: E says asin(2) is nan (actually complex: NaN) UNDEF: H says acos(0) is 1.570796 (1.570796) UNDEF: G says atan(100) is 1.560797 (1.560797) UNDEF: K says ln(0) is -inf (-infinity) UNDEF: K says ln(1) is 0.000000 (0) UNDEF: K says ln(2) is 0.693147 (0.693147) UNDEF: L says log10(20) is 1.301030 (1.301030) UNDEF: X says exp(3) is 20.085537 (20.085537) UNDEF: N says -0 is -0.000000 (-0) UNDEF: V says abs(-15) is 15.000000 (15) UNDEF: Q says sqrt(8) is 2.828427 (2.828427) UNDEF: Y says pow(-8, 9) is -134217728.000000 (-134217728) UNDEF: Y says pow(2, -7) is 0.007812 (0.007813) Testing fingerprint FRTH... loaded. GOOD: D after n is 0 GOOD: y and D agree that stack size after y is 184 GOOD: L rolls value correctly GOOD: P picks value correctly GOOD: O overs value correctly GOOD: R rots value correctly Testing fingerprint IIPC... not loaded. Testing fingerprint IMAP... not loaded. Testing fingerprint INDV... loaded. GOOD: G works GOOD: P works GOOD: V uses logical order GOOD: W works Testing fingerprint SOCK... not loaded. Testing fingerprint STRN... loaded. GOOD: A works GOOD: C claims "foo" is greater than "Foo" GOOD: C claims "Bar" is less than "bar" GOOD: C claims "qUx" is equal to itself GOOD: F finds correctly GOOD: F pushes 0 on mismatch GOOD: Cannot test D reliably. If this line begins with "GOOD: ", it worked. GOOD: G works GOOD: P works GOOD: "zaB"2L is "Ba" UNDEF: 00L reflects UNDEF: "ooF"01-L reflects GOOD: "zaB"2R is "az" UNDEF: 00R leaves 0 on stack UNDEF: "ooF"01-R reflects GOOD: "zaBraBooF"34M is "BarB" UNDEF: 000M leaves 0 on stack UNDEF: "ooF"101-M reflects UNDEF: "ooF"01-1M reflects UNDEF: "ooF"42M reflects UNDEF: "ooF"24M reflects GOOD: 0N is 0 GOOD: "foo"N is 3 GOOD: "0987654321"VS is 1234567890 Testing fingerprint SUBR... loaded. GOOD: J worked GOOD: set mode with O GOOD: J worked GOOD: C worked GOOD: C transfers stack elements correctly GOOD: R worked GOOD: R transfers stack elements correctly GOOD: set mode with A GOOD: C worked GOOD: C transfers stack elements correctly GOOD: R worked GOOD: R transfers stack elements correctly Testing fingerprint TIME... loaded. UNDEF: YODHMS claim that the local time is (or was a few moments ago) 2009 - 5 - 1 00 : 08 : 44 UNDEF: YODHMS claim that the GMT time is (or was a few moments ago) 2009 - 5 - 1 00 : 08 : 44 GOOD: L seems to work UNDEF: F claims that it is the 120 day of the year UNDEF: W claims that it is the 6 day of the week, starting from sunday Testing fingerprint JSTR... loaded. GOOD: P works GOOD: G works About to test detailed () behaviour with two fingerprints. MODU and ROMA were chosen for their simplicity (for implementers) and partially overlapping instruction set. Loaded ROMA, then MODU. GOOD: M has MODU semantics GOOD: CDILRUVX doesn't reflect Unloaded ROMA. GOOD: M has ROMA semantics GOOD: RU doesn't reflect GOOD: all of CDILVX reflected Unloaded MODU. GOOD: R and U reflected About to test, using ROMA, whether t copies the parent IP's loaded fingerprint semantics to the child IP. This is unmentioned in the specification, and thus is UNDEF. Loaded ROMA. Forked into child IP. UNDEF: IVXLCDM didn't reflect: child IP has ROMA loaded The Mycology Befunge-98 test suite is practically done. Trying to quit with q. If the return status is 15, consider it GOOD...