packages feed

rtcm-0.2.17: test/Test/Data/RTCM3/MSM.hs

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

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

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

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

instance Arbitrary MsmHeader where
  arbitrary = do
    _msmHeader_num               <- arbitraryWord 12
    _msmHeader_station           <- arbitraryWord 12
    _msmHeader_epoch             <- arbitraryWord 30
    _msmHeader_multiple          <- arbitrary
    _msmHeader_iods              <- arbitraryWord 3
    _msmHeader_reserved          <- arbitraryWord 7
    _msmHeader_clockSteering     <- arbitraryWord 2
    _msmHeader_externalClock     <- arbitraryWord 2
    _msmHeader_smoothing         <- arbitrary
    _msmHeader_smoothingInterval <- arbitraryWord 3
    _msmHeader_satelliteMask     <- arbitraryWord 64
    _msmHeader_signalMask        <- arbitraryWord 32
    let x = min 64 $ popCount _msmHeader_satelliteMask * popCount _msmHeader_signalMask
    _msmHeader_cellMask          <- arbitraryWord x
    pure MsmHeader {..}

arbitraryMsm46SatelliteData :: Int -> Gen Msm46SatelliteData
arbitraryMsm46SatelliteData n = do
  _msm46SatelliteData_ranges       <- replicateM n $ arbitraryWord 8
  _msm46SatelliteData_rangesModulo <- replicateM n $ arbitraryWord 10
  pure Msm46SatelliteData {..}

arbitraryMsm57SatelliteData :: Int -> Gen Msm57SatelliteData
arbitraryMsm57SatelliteData n = do
  _msm57SatelliteData_ranges          <- replicateM n $ arbitraryWord 8
  _msm57SatelliteData_extendeds       <- replicateM n $ arbitraryWord 4
  _msm57SatelliteData_rangesModulo    <- replicateM n $ arbitraryWord 10
  _msm57SatelliteData_phaseRangeRates <- replicateM n $ arbitraryWord 14
  pure Msm57SatelliteData {..}

arbitraryMsm4SignalData :: Int -> Gen Msm4SignalData
arbitraryMsm4SignalData n = do
  _msm4SignalData_pseudoranges <- replicateM n $ arbitraryInt 15
  _msm4SignalData_phaseranges  <- replicateM n $ arbitraryInt 22
  _msm4SignalData_lockTimes    <- replicateM n $ arbitraryWord 4
  _msm4SignalData_halfCycles   <- replicateM n arbitrary
  _msm4SignalData_cnrs         <- replicateM n $ arbitraryWord 6
  pure Msm4SignalData {..}

arbitraryMsm5SignalData :: Int -> Gen Msm5SignalData
arbitraryMsm5SignalData n = do
  _msm5SignalData_pseudoranges    <- replicateM n $ arbitraryInt 15
  _msm5SignalData_phaseranges     <- replicateM n $ arbitraryInt 22
  _msm5SignalData_lockTimes       <- replicateM n $ arbitraryWord 4
  _msm5SignalData_halfCycles      <- replicateM n arbitrary
  _msm5SignalData_cnrs            <- replicateM n $ arbitraryWord 6
  _msm5SignalData_phaseRangeRates <- replicateM n $ arbitraryInt 15
  pure Msm5SignalData {..}

arbitraryMsm6SignalData :: Int -> Gen Msm6SignalData
arbitraryMsm6SignalData n = do
  _msm6SignalData_pseudoranges <- replicateM n $ arbitraryInt 20
  _msm6SignalData_phaseranges  <- replicateM n $ arbitraryInt 24
  _msm6SignalData_lockTimes    <- replicateM n $ arbitraryWord 10
  _msm6SignalData_halfCycles   <- replicateM n arbitrary
  _msm6SignalData_cnrs         <- replicateM n $ arbitraryWord 10
  pure Msm6SignalData {..}

