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))