Skip to content

Commit 4204a6f

Browse files
committed
Add signum tests
1 parent e607a7e commit 4204a6f

1 file changed

Lines changed: 22 additions & 0 deletions

File tree

test/ArrayFire/ArithSpec.hs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,3 +204,25 @@ spec =
204204
(scalar @Int 2)
205205
(scalar @Int 8)
206206
`shouldBe` vector @Int 5 [2,2,5,8,8]
207+
208+
describe "signum" $ do
209+
it "positive Int → 1" $
210+
signum (scalar @Int 5) `shouldBe` scalar @Int 1
211+
it "negative Int → -1" $
212+
signum (scalar @Int (-3)) `shouldBe` scalar @Int (-1)
213+
it "zero Int → 0" $
214+
signum (scalar @Int 0) `shouldBe` scalar @Int 0
215+
-- unsigned: old sign(-x) - sign(x) wrapped, making signum always 0
216+
it "positive Word32 → 1 (unsigned negate wraps)" $
217+
signum (scalar @ArrayFire.Word32 7) `shouldBe` scalar @ArrayFire.Word32 1
218+
it "zero Word32 → 0" $
219+
signum (scalar @ArrayFire.Word32 0) `shouldBe` scalar @ArrayFire.Word32 0
220+
-- IEEE 754: af_sign checks the sign bit, so sign(-0.0) = 1 → old signum(0.0) = 1
221+
it "negative zero Double → 0 (IEEE 754 -0.0)" $
222+
evalf (signum (scalar @Double (-0.0))) `shouldBeApprox` 0
223+
it "positive Double → 1" $
224+
evalf (signum (scalar @Double 2.5)) `shouldBeApprox` 1
225+
it "negative Double → -1" $
226+
evalf (signum (scalar @Double (-2.5))) `shouldBeApprox` (-1)
227+
it "signum vector" $
228+
signum (vector @Int 3 [-4, 0, 7]) `shouldBe` vector @Int 3 [-1, 0, 1]

0 commit comments

Comments
 (0)