10000 ----- random (math.pvvs)
10001 ----- absolute value (math.pvvs)
10010 ----- greatest common divisor (math.pvvs)
+ 10011 ----- fastrand (math.pvvs)
011xxx - heap functions
11000 ----- memset (heap.pvvs)
11001 ----- memcpy (heap.pvvs)
TTS | STORE
NTN | RTS
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@ Name:
+@ fastrand (10011)
+@ Description:
+@ Returns a pseudo-random number.
+@ Probably not as good as `random`, but much faster since it doesn't use XOR.
+@ Based on the POSIX.1-2001 example for random().
+@ Before using for the first time, seed heap[0] with a value.
+@ Call Stack:
+@ empty
+@ Return Stack:
+@ random number <-- TOS
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+NSSVTSSTTN | Mark: 10011 (fastrand)
+
+@ Generate the next seed value
+SSSSN | PUSH 0 (ptr)
+TTT | LOAD
+SSSTSSSSSTTTSSSTTSSTSSTTTSSTTSTTSTN | PUSH 1103515245
+TSSN | MULTIPLY
+SSSTTSSSSSSTTTSSTN | PUSH 12345
+TSSS | ADD
+
+@ Store the next seed value but keep a copy on the stack.
+SNS | DUP
+SSSSN | PUSH 0 (ptr)
+SNT | SWAP
+TTS | STORE
+
+@ Calculate the random number and return.
+SSSTSSSSSSSSSSSSSSSSN | PUSH 65536
+TSTS | DIVIDE
+SSSTSSSSSSSSSSSSSSSN | PUSH 32768
+TSTT | MODULO
+NTN | RTS
+
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ Name:
@ abs (10001)
--- /dev/null
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@
+@ This test intentionally blank.
+@
+@ If there comes a day when the tests are extended beyond testing basic
+@ functionality, include fastrand in the new tests.
+@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+
+NNN | Die
['5001_abs', '', '+1+1+0+0'],
['5002_random', '', ''],
['5003_gcd', '', '+0+4+4+3+3+3'],
+ ['5004_fastrand', '', ''],
['6001_printstackstring', '', 'test'],
['6002_printheapstring', '', 'test'],
['6003_printnumbersign', '', '+-'],