rtcm-0.2.14: 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 GpsOrbitClockCorrectionHeader where
arbitrary = do
_gpsOrbitClockCorrectionHeader_num <- arbitraryWord 12
_gpsOrbitClockCorrectionHeader_epochs <- arbitraryWord 20
_gpsOrbitClockCorrectionHeader_updateInterval <- arbitraryWord 4
_gpsOrbitClockCorrectionHeader_multiple <- arbitrary
_gpsOrbitClockCorrectionHeader_datum <- arbitrary
_gpsOrbitClockCorrectionHeader_iod <- arbitraryWord 4
_gpsOrbitClockCorrectionHeader_provider <- arbitraryWord 16
_gpsOrbitClockCorrectionHeader_solution <- arbitraryWord 4
_gpsOrbitClockCorrectionHeader_n <- arbitraryWord 6
pure GpsOrbitClockCorrectionHeader {..}
instance Arbitrary GpsOrbitClockCorrection where
arbitrary = do
_gpsOrbitClockCorrection_sat <- arbitraryWord 6
_gpsOrbitClockCorrection_iode <- arbitraryWord 8
_gpsOrbitClockCorrection_deltaRadial <- arbitraryInt 22
_gpsOrbitClockCorrection_deltaAlongTrack <- arbitraryInt 20
_gpsOrbitClockCorrection_deltaCrossTrack <- arbitraryInt 20
_gpsOrbitClockCorrection_dotDeltaRadial <- arbitraryInt 21
_gpsOrbitClockCorrection_dotDeltaAlongTrack <- arbitraryInt 19
_gpsOrbitClockCorrection_dotDeltaCrossTrack <- arbitraryInt 19
_gpsOrbitClockCorrection_deltaClockC0 <- arbitraryInt 22
_gpsOrbitClockCorrection_deltaClockC1 <- arbitraryInt 21
_gpsOrbitClockCorrection_deltaClockC2 <- arbitraryInt 27
pure GpsOrbitClockCorrection {..}
instance Arbitrary GlonassOrbitClockCorrectionHeader where
arbitrary = do
_glonassOrbitClockCorrectionHeader_num <- arbitraryWord 12
_glonassOrbitClockCorrectionHeader_epochs <- arbitraryWord 17
_glonassOrbitClockCorrectionHeader_updateInterval <- arbitraryWord 4
_glonassOrbitClockCorrectionHeader_multiple <- arbitrary
_glonassOrbitClockCorrectionHeader_datum <- arbitrary
_glonassOrbitClockCorrectionHeader_iod <- arbitraryWord 4
_glonassOrbitClockCorrectionHeader_provider <- arbitraryWord 16
_glonassOrbitClockCorrectionHeader_solution <- arbitraryWord 4
_glonassOrbitClockCorrectionHeader_n <- arbitraryWord 6
pure GlonassOrbitClockCorrectionHeader {..}
instance Arbitrary GlonassOrbitClockCorrection where
arbitrary = do
_glonassOrbitClockCorrection_sat <- arbitraryWord 5
_glonassOrbitClockCorrection_iode <- arbitraryWord 8
_glonassOrbitClockCorrection_deltaRadial <- arbitraryInt 22
_glonassOrbitClockCorrection_deltaAlongTrack <- arbitraryInt 20
_glonassOrbitClockCorrection_deltaCrossTrack <- arbitraryInt 20
_glonassOrbitClockCorrection_dotDeltaRadial <- arbitraryInt 21
_glonassOrbitClockCorrection_dotDeltaAlongTrack <- arbitraryInt 19
_glonassOrbitClockCorrection_dotDeltaCrossTrack <- arbitraryInt 19
_glonassOrbitClockCorrection_deltaClockC0 <- arbitraryInt 22
_glonassOrbitClockCorrection_deltaClockC1 <- arbitraryInt 21
_glonassOrbitClockCorrection_deltaClockC2 <- arbitraryInt 27
pure GlonassOrbitClockCorrection {..}
instance Arbitrary GpsCodeBiasCorrectionHeader where
arbitrary = do
_gpsCodeBiasCorrectionHeader_num <- arbitraryWord 12
_gpsCodeBiasCorrectionHeader_epochs <- arbitraryWord 20
_gpsCodeBiasCorrectionHeader_updateInterval <- arbitraryWord 4
_gpsCodeBiasCorrectionHeader_multiple <- arbitrary
_gpsCodeBiasCorrectionHeader_iod <- arbitraryWord 4
_gpsCodeBiasCorrectionHeader_provider <- arbitraryWord 16
_gpsCodeBiasCorrectionHeader_solution <- arbitraryWord 4
_gpsCodeBiasCorrectionHeader_n <- arbitraryWord 6
pure GpsCodeBiasCorrectionHeader {..}
instance Arbitrary GpsCodeBias where
arbitrary = do
_gpsCodeBias_signal <- arbitraryWord 5
_gpsCodeBias_codeBias <- arbitraryInt 14
pure GpsCodeBias {..}
instance Arbitrary GpsCodeBiasCorrection where
arbitrary = do
_gpsCodeBiasCorrection_sat <- arbitraryWord 6
_gpsCodeBiasCorrection_n <- arbitraryWord 5
_gpsCodeBiasCorrection_codeBiases <- replicateM (fromIntegral _gpsCodeBiasCorrection_n) arbitrary
pure GpsCodeBiasCorrection {..}
instance Arbitrary GlonassCodeBiasCorrectionHeader where
arbitrary = do
_glonassCodeBiasCorrectionHeader_num <- arbitraryWord 12
_glonassCodeBiasCorrectionHeader_epochs <- arbitraryWord 17
_glonassCodeBiasCorrectionHeader_updateInterval <- arbitraryWord 4
_glonassCodeBiasCorrectionHeader_multiple <- arbitrary
_glonassCodeBiasCorrectionHeader_iod <- arbitraryWord 4
_glonassCodeBiasCorrectionHeader_provider <- arbitraryWord 16
_glonassCodeBiasCorrectionHeader_solution <- arbitraryWord 4
_glonassCodeBiasCorrectionHeader_n <- arbitraryWord 6
pure GlonassCodeBiasCorrectionHeader {..}
instance Arbitrary GlonassCodeBias where
arbitrary = do
_glonassCodeBias_signal <- arbitraryWord 5
_glonassCodeBias_codeBias <- arbitraryInt 14
pure GlonassCodeBias {..}
instance Arbitrary GlonassCodeBiasCorrection where
arbitrary = do
_glonassCodeBiasCorrection_sat <- arbitraryWord 5
_glonassCodeBiasCorrection_n <- arbitraryWord 5
_glonassCodeBiasCorrection_codeBiases <- replicateM (fromIntegral _glonassCodeBiasCorrection_n) arbitrary
pure GlonassCodeBiasCorrection {..}
instance Arbitrary GpsPhaseBiasCorrectionHeader where
arbitrary = do
_gpsPhaseBiasCorrectionHeader_num <- arbitraryWord 12
_gpsPhaseBiasCorrectionHeader_epochs <- arbitraryWord 20
_gpsPhaseBiasCorrectionHeader_updateInterval <- arbitraryWord 4
_gpsPhaseBiasCorrectionHeader_multiple <- arbitrary
_gpsPhaseBiasCorrectionHeader_iod <- arbitraryWord 4
_gpsPhaseBiasCorrectionHeader_provider <- arbitraryWord 16
_gpsPhaseBiasCorrectionHeader_solution <- arbitraryWord 4
_gpsPhaseBiasCorrectionHeader_dispersive <- arbitrary
_gpsPhaseBiasCorrectionHeader_mw <- arbitrary
_gpsPhaseBiasCorrectionHeader_n <- arbitraryWord 6
pure GpsPhaseBiasCorrectionHeader {..}
instance Arbitrary GpsPhaseBias where
arbitrary = do
_gpsPhaseBias_signal <- arbitraryWord 5
_gpsPhaseBias_integer <- arbitrary
_gpsPhaseBias_wideLaneInteger <- arbitraryWord 2
_gpsPhaseBias_discontinuityCounter <- arbitraryWord 4
_gpsPhaseBias_phaseBias <- arbitraryInt 20
pure GpsPhaseBias {..}
instance Arbitrary GpsPhaseBiasCorrection where
arbitrary = do
_gpsPhaseBiasCorrection_sat <- arbitraryWord 6
_gpsPhaseBiasCorrection_n <- arbitraryWord 5
_gpsPhaseBiasCorrection_yawAngle <- arbitraryWord 9
_gpsPhaseBiasCorrection_yawRate <- arbitraryInt 8
_gpsPhaseBiasCorrection_phaseBiases <- replicateM (fromIntegral _gpsPhaseBiasCorrection_n) arbitrary
pure GpsPhaseBiasCorrection {..}
instance Arbitrary GlonassPhaseBiasCorrectionHeader where
arbitrary = do
_glonassPhaseBiasCorrectionHeader_num <- arbitraryWord 12
_glonassPhaseBiasCorrectionHeader_epochs <- arbitraryWord 17
_glonassPhaseBiasCorrectionHeader_updateInterval <- arbitraryWord 4
_glonassPhaseBiasCorrectionHeader_multiple <- arbitrary
_glonassPhaseBiasCorrectionHeader_iod <- arbitraryWord 4
_glonassPhaseBiasCorrectionHeader_provider <- arbitraryWord 16
_glonassPhaseBiasCorrectionHeader_solution <- arbitraryWord 4
_glonassPhaseBiasCorrectionHeader_dispersive <- arbitrary
_glonassPhaseBiasCorrectionHeader_mw <- arbitrary
_glonassPhaseBiasCorrectionHeader_n <- arbitraryWord 6
pure GlonassPhaseBiasCorrectionHeader {..}
instance Arbitrary GlonassPhaseBias where
arbitrary = do
_glonassPhaseBias_signal <- arbitraryWord 5
_glonassPhaseBias_integer <- arbitrary
_glonassPhaseBias_wideLaneInteger <- arbitraryWord 2
_glonassPhaseBias_discontinuityCounter <- arbitraryWord 4
_glonassPhaseBias_phaseBias <- arbitraryInt 20
pure GlonassPhaseBias {..}
instance Arbitrary GlonassPhaseBiasCorrection where
arbitrary = do
_glonassPhaseBiasCorrection_sat <- arbitraryWord 5
_glonassPhaseBiasCorrection_n <- arbitraryWord 5
_glonassPhaseBiasCorrection_yawAngle <- arbitraryWord 9
_glonassPhaseBiasCorrection_yawRate <- arbitraryInt 8
_glonassPhaseBiasCorrection_phaseBiases <- replicateM (fromIntegral _glonassPhaseBiasCorrection_n) arbitrary
pure GlonassPhaseBiasCorrection {..}
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 {..}
instance Arbitrary Msg1060 where
arbitrary = do
_msg1060_header <- arbitrary
_msg1060_corrections <- replicateM (fromIntegral $ _msg1060_header ^. gpsOrbitClockCorrectionHeader_n) arbitrary
pure Msg1060 {..}
instance Arbitrary Msg1066 where
arbitrary = do
_msg1066_header <- arbitrary
_msg1066_corrections <- replicateM (fromIntegral $ _msg1066_header ^. glonassOrbitClockCorrectionHeader_n) arbitrary
pure Msg1066 {..}
instance Arbitrary Msg1059 where
arbitrary = do
_msg1059_header <- arbitrary
_msg1059_corrections <- replicateM (fromIntegral $ _msg1059_header ^. gpsCodeBiasCorrectionHeader_n) arbitrary
pure Msg1059 {..}
instance Arbitrary Msg1065 where
arbitrary = do
_msg1065_header <- arbitrary
_msg1065_corrections <- replicateM (fromIntegral $ _msg1065_header ^. glonassCodeBiasCorrectionHeader_n) arbitrary
pure Msg1065 {..}
instance Arbitrary Msg1265 where
arbitrary = do
_msg1265_header <- arbitrary
_msg1265_corrections <- replicateM (fromIntegral $ _msg1265_header ^. gpsPhaseBiasCorrectionHeader_n) arbitrary
pure Msg1265 {..}
instance Arbitrary Msg1266 where
arbitrary = do
_msg1266_header <- arbitrary
_msg1266_corrections <- replicateM (fromIntegral $ _msg1266_header ^. glonassPhaseBiasCorrectionHeader_n) arbitrary
pure Msg1266 {..}
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)
testMsg1060 :: TestTree
testMsg1060 =
testProperty "Roundtrip Msg1060" $ \m ->
decode (encode m) == (m :: Msg1060)
testMsg1066 :: TestTree
testMsg1066 =
testProperty "Roundtrip Msg1066" $ \m ->
decode (encode m) == (m :: Msg1066)
testMsg1059 :: TestTree
testMsg1059 =
testProperty "Roundtrip Msg1059" $ \m ->
decode (encode m) == (m :: Msg1059)
testMsg1065 :: TestTree
testMsg1065 =
testProperty "Roundtrip Msg1065" $ \m ->
decode (encode m) == (m :: Msg1065)
testMsg1265 :: TestTree
testMsg1265 =
testProperty "Roundtrip Msg1265" $ \m ->
decode (encode m) == (m :: Msg1265)
testMsg1266 :: TestTree
testMsg1266 =
testProperty "Roundtrip Msg1266" $ \m ->
decode (encode m) == (m :: Msg1266)
tests :: TestTree
tests =
testGroup "SSR tests"
[ testMsg1057
, testMsg1058
, testMsg1063
, testMsg1064
, testMsg1060
, testMsg1066
, testMsg1059
, testMsg1065
, testMsg1265
, testMsg1266
]