hinterface-0.5.0.0: test/Foreign/Erlang/NodeDataSpec.hs
module Foreign.Erlang.NodeDataSpec ( spec ) where
import Test.Hspec
--import Test.Hspec.QuickCheck
import Test.QuickCheck
import Data.Word
import Data.List ( nub, sort )
import Data.Binary ( decode, encode )
import Foreign.Erlang.NodeData
spec :: Spec
spec = do
describe "NodeType" $ do
it "decode . encode = id" $
property $ do
a <- arbitraryBoundedEnum :: Gen NodeType
return $ (decode . encode) a `shouldBe` a
it "NormalNode encodes to 77" $
encode NormalNode `shouldBe` encode (77 :: Word8)
it "HiddenNode encodes to 72" $
encode HiddenNode `shouldBe` encode (72 :: Word8)
describe "NodeProtocol" $ do
it "decode . encode = id" $
property $ do
a <- arbitraryBoundedEnum :: Gen NodeProtocol
return $ (decode . encode) a `shouldBe` a
it "TcpIpV4 encodes to 0" $
encode TcpIpV4 `shouldBe` encode (0 :: Word8)
describe "DistributionVersion" $ do
it "decode . encode = id" $
property $ do
a <- arbitraryBoundedEnum :: Gen DistributionVersion
return $ (decode . encode) a `shouldBe` a
it "R4 encodes to 1" $
encode R4 `shouldBe` encode (1 :: Word16)
it "R5C encodes to 3" $
encode R5C `shouldBe` encode (3 :: Word16)
it "R6 encodes to 4" $
encode R6 `shouldBe` encode (4 :: Word16)
it "R6B encodes to 5" $
encode R6B `shouldBe` encode (5 :: Word16)
describe "DistributionFlags" $ do
it "decode . encode = id" $
property $ do
a <- (DistributionFlags . nub . sort) <$> listOf arbitraryBoundedEnum :: Gen DistributionFlags
return $ (decode . encode) a `shouldBe` a
it "[] encodes to 0x00000" $
encode (DistributionFlags []) `shouldBe` encode (0x00000 :: Word32)
it "[PUBLISHED] encodes to 0x00001" $
encode (DistributionFlags [ PUBLISHED ]) `shouldBe` encode (0x00001 :: Word32)
it "[ATOM_CACHE] encodes to 0x00002" $
encode (DistributionFlags [ ATOM_CACHE ]) `shouldBe` encode (0x00002 :: Word32)
it "[EXTENDED_REFERENCES] encodes to 0x00004" $
encode (DistributionFlags [ EXTENDED_REFERENCES ]) `shouldBe` encode (0x00004 :: Word32)
it "[DIST_MONITOR] encodes to 0x00008" $
encode (DistributionFlags [ DIST_MONITOR ]) `shouldBe` encode (0x00008 :: Word32)
it "[FUN_TAGS] encodes to 0x00010" $
encode (DistributionFlags [ FUN_TAGS ]) `shouldBe` encode (0x00010 :: Word32)
it "[DIST_MONITOR_NAME] encodes to 0x00020" $
encode (DistributionFlags [ DIST_MONITOR_NAME ]) `shouldBe` encode (0x00020 :: Word32)
it "[HIDDEN_ATOM_CACHE] encodes to 0x00040" $
encode (DistributionFlags [ HIDDEN_ATOM_CACHE ]) `shouldBe` encode (0x00040 :: Word32)
it "[NEW_FUN_TAGS] encodes to 0x00080" $
encode (DistributionFlags [ NEW_FUN_TAGS ]) `shouldBe` encode (0x00080 :: Word32)
it "[EXTENDED_PIDS_PORTS] encodes to 0x00100" $
encode (DistributionFlags [ EXTENDED_PIDS_PORTS ]) `shouldBe` encode (0x00100 :: Word32)
it "[EXPORT_PTR_TAG] encodes to 0x00200" $
encode (DistributionFlags [ EXPORT_PTR_TAG ]) `shouldBe` encode (0x00200 :: Word32)
it "[BIT_BINARIES] encodes to 0x00400" $
encode (DistributionFlags [ BIT_BINARIES ]) `shouldBe` encode (0x00400 :: Word32)
it "[NEW_FLOATS] encodes to 0x00800" $
encode (DistributionFlags [ NEW_FLOATS ]) `shouldBe` encode (0x00800 :: Word32)
it "[UNICODE_IO] encodes to 0x01000" $
encode (DistributionFlags [ UNICODE_IO ]) `shouldBe` encode (0x01000 :: Word32)
it "[DIST_HDR_ATOM_CACHE] encodes to 0x02000" $
encode (DistributionFlags [ DIST_HDR_ATOM_CACHE ]) `shouldBe` encode (0x02000 :: Word32)
it "[SMALL_ATOM_TAGS] encodes to 0x04000" $
encode (DistributionFlags [ SMALL_ATOM_TAGS ]) `shouldBe` encode (0x04000 :: Word32)
it "[UTF8_ATOMS] encodes to 0x10000" $
encode (DistributionFlags [ UTF8_ATOMS ]) `shouldBe` encode (0x10000 :: Word32)
it "[minBound .. maxBound] encodes to 0x17FFF" $
encode (DistributionFlags [minBound .. maxBound]) `shouldBe` encode (0x17FFF :: Word32)
it "0xFFFFFFFF decodes to [minBound .. maxBound]" $
(decode . encode) (0xFFFFFFFF :: Word32) `shouldBe`
DistributionFlags [minBound .. maxBound]