From c494a25587e72104039d7045994d011ba1c2488a Mon Sep 17 00:00:00 2001 From: Jonathan Lamothe Date: Sun, 30 Jun 2024 21:11:38 -0400 Subject: [PATCH] implemented `isValid` for `Word16` --- src/Hamming.hs | 9 ++++++++- test/Hamming/Word16Spec.hs | 14 ++++++++++++-- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/Hamming.hs b/src/Hamming.hs index cf7d669..e660151 100644 --- a/src/Hamming.hs +++ b/src/Hamming.hs @@ -47,7 +47,14 @@ instance Hamming Word16 where , ( 0x0001, 0xfffe ) ] - isValid = undefined + isValid code = not $ any (\mask -> oddParity $ code .&. mask) + [ 0xaaaa + , 0xcccc + , 0xf0f0 + , 0xff00 + , 0xffff + ] + correctErrors = undefined setCheckBit :: (Num a, Bits a) => a -> (a, a) -> a diff --git a/test/Hamming/Word16Spec.hs b/test/Hamming/Word16Spec.hs index cfbffd1..f612ec5 100644 --- a/test/Hamming/Word16Spec.hs +++ b/test/Hamming/Word16Spec.hs @@ -47,8 +47,18 @@ setCheckBitsSpec = describe "setCheckBits" $ mapM_ ] isValidSpec :: Spec -isValidSpec = describe "isValid" $ - return () +isValidSpec = describe "isValid" $ mapM_ + ( \(desc, code, expected) -> context desc $ let + actual = isValid code + in it ("should be " ++ show expected) $ + actual `shouldBe` expected + ) + [ ( "all zeroes", 0, True ) + , ( "all ones", 0xffff, True ) + , ( "valid", withChkBits, True ) + , ( "no check bits", noChkBits, False ) + , ( "bad check bits", badChkBits, False ) + ] correctErrorsSpec :: Spec correctErrorsSpec = describe "correctErrors" $