From a52260715ef795488b77adb2b951fce233c2c9c9 Mon Sep 17 00:00:00 2001 From: dzaima Date: Mon, 4 Apr 2022 17:00:54 +0300 Subject: [PATCH] squeeze test --- test/README.md | 1 + test/bitcpy.bqn | 5 +++-- test/equal.bqn | 16 ++++------------ test/squeeze.bqn | 34 ++++++++++++++++++++++++++++++++++ test/utils.bqn | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 88 insertions(+), 14 deletions(-) create mode 100644 test/squeeze.bqn create mode 100644 test/utils.bqn diff --git a/test/README.md b/test/README.md index 162a7218..faa9f2c2 100644 --- a/test/README.md +++ b/test/README.md @@ -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 ``` \ No newline at end of file diff --git a/test/bitcpy.bqn b/test/bitcpy.bqn index ab8290ea..4ce60415 100644 --- a/test/bitcpy.bqn +++ b/test/bitcpy.bqn @@ -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) @ \ No newline at end of file +@∘Do⍟(⊑(•BQN¨•args)∾2000) @ \ No newline at end of file diff --git a/test/equal.bqn b/test/equal.bqn index 5a606702..c8e7532d 100644 --- a/test/equal.bqn +++ b/test/equal.bqn @@ -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 diff --git a/test/squeeze.bqn b/test/squeeze.bqn new file mode 100644 index 00000000..75ad76ef --- /dev/null +++ b/test/squeeze.bqn @@ -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 @ \ No newline at end of file diff --git a/test/utils.bqn b/test/utils.bqn new file mode 100644 index 00000000..817781f2 --- /dev/null +++ b/test/utils.bqn @@ -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 \ No newline at end of file