packages feed

hw-ip-2.0.0.0: test/HaskellWorks/Data/Network/IpBlockSpec.hs

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeApplications  #-}

module HaskellWorks.Data.Network.IpBlockSpec (spec) where

import HaskellWorks.Data.Network.Ip.Validity
import HaskellWorks.Hspec.Hedgehog
import Hedgehog
import Test.Hspec

import qualified HaskellWorks.Data.Network.Ip.Ip   as V
import qualified HaskellWorks.Data.Network.Ip.Ipv6 as V6

{-# ANN module ("HLint: ignore Redundant do"  :: String) #-}

spec :: Spec
spec = describe "HaskellWorks.Data.Network.IpSpec" $ do
  describe "IpBlock" $ do
    it "should implement show" $ requireTest $ do
      show (V.IpBlockV6 @Unaligned (V6.IpBlock (V6.IpAddress (3, 3, 3, 0)) (V6.IpNetMask 96))) === "0:3:0:3:0:3::/96"

    it "should implement read" $ requireTest $ do
      read "1:2:3:4::/127"  === V.IpBlockV6 @Unaligned (V6.IpBlock (V6.IpAddress (0x10002    , 0x30004 , 0, 0)) (V6.IpNetMask 127))
      read "1234::/16"      === V.IpBlockV6 @Unaligned (V6.IpBlock (V6.IpAddress (0x12340000 , 0       , 0, 0)) (V6.IpNetMask  16))
      read "12:34::/32"     === V.IpBlockV6 @Unaligned (V6.IpBlock (V6.IpAddress (0x120034   , 0       , 0, 0)) (V6.IpNetMask  32))