packages feed

wkt-geom-0.0.2: test/Data/WkbGeometryCollectionSpec.hs

{-# LANGUAGE OverloadedStrings #-}

module Data.WkbGeometryCollectionSpec 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 qualified Data.Wkb                as Wkb
import           Test.Hspec              (Spec, describe, it, shouldBe)

import qualified Data.SpecHelper         as SpecHelper

spec :: Spec
spec =
  testWkbGeometryCollectionParsing

testWkbGeometryCollectionParsing :: Spec
testWkbGeometryCollectionParsing =
  describe "Test wkb geometry collection" $
    it "Parse valid wkb geometry collection" $
      Wkb.parseByteString exampleWkbGeometryCollection `shouldBe` (Right . Geospatial.Collection $
        Sequence.fromList
          [ Geospatial.Point $ Geospatial.GeoPoint SpecHelper.point1
          , Geospatial.Point $ Geospatial.GeoPoint SpecHelper.point2
          , Geospatial.Line $ Geospatial.GeoLine SpecHelper.lineString3
          ]
        )

exampleWkbGeometryCollection :: LazyByteString.ByteString
exampleWkbGeometryCollection =
  ByteStringBuilder.toLazyByteString $
    ByteStringBuilder.word8 0
    <> ByteStringBuilder.int32BE 7
    <> ByteStringBuilder.int32BE 3
    <> ByteStringBuilder.word8 0
    <> ByteStringBuilder.int32BE 1
    <> ByteStringBuilder.doubleBE 1
    <> ByteStringBuilder.doubleBE 2
    <> ByteStringBuilder.word8 0
    <> ByteStringBuilder.int32BE 1
    <> ByteStringBuilder.doubleBE 3
    <> ByteStringBuilder.doubleBE 4
    <> ByteStringBuilder.word8 0
    <> ByteStringBuilder.int32BE 2
    <> ByteStringBuilder.int32BE 3
    <> ByteStringBuilder.doubleBE 15
    <> ByteStringBuilder.doubleBE 15
    <> ByteStringBuilder.doubleBE 20
    <> ByteStringBuilder.doubleBE 20
    <> ByteStringBuilder.doubleBE 20
    <> ByteStringBuilder.doubleBE 20