packages feed

rtcm-0.1.11: test/Test/Data/RTCM3/System.hs

{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE RecordWildCards   #-}
{-# OPTIONS -fno-warn-orphans #-}

-- |
-- Module:      Test.Data.RTCM3.System
-- Copyright:   (c) 2015 Swift Navigation
-- License:     BSD3
-- Maintainer:  Swift Navigation <dev@swiftnav.com>
--
-- Test System module for RTCM3.

module Test.Data.RTCM3.System
  ( tests
  ) where

import BasicPrelude
import Control.Lens
import Data.Binary
import Data.RTCM3
import Test.Data.RTCM3.Test
import Test.Tasty
import Test.Tasty.QuickCheck

instance Arbitrary MessageHeader where
  arbitrary = do
    _messageHeader_num         <- arbitraryWord 12
    _messageHeader_station     <- arbitraryWord 12
    _messageHeader_mjd         <- arbitraryWord 16
    _messageHeader_seconds     <- arbitraryWord 17
    _messageHeader_n           <- arbitraryWord 5
    _messageHeader_leapSeconds <- arbitraryWord 8
    return MessageHeader {..}

instance Arbitrary Message where
  arbitrary = do
    _message_num         <- arbitraryWord 12
    _message_synchronous <- arbitrary
    _message_interval    <- arbitraryWord 16
    return Message {..}

instance Arbitrary Msg1013 where
  arbitrary = do
    header   <- arbitrary
    messages <- replicateM (fromIntegral $ header ^. messageHeader_n) arbitrary
    return $ Msg1013 header messages

testMsg1013 :: TestTree
testMsg1013 =
  testProperty "Roundtrip Msg1013" $ \m ->
    (decode $ encode m) == (m :: Msg1013)

tests :: TestTree
tests =
  testGroup "System tests"
    [ testMsg1013
    ]