packages feed

rtcm-0.2.5: test/Test/Data/RTCM3/SSR.hs

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

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

module Test.Data.RTCM3.SSR
  ( 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 GpsOrbitCorrectionHeader where
  arbitrary = do
    _gpsOrbitCorrectionHeader_num            <- arbitraryWord 12
    _gpsOrbitCorrectionHeader_epochs         <- arbitraryWord 20
    _gpsOrbitCorrectionHeader_updateInterval <- arbitraryWord 4
    _gpsOrbitCorrectionHeader_multiple       <- arbitrary
    _gpsOrbitCorrectionHeader_datum          <- arbitrary
    _gpsOrbitCorrectionHeader_iod            <- arbitraryWord 4
    _gpsOrbitCorrectionHeader_provider       <- arbitraryWord 16
    _gpsOrbitCorrectionHeader_solution       <- arbitraryWord 4
    _gpsOrbitCorrectionHeader_n              <- arbitraryWord 6
    pure GpsOrbitCorrectionHeader {..}

instance Arbitrary GpsOrbitCorrection where
  arbitrary = do
    _gpsOrbitCorrection_sat                <- arbitraryWord 6
    _gpsOrbitCorrection_iode               <- arbitraryWord 8
    _gpsOrbitCorrection_deltaRadial        <- arbitraryInt 22
    _gpsOrbitCorrection_deltaAlongTrack    <- arbitraryInt 20
    _gpsOrbitCorrection_deltaCrossTrack    <- arbitraryInt 20
    _gpsOrbitCorrection_dotDeltaRadial     <- arbitraryInt 21
    _gpsOrbitCorrection_dotDeltaAlongTrack <- arbitraryInt 19
    _gpsOrbitCorrection_dotDeltaCrossTrack <- arbitraryInt 19
    pure GpsOrbitCorrection {..}

instance Arbitrary GpsClockCorrectionHeader where
  arbitrary = do
    _gpsClockCorrectionHeader_num            <- arbitraryWord 12
    _gpsClockCorrectionHeader_epochs         <- arbitraryWord 20
    _gpsClockCorrectionHeader_updateInterval <- arbitraryWord 4
    _gpsClockCorrectionHeader_multiple       <- arbitrary
    _gpsClockCorrectionHeader_iod            <- arbitraryWord 4
    _gpsClockCorrectionHeader_provider       <- arbitraryWord 16
    _gpsClockCorrectionHeader_solution       <- arbitraryWord 4
    _gpsClockCorrectionHeader_n              <- arbitraryWord 6
    pure GpsClockCorrectionHeader {..}

instance Arbitrary GpsClockCorrection where
  arbitrary = do
    _gpsClockCorrection_sat          <- arbitraryWord 6
    _gpsClockCorrection_deltaClockC0 <- arbitraryInt 22
    _gpsClockCorrection_deltaClockC1 <- arbitraryInt 21
    _gpsClockCorrection_deltaClockC2 <- arbitraryInt 27
    pure GpsClockCorrection {..}

instance Arbitrary GlonassOrbitCorrectionHeader where
  arbitrary = do
    _glonassOrbitCorrectionHeader_num            <- arbitraryWord 12
    _glonassOrbitCorrectionHeader_epochs         <- arbitraryWord 17
    _glonassOrbitCorrectionHeader_updateInterval <- arbitraryWord 4
    _glonassOrbitCorrectionHeader_multiple       <- arbitrary
    _glonassOrbitCorrectionHeader_datum          <- arbitrary
    _glonassOrbitCorrectionHeader_iod            <- arbitraryWord 4
    _glonassOrbitCorrectionHeader_provider       <- arbitraryWord 16
    _glonassOrbitCorrectionHeader_solution       <- arbitraryWord 4
    _glonassOrbitCorrectionHeader_n              <- arbitraryWord 6
    pure GlonassOrbitCorrectionHeader {..}

instance Arbitrary GlonassOrbitCorrection where
  arbitrary = do
    _glonassOrbitCorrection_sat                <- arbitraryWord 5
    _glonassOrbitCorrection_iode               <- arbitraryWord 8
    _glonassOrbitCorrection_deltaRadial        <- arbitraryInt 22
    _glonassOrbitCorrection_deltaAlongTrack    <- arbitraryInt 20
    _glonassOrbitCorrection_deltaCrossTrack    <- arbitraryInt 20
    _glonassOrbitCorrection_dotDeltaRadial     <- arbitraryInt 21
    _glonassOrbitCorrection_dotDeltaAlongTrack <- arbitraryInt 19
    _glonassOrbitCorrection_dotDeltaCrossTrack <- arbitraryInt 19
    pure GlonassOrbitCorrection {..}

instance Arbitrary GlonassClockCorrectionHeader where
  arbitrary = do
    _glonassClockCorrectionHeader_num            <- arbitraryWord 12
    _glonassClockCorrectionHeader_epochs         <- arbitraryWord 17
    _glonassClockCorrectionHeader_updateInterval <- arbitraryWord 4
    _glonassClockCorrectionHeader_multiple       <- arbitrary
    _glonassClockCorrectionHeader_iod            <- arbitraryWord 4
    _glonassClockCorrectionHeader_provider       <- arbitraryWord 16
    _glonassClockCorrectionHeader_solution       <- arbitraryWord 4
    _glonassClockCorrectionHeader_n              <- arbitraryWord 6
    pure GlonassClockCorrectionHeader {..}

instance Arbitrary GlonassClockCorrection where
  arbitrary = do
    _glonassClockCorrection_sat          <- arbitraryWord 5
    _glonassClockCorrection_deltaClockC0 <- arbitraryInt 22
    _glonassClockCorrection_deltaClockC1 <- arbitraryInt 21
    _glonassClockCorrection_deltaClockC2 <- arbitraryInt 27
    pure GlonassClockCorrection {..}

instance Arbitrary Msg1057 where
  arbitrary = do
    _msg1057_header      <- arbitrary
    _msg1057_corrections <- replicateM (fromIntegral $ _msg1057_header ^. gpsOrbitCorrectionHeader_n) arbitrary
    pure Msg1057 {..}

instance Arbitrary Msg1058 where
  arbitrary = do
    _msg1058_header      <- arbitrary
    _msg1058_corrections <- replicateM (fromIntegral $ _msg1058_header ^. gpsClockCorrectionHeader_n) arbitrary
    pure Msg1058 {..}

instance Arbitrary Msg1063 where
  arbitrary = do
    _msg1063_header      <- arbitrary
    _msg1063_corrections <- replicateM (fromIntegral $ _msg1063_header ^. glonassOrbitCorrectionHeader_n) arbitrary
    pure Msg1063 {..}

instance Arbitrary Msg1064 where
  arbitrary = do
    _msg1064_header      <- arbitrary
    _msg1064_corrections <- replicateM (fromIntegral $ _msg1064_header ^. glonassClockCorrectionHeader_n) arbitrary
    pure Msg1064 {..}

testMsg1057 :: TestTree
testMsg1057 =
  testProperty "Roundtrip Msg1057" $ \m ->
    decode (encode m) == (m :: Msg1057)

testMsg1058 :: TestTree
testMsg1058 =
  testProperty "Roundtrip Msg1058" $ \m ->
    decode (encode m) == (m :: Msg1058)

testMsg1063 :: TestTree
testMsg1063 =
  testProperty "Roundtrip Msg1063" $ \m ->
    decode (encode m) == (m :: Msg1063)

testMsg1064 :: TestTree
testMsg1064 =
  testProperty "Roundtrip Msg1064" $ \m ->
    decode (encode m) == (m :: Msg1064)

tests :: TestTree
tests =
  testGroup "SSR tests"
    [ testMsg1057
    , testMsg1058
    , testMsg1063
    , testMsg1064
    ]