packages feed

botan-low-0.1.0.0: test/Test/Botan/Low/ZFEC.hs

{-# LANGUAGE OverloadedStrings #-}

module Test.Botan.Low.ZFEC (tests) where

import           Botan.Low.ZFEC
import           Data.ByteString (ByteString)
import           Test.Hspec
import           Test.QuickCheck
import           Test.Tasty
import           Test.Tasty.Hspec

tests :: IO TestTree
tests = do
    specs <- testSpec "spec_zfec" spec_zfec
    pure $ testGroup "Test.Botan.Low.ZFEC" [
        specs
      ]
k :: Int
k = 5

n :: Int
n = 7

message :: ByteString
message = "Fee fi fo fum! I smell the blood of an Englishman!"

spec_zfec :: Spec
spec_zfec = do
    describe "zfecEncode" $ do
        it "encodes a message into shares" $ do
            shares <- zfecEncode k n message
            length shares `shouldBe` n
    describe "zfecDecode" $ do
        it "recovers a message from enough shares" $ do
            shares <- zfecEncode k n message
            someShares <- take k <$> generate (shuffle shares)
            recoveredMessage <- zfecDecode k n someShares
            recoveredMessage `shouldBe` message