arbitraryMsm7SignalData :: Int -> Gen Msm7SignalData
arbitraryMsm7SignalData n = do
  _msm7SignalData_pseudoranges    <- replicateM n $ arbitraryInt 20
  _msm7SignalData_phaseranges     <- replicateM n $ arbitraryInt 24
  _msm7SignalData_lockTimes       <- replicateM n $ arbitraryWord 10
  _msm7SignalData_halfCycles      <- replicateM n arbitrary
  _msm7SignalData_cnrs            <- replicateM n $ arbitraryWord 10
  _msm7SignalData_phaseRangeRates <- replicateM n $ arbitraryInt 15
  pure Msm7SignalData {..}

instance Arbitrary Msg1074 where
  arbitrary = do
    _msg1074_header        <- arbitrary
    _msg1074_satelliteData <- arbitraryMsm46SatelliteData $ popCount $ _msg1074_header ^. msmHeader_satelliteMask
    _msg1074_signalData    <- arbitraryMsm4SignalData $ popCount $ _msg1074_header ^. msmHeader_cellMask
    pure Msg1074 {..}

instance Arbitrary Msg1075 where
  arbitrary = do
    _msg1075_header        <- arbitrary
    _msg1075_satelliteData <- arbitraryMsm57SatelliteData $ popCount $ _msg1075_header ^. msmHeader_satelliteMask
    _msg1075_signalData    <- arbitraryMsm5SignalData $ popCount $ _msg1075_header ^. msmHeader_cellMask
    pure Msg1075 {..}

instance Arbitrary Msg1076 where
  arbitrary = do
    _msg1076_header        <- arbitrary
    _msg1076_satelliteData <- arbitraryMsm46SatelliteData $ popCount $ _msg1076_header ^. msmHeader_satelliteMask
    _msg1076_signalData    <- arbitraryMsm6SignalData $ popCount $ _msg1076_header ^. msmHeader_cellMask
    pure Msg1076 {..}

instance Arbitrary Msg1077 where
  arbitrary = do
    _msg1077_header        <- arbitrary
    _msg1077_satelliteData <- arbitraryMsm57SatelliteData $ popCount $ _msg1077_header ^. msmHeader_satelliteMask
    _msg1077_signalData    <- arbitraryMsm7SignalData $ popCount $ _msg1077_header ^. msmHeader_cellMask
    pure Msg1077 {..}

instance Arbitrary Msg1084 where
  arbitrary = do
    _msg1084_header        <- arbitrary
    _msg1084_satelliteData <- arbitraryMsm46SatelliteData $ popCount $ _msg1084_header ^. msmHeader_satelliteMask
    _msg1084_signalData    <- arbitraryMsm4SignalData $ popCount $ _msg1084_header ^. msmHeader_cellMask
    pure Msg1084 {..}

instance Arbitrary Msg1085 where
  arbitrary = do
    _msg1085_header        <- arbitrary
    _msg1085_satelliteData <- arbitraryMsm57SatelliteData $ popCount $ _msg1085_header ^. msmHeader_satelliteMask
    _msg1085_signalData    <- arbitraryMsm5SignalData $ popCount $ _msg1085_header ^. msmHeader_cellMask
    pure Msg1085 {..}

instance Arbitrary Msg1086 where
  arbitrary = do
    _msg1086_header        <- arbitrary
    _msg1086_satelliteData <- arbitraryMsm46SatelliteData $ popCount $ _msg1086_header ^. msmHeader_satelliteMask
    _msg1086_signalData    <- arbitraryMsm6SignalData $ popCount $ _msg1086_header ^. msmHeader_cellMask
    pure Msg1086 {..}

instance Arbitrary Msg1087 where
  arbitrary = do
    _msg1087_header        <- arbitrary
    _msg1087_satelliteData <- arbitraryMsm57SatelliteData $ popCount $ _msg1087_header ^. msmHeader_satelliteMask
    _msg1087_signalData    <- arbitraryMsm7SignalData $ popCount $ _msg1087_header ^. msmHeader_cellMask
    pure Msg1087 {..}

