Arborix -> Arboricx rename
This commit is contained in:
332
test/Spec.hs
332
test/Spec.hs
@@ -786,7 +786,7 @@ wireTests = testGroup "Wire Tests"
|
||||
, "main = id t"
|
||||
]
|
||||
wireData <- exportBundle srcConn [termHash]
|
||||
BS.take 8 wireData @?= BS.pack [0x41, 0x52, 0x42, 0x4f, 0x52, 0x49, 0x58, 0x00]
|
||||
BS.take 8 wireData @?= BS.pack [0x41, 0x52, 0x42, 0x4f, 0x52, 0x49, 0x43, 0x58]
|
||||
case decodeBundle wireData of
|
||||
Left err -> assertFailure $ "decodeBundle failed: " ++ err
|
||||
Right bundle -> do
|
||||
@@ -794,15 +794,15 @@ wireTests = testGroup "Wire Tests"
|
||||
tree = manifestTree manifest
|
||||
hashSpec = treeNodeHash tree
|
||||
runtime = manifestRuntime manifest
|
||||
manifestSchema manifest @?= "arborix.bundle.manifest.v1"
|
||||
manifestSchema manifest @?= "arboricx.bundle.manifest.v1"
|
||||
manifestBundleType manifest @?= "tree-calculus-executable-object"
|
||||
manifestClosure manifest @?= ClosureComplete
|
||||
treeCalculus tree @?= "tree-calculus.v1"
|
||||
treeNodePayload tree @?= "arborix.merkle.payload.v1"
|
||||
treeNodePayload tree @?= "arboricx.merkle.payload.v1"
|
||||
nodeHashAlgorithm hashSpec @?= "sha256"
|
||||
nodeHashDomain hashSpec @?= "arborix.merkle.node.v1"
|
||||
nodeHashDomain hashSpec @?= "arboricx.merkle.node.v1"
|
||||
runtimeSemantics runtime @?= "tree-calculus.v1"
|
||||
runtimeAbi runtime @?= "arborix.abi.tree.v1"
|
||||
runtimeAbi runtime @?= "arboricx.abi.tree.v1"
|
||||
runtimeCapabilities runtime @?= []
|
||||
bundleRoots bundle @?= [termHash]
|
||||
map exportRoot (manifestExports manifest) @?= [termHash]
|
||||
@@ -823,7 +823,7 @@ wireTests = testGroup "Wire Tests"
|
||||
exportName exported @?= "validateEmail"
|
||||
exportRoot exported @?= termHash
|
||||
exportKind exported @?= "term"
|
||||
exportAbi exported @?= "arborix.abi.tree.v1"
|
||||
exportAbi exported @?= "arboricx.abi.tree.v1"
|
||||
exports -> assertFailure $ "Expected one export, got: " ++ show exports
|
||||
close srcConn
|
||||
|
||||
@@ -1064,9 +1064,9 @@ u32 n = [0,0,0,n]
|
||||
u64 :: Integer -> [Integer]
|
||||
u64 n = [0,0,0,0,0,0,0,n]
|
||||
|
||||
arborixHeaderBytes :: Integer -> [Integer]
|
||||
arborixHeaderBytes sectionCount =
|
||||
[65,82,66,79,82,73,88,0]
|
||||
arboricxHeaderBytes :: Integer -> [Integer]
|
||||
arboricxHeaderBytes sectionCount =
|
||||
[65,82,66,79,82,73,67,88]
|
||||
++ u16 1
|
||||
++ u16 0
|
||||
++ u32 sectionCount
|
||||
@@ -1107,7 +1107,7 @@ simpleContainerBytes :: [Integer] -> [Integer] -> [Integer]
|
||||
simpleContainerBytes manifestBytes nodesBytes =
|
||||
let manifestOffset = 152
|
||||
nodesOffset = manifestOffset + fromIntegral (length manifestBytes)
|
||||
in arborixHeaderBytes 2
|
||||
in arboricxHeaderBytes 2
|
||||
++ manifestEntryBytes manifestOffset (fromIntegral $ length manifestBytes)
|
||||
++ nodesEntryBytes nodesOffset (fromIntegral $ length nodesBytes)
|
||||
++ manifestBytes
|
||||
@@ -1115,12 +1115,12 @@ simpleContainerBytes manifestBytes nodesBytes =
|
||||
|
||||
singleSectionContainerBytes :: [Integer] -> [Integer] -> [Integer]
|
||||
singleSectionContainerBytes sectionType sectionBytes =
|
||||
arborixHeaderBytes 1
|
||||
arboricxHeaderBytes 1
|
||||
++ sectionEntryBytes sectionType 92 (fromIntegral $ length sectionBytes)
|
||||
++ sectionBytes
|
||||
|
||||
arborixHeaderT :: Integer -> T
|
||||
arborixHeaderT sectionCount =
|
||||
arboricxHeaderT :: Integer -> T
|
||||
arboricxHeaderT sectionCount =
|
||||
pairT (bytesT [0,1])
|
||||
(pairT (bytesT [0,0])
|
||||
(pairT (bytesT $ u32 sectionCount)
|
||||
@@ -1615,120 +1615,114 @@ binaryReaderTests = testGroup "Binary Reader Tests"
|
||||
result env @?= errT eofT (bytesT [1,2,3])
|
||||
|
||||
-- ------------------------------------------------------------------------
|
||||
-- Arborix magic recognition
|
||||
-- Arboricx magic recognition
|
||||
-- ------------------------------------------------------------------------
|
||||
|
||||
, testCase "readArborixMagic: accepts magic and preserves rest" $ do
|
||||
let input = "readArborixMagic [(65) (82) (66) (79) (82) (73) (88) (0) (1) (2)]"
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
, testCase "readArboricxMagic: accepts magic and preserves rest" $ do
|
||||
let input = "readArboricxMagic ((append arboricxMagic) [(1) (2)])"
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= okT unitT (bytesT [1,2])
|
||||
|
||||
, testCase "readArborixMagic: rejects wrong magic preserving input" $ do
|
||||
let input = "readArborixMagic [(65) (82) (66) (79) (82) (73) (88) (1) (9)]"
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
, testCase "readArboricxMagic: rejects wrong magic preserving input" $ do
|
||||
let input = "readArboricxMagic [(65) (83) (66) (79) (82) (73) (67) (88) (1) (9)]"
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= errT unexpectedBytesT (bytesT [65,82,66,79,82,73,88,1,9])
|
||||
result env @?= errT unexpectedBytesT (bytesT [65,83,66,79,82,73,67,88,1,9])
|
||||
|
||||
, testCase "readArborixMagic: short input returns EOF preserving input" $ do
|
||||
let input = "readArborixMagic [(65) (82) (66) (79)]"
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
, testCase "readArboricxMagic: short input returns EOF preserving input" $ do
|
||||
let input = "readArboricxMagic [(65) (82) (66) (79)]"
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= errT eofT (bytesT [65,82,66,79])
|
||||
|
||||
-- ------------------------------------------------------------------------
|
||||
-- Arborix header parsing
|
||||
-- Arboricx header parsing
|
||||
-- ------------------------------------------------------------------------
|
||||
|
||||
, testCase "readArborixHeader: parses portable header" $ do
|
||||
let input = "readArborixHeader " ++ bytesExpr (arborixHeaderBytes 0)
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
, testCase "readArboricxHeader: parses portable header" $ do
|
||||
let input = "readArboricxHeader " ++ bytesExpr (arboricxHeaderBytes 0)
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= okT (arborixHeaderT 0) (bytesT [])
|
||||
result env @?= okT (arboricxHeaderT 0) (bytesT [])
|
||||
|
||||
, testCase "readArborixHeader: preserves trailing bytes" $ do
|
||||
let input = "readArborixHeader " ++ bytesExpr (arborixHeaderBytes 0 ++ [9,8])
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
, testCase "readArboricxHeader: preserves trailing bytes" $ do
|
||||
let input = "readArboricxHeader " ++ bytesExpr (arboricxHeaderBytes 0 ++ [9,8])
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= okT (arborixHeaderT 0) (bytesT [9,8])
|
||||
result env @?= okT (arboricxHeaderT 0) (bytesT [9,8])
|
||||
|
||||
, testCase "readArborixHeader: rejects wrong magic preserving input" $ do
|
||||
let input = "readArborixHeader [(65) (82) (66) (79) (82) (73) (88) (1) (0) (1)]"
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= errT unexpectedBytesT (bytesT [65,82,66,79,82,73,88,1,0,1])
|
||||
|
||||
, testCase "readArborixHeader: short input returns EOF preserving input" $ do
|
||||
let input = "readArborixHeader [(65) (82)]"
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
, testCase "readArboricxHeader: short input returns EOF preserving input" $ do
|
||||
let input = "readArboricxHeader [(65) (82)]"
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= errT eofT (bytesT [65,82])
|
||||
|
||||
-- ------------------------------------------------------------------------
|
||||
-- Arborix section directory record parsing
|
||||
-- Arboricx section directory record parsing
|
||||
-- ------------------------------------------------------------------------
|
||||
|
||||
, testCase "readSectionRecord: parses portable section entry" $ do
|
||||
let input = "readSectionRecord " ++ bytesExpr (nodesEntryBytes 16 32)
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= okT (sectionRecordT nodesSectionIdBytes 16 32) (bytesT [])
|
||||
|
||||
, testCase "readSectionRecord: preserves trailing bytes" $ do
|
||||
let input = "readSectionRecord " ++ bytesExpr (nodesEntryBytes 16 32 ++ [9,8])
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= okT (sectionRecordT nodesSectionIdBytes 16 32) (bytesT [9,8])
|
||||
|
||||
, testCase "readSectionRecord: empty input returns EOF" $ do
|
||||
let input = "readSectionRecord []"
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= errT eofT (bytesT [])
|
||||
|
||||
, testCase "readSectionRecord: short section id returns EOF preserving input" $ do
|
||||
let input = "readSectionRecord [(0)]"
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= errT eofT (bytesT [0])
|
||||
|
||||
, testCase "readSectionRecord: missing section version returns EOF preserving unread bytes" $ do
|
||||
let input = "readSectionRecord [(0) (2)]"
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= errT eofT (bytesT [0,2])
|
||||
|
||||
, testCase "readSectionRecord: short section version returns EOF preserving unread bytes" $ do
|
||||
let input = "readSectionRecord [(0) (2) (0) (0) (0)]"
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= errT eofT (bytesT [0])
|
||||
|
||||
, testCase "readSectionRecord: missing length returns EOF preserving unread length bytes" $ do
|
||||
let input = "readSectionRecord [(0) (2) (0) (0) (0) (16)]"
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= errT eofT (bytesT [])
|
||||
|
||||
, testCase "readSectionRecord: short section flags returns EOF preserving unread bytes" $ do
|
||||
let input = "readSectionRecord [(0) (2) (0) (0) (0) (16) (0) (0) (0)]"
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= errT eofT (bytesT [0])
|
||||
|
||||
-- ------------------------------------------------------------------------
|
||||
-- Arborix section directory parsing
|
||||
-- Arboricx section directory parsing
|
||||
-- ------------------------------------------------------------------------
|
||||
|
||||
, testCase "readSectionDirectory: zero records preserves input" $ do
|
||||
let input = "readSectionDirectory 0 [(9) (8)]"
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= okT (ofList []) (bytesT [9,8])
|
||||
|
||||
, testCase "readSectionDirectory: reads requested records and preserves trailing bytes" $ do
|
||||
let input = "readSectionDirectory 2 " ++ bytesExpr (manifestEntryBytes 10 20 ++ nodesEntryBytes 30 40 ++ [9])
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= okT
|
||||
(ofList
|
||||
@@ -1739,171 +1733,171 @@ binaryReaderTests = testGroup "Binary Reader Tests"
|
||||
|
||||
, testCase "readSectionDirectory: truncated record returns EOF" $ do
|
||||
let input = "readSectionDirectory 2 [(0) (1) (0) (0) (0) (10) (0) (0) (0) (20) (0) (2) (0) (0)]"
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= errT eofT (bytesT [0,0])
|
||||
|
||||
-- ------------------------------------------------------------------------
|
||||
-- Arborix section lookup and raw byte slicing
|
||||
-- Arboricx section lookup and raw byte slicing
|
||||
-- ------------------------------------------------------------------------
|
||||
|
||||
, testCase "lookupSectionRecord: finds record by raw section id" $ do
|
||||
let input = "lookupSectionRecord " ++ bytesExpr nodesSectionIdBytes ++ " [(" ++ "pair " ++ bytesExpr manifestSectionIdBytes ++ " (pair " ++ bytesExpr [0,1] ++ " (pair " ++ bytesExpr [0,1] ++ " (pair " ++ bytesExpr [0,0] ++ " (pair " ++ bytesExpr [0,1] ++ " (pair " ++ bytesExpr (u64 10) ++ " (pair " ++ bytesExpr (u64 20) ++ " " ++ bytesExpr (replicate 32 0) ++ "))))))" ++ ") (" ++ "pair " ++ bytesExpr nodesSectionIdBytes ++ " (pair " ++ bytesExpr [0,1] ++ " (pair " ++ bytesExpr [0,1] ++ " (pair " ++ bytesExpr [0,0] ++ " (pair " ++ bytesExpr [0,1] ++ " (pair " ++ bytesExpr (u64 30) ++ " (pair " ++ bytesExpr (u64 40) ++ " " ++ bytesExpr (replicate 32 0) ++ "))))))" ++ ")]"
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= justT (sectionRecordT nodesSectionIdBytes 30 40)
|
||||
|
||||
, testCase "lookupSectionRecord: missing section id returns nothing" $ do
|
||||
let input = "lookupSectionRecord " ++ bytesExpr [0,0,0,3] ++ " [(" ++ "pair " ++ bytesExpr manifestSectionIdBytes ++ " (pair " ++ bytesExpr [0,1] ++ " (pair " ++ bytesExpr [0,1] ++ " (pair " ++ bytesExpr [0,0] ++ " (pair " ++ bytesExpr [0,1] ++ " (pair " ++ bytesExpr (u64 10) ++ " (pair " ++ bytesExpr (u64 20) ++ " " ++ bytesExpr (replicate 32 0) ++ "))))))" ++ ") (" ++ "pair " ++ bytesExpr nodesSectionIdBytes ++ " (pair " ++ bytesExpr [0,1] ++ " (pair " ++ bytesExpr [0,1] ++ " (pair " ++ bytesExpr [0,0] ++ " (pair " ++ bytesExpr [0,1] ++ " (pair " ++ bytesExpr (u64 30) ++ " (pair " ++ bytesExpr (u64 40) ++ " " ++ bytesExpr (replicate 32 0) ++ "))))))" ++ ")]"
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= nothingT
|
||||
|
||||
, testCase "byteSlice: extracts requested byte range" $ do
|
||||
let input = "byteSlice 2 3 [(10) (11) (12) (13) (14) (15)]"
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= bytesT [12,13,14]
|
||||
|
||||
, testCase "byteSlice: overlong length returns remaining bytes" $ do
|
||||
let input = "byteSlice 4 9 [(10) (11) (12) (13) (14) (15)]"
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= bytesT [14,15]
|
||||
|
||||
-- ------------------------------------------------------------------------
|
||||
-- Arborix minimal container parsing foundation
|
||||
-- Arboricx minimal container parsing foundation
|
||||
-- ------------------------------------------------------------------------
|
||||
|
||||
, testCase "u32BEBytesToNat: decodes zero" $ do
|
||||
let input = "u32BEBytesToNat [(0) (0) (0) (0)]"
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= ofNumber 0
|
||||
|
||||
, testCase "u32BEBytesToNat: decodes small section count" $ do
|
||||
let input = "u32BEBytesToNat [(0) (0) (0) (2)]"
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= ofNumber 2
|
||||
|
||||
, testCase "u64BEBytesToNat: decodes small node count" $ do
|
||||
let input = "u64BEBytesToNat [(0) (0) (0) (0) (0) (0) (0) (2)]"
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= ofNumber 2
|
||||
|
||||
, testCase "u64BEBytesToNat: decodes fixture-scale offset" $ do
|
||||
let input = "u64BEBytesToNat [(0) (0) (0) (0) (0) (0) (3) (214)]"
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= ofNumber 982
|
||||
|
||||
, testCase "readArborixContainer: reads header directory and preserves payload" $ do
|
||||
let input = "readArborixContainer " ++ bytesExpr (simpleContainerBytes [101,102,103] [201,202,203,204])
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
, testCase "readArboricxContainer: reads header directory and preserves payload" $ do
|
||||
let input = "readArboricxContainer " ++ bytesExpr (simpleContainerBytes [101,102,103] [201,202,203,204])
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= okT
|
||||
(pairT
|
||||
(arborixHeaderT 2)
|
||||
(arboricxHeaderT 2)
|
||||
(ofList
|
||||
[ sectionRecordT manifestSectionIdBytes 152 3
|
||||
, sectionRecordT nodesSectionIdBytes 155 4
|
||||
]))
|
||||
(bytesT [101,102,103,201,202,203,204])
|
||||
|
||||
, testCase "readArborixContainer: truncated directory returns EOF" $ do
|
||||
let input = "readArborixContainer " ++ bytesExpr (arborixHeaderBytes 1 ++ [0,0])
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
, testCase "readArboricxContainer: truncated directory returns EOF" $ do
|
||||
let input = "readArboricxContainer " ++ bytesExpr (arboricxHeaderBytes 1 ++ [0,0])
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= errT eofT (bytesT [0,0])
|
||||
|
||||
, testCase "readArborixContainer: rejects unsupported major version" $ do
|
||||
let badHeader = [65,82,66,79,82,73,88,0] ++ u16 2 ++ u16 0 ++ u32 0 ++ u64 0 ++ u64 32
|
||||
input = "readArborixContainer " ++ bytesExpr badHeader
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
, testCase "readArboricxContainer: rejects unsupported major version" $ do
|
||||
let badHeader = [65,82,66,79,82,73,67,88] ++ u16 2 ++ u16 0 ++ u32 0 ++ u64 0 ++ u64 32
|
||||
input = "readArboricxContainer " ++ bytesExpr badHeader
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= errT unsupportedVersionT (bytesT [])
|
||||
|
||||
, testCase "readArborixContainer: rejects unsupported minor version" $ do
|
||||
let badHeader = [65,82,66,79,82,73,88,0] ++ u16 1 ++ u16 1 ++ u32 0 ++ u64 0 ++ u64 32
|
||||
input = "readArborixContainer " ++ bytesExpr badHeader
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
, testCase "readArboricxContainer: rejects unsupported minor version" $ do
|
||||
let badHeader = [65,82,66,79,82,73,67,88] ++ u16 1 ++ u16 1 ++ u32 0 ++ u64 0 ++ u64 32
|
||||
input = "readArboricxContainer " ++ bytesExpr badHeader
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= errT unsupportedVersionT (bytesT [])
|
||||
|
||||
, testCase "readArborixContainer: rejects duplicate section ids" $ do
|
||||
let input = "readArborixContainer " ++ bytesExpr (arborixHeaderBytes 2 ++ manifestEntryBytes 152 1 ++ manifestEntryBytes 153 1 ++ [9])
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
, testCase "readArboricxContainer: rejects duplicate section ids" $ do
|
||||
let input = "readArboricxContainer " ++ bytesExpr (arboricxHeaderBytes 2 ++ manifestEntryBytes 152 1 ++ manifestEntryBytes 153 1 ++ [9])
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= errT duplicateSectionT (bytesT [9])
|
||||
|
||||
, testCase "extractSectionBytes: uses raw offset and length fields" $ do
|
||||
let input = "extractSectionBytes " ++ sectionRecordExpr nodesSectionIdBytes 3 4 ++ " " ++ bytesExpr [10,11,12,13,14,15,16,17]
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= bytesT [13,14,15,16]
|
||||
|
||||
, testCase "lookupSectionBytes: finds section and extracts raw bytes" $ do
|
||||
let input = "lookupSectionBytes " ++ bytesExpr nodesSectionIdBytes ++ " [" ++ sectionRecordExpr manifestSectionIdBytes 1 2 ++ " " ++ sectionRecordExpr nodesSectionIdBytes 4 3 ++ "] " ++ bytesExpr [10,11,12,13,14,15,16,17]
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= justT (bytesT [14,15,16])
|
||||
|
||||
, testCase "lookupSectionBytes: missing section returns nothing" $ do
|
||||
let input = "lookupSectionBytes " ++ bytesExpr [0,0,0,3] ++ " [" ++ sectionRecordExpr manifestSectionIdBytes 1 2 ++ " " ++ sectionRecordExpr nodesSectionIdBytes 4 3 ++ "] " ++ bytesExpr [10,11,12,13,14,15,16,17]
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= nothingT
|
||||
|
||||
, testCase "extractSectionBytesResult: rejects out-of-bounds section" $ do
|
||||
let input = "extractSectionBytesResult " ++ sectionRecordExpr nodesSectionIdBytes 6 4 ++ " " ++ bytesExpr [10,11,12,13,14,15,16,17] ++ " []"
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= errT eofT (bytesT [])
|
||||
|
||||
, testCase "readArborixSectionBytes: extracts requested section from container" $ do
|
||||
let input = "readArborixSectionBytes " ++ bytesExpr nodesSectionIdBytes ++ " " ++ bytesExpr (simpleContainerBytes [101,102,103] [201,202,203,204])
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
, testCase "readArboricxSectionBytes: extracts requested section from container" $ do
|
||||
let input = "readArboricxSectionBytes " ++ bytesExpr nodesSectionIdBytes ++ " " ++ bytesExpr (simpleContainerBytes [101,102,103] [201,202,203,204])
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= okT (bytesT [201,202,203,204]) (bytesT [101,102,103,201,202,203,204])
|
||||
|
||||
, testCase "readArborixSectionBytes: missing section returns missing-section err" $ do
|
||||
let input = "readArborixSectionBytes " ++ bytesExpr nodesSectionIdBytes ++ " " ++ bytesExpr (singleSectionContainerBytes manifestSectionIdBytes [101,102,103])
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
, testCase "readArboricxSectionBytes: missing section returns missing-section err" $ do
|
||||
let input = "readArboricxSectionBytes " ++ bytesExpr nodesSectionIdBytes ++ " " ++ bytesExpr (singleSectionContainerBytes manifestSectionIdBytes [101,102,103])
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= errT missingSectionT (bytesT [101,102,103])
|
||||
|
||||
, testCase "readArborixRequiredSections: extracts manifest and nodes bytes" $ do
|
||||
let input = "readArborixRequiredSections " ++ bytesExpr (simpleContainerBytes [101,102,103] [201,202,203,204])
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
, testCase "readArboricxRequiredSections: extracts manifest and nodes bytes" $ do
|
||||
let input = "readArboricxRequiredSections " ++ bytesExpr (simpleContainerBytes [101,102,103] [201,202,203,204])
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= okT
|
||||
(pairT (bytesT [101,102,103]) (bytesT [201,202,203,204]))
|
||||
(bytesT [101,102,103,201,202,203,204])
|
||||
|
||||
, testCase "readArborixRequiredSections: missing nodes section returns missing-section err" $ do
|
||||
let input = "readArborixRequiredSections " ++ bytesExpr (singleSectionContainerBytes manifestSectionIdBytes [101,102,103])
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
, testCase "readArboricxRequiredSections: missing nodes section returns missing-section err" $ do
|
||||
let input = "readArboricxRequiredSections " ++ bytesExpr (singleSectionContainerBytes manifestSectionIdBytes [101,102,103])
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= errT missingSectionT (bytesT [101,102,103])
|
||||
|
||||
, testCase "readArborixRequiredSections: out-of-bounds section returns EOF" $ do
|
||||
, testCase "readArboricxRequiredSections: out-of-bounds section returns EOF" $ do
|
||||
let manifestBytes = [101,102,103]
|
||||
nodesBytes = [201,202,203,204]
|
||||
badContainer = arborixHeaderBytes 2 ++ manifestEntryBytes 152 3 ++ nodesEntryBytes 155 9 ++ manifestBytes ++ nodesBytes
|
||||
input = "readArborixRequiredSections " ++ bytesExpr badContainer
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
badContainer = arboricxHeaderBytes 2 ++ manifestEntryBytes 152 3 ++ nodesEntryBytes 155 9 ++ manifestBytes ++ nodesBytes
|
||||
input = "readArboricxRequiredSections " ++ bytesExpr badContainer
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= errT eofT (bytesT [101,102,103,201,202,203,204])
|
||||
|
||||
-- ------------------------------------------------------------------------
|
||||
-- Arborix raw nodes section parsing
|
||||
-- Arboricx raw nodes section parsing
|
||||
-- ------------------------------------------------------------------------
|
||||
|
||||
, testCase "readNodeRecord: parses hash length and raw payload" $ do
|
||||
let input = "readNodeRecord [(1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) (15) (16) (17) (18) (19) (20) (21) (22) (23) (24) (25) (26) (27) (28) (29) (30) (31) (32) (0) (0) (0) (3) (101) (102) (103) (9)]"
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= okT
|
||||
(pairT (bytesT [1..32])
|
||||
@@ -1913,13 +1907,13 @@ binaryReaderTests = testGroup "Binary Reader Tests"
|
||||
|
||||
, testCase "readNodeRecord: truncated payload returns EOF preserving unread payload" $ do
|
||||
let input = "readNodeRecord [(1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) (15) (16) (17) (18) (19) (20) (21) (22) (23) (24) (25) (26) (27) (28) (29) (30) (31) (32) (0) (0) (0) (3) (101) (102)]"
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= errT eofT (bytesT [101,102])
|
||||
|
||||
, testCase "readNodesSection: parses node count and records" $ do
|
||||
let input = "readNodesSection [(0) (0) (0) (0) (0) (0) (0) (1) (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) (15) (16) (17) (18) (19) (20) (21) (22) (23) (24) (25) (26) (27) (28) (29) (30) (31) (32) (0) (0) (0) (1) (0) (9)]"
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= okT
|
||||
(pairT (bytesT [0,0,0,0,0,0,0,1])
|
||||
@@ -1932,37 +1926,37 @@ binaryReaderTests = testGroup "Binary Reader Tests"
|
||||
|
||||
, testCase "readNodesSectionComplete: rejects trailing bytes inside nodes section" $ do
|
||||
let input = "readNodesSectionComplete [(0) (0) (0) (0) (0) (0) (0) (0) (9)]"
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= errT unexpectedBytesT (bytesT [9])
|
||||
|
||||
, testCase "readNodesSection: rejects duplicate node hashes" $ do
|
||||
let input = "readNodesSection [(0) (0) (0) (0) (0) (0) (0) (2) (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) (15) (16) (17) (18) (19) (20) (21) (22) (23) (24) (25) (26) (27) (28) (29) (30) (31) (32) (0) (0) (0) (1) (0) (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) (15) (16) (17) (18) (19) (20) (21) (22) (23) (24) (25) (26) (27) (28) (29) (30) (31) (32) (0) (0) (0) (1) (0) (9)]"
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= errT duplicateNodeT (bytesT [9])
|
||||
|
||||
, testCase "nodePayloadValid?: accepts leaf stem and fork payload shapes" $ do
|
||||
let input = "[(nodePayloadValid? [(0)]) (nodePayloadValid? [(1) (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) (15) (16) (17) (18) (19) (20) (21) (22) (23) (24) (25) (26) (27) (28) (29) (30) (31) (32)]) (nodePayloadValid? [(2) (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) (15) (16) (17) (18) (19) (20) (21) (22) (23) (24) (25) (26) (27) (28) (29) (30) (31) (32) (33) (34) (35) (36) (37) (38) (39) (40) (41) (42) (43) (44) (45) (46) (47) (48) (49) (50) (51) (52) (53) (54) (55) (56) (57) (58) (59) (60) (61) (62) (63) (64)])]"
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= ofList [trueT, trueT, trueT]
|
||||
|
||||
, testCase "nodePayloadValid?: rejects invalid payload shapes" $ do
|
||||
let input = "[(nodePayloadValid? []) (nodePayloadValid? [(9)]) (nodePayloadValid? [(1) (1)]) (nodePayloadValid? [(2) (1) (2)])]"
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= ofList [falseT, falseT, falseT, falseT]
|
||||
|
||||
, testCase "node payload child accessors expose raw hashes" $ do
|
||||
let input = "[(nodePayloadStemChildHash [(1) (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) (15) (16) (17) (18) (19) (20) (21) (22) (23) (24) (25) (26) (27) (28) (29) (30) (31) (32)]) (nodePayloadForkLeftHash [(2) (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) (15) (16) (17) (18) (19) (20) (21) (22) (23) (24) (25) (26) (27) (28) (29) (30) (31) (32) (33) (34) (35) (36) (37) (38) (39) (40) (41) (42) (43) (44) (45) (46) (47) (48) (49) (50) (51) (52) (53) (54) (55) (56) (57) (58) (59) (60) (61) (62) (63) (64)]) (nodePayloadForkRightHash [(2) (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) (15) (16) (17) (18) (19) (20) (21) (22) (23) (24) (25) (26) (27) (28) (29) (30) (31) (32) (33) (34) (35) (36) (37) (38) (39) (40) (41) (42) (43) (44) (45) (46) (47) (48) (49) (50) (51) (52) (53) (54) (55) (56) (57) (58) (59) (60) (61) (62) (63) (64)])]"
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= ofList [bytesT [1..32], bytesT [1..32], bytesT [33..64]]
|
||||
|
||||
, testCase "lookupNodeRecord: finds record by raw node hash" $ do
|
||||
let input = "lookupNodeRecord [(33) (34) (35) (36) (37) (38) (39) (40) (41) (42) (43) (44) (45) (46) (47) (48) (49) (50) (51) (52) (53) (54) (55) (56) (57) (58) (59) (60) (61) (62) (63) (64)] [(pair [(1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) (15) (16) (17) (18) (19) (20) (21) (22) (23) (24) (25) (26) (27) (28) (29) (30) (31) (32)] (pair [(0) (0) (0) (1)] [(0)])) (pair [(33) (34) (35) (36) (37) (38) (39) (40) (41) (42) (43) (44) (45) (46) (47) (48) (49) (50) (51) (52) (53) (54) (55) (56) (57) (58) (59) (60) (61) (62) (63) (64)] (pair [(0) (0) (0) (1)] [(0)]))]"
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= justT
|
||||
(pairT (bytesT [33..64])
|
||||
@@ -1971,7 +1965,7 @@ binaryReaderTests = testGroup "Binary Reader Tests"
|
||||
|
||||
, testCase "nodeRecordChildHashes: extracts stem and fork references" $ do
|
||||
let input = "[(nodeRecordChildHashes (pair [(1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) (15) (16) (17) (18) (19) (20) (21) (22) (23) (24) (25) (26) (27) (28) (29) (30) (31) (32)] (pair [(0) (0) (0) (33)] [(1) (33) (34) (35) (36) (37) (38) (39) (40) (41) (42) (43) (44) (45) (46) (47) (48) (49) (50) (51) (52) (53) (54) (55) (56) (57) (58) (59) (60) (61) (62) (63) (64)]))) (nodeRecordChildHashes (pair [(1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) (15) (16) (17) (18) (19) (20) (21) (22) (23) (24) (25) (26) (27) (28) (29) (30) (31) (32)] (pair [(0) (0) (0) (65)] [(2) (33) (34) (35) (36) (37) (38) (39) (40) (41) (42) (43) (44) (45) (46) (47) (48) (49) (50) (51) (52) (53) (54) (55) (56) (57) (58) (59) (60) (61) (62) (63) (64) (65) (66) (67) (68) (69) (70) (71) (72) (73) (74) (75) (76) (77) (78) (79) (80) (81) (82) (83) (84) (85) (86) (87) (88) (89) (90) (91) (92) (93) (94) (95) (96)])))]"
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= ofList
|
||||
[ ofList [bytesT [33..64]]
|
||||
@@ -1980,20 +1974,20 @@ binaryReaderTests = testGroup "Binary Reader Tests"
|
||||
|
||||
, testCase "readNodesSection: rejects invalid node payload shape" $ do
|
||||
let input = "readNodesSection [(0) (0) (0) (0) (0) (0) (0) (1) (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) (15) (16) (17) (18) (19) (20) (21) (22) (23) (24) (25) (26) (27) (28) (29) (30) (31) (32) (0) (0) (0) (1) (9)]"
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= errT invalidNodePayloadT (bytesT [])
|
||||
|
||||
, testCase "readNodesSection: rejects missing child node" $ do
|
||||
let input = "readNodesSection [(0) (0) (0) (0) (0) (0) (0) (1) (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) (15) (16) (17) (18) (19) (20) (21) (22) (23) (24) (25) (26) (27) (28) (29) (30) (31) (32) (0) (0) (0) (33) (1) (33) (34) (35) (36) (37) (38) (39) (40) (41) (42) (43) (44) (45) (46) (47) (48) (49) (50) (51) (52) (53) (54) (55) (56) (57) (58) (59) (60) (61) (62) (63) (64) (9)]"
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= errT missingNodeT (bytesT [9])
|
||||
|
||||
, testCase "readArborixNodesSection: extracts and parses raw nodes section" $ do
|
||||
, testCase "readArboricxNodesSection: extracts and parses raw nodes section" $ do
|
||||
let nodesBytes = u64 1 ++ [1..32] ++ u32 1 ++ [0]
|
||||
input = "readArborixNodesSection " ++ bytesExpr (simpleContainerBytes [101,102,103] nodesBytes)
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
input = "readArboricxNodesSection " ++ bytesExpr (simpleContainerBytes [101,102,103] nodesBytes)
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= okT
|
||||
(pairT (bytesT [0,0,0,0,0,0,0,1])
|
||||
@@ -2005,186 +1999,186 @@ binaryReaderTests = testGroup "Binary Reader Tests"
|
||||
(bytesT ([101,102,103] ++ nodesBytes))
|
||||
|
||||
-- ------------------------------------------------------------------------
|
||||
-- Arborix node DAG reconstruction
|
||||
-- Arboricx node DAG reconstruction
|
||||
-- ------------------------------------------------------------------------
|
||||
|
||||
, testCase "nodeHashToTree: reconstructs leaf node" $ do
|
||||
let input = "nodeHashToTree [(1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) (15) (16) (17) (18) (19) (20) (21) (22) (23) (24) (25) (26) (27) (28) (29) (30) (31) (32)] [(pair [(1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) (15) (16) (17) (18) (19) (20) (21) (22) (23) (24) (25) (26) (27) (28) (29) (30) (31) (32)] (pair [(0) (0) (0) (1)] [(0)]))]"
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= okT Leaf Leaf
|
||||
|
||||
, testCase "nodeHashToTree: reconstructs stem node" $ do
|
||||
let input = "nodeHashToTree [(33) (34) (35) (36) (37) (38) (39) (40) (41) (42) (43) (44) (45) (46) (47) (48) (49) (50) (51) (52) (53) (54) (55) (56) (57) (58) (59) (60) (61) (62) (63) (64)] [(pair [(1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) (15) (16) (17) (18) (19) (20) (21) (22) (23) (24) (25) (26) (27) (28) (29) (30) (31) (32)] (pair [(0) (0) (0) (1)] [(0)])) (pair [(33) (34) (35) (36) (37) (38) (39) (40) (41) (42) (43) (44) (45) (46) (47) (48) (49) (50) (51) (52) (53) (54) (55) (56) (57) (58) (59) (60) (61) (62) (63) (64)] (pair [(0) (0) (0) (33)] [(1) (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) (15) (16) (17) (18) (19) (20) (21) (22) (23) (24) (25) (26) (27) (28) (29) (30) (31) (32)]))]"
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= okT (Stem Leaf) Leaf
|
||||
|
||||
, testCase "nodeHashToTree: reconstructs fork node" $ do
|
||||
let input = "nodeHashToTree [(65) (66) (67) (68) (69) (70) (71) (72) (73) (74) (75) (76) (77) (78) (79) (80) (81) (82) (83) (84) (85) (86) (87) (88) (89) (90) (91) (92) (93) (94) (95) (96)] [(pair [(1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) (15) (16) (17) (18) (19) (20) (21) (22) (23) (24) (25) (26) (27) (28) (29) (30) (31) (32)] (pair [(0) (0) (0) (1)] [(0)])) (pair [(33) (34) (35) (36) (37) (38) (39) (40) (41) (42) (43) (44) (45) (46) (47) (48) (49) (50) (51) (52) (53) (54) (55) (56) (57) (58) (59) (60) (61) (62) (63) (64)] (pair [(0) (0) (0) (1)] [(0)])) (pair [(65) (66) (67) (68) (69) (70) (71) (72) (73) (74) (75) (76) (77) (78) (79) (80) (81) (82) (83) (84) (85) (86) (87) (88) (89) (90) (91) (92) (93) (94) (95) (96)] (pair [(0) (0) (0) (65)] [(2) (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) (15) (16) (17) (18) (19) (20) (21) (22) (23) (24) (25) (26) (27) (28) (29) (30) (31) (32) (33) (34) (35) (36) (37) (38) (39) (40) (41) (42) (43) (44) (45) (46) (47) (48) (49) (50) (51) (52) (53) (54) (55) (56) (57) (58) (59) (60) (61) (62) (63) (64)]))]"
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= okT (Fork Leaf Leaf) Leaf
|
||||
|
||||
, testCase "readArborixTreeFromHash: reconstructs tree from bundle bytes" $ do
|
||||
, testCase "readArboricxTreeFromHash: reconstructs tree from bundle bytes" $ do
|
||||
let nodesBytes = u64 1 ++ [1..32] ++ u32 1 ++ [0]
|
||||
input = "readArborixTreeFromHash " ++ bytesExpr [1..32] ++ " " ++ bytesExpr (simpleContainerBytes [101,102,103] nodesBytes)
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
input = "readArboricxTreeFromHash " ++ bytesExpr [1..32] ++ " " ++ bytesExpr (simpleContainerBytes [101,102,103] nodesBytes)
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= okT Leaf (bytesT ([101,102,103] ++ nodesBytes))
|
||||
|
||||
, testCase "readArborixExecutableFromHash: alias reconstructs tree" $ do
|
||||
, testCase "readArboricxExecutableFromHash: alias reconstructs tree" $ do
|
||||
let nodesBytes = u64 1 ++ [1..32] ++ u32 1 ++ [0]
|
||||
input = "readArborixExecutableFromHash " ++ bytesExpr [1..32] ++ " " ++ bytesExpr (simpleContainerBytes [101,102,103] nodesBytes)
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
input = "readArboricxExecutableFromHash " ++ bytesExpr [1..32] ++ " " ++ bytesExpr (simpleContainerBytes [101,102,103] nodesBytes)
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= okT Leaf (bytesT ([101,102,103] ++ nodesBytes))
|
||||
|
||||
, testCase "readArborixNodesSection: reads id fixture bundle" $ do
|
||||
fixtureBytes <- BS.readFile "test/fixtures/id.arborix"
|
||||
, testCase "readArboricxNodesSection: reads id fixture bundle" $ do
|
||||
fixtureBytes <- BS.readFile "test/fixtures/id.arboricx"
|
||||
case decodeBundle fixtureBytes of
|
||||
Left err -> assertFailure $ "decodeBundle failed: " ++ err
|
||||
Right _ -> do
|
||||
let input = "matchResult (code rest : code) (nodes rest : 0) (readArborixNodesSection "
|
||||
let input = "matchResult (code rest : code) (nodes rest : 0) (readArboricxNodesSection "
|
||||
++ bytesExpr (map toInteger $ BS.unpack fixtureBytes)
|
||||
++ ")"
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= ofNumber 0
|
||||
|
||||
, testCase "readArborixNodesSection: reads notQ fixture bundle" $ do
|
||||
fixtureBytes <- BS.readFile "test/fixtures/notQ.arborix"
|
||||
, testCase "readArboricxNodesSection: reads notQ fixture bundle" $ do
|
||||
fixtureBytes <- BS.readFile "test/fixtures/notQ.arboricx"
|
||||
case decodeBundle fixtureBytes of
|
||||
Left err -> assertFailure $ "decodeBundle failed: " ++ err
|
||||
Right _ -> do
|
||||
let input = "matchResult (code rest : code) (nodes rest : 0) (readArborixNodesSection "
|
||||
let input = "matchResult (code rest : code) (nodes rest : 0) (readArboricxNodesSection "
|
||||
++ bytesExpr (map toInteger $ BS.unpack fixtureBytes)
|
||||
++ ")"
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= ofNumber 0
|
||||
|
||||
, testCase "readArborixNodesSection: reads map fixture bundle" $ do
|
||||
fixtureBytes <- BS.readFile "test/fixtures/map.arborix"
|
||||
, testCase "readArboricxNodesSection: reads map fixture bundle" $ do
|
||||
fixtureBytes <- BS.readFile "test/fixtures/map.arboricx"
|
||||
case decodeBundle fixtureBytes of
|
||||
Left err -> assertFailure $ "decodeBundle failed: " ++ err
|
||||
Right _ -> do
|
||||
let input = "matchResult (code rest : code) (nodes rest : 0) (readArborixNodesSection "
|
||||
let input = "matchResult (code rest : code) (nodes rest : 0) (readArboricxNodesSection "
|
||||
++ bytesExpr (map toInteger $ BS.unpack fixtureBytes)
|
||||
++ ")"
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= ofNumber 0
|
||||
|
||||
, testCase "readArborixExecutableFromHash: reconstructs id fixture root" $ do
|
||||
fixtureBytes <- BS.readFile "test/fixtures/id.arborix"
|
||||
, testCase "readArboricxExecutableFromHash: reconstructs id fixture root" $ do
|
||||
fixtureBytes <- BS.readFile "test/fixtures/id.arboricx"
|
||||
case decodeBundle fixtureBytes of
|
||||
Left err -> assertFailure $ "decodeBundle failed: " ++ err
|
||||
Right bundle -> case bundleRoots bundle of
|
||||
[] -> assertFailure "fixture has no roots"
|
||||
(rootHash:_) -> do
|
||||
let input = "matchResult (code rest : code) (tree rest : 0) (readArborixExecutableFromHash "
|
||||
let input = "matchResult (code rest : code) (tree rest : 0) (readArboricxExecutableFromHash "
|
||||
++ bytesExpr (hexTextBytes rootHash)
|
||||
++ " "
|
||||
++ bytesExpr (map toInteger $ BS.unpack fixtureBytes)
|
||||
++ ")"
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= ofNumber 0
|
||||
|
||||
, testCase "readArborixExecutableFromHash: reconstructs notQ fixture root" $ do
|
||||
fixtureBytes <- BS.readFile "test/fixtures/notQ.arborix"
|
||||
, testCase "readArboricxExecutableFromHash: reconstructs notQ fixture root" $ do
|
||||
fixtureBytes <- BS.readFile "test/fixtures/notQ.arboricx"
|
||||
case decodeBundle fixtureBytes of
|
||||
Left err -> assertFailure $ "decodeBundle failed: " ++ err
|
||||
Right bundle -> case bundleRoots bundle of
|
||||
[] -> assertFailure "fixture has no roots"
|
||||
(rootHash:_) -> do
|
||||
let input = "matchResult (code rest : code) (tree rest : 0) (readArborixExecutableFromHash "
|
||||
let input = "matchResult (code rest : code) (tree rest : 0) (readArboricxExecutableFromHash "
|
||||
++ bytesExpr (hexTextBytes rootHash)
|
||||
++ " "
|
||||
++ bytesExpr (map toInteger $ BS.unpack fixtureBytes)
|
||||
++ ")"
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= ofNumber 0
|
||||
|
||||
, testCase "readArborixExecutableFromHash: reconstructs map fixture root" $ do
|
||||
fixtureBytes <- BS.readFile "test/fixtures/map.arborix"
|
||||
, testCase "readArboricxExecutableFromHash: reconstructs map fixture root" $ do
|
||||
fixtureBytes <- BS.readFile "test/fixtures/map.arboricx"
|
||||
case decodeBundle fixtureBytes of
|
||||
Left err -> assertFailure $ "decodeBundle failed: " ++ err
|
||||
Right bundle -> case bundleRoots bundle of
|
||||
[] -> assertFailure "fixture has no roots"
|
||||
(rootHash:_) -> do
|
||||
let input = "matchResult (code rest : code) (tree rest : 0) (readArborixExecutableFromHash "
|
||||
let input = "matchResult (code rest : code) (tree rest : 0) (readArboricxExecutableFromHash "
|
||||
++ bytesExpr (hexTextBytes rootHash)
|
||||
++ " "
|
||||
++ bytesExpr (map toInteger $ BS.unpack fixtureBytes)
|
||||
++ ")"
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= ofNumber 0
|
||||
|
||||
, testCase "readArborixExecutableFromHash: executes id fixture root" $ do
|
||||
fixtureBytes <- BS.readFile "test/fixtures/id.arborix"
|
||||
, testCase "readArboricxExecutableFromHash: executes id fixture root" $ do
|
||||
fixtureBytes <- BS.readFile "test/fixtures/id.arboricx"
|
||||
case decodeBundle fixtureBytes of
|
||||
Left err -> assertFailure $ "decodeBundle failed: " ++ err
|
||||
Right bundle -> case bundleRoots bundle of
|
||||
[] -> assertFailure "fixture has no roots"
|
||||
(rootHash:_) -> do
|
||||
let input = "matchResult (code rest : code) (tree rest : tree 42) (readArborixExecutableFromHash "
|
||||
let input = "matchResult (code rest : code) (tree rest : tree 42) (readArboricxExecutableFromHash "
|
||||
++ bytesExpr (hexTextBytes rootHash)
|
||||
++ " "
|
||||
++ bytesExpr (map toInteger $ BS.unpack fixtureBytes)
|
||||
++ ")"
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= ofNumber 42
|
||||
|
||||
, testCase "readArborixExecutableFromHash: executes notQ fixture on true" $ do
|
||||
fixtureBytes <- BS.readFile "test/fixtures/notQ.arborix"
|
||||
, testCase "readArboricxExecutableFromHash: executes notQ fixture on true" $ do
|
||||
fixtureBytes <- BS.readFile "test/fixtures/notQ.arboricx"
|
||||
case decodeBundle fixtureBytes of
|
||||
Left err -> assertFailure $ "decodeBundle failed: " ++ err
|
||||
Right bundle -> case bundleRoots bundle of
|
||||
[] -> assertFailure "fixture has no roots"
|
||||
(rootHash:_) -> do
|
||||
let input = "matchResult (code rest : code) (tree rest : tree true) (readArborixExecutableFromHash "
|
||||
let input = "matchResult (code rest : code) (tree rest : tree true) (readArboricxExecutableFromHash "
|
||||
++ bytesExpr (hexTextBytes rootHash)
|
||||
++ " "
|
||||
++ bytesExpr (map toInteger $ BS.unpack fixtureBytes)
|
||||
++ ")"
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= falseT
|
||||
|
||||
, testCase "readArborixExecutableFromHash: executes notQ fixture on false" $ do
|
||||
fixtureBytes <- BS.readFile "test/fixtures/notQ.arborix"
|
||||
, testCase "readArboricxExecutableFromHash: executes notQ fixture on false" $ do
|
||||
fixtureBytes <- BS.readFile "test/fixtures/notQ.arboricx"
|
||||
case decodeBundle fixtureBytes of
|
||||
Left err -> assertFailure $ "decodeBundle failed: " ++ err
|
||||
Right bundle -> case bundleRoots bundle of
|
||||
[] -> assertFailure "fixture has no roots"
|
||||
(rootHash:_) -> do
|
||||
let input = "matchResult (code rest : code) (tree rest : tree false) (readArborixExecutableFromHash "
|
||||
let input = "matchResult (code rest : code) (tree rest : tree false) (readArboricxExecutableFromHash "
|
||||
++ bytesExpr (hexTextBytes rootHash)
|
||||
++ " "
|
||||
++ bytesExpr (map toInteger $ BS.unpack fixtureBytes)
|
||||
++ ")"
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= trueT
|
||||
|
||||
, testCase "readArborixExecutableFromHash: executes map fixture root" $ do
|
||||
fixtureBytes <- BS.readFile "test/fixtures/map.arborix"
|
||||
, testCase "readArboricxExecutableFromHash: executes map fixture root" $ do
|
||||
fixtureBytes <- BS.readFile "test/fixtures/map.arboricx"
|
||||
case decodeBundle fixtureBytes of
|
||||
Left err -> assertFailure $ "decodeBundle failed: " ++ err
|
||||
Right bundle -> case bundleRoots bundle of
|
||||
[] -> assertFailure "fixture has no roots"
|
||||
(rootHash:_) -> do
|
||||
let input = "matchResult (code rest : code) (tree rest : head (tail (tree (a : (t t t)) [(t) (t) (t)]))) (readArborixExecutableFromHash "
|
||||
let input = "matchResult (code rest : code) (tree rest : head (tail (tree (a : (t t t)) [(t) (t) (t)]))) (readArboricxExecutableFromHash "
|
||||
++ bytesExpr (hexTextBytes rootHash)
|
||||
++ " "
|
||||
++ bytesExpr (map toInteger $ BS.unpack fixtureBytes)
|
||||
++ ")"
|
||||
library <- evaluateFile "./lib/arborix.tri"
|
||||
library <- evaluateFile "./lib/arboricx.tri"
|
||||
let env = evalTricu library (parseTricu input)
|
||||
result env @?= Fork Leaf Leaf
|
||||
]
|
||||
|
||||
BIN
test/fixtures/false.arboricx
vendored
Normal file
BIN
test/fixtures/false.arboricx
vendored
Normal file
Binary file not shown.
BIN
test/fixtures/false.arborix
vendored
BIN
test/fixtures/false.arborix
vendored
Binary file not shown.
BIN
test/fixtures/id.arboricx
vendored
Normal file
BIN
test/fixtures/id.arboricx
vendored
Normal file
Binary file not shown.
BIN
test/fixtures/id.arborix
vendored
BIN
test/fixtures/id.arborix
vendored
Binary file not shown.
BIN
test/fixtures/map.arboricx
vendored
Normal file
BIN
test/fixtures/map.arboricx
vendored
Normal file
Binary file not shown.
BIN
test/fixtures/map.arborix
vendored
BIN
test/fixtures/map.arborix
vendored
Binary file not shown.
BIN
test/fixtures/notQ.arboricx
vendored
Normal file
BIN
test/fixtures/notQ.arboricx
vendored
Normal file
Binary file not shown.
BIN
test/fixtures/notQ.arborix
vendored
BIN
test/fixtures/notQ.arborix
vendored
Binary file not shown.
BIN
test/fixtures/true.arboricx
vendored
Normal file
BIN
test/fixtures/true.arboricx
vendored
Normal file
Binary file not shown.
BIN
test/fixtures/true.arborix
vendored
BIN
test/fixtures/true.arborix
vendored
Binary file not shown.
Reference in New Issue
Block a user