wkt-geom-0.0.2: test/Data/WkbLineSpec.hs
{-# LANGUAGE OverloadedStrings #-}
module Data.WkbLineSpec where
import qualified Data.ByteString.Builder as ByteStringBuilder
import qualified Data.ByteString.Lazy as LazyByteString
import qualified Data.Geospatial as Geospatial
import Data.Monoid ((<>))
import qualified Data.Sequence as Sequence
import Test.Hspec (Spec, describe, it, shouldBe)
import qualified Data.Wkb as Wkb
import qualified Data.SpecHelper as SpecHelper
spec :: Spec
spec = do
testWkbLineParsing
testWkbMultiLineParsing
testWkbLineParsing :: Spec
testWkbLineParsing =
describe "Test wkb line" $
it "Parse valid wkb line" $
Wkb.parseByteString exampleWkbLine `shouldBe` (Right $ Geospatial.Line $ Geospatial.GeoLine SpecHelper.lineString1)
exampleWkbLine :: LazyByteString.ByteString
exampleWkbLine =
ByteStringBuilder.toLazyByteString $
ByteStringBuilder.word8 0
<> ByteStringBuilder.int32BE 2
<> ByteStringBuilder.int32BE 2
<> ByteStringBuilder.doubleBE 1.0
<> ByteStringBuilder.doubleBE 2.0
<> ByteStringBuilder.doubleBE 3.0
<> ByteStringBuilder.doubleBE 4.0
testWkbMultiLineParsing :: Spec
testWkbMultiLineParsing =
describe "Test wkb multi line" $
it "Parse valid wkb multi line" $
Wkb.parseByteString exampleWkbMultiLine `shouldBe` (Right $ Geospatial.MultiLine $ Geospatial.GeoMultiLine (Sequence.fromList [SpecHelper.lineString1, SpecHelper.lineString2]))
exampleWkbMultiLine :: LazyByteString.ByteString
exampleWkbMultiLine =
ByteStringBuilder.toLazyByteString $
ByteStringBuilder.word8 0
<> ByteStringBuilder.int32BE 5
<> ByteStringBuilder.int32BE 2
<> ByteStringBuilder.word8 0
<> ByteStringBuilder.int32BE 2
<> ByteStringBuilder.int32BE 2
<> ByteStringBuilder.doubleBE 1.0
<> ByteStringBuilder.doubleBE 2.0
<> ByteStringBuilder.doubleBE 3.0
<> ByteStringBuilder.doubleBE 4.0
<> ByteStringBuilder.word8 0
<> ByteStringBuilder.int32BE 2
<> ByteStringBuilder.int32BE 2
<> ByteStringBuilder.doubleBE 1.5
<> ByteStringBuilder.doubleBE 2.5
<> ByteStringBuilder.doubleBE 3.5
<> ByteStringBuilder.doubleBE 4.5