instance Arbitrary Msg1094 where
  arbitrary = do
    _msg1094_header        <- arbitrary
    _msg1094_satelliteData <- arbitraryMsm46SatelliteData $ popCount $ _msg1094_header ^. msmHeader_satelliteMask
    _msg1094_signalData    <- arbitraryMsm4SignalData $ popCount $ _msg1094_header ^. msmHeader_cellMask
    pure Msg1094 {..}

instance Arbitrary Msg1095 where
  arbitrary = do
    _msg1095_header        <- arbitrary
    _msg1095_satelliteData <- arbitraryMsm57SatelliteData $ popCount $ _msg1095_header ^. msmHeader_satelliteMask
    _msg1095_signalData    <- arbitraryMsm5SignalData $ popCount $ _msg1095_header ^. msmHeader_cellMask
    pure Msg1095 {..}

instance Arbitrary Msg1096 where
  arbitrary = do
    _msg1096_header        <- arbitrary
    _msg1096_satelliteData <- arbitraryMsm46SatelliteData $ popCount $ _msg1096_header ^. msmHeader_satelliteMask
    _msg1096_signalData    <- arbitraryMsm6SignalData $ popCount $ _msg1096_header ^. msmHeader_cellMask
    pure Msg1096 {..}

instance Arbitrary Msg1097 where
  arbitrary = do
    _msg1097_header        <- arbitrary
    _msg1097_satelliteData <- arbitraryMsm57SatelliteData $ popCount $ _msg1097_header ^. msmHeader_satelliteMask
    _msg1097_signalData    <- arbitraryMsm7SignalData $ popCount $ _msg1097_header ^. msmHeader_cellMask
    pure Msg1097 {..}

instance Arbitrary Msg1104 where
  arbitrary = do
    _msg1104_header        <- arbitrary
    _msg1104_satelliteData <- arbitraryMsm46SatelliteData $ popCount $ _msg1104_header ^. msmHeader_satelliteMask
    _msg1104_signalData    <- arbitraryMsm4SignalData $ popCount $ _msg1104_header ^. msmHeader_cellMask
    pure Msg1104 {..}

instance Arbitrary Msg1105 where
  arbitrary = do
    _msg1105_header        <- arbitrary
    _msg1105_satelliteData <- arbitraryMsm57SatelliteData $ popCount $ _msg1105_header ^. msmHeader_satelliteMask
    _msg1105_signalData    <- arbitraryMsm5SignalData $ popCount $ _msg1105_header ^. msmHeader_cellMask
    pure Msg1105 {..}

instance Arbitrary Msg1106 where
  arbitrary = do
    _msg1106_header        <- arbitrary
    _msg1106_satelliteData <- arbitraryMsm46SatelliteData $ popCount $ _msg1106_header ^. msmHeader_satelliteMask
    _msg1106_signalData    <- arbitraryMsm6SignalData $ popCount $ _msg1106_header ^. msmHeader_cellMask
    pure Msg1106 {..}

instance Arbitrary Msg1107 where
  arbitrary = do
    _msg1107_header        <- arbitrary
    _msg1107_satelliteData <- arbitraryMsm57SatelliteData $ popCount $ _msg1107_header ^. msmHeader_satelliteMask
    _msg1107_signalData    <- arbitraryMsm7SignalData $ popCount $ _msg1107_header ^. msmHeader_cellMask
    pure Msg1107 {..}

instance Arbitrary Msg1114 where
  arbitrary = do
    _msg1114_header        <- arbitrary
    _msg1114_satelliteData <- arbitraryMsm46SatelliteData $ popCount $ _msg1114_header ^. msmHeader_satelliteMask
    _msg1114_signalData    <- arbitraryMsm4SignalData $ popCount $ _msg1114_header ^. msmHeader_cellMask
    pure Msg1114 {..}

