packages feed

octane-0.4.1: test-suite/Octane/Type/FrameSpec.hs

{-# LANGUAGE OverloadedStrings #-}

module Octane.Type.FrameSpec (spec) where

import qualified Data.Binary.Bits as Bits
import qualified Data.Binary.Bits.Get as Bits
import qualified Data.Binary.Bits.Put as Bits
import qualified Data.Binary.Get as Binary
import qualified Data.Binary.Put as Binary
import qualified Data.ByteString.Lazy as BSL
import Octane
import Test.Tasty.Hspec

spec :: Spec
spec = describe "Frame" $ do
    it "can be decoded" $ do
        shouldBe
            (decodeFrame "\
                \\0\0\0\0\
                \\0\0\0\0\
                \\0")
            (Right ("", 9, Frame
                (Float32LE 0.0)
                (Float32LE 0.0)
                []))
    it "can be encoded" $ do
        shouldBe
            (encodeFrame (Frame
                (Float32LE 0.0)
                (Float32LE 0.0)
                []))
            "\
                \\0\0\0\0\
                \\0\0\0\0\
                \\0"

decodeFrame :: BSL.ByteString -> Either (BSL.ByteString, Binary.ByteOffset, String) (BSL.ByteString, Binary.ByteOffset, Frame)
decodeFrame bytes = Binary.runGetOrFail (Bits.runBitGet (Bits.getBits undefined)) bytes

encodeFrame :: Frame -> BSL.ByteString
encodeFrame frame = Binary.runPut (Bits.runBitPut (Bits.putBits undefined frame))