squeeze test
This commit is contained in:
parent
1609e8b651
commit
a52260715e
@ -9,4 +9,5 @@ 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 𝕨≡𝕩
|
||||
./BQN test/bitcpy.bqn // fuzz-test bit_cpy; requires a CBQN build with -DTEST_BITCPY
|
||||
./BQN test/squeeze.bqn // fuzz-test bit_cpy; requires a CBQN build with -DEEQUAL_NEGZERO
|
||||
```
|
||||
@ -1,5 +1,6 @@
|
||||
# make t=bitcpyTest f='-O3 -march=native -DTEST_BITCPY' singeli=1 c && ./BQN test/bitcpy.bqn
|
||||
⟨Temp, Type, Unshare, Squeeze, Info⟩ ← •internal
|
||||
u ← •UnixTime@
|
||||
u ← ⌊100×(•UnixTime+1|100וMonoTime)@
|
||||
# u ↩ 123
|
||||
|
||||
r ← •MakeRand •Show u
|
||||
@ -38,4 +39,4 @@ Do ← { 𝕊:
|
||||
! a ≡ aT
|
||||
}
|
||||
|
||||
@∘Do⍟(⊑(•BQN¨•args)∾500) @
|
||||
@∘Do⍟(⊑(•BQN¨•args)∾2000) @
|
||||
@ -1,5 +1,5 @@
|
||||
⟨ListVariations, ClearRefs, Variation, Squeeze, Info⟩ ← •internal
|
||||
u ← •UnixTime@
|
||||
u ← ⌊100×(•UnixTime+1|100וMonoTime)@
|
||||
# u ↩ 123
|
||||
|
||||
r ← •MakeRand •Show u
|
||||
@ -19,24 +19,16 @@ TestVars ← { w𝕊a‿b:
|
||||
|
||||
(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
|
||||
specF64 ← ∾⟜- ÷⟜0⊸∾ 1‿0
|
||||
RandVal ← {
|
||||
𝕩≡4? {specF64⊏˜𝕩 r.Range ≠specF64}∘≠⌾((0=𝕨 r.Range 2⋆r.Range 10)⊸/) 𝕨 r.Range 0;
|
||||
Squeeze @+⍟(𝕩⊑chr) (𝕨 r.Range 𝕩⊑szs) - 𝕩⊑off
|
||||
}
|
||||
⟨RandVals⟩ ← ⟨r⟩ •Import "utils.bqn"
|
||||
|
||||
Do ← { 𝕊:
|
||||
at ← r.Range 8
|
||||
l ← 1 + r.Range (at=0)⊑100‿700
|
||||
a ← l RandVal at
|
||||
a ← l RandVals at
|
||||
(⊢◶1‿{𝕊:∧´a=a} at=4) TestVars a‿a
|
||||
{ 𝕊:
|
||||
p ← r.Range l
|
||||
v ← ⊑1 RandVal ⊢◶⟨r.Range∘5 ⋄ 5+r.Range∘3⟩ at≥5
|
||||
v ← ⊑1 RandVals ⊢◶⟨r.Range∘5 ⋄ 5+r.Range∘3⟩ at≥5
|
||||
exp ← v = p⊑a
|
||||
b ← Squeeze v⌾(p⊸⊑) a
|
||||
(⊢◶exp‿{𝕊:∧´a=b} at=4) TestVars a‿b
|
||||
|
||||
34
test/squeeze.bqn
Normal file
34
test/squeeze.bqn
Normal file
@ -0,0 +1,34 @@
|
||||
# make t=squeezeTest f='-march=native -O3 -DEEQUAL_NEGZERO' singeli=1 c && ./BQN test/squeeze.bqn
|
||||
⟨EEqual, ListVariations, ClearRefs, Variation, Squeeze, Info⟩ ← •internal
|
||||
u ← ⌊100×(•UnixTime+1|100וMonoTime)@
|
||||
# u ↩ 123
|
||||
|
||||
r ← •MakeRand •Show u
|
||||
⟨RandVals, vars, spec, specF64⟩ ← ⟨r⟩ •Import "utils.bqn"
|
||||
|
||||
TestSq0 ← {a ← Squeeze 𝕨 Variation 𝕩 ⋄ ! 1==a ⋄ ! 0=≠a ⋄ a}
|
||||
{! ⟨0⟩≡1↑𝕩 TestSq0 ↕0}¨ 5↑vars
|
||||
{! " "≡1↑𝕩 TestSq0 ""}¨ 5↓vars
|
||||
{𝕩 TestSq0 ⟨⟩}¨ ListVariations ⟨⟩ # {𝕩{•Out "Failed fill for "∾𝕨}⍟⊢ 8 ≠ 1↑⎊8 𝕩 TestSq0 ⟨⟩}¨ ListVariations ⟨⟩
|
||||
|
||||
specSpl ← 5(↑⋈↓)spec
|
||||
allSpec ← specF64 ∾ (@+0‿10‿32‿127‿128‿255‿256‿32767‿32768‿65535‿65536‿1114110‿1114111) ∾ {⇐}‿+
|
||||
Do ← { 𝕊:
|
||||
at ← r.Range 8
|
||||
l ← 1 + r.Range (at=0)⊑1000‿300
|
||||
a ← l RandVals at
|
||||
{! a EEqual Squeeze 𝕩 Variation a}¨ ListVariations a
|
||||
|
||||
F ← { 𝕊:
|
||||
p ← {r.Range 2? r.Range l; (¯1+l-⊢)⍟(r.Range 2) r.Range (2⋆r.Range 10)⌊l}
|
||||
b ← 𝕩⌾(p⊸⊑) a
|
||||
! b EEqual Squeeze b # won't be acceptable with in-place squeezing, but that doesn't exist yet
|
||||
}
|
||||
|
||||
F¨ (at≥5)⊑specSpl
|
||||
F¨ allSpec
|
||||
{𝕊: F¨ @⊸+⍟(at≥5) r.Range 2⋆r.Range (at≥5)⊑33‿20}¨ ↕10
|
||||
ClearRefs@
|
||||
}
|
||||
|
||||
Do⍟40000 @
|
||||
46
test/utils.bqn
Normal file
46
test/utils.bqn
Normal file
@ -0,0 +1,46 @@
|
||||
⟨Variation⟩ ← •internal
|
||||
|
||||
r ← ⊑•args
|
||||
|
||||
# types: u1,i8,i16,i32,f64,c8,c16,c32
|
||||
maxF64 ⇐ +´2⋆1023-↕53
|
||||
min ← 0∾(-2⋆7‿15‿31)∾¯0.5∾0‿0‿0
|
||||
max ← 2∾( 2⋆7‿15‿31)∾ 0.5∾(2⋆8‿16)∾1114112
|
||||
szs ← max-min
|
||||
chr ← 0‿0‿0‿0‿0‿1‿1‿1
|
||||
specF64 ⇐ ∾⟜- π‿2∾ ÷⟜0⊸∾ 1‿0
|
||||
specI32 ⇐ "Ai32" •internal.Variation ∧ (<⟜(2⋆31)∧≥⟜(-2⋆31))⊸/ ∾⟜- ≥⟜0⊸/ ∧⥊(¯4+↕8) +⌜ 2⋆↕32
|
||||
vars ⇐ "Ab"‿"Ai8"‿"Ai16"‿"Ai32"‿"Af64"‿"Ac8"‿"Ac16"‿"Ac32"
|
||||
specInts ⇐ 7‿15({(<⟜(2⋆𝕨)∧≥⟜(-2⋆𝕨))⊸/𝕩}¨⟜<∾⋈∘⊢)specI32 # TODO 8-bit integer spec is kinda stupid
|
||||
spec0 ← ⟨0‿1⟩∾specInts∾⟨specF64⟩∾@+∾⟜(⌽1114111-↕16)⌾(2⊸⊑) (<⟜1114111∧≥⟜0)⊸/¨ specInts
|
||||
spec0 (5/¯128‿¯127‿¯126‿¯2‿¯1‿0‿1‿2‿125‿126‿127)⊸∾⌾(1⊸⊑)↩
|
||||
spec ⇐ vars Variation¨ spec0
|
||||
! spec0 ≡○((4≠↕8)⊸/) spec
|
||||
|
||||
SubRange ⇐ {
|
||||
sz ← 𝕩-𝕨
|
||||
l ← 1 + r.Range 4⌊⍟(0=r.Range 5) sz
|
||||
0‿l+𝕨+r.Range 1+sz-l
|
||||
}
|
||||
# •Show¨ ⍷∧{𝕊:¯3 SubRange 3}¨↕1000
|
||||
# •Show¨ ∾⟜(-˜´)¨ ∧{𝕊:¯1000 SubRange 1000}¨↕100
|
||||
|
||||
Variate ← { sp𝕊𝕩:
|
||||
((0=r.Range 5)◶{𝕩⥊sp⊑˜r.Range ≠sp}‿{sp⊏˜𝕩 r.Range ≠sp})∘≠⌾((0=(≠𝕩) r.Range 2⋆0⌈10-˜r.Range 20)⊸/) 𝕩
|
||||
}
|
||||
RandVals ⇐ {
|
||||
# TODO special code for 𝕩≡0
|
||||
# TODO bit-based randomization
|
||||
𝕩≡4? "Af64" Variation specF64 Variate (2⋆1024×r.Range 0) × (¯2+4×r.Range 0) + 𝕨 r.Range 0;
|
||||
s‿e ← (𝕩⊑min) SubRange 𝕩⊑max
|
||||
(𝕩⊑vars) Variation (𝕩⊑spec) Variate @+⍟(𝕩⊑chr) s+𝕨 r.Range e-s
|
||||
}
|
||||
|
||||
! "bitarr" ≡ •internal.Type 10 RandVals 0
|
||||
! "i8arr" ≡ •internal.Type 10 RandVals 1
|
||||
! "i16arr" ≡ •internal.Type 10 RandVals 2
|
||||
! "i32arr" ≡ •internal.Type 10 RandVals 3
|
||||
! "f64arr" ≡ •internal.Type 10 RandVals 4
|
||||
! "c8arr" ≡ •internal.Type 10 RandVals 5
|
||||
! "c16arr" ≡ •internal.Type 10 RandVals 6
|
||||
! "c32arr" ≡ •internal.Type 10 RandVals 7
|
||||
Loading…
Reference in New Issue
Block a user