instance Arbitrary Msg1115 where
  arbitrary = do
    _msg1115_header        <- arbitrary
    _msg1115_satelliteData <- arbitraryMsm57SatelliteData $ popCount $ _msg1115_header ^. msmHeader_satelliteMask
    _msg1115_signalData    <- arbitraryMsm5SignalData $ popCount $ _msg1115_header ^. msmHeader_cellMask
    pure Msg1115 {..}

instance Arbitrary Msg1116 where
  arbitrary = do
    _msg1116_header        <- arbitrary
    _msg1116_satelliteData <- arbitraryMsm46SatelliteData $ popCount $ _msg1116_header ^. msmHeader_satelliteMask
    _msg1116_signalData    <- arbitraryMsm6SignalData $ popCount $ _msg1116_header ^. msmHeader_cellMask
    pure Msg1116 {..}

instance Arbitrary Msg1117 where
  arbitrary = do
    _msg1117_header        <- arbitrary
    _msg1117_satelliteData <- arbitraryMsm57SatelliteData $ popCount $ _msg1117_header ^. msmHeader_satelliteMask
    _msg1117_signalData    <- arbitraryMsm7SignalData $ popCount $ _msg1117_header ^. msmHeader_cellMask
    pure Msg1117 {..}

instance Arbitrary Msg1124 where
  arbitrary = do
    _msg1124_header        <- arbitrary
    _msg1124_satelliteData <- arbitraryMsm46SatelliteData $ popCount $ _msg1124_header ^. msmHeader_satelliteMask
    _msg1124_signalData    <- arbitraryMsm4SignalData $ popCount $ _msg1124_header ^. msmHeader_cellMask
    pure Msg1124 {..}

instance Arbitrary Msg1125 where
  arbitrary = do
    _msg1125_header       <- arbitrary
    _msg1125_satelliteData <- arbitraryMsm57SatelliteData $ popCount $ _msg1125_header ^. msmHeader_satelliteMask
    _msg1125_signalData    <- arbitraryMsm5SignalData $ popCount $ _msg1125_header ^. msmHeader_cellMask
    pure Msg1125 {..}

instance Arbitrary Msg1126 where
  arbitrary = do
    _msg1126_header        <- arbitrary
    _msg1126_satelliteData <- arbitraryMsm46SatelliteData $ popCount $ _msg1126_header ^. msmHeader_satelliteMask
    _msg1126_signalData    <- arbitraryMsm6SignalData $ popCount $ _msg1126_header ^. msmHeader_cellMask
    pure Msg1126 {..}

instance Arbitrary Msg1127 where
  arbitrary = do
    _msg1127_header        <- arbitrary
    _msg1127_satelliteData <- arbitraryMsm57SatelliteData $ popCount $ _msg1127_header ^. msmHeader_satelliteMask
    _msg1127_signalData    <- arbitraryMsm7SignalData $ popCount $ _msg1127_header ^. msmHeader_cellMask
    pure Msg1127 {..}

testMsg1074 :: TestTree
testMsg1074 =
  testProperty "Roundtrip Msg1074" $ \m ->
    decode (encode m) == (m :: Msg1074)

testMsg1075 :: TestTree
testMsg1075 =
  testProperty "Roundtrip Msg1075" $ \m ->
    decode (encode m) == (m :: Msg1075)

testMsg1076 :: TestTree
testMsg1076 =
  testProperty "Roundtrip Msg1076" $ \m ->
    decode (encode m) == (m :: Msg1076)

testMsg1077 :: TestTree
testMsg1077 =
  testProperty "Roundtrip Msg1077" $ \m ->
    decode (encode m) == (m :: Msg1077)

testMsg1084 :: TestTree
testMsg1084 =
  testProperty "Roundtrip Msg1084" $ \m ->
    decode (encode m) == (m :: Msg1084)

