tests
This commit is contained in:
parent
b329ddee1d
commit
36d5b8f9d8
@ -97,12 +97,7 @@ A heap-allocated object from type `B` can be cast to a `Value*` with `v(x)`, to
|
|||||||
|
|
||||||
The reference count of any `B` object can be incremented/decremented with `inc(x)`/`dec(x)`, and any subtype of `Value*` can use `ptr_inc(x)`/`ptr_dec(x)`. `inc(x)` and `ptr_inc(x)` will return the argument, so you can use it inline. `dec(x)` and `ptr_dec(x)` will return the object to the memory manager if the refcount as a result goes to zero.
|
The reference count of any `B` object can be incremented/decremented with `inc(x)`/`dec(x)`, and any subtype of `Value*` can use `ptr_inc(x)`/`ptr_dec(x)`. `inc(x)` and `ptr_inc(x)` will return the argument, so you can use it inline. `dec(x)` and `ptr_dec(x)` will return the object to the memory manager if the refcount as a result goes to zero.
|
||||||
|
|
||||||
Since reference counting is hard, there's `make heapverify` that verifies that any code executed does it right (and screams unreadable messages when it doesn't). After any changes, I'd suggest running:
|
Since reference counting is hard, there's `make heapverify` that verifies that any code executed does it right (and screams unreadable messages when it doesn't). After any changes, I'd suggest running `test/mainCfgs.sh path/to/mlochbaum/BQN`, which'll run a couple primary configurations, including said `heapverify`.
|
||||||
```bash
|
|
||||||
#!/usr/bin/env bash
|
|
||||||
make rtverify && echo 'rtverify:' && ./BQN -M 1000 path/to/mlochbaum/BQN/test/this.bqn
|
|
||||||
make heapverify && echo 'heapverify:' && ./BQN -M 1000 path/to/mlochbaum/BQN/test/this.bqn -noerr bytecode header identity literal namespace prim simple syntax token under undo
|
|
||||||
```
|
|
||||||
|
|
||||||
Temporary allocations can be made with `utils/talloc.h`:
|
Temporary allocations can be made with `utils/talloc.h`:
|
||||||
```C
|
```C
|
||||||
|
|||||||
11
test/README.md
Normal file
11
test/README.md
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
## Tests
|
||||||
|
|
||||||
|
Must be run from the projects root directory.
|
||||||
|
|
||||||
|
``` C
|
||||||
|
test/mainCfgs.sh path/to/mlochbaum/BQN // run the test suite for a couple primary configurations
|
||||||
|
test/x86Cfgs.sh path/to/mlochbaum/BQN // run the test suite for x86-64-specific configurations, including singeli; 32-bit build is "supposed" to fail one test involving ⋆⁼
|
||||||
|
test/moreCfgs.sh path/to/mlochbaum/BQN // run "2+2" in a bunch of configurations
|
||||||
|
./BQN test/cmp.bqn // fuzz-test scalar comparison functions =≠<≤>≥
|
||||||
|
./BQN test/equal.bqn // fuzz-test 𝕨≡𝕩
|
||||||
|
```
|
||||||
52
test/cmp.bqn
Normal file
52
test/cmp.bqn
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
noerr←≠•args
|
||||||
|
•Out⍟noerr "Not executing tests that would error"
|
||||||
|
fns ← =‿≠‿<‿≤‿>‿≥
|
||||||
|
n ← 0÷0
|
||||||
|
nn ← -n
|
||||||
|
arrs ← •internal.Squeeze¨ ⟨
|
||||||
|
"hello","{⍉⍵}","{⍉𝕩}"
|
||||||
|
@+0‿1‿2‿126‿127
|
||||||
|
@+0‿1‿2‿126‿127‿128‿129
|
||||||
|
@+0‿1‿2‿65533‿65534‿65535
|
||||||
|
"",↕0
|
||||||
|
1‿2‿3 ⋄ ¯1‿0‿1 ⋄ ↕10 ⋄ ¯5+↕10 ⋄ 1‿1.5‿0‿0‿4‿π ⋄ -1‿1.5‿0‿0‿4‿π ⋄ n‿nn‿n‿n‿nn∾(-0‿2‿π)∾1‿2‿5‿0‿0÷0‿0‿3‿5‿0
|
||||||
|
¯128‿¯1‿0‿1‿127
|
||||||
|
¯32768‿¯1‿0‿1‿32767
|
||||||
|
¯2147483648‿¯1‿0‿1‿2147483647
|
||||||
|
¯2147483648‿¯1‿0‿1‿2147483648
|
||||||
|
63 (•MakeRand 2).Range 2
|
||||||
|
64 (•MakeRand 2).Range 2
|
||||||
|
65 (•MakeRand 2).Range 2
|
||||||
|
90 (•MakeRand 2).Range 2
|
||||||
|
⟩
|
||||||
|
atms ← 1‿¯1‿0‿¯0‿∞‿¯∞‿n‿nn‿@‿'l'‿'⍉'‿'𝕩'‿{a⇐1}
|
||||||
|
atms∾↩ -⊸∾ 10⋆↕20
|
||||||
|
atms∾↩ -⊸∾ ⥊(⥊¯0.9‿¯0.1‿0‿0.1‿0.9+⌜2-↕5) +⌜ 2⋆↕35
|
||||||
|
atms∾↩ @+⥊128‿65536+⌜2-↕5
|
||||||
|
|
||||||
|
LV ← •internal.ListVariations
|
||||||
|
V ← •internal.Variation
|
||||||
|
ElType ← •internal.ElType
|
||||||
|
|
||||||
|
NEas ← ((⊑¨∊=‿≠˙) ∨ 8≠·ElType 2⊑¨⊢)⊸/
|
||||||
|
|
||||||
|
•Out "AS"
|
||||||
|
{
|
||||||
|
fn‿arr‿atm:
|
||||||
|
∧´(⊏≡¨⊢) {(𝕩 V arr) Fn⎊"err" atm}¨ LV arr?0;
|
||||||
|
fn‿arr‿atm:
|
||||||
|
•Out "Fail:"
|
||||||
|
•Show arr
|
||||||
|
•Show fn
|
||||||
|
•Show atm
|
||||||
|
•Show ⍉(LV arr)≍{(𝕩 V arr) Fn⎊"err" atm}¨ LV arr
|
||||||
|
•Exit 1
|
||||||
|
}¨ NEas⍟noerr ⥊(<⟨⟩)<⊸∾⌜´ fns‿arrs‿atms
|
||||||
|
|
||||||
|
•Out "AA"
|
||||||
|
{
|
||||||
|
fn‿l‿r:
|
||||||
|
lr←(⌈´≠¨l‿r)↑¨l‿r
|
||||||
|
∧´(⊏≡¨⊢) {fn⎊"err"˝𝕩 V¨ lr}¨ ⥊≍○<⌜´ LV¨lr?0;
|
||||||
|
𝕩!0
|
||||||
|
}¨ (⥊(<⟨⟩)<⊸∾⌜´ ⟨fns⟩ ∾ 2⥊< (0<≠¨)⊸/arrs) ∾ ⥊(<⟨⟩)<⊸∾⌜´ ⟨fns⟩ ∾ 2⥊<⟨"" ⋄ ↕0 ⋄ ⟨⟩⟩
|
||||||
44
test/equal.bqn
Normal file
44
test/equal.bqn
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
⟨ListVariations, ClearRefs, Variation, Squeeze, Info⟩ ← •internal
|
||||||
|
u ← •UnixTime@
|
||||||
|
# u ↩ 1648896733
|
||||||
|
|
||||||
|
r ← •MakeRand •Show u
|
||||||
|
|
||||||
|
TestVars ← { w𝕊a‿b:
|
||||||
|
n ← ¬w
|
||||||
|
(ListVariations a) {
|
||||||
|
¬⍟n (𝕨 Variation a) ≡ (𝕩 Variation b)? @;
|
||||||
|
•Out ∾"fail for "‿𝕨‿"/"‿𝕩‿", expected "‿(w⊑"0"‿"1")‿":"
|
||||||
|
•Out •Repr a
|
||||||
|
•Out •Repr b
|
||||||
|
•Out •Repr a≠b
|
||||||
|
•Exit 1
|
||||||
|
}⌜ ListVariations b
|
||||||
|
ClearRefs@
|
||||||
|
}
|
||||||
|
|
||||||
|
(1 TestVars ⋈˜)¨ ⟨⟨⟩ ⋄ "" ⋄ ↕0⟩
|
||||||
|
|
||||||
|
# types: u1,i8,i16,i32,f64,c8,c16,c32
|
||||||
|
szs ← 2∾(2⋆8‿16‿32)∾0∾(2⋆8‿16)∾1114111
|
||||||
|
off ← 0∾(2⋆7‿15‿31)∾¯0.5∾0‿0‿0
|
||||||
|
chr ← 0‿0‿0‿0‿0‿1‿1‿1
|
||||||
|
RandVal ← {
|
||||||
|
Squeeze @+⍟(𝕩⊑chr) (𝕨 r.Range 𝕩⊑szs) - 𝕩⊑off
|
||||||
|
}
|
||||||
|
|
||||||
|
Do ← { 𝕊:
|
||||||
|
at ← r.Range 8
|
||||||
|
l ← 1 + r.Range (at=0)⊑100‿700
|
||||||
|
a ← l RandVal at
|
||||||
|
1 TestVars a‿a
|
||||||
|
{ 𝕊:
|
||||||
|
p ← r.Range l
|
||||||
|
v ← RandVal ⊢◶⟨r.Range∘5 ⋄ 5+r.Range∘3⟩ at≥5
|
||||||
|
exp ← v = p⊑a
|
||||||
|
b ← Squeeze v⌾(p⊸⊑) a
|
||||||
|
exp TestVars a‿b
|
||||||
|
}⍟100 @
|
||||||
|
}
|
||||||
|
|
||||||
|
@∘Do⍟1000 @
|
||||||
5
test/mainCfgs.sh
Executable file
5
test/mainCfgs.sh
Executable file
@ -0,0 +1,5 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
make heapverify && echo 'heapverify:' && ./BQN -M 1000 "$1/test/this.bqn" -noerr bytecode header identity literal namespace prim simple syntax token under undo unhead || exit
|
||||||
|
make rtverify && echo 'rtverify:' && ./BQN -M 1000 "$1/test/this.bqn" || exit
|
||||||
|
echo 'gcc:';make CC=gcc t='gcc_basic' c && ./BQN -M 1000 "$1/test/this.bqn" || exit
|
||||||
|
|
||||||
26
test/moreCfgs.sh
Executable file
26
test/moreCfgs.sh
Executable file
@ -0,0 +1,26 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
make && ./BQN -p 2+2 || exit
|
||||||
|
make single-debug && ./BQN -p 2+2 || exit
|
||||||
|
make heapverify && ./BQN -p 2+2 || exit
|
||||||
|
make rtverify && ./BQN -p 2+2 || exit
|
||||||
|
make rtperf && ./BQN -p 2+2 | head -2 || exit
|
||||||
|
make t=mc_vmdbg f='-DDEBUG -DDEBUG_VM' c && ./BQN -p 2+2 | tail -2 || exit
|
||||||
|
make t=mc_mm0 f='-DMM=0 -DENABLE_GC=0' c && ./BQN -p 2+2 || exit
|
||||||
|
make t=mc_mm1 f='-DMM=1' c && ./BQN -p 2+2 || exit
|
||||||
|
make t=mc_mm2 f='-DMM=2' c && ./BQN -p 2+2 || exit
|
||||||
|
make t=mc_tyar0 f='-DTYPED_ARITH=0' c && ./BQN -p 2+2 || exit
|
||||||
|
make t=mc_frt f='-DFAKE_RUNTIME' c && ./BQN -p 2+2 || exit
|
||||||
|
make t=mc_allr0 f='-DALL_R0' c && ./BQN -p 2+2 || exit
|
||||||
|
make t=mc_allr1 f='-DALL_R1' c && ./BQN -p 2+2 || exit
|
||||||
|
make t=mc_allr01 f='-DALL_R0 -DALL_R1' c && ./BQN -p 2+2 || exit
|
||||||
|
make t=mc_nosff f='-DSFNS_FILLS=0' c && ./BQN -p 2+2 || exit
|
||||||
|
make t=mc_nofmt f='-DFORMATTER=0' c && ./BQN -p 2+2 || exit
|
||||||
|
make t=mc_novmpos f='-DVMPOS=0' c && ./BQN -p 2+2 || exit
|
||||||
|
make t=mc_dontfree f='-DDONT_FREE' c && ./BQN -p 2+2 || exit
|
||||||
|
make t=mc_objctr f='-DOBJ_COUNTER' c && ./BQN -p 2+2 || exit
|
||||||
|
make t=mc_nort f='-DNO_RT' c || exit
|
||||||
|
./precompiled.bqn "$1" "$PATH" '2+2' || exit
|
||||||
|
make t=mc_nortpre f='-DNO_RT -DPRECOMP' c && ./BQN || exit
|
||||||
|
make t=mc_loggc f='-DLOG_GC' c && ./BQN -p 2+2 || exit
|
||||||
|
make t=mc_writeasm f='-DWRITE_ASM' c && ./BQN -p 2+2 || exit
|
||||||
|
make t=mc_useperf f='-DUSE_PERF' c && ./BQN -p 2+2 || exit
|
||||||
6
test/x86Cfgs.sh
Executable file
6
test/x86Cfgs.sh
Executable file
@ -0,0 +1,6 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
make f='-DDEBUG -DHEAP_VERIFY -DJIT_START=0' single-c
|
||||||
|
echo 'alljit+heapverify:' && ./BQN -M 1000 "$1/test/this.bqn" -noerr bytecode header identity literal namespace prim simple syntax token under undo unhead || exit
|
||||||
|
echo 'singeli:';make o3n-singeli && ./BQN -M 1000 "$1/test/this.bqn" || exit
|
||||||
|
echo 'singeli vfy:';make heapverifyn-singeli && ./BQN -M 1000 "$1/test/this.bqn" -noerr bytecode header identity literal namespace prim simple syntax token under undo unhead || exit
|
||||||
|
echo '32-bit:';make f='-DDEBUG -m32' single-c && ./BQN -M 1000 "$1/test/this.bqn" || exit
|
||||||
Loading…
Reference in New Issue
Block a user