{-# LANGUAGE DataKinds #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TemplateHaskell #-}

import Data.ByteString.Char8 (ByteString, length, pack)
import Data.Typeable
import Test.Tasty
import Test.Tasty.HUnit

import Data.Sext

mkPacket :: ByteString -> Sext 32 ByteString
mkPacket inp =
  -- 5-character version signature
  $(sext "PKT10") `append`
  -- 25-character payload
  payload `append`
  -- 2-character payload checksum
  checksum
  where
    payload = createLeft 0x20 inp
    checksum :: Sext 2 ByteString
    checksum = createLeft 0x20 $
               pack $ show $ Data.Sext.length payload `mod` 100

message :: Sext 64 ByteString
message = mkPacket "Hello" `append` mkPacket "world"

tests :: [TestTree]
tests =
  [ testCase ("The actual length of " ++ show (typeOf message)) $
    assertEqual "" 64 (Data.ByteString.Char8.length $ unwrap message)
  ]

main :: IO ()
main = defaultMain $ testGroup "Tests" tests