testMsg1085 :: TestTree
testMsg1085 =
  testProperty "Roundtrip Msg1085" $ \m ->
    decode (encode m) == (m :: Msg1085)

testMsg1086 :: TestTree
testMsg1086 =
  testProperty "Roundtrip Msg1086" $ \m ->
    decode (encode m) == (m :: Msg1086)

testMsg1087 :: TestTree
testMsg1087 =
  testProperty "Roundtrip Msg1087" $ \m ->
    decode (encode m) == (m :: Msg1087)

testMsg1094 :: TestTree
testMsg1094 =
  testProperty "Roundtrip Msg1094" $ \m ->
    decode (encode m) == (m :: Msg1094)

testMsg1095 :: TestTree
testMsg1095 =
  testProperty "Roundtrip Msg1095" $ \m ->
    decode (encode m) == (m :: Msg1095)

testMsg1096 :: TestTree
testMsg1096 =
  testProperty "Roundtrip Msg1096" $ \m ->
    decode (encode m) == (m :: Msg1096)

testMsg1097 :: TestTree
testMsg1097 =
  testProperty "Roundtrip Msg1097" $ \m ->
    decode (encode m) == (m :: Msg1097)

testMsg1104 :: TestTree
testMsg1104 =
  testProperty "Roundtrip Msg1104" $ \m ->
    decode (encode m) == (m :: Msg1104)

testMsg1105 :: TestTree
testMsg1105 =
  testProperty "Roundtrip Msg1105" $ \m ->
    decode (encode m) == (m :: Msg1105)

testMsg1106 :: TestTree
testMsg1106 =
  testProperty "Roundtrip Msg1106" $ \m ->
    decode (encode m) == (m :: Msg1106)

testMsg1107 :: TestTree
testMsg1107 =
  testProperty "Roundtrip Msg1107" $ \m ->
    decode (encode m) == (m :: Msg1107)

testMsg1114 :: TestTree
testMsg1114 =
  testProperty "Roundtrip Msg1114" $ \m ->
    decode (encode m) == (m :: Msg1114)

testMsg1115 :: TestTree
testMsg1115 =
  testProperty "Roundtrip Msg1115" $ \m ->
    decode (encode m) == (m :: Msg1115)

testMsg1116 :: TestTree
testMsg1116 =
  testProperty "Roundtrip Msg1116" $ \m ->
    decode (encode m) == (m :: Msg1116)

testMsg1117 :: TestTree
testMsg1117 =
  testProperty "Roundtrip Msg1117" $ \m ->
    decode (encode m) == (m :: Msg1117)

testMsg1124 :: TestTree
testMsg1124 =
  testProperty "Roundtrip Msg1124" $ \m ->
    decode (encode m) == (m :: Msg1124)

testMsg1125 :: TestTree
testMsg1125 =
  testProperty "Roundtrip Msg1125" $ \m ->
    decode (encode m) == (m :: Msg1125)

testMsg1126 :: TestTree
testMsg1126 =
  testProperty "Roundtrip Msg1126" $ \m ->
    decode (encode m) == (m :: Msg1126)

testMsg1127 :: TestTree
testMsg1127 =
  testProperty "Roundtrip Msg1127" $ \m ->
    decode (encode m) == (m :: Msg1127)

tests :: TestTree
tests =
  testGroup "MSM tests"
    [ testMsg1074
    , testMsg1075
    , testMsg1076
    , testMsg1077
    , testMsg1084
    , testMsg1085
    , testMsg1086
    , testMsg1087
    , testMsg1094
    , testMsg1095
    , testMsg1096
    , testMsg1097
    , testMsg1104
    , testMsg1105
    , testMsg1106
    , testMsg1107
    , testMsg1114
    , testMsg1115
    , testMsg1116
    , testMsg1117
    , testMsg1124
    , testMsg1125
    , testMsg1126
    , testMsg1127
    ]