Tree-native binary processing
This commit is contained in:
59
test/Spec.hs
59
test/Spec.hs
@@ -47,6 +47,7 @@ tests = testGroup "Tricu Tests"
|
||||
, byteMarshallingTests
|
||||
, wireTests
|
||||
, byteListUtilities
|
||||
, binaryReaderTests
|
||||
]
|
||||
|
||||
lexer :: TestTree
|
||||
@@ -1028,6 +1029,7 @@ wireTests = testGroup "Wire Tests"
|
||||
-- --------------------------------------------------------------------------
|
||||
|
||||
-- | Helpers for byte-list test expectations.
|
||||
|
||||
trueT :: T
|
||||
trueT = Stem Leaf
|
||||
|
||||
@@ -1225,3 +1227,60 @@ byteListUtilities = testGroup "Byte List Utility Tests"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= falseT
|
||||
]
|
||||
|
||||
-- --------------------------------------------------------------------------
|
||||
-- Binary reader tests (binary.tri)
|
||||
-- --------------------------------------------------------------------------
|
||||
okT :: T -> T -> T
|
||||
okT value rest = pairT trueT (pairT value rest)
|
||||
|
||||
errT :: T -> T -> T
|
||||
errT code rest = pairT falseT (pairT code rest)
|
||||
|
||||
eofT :: T
|
||||
eofT = byteT 1
|
||||
|
||||
binaryReaderTests :: TestTree
|
||||
binaryReaderTests = testGroup "Binary Reader Tests"
|
||||
[ testCase "readU8: empty input returns err" $ do
|
||||
let input = "readU8 []"
|
||||
library <- evaluateFile "./lib/binary.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= errT eofT (bytesT [])
|
||||
|
||||
, testCase "readU8: single byte returns ok" $ do
|
||||
let input = "readU8 [(7)]"
|
||||
library <- evaluateFile "./lib/binary.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= okT (byteT 7) (bytesT [])
|
||||
|
||||
, testCase "readU8: multi-byte returns first byte and rest" $ do
|
||||
let input = "readU8 [(7) (8)]"
|
||||
library <- evaluateFile "./lib/binary.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= okT (byteT 7) (bytesT [8])
|
||||
|
||||
, testCase "readBytes 0: returns ok with empty bytes and original input" $ do
|
||||
let input = "readBytes 0 [(1) (2)]"
|
||||
library <- evaluateFile "./lib/binary.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= okT (bytesT []) (bytesT [1,2])
|
||||
|
||||
, testCase "readBytes 2: exact read returns ok with taken and rest" $ do
|
||||
let input = "readBytes 2 [(1) (2) (3)]"
|
||||
library <- evaluateFile "./lib/binary.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= okT (bytesT [1,2]) (bytesT [3])
|
||||
|
||||
, testCase "readBytes 3: exact read with no remainder" $ do
|
||||
let input = "readBytes 3 [(1) (2) (3)]"
|
||||
library <- evaluateFile "./lib/binary.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= okT (bytesT [1,2,3]) (bytesT [])
|
||||
|
||||
, testCase "readBytes 5: overlong read returns err preserving input" $ do
|
||||
let input = "readBytes 5 [(1) (2)]"
|
||||
library <- evaluateFile "./lib/binary.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= errT eofT (bytesT [1,2])
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user