•bit._cast fuzz tester, for refcount 1 lists
This commit is contained in:
parent
89c1b39c6d
commit
d23d9b8c8f
27
test/bit.bqn
Normal file
27
test/bit.bqn
Normal file
@ -0,0 +1,27 @@
|
||||
u ← ⌊100×(•UnixTime+1|100וMonoTime)@
|
||||
r ← •MakeRand •Show u
|
||||
⟨RandVals, casts⟩ ← ⟨r⟩ •Import "utils.bqn"
|
||||
|
||||
# Test •bit._cast first
|
||||
# Convert unsigned width 𝕗 to 𝕘
|
||||
_cvtu_ ← {
|
||||
𝕗=𝕘 ? 𝕩 ;
|
||||
𝕗<𝕘 ? b←2⋆𝕗 ⋄ +⟜(b⊸×)˝⍉∘‿(𝕘÷𝕗)⥊𝕩 ;
|
||||
b←2⋆𝕘 ⋄ ⥊⍉>1(-⊸↓-b×↓)⌊∘÷⟜b⍟(↕1+𝕗÷𝕘)𝕩
|
||||
}
|
||||
_bitcast ← { fr‿to _𝕣 𝕩:
|
||||
S ← {𝕊:𝕩+𝕨×𝕩<0; 𝕊⁼:𝕩-𝕨×𝕩≥𝕨÷2}
|
||||
_off ← {(⊑"uci"⊐1⊑𝕗)⊑⟨⊢,-⟜@,(2⋆⊑𝕗)⊸S⟩}
|
||||
f‿t ← ⊑¨𝕗
|
||||
to _off⁼ f _cvtu_ t fr _off 𝕩
|
||||
}
|
||||
|
||||
TestCast ← { f‿t 𝕊 len:
|
||||
c ← 𝕨 ⊏ casts
|
||||
len +↩ (1⌈÷˜´⊑¨c) | -len # Round up to exact conversion
|
||||
(c _bitcast ≡ c •bit._cast) len RandVals f
|
||||
}
|
||||
cs ← / 64>⊑¨casts # TODO floats
|
||||
cx ← ⊏⟜(32‿'c'⊸≢¨casts)⊸/ cs # TODO 32-bit char output
|
||||
ls ← (↕100) ∾ r.Range¨⊸+ ⌊ 100 × ↕∘⌈⌾(1.5⊸⋆⁼) 100
|
||||
{cs (⋈ !∘TestCast 𝕩˙)⌜ cx}¨ ls
|
||||
@ -11,6 +11,7 @@ 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"
|
||||
casts ⇐ 1‿8‿16‿32‿64‿8‿16‿32⋈¨"uiiifccc"
|
||||
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⊸⊑)↩
|
||||
|
||||
Loading…
Reference in New Issue
Block a user