net-spider-0.4.3.0: test/NetSpider/SeqIDSpec.hs
{-# LANGUAGE OverloadedStrings #-}
module NetSpider.SeqIDSpec (main,spec) where
import Data.Text (Text)
import Test.Hspec
import NetSpider.SeqID
( newSeqIDMaker, convertNodeID, convertGraph, originalIDFor
)
import NetSpider.Snapshot.Internal (SnapshotNode(..), SnapshotLink(..))
import NetSpider.Snapshot (nodeId, linkNodeTuple)
import NetSpider.Timestamp (fromEpochMillisecond)
main :: IO ()
main = hspec spec
spec :: Spec
spec = describe "SeqIDMaker" $ do
specify "first ID" $ do
let m = newSeqIDMaker (0 :: Int)
(got_m, got) = convertNodeID m ("hoge" :: Text)
got `shouldBe` 0
(snd $ convertNodeID got_m "hoge") `shouldBe` 0
originalIDFor got_m 0 `shouldBe` Just "hoge"
originalIDFor got_m 1 `shouldBe` Nothing
originalIDFor got_m 2 `shouldBe` Nothing
specify "second ID" $ do
let m = newSeqIDMaker (0 :: Int)
(m1, _) = convertNodeID m ("bar" :: Text)
(got_m, got) = convertNodeID m1 ("foo" :: Text)
got `shouldBe` 1
(snd $ convertNodeID got_m "bar") `shouldBe` 0
(snd $ convertNodeID got_m "foo") `shouldBe` 1
originalIDFor got_m 0 `shouldBe` Just "bar"
originalIDFor got_m 1 `shouldBe` Just "foo"
originalIDFor got_m 2 `shouldBe` Nothing
specify "duplicate ID" $ do
let m = newSeqIDMaker (5 :: Int)
(m1, id1) = convertNodeID m ("bar" :: Text)
(got_m, id2) = convertNodeID m1 ("bar" :: Text)
id1 `shouldBe` 5
id2 `shouldBe` 5
originalIDFor got_m 0 `shouldBe` Nothing
originalIDFor got_m 5 `shouldBe` Just "bar"
specify "convertGraph" $ do
let input = (nodes, links)
mkNode :: Text -> SnapshotNode Text ()
mkNode nid = SnapshotNode
{ _nodeId = nid,
_isOnBoundary = False,
_nodeTimestamp = Just $ fromEpochMillisecond 100,
_nodeAttributes = Just ()
}
mkLink :: Text -> Text -> SnapshotLink Text ()
mkLink source dest = SnapshotLink
{ _sourceNode = source,
_destinationNode = dest,
_isDirected = True,
_linkTimestamp = fromEpochMillisecond 100,
_linkAttributes = ()
}
nodes = [ mkNode "n1",
mkNode "n2",
mkNode "n3",
mkNode "n4",
mkNode "n5"
]
links = [ mkLink "n1" "n3",
mkLink "n4" "n2",
mkLink "n3" "n5",
mkLink "n5" "n2"
]
(got_m, (got_nodes, got_links)) = convertGraph (newSeqIDMaker (1 :: Int)) input
map nodeId got_nodes `shouldBe` [1,2,3,4,5]
map linkNodeTuple got_links `shouldBe`
[ (1, 3), (4, 2), (3, 5), (5, 2)
]
map (originalIDFor got_m) [1 .. 6] `shouldBe`
[ Just "n1", Just "n2", Just "n3", Just "n4", Just "n5", Nothing
]