packages feed

rtcm-0.1.5: test/Test/Data/RTCM3/Observations.hs

{-# OPTIONS -fno-warn-orphans #-}

-- |
-- Module:      Test.Data.RTCM3.Observations
-- Copyright:   (c) 2015 Mark Fine
-- License:     BSD3
-- Maintainer:  Mark Fine <mark@swift-nav.com>
--
-- Test Observations module for RTCM3.

module Test.Data.RTCM3.Observations
  ( 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 GpsObservationHeader where
  arbitrary = do
    _gpsObservationHeader_num               <- arbitraryWord 12
    _gpsObservationHeader_station           <- arbitraryWord 12
    _gpsObservationHeader_tow               <- arbitraryWord 30
    _gpsObservationHeader_synchronous       <- arbitrary
    _gpsObservationHeader_n                 <- arbitraryWord 5
    _gpsObservationHeader_smoothing         <- arbitrary
    _gpsObservationHeader_smoothingInterval <- arbitraryWord 3
    return GpsObservationHeader {..}

instance Arbitrary GpsL1Observation where
  arbitrary = do
    _gpsL1Observation_code             <- arbitrary
    _gpsL1Observation_pseudorange      <- arbitraryWord 24
    _gpsL1Observation_carrierMinusCode <- arbitraryInt 20
    _gpsL1Observation_lockTime         <- arbitraryWord 7
    return GpsL1Observation {..}

instance Arbitrary GpsL1ExtObservation where
  arbitrary = do
    _gpsL1ExtObservation_ambiguity <- arbitraryWord 8
    _gpsL1ExtObservation_cnr       <- arbitraryWord 8
    return GpsL1ExtObservation {..}

instance Arbitrary GpsL2Observation where
  arbitrary = do
    _gpsL2Observation_code                  <- arbitraryWord 2
    _gpsL2Observation_pseudorangeDifference <- arbitraryInt 14
    _gpsL2Observation_carrierMinusCode      <- arbitraryInt 20
    _gpsL2Observation_lockTime              <- arbitraryWord 7
    return GpsL2Observation {..}

instance Arbitrary GpsL2ExtObservation where
  arbitrary = do
    _gpsL2ExtObservation_cnr <- arbitraryWord 8
    return GpsL2ExtObservation {..}

instance Arbitrary GlonassObservationHeader where
  arbitrary = do
    _glonassObservationHeader_num               <- arbitraryWord 12
    _glonassObservationHeader_station           <- arbitraryWord 12
    _glonassObservationHeader_epoch             <- arbitraryWord 27
    _glonassObservationHeader_synchronous       <- arbitrary
    _glonassObservationHeader_n                 <- arbitraryWord 5
    _glonassObservationHeader_smoothing         <- arbitrary
    _glonassObservationHeader_smoothingInterval <- arbitraryWord 3
    return GlonassObservationHeader {..}

instance Arbitrary GlonassL1Observation where
  arbitrary = do
    _glonassL1Observation_code             <- arbitrary
    _glonassL1Observation_frequency        <- arbitraryWord 5
    _glonassL1Observation_pseudorange      <- arbitraryWord 25
    _glonassL1Observation_carrierMinusCode <- arbitraryInt 20
    _glonassL1Observation_lockTime         <- arbitraryWord 7
    return GlonassL1Observation {..}

instance Arbitrary GlonassL1ExtObservation where
  arbitrary = do
    _glonassL1ExtObservation_ambiguity <- arbitraryWord 7
    _glonassL1ExtObservation_cnr       <- arbitraryWord 8
    return GlonassL1ExtObservation {..}

instance Arbitrary GlonassL2Observation where
  arbitrary = do
    _glonassL2Observation_code                  <- arbitraryWord 2
    _glonassL2Observation_pseudorangeDifference <- arbitraryInt 14
    _glonassL2Observation_carrierMinusCode      <- arbitraryInt 20
    _glonassL2Observation_lockTime              <- arbitraryWord 7
    return GlonassL2Observation {..}

instance Arbitrary GlonassL2ExtObservation where
  arbitrary = do
    _glonassL2ExtObservation_cnr <- arbitraryWord 8
    return GlonassL2ExtObservation {..}

instance Arbitrary GlonassBias where
  arbitrary = do
    _glonassBias_num     <- arbitraryWord 12
    _glonassBias_station <- arbitraryWord 12
    _glonassBias_bias    <- arbitrary
    _glonassBias_mask    <- arbitraryWord 4
    _glonassBias_l1ca    <- arbitraryWord 16
    _glonassBias_l1p     <- arbitraryWord 16
    _glonassBias_l2ca    <- arbitraryWord 16
    _glonassBias_l2p     <- arbitraryWord 16
    return GlonassBias {..}

instance Arbitrary Observation1001 where
  arbitrary = Observation1001 <$> arbitraryWord 6 <*> arbitrary

instance Arbitrary Msg1001 where
  arbitrary = do
    _msg1001_header       <- arbitrary
    _msg1001_observations <- replicateM (fromIntegral $ _msg1001_header ^. gpsObservationHeader_n) $ arbitrary
    return Msg1001 {..}

instance Arbitrary Observation1002 where
  arbitrary = Observation1002 <$> arbitraryWord 6 <*> arbitrary <*> arbitrary

instance Arbitrary Msg1002 where
  arbitrary = do
    _msg1002_header       <- arbitrary
    _msg1002_observations <- replicateM (fromIntegral $ _msg1002_header ^. gpsObservationHeader_n) $ arbitrary
    return Msg1002 {..}

instance Arbitrary Observation1003 where
  arbitrary = Observation1003 <$> arbitraryWord 6 <*> arbitrary <*> arbitrary

instance Arbitrary Msg1003 where
  arbitrary = do
    _msg1003_header       <- arbitrary
    _msg1003_observations <- replicateM (fromIntegral $ _msg1003_header ^. gpsObservationHeader_n) $ arbitrary
    return Msg1003 {..}

instance Arbitrary Observation1004 where
  arbitrary = Observation1004 <$> arbitraryWord 6 <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary

instance Arbitrary Msg1004 where
  arbitrary = do
    _msg1004_header       <- arbitrary
    _msg1004_observations <- replicateM (fromIntegral $ _msg1004_header ^. gpsObservationHeader_n) $ arbitrary
    return Msg1004 {..}

instance Arbitrary Observation1009 where
  arbitrary = Observation1009 <$> arbitraryWord 6 <*> arbitrary

instance Arbitrary Msg1009 where
  arbitrary = do
    _msg1009_header       <- arbitrary
    _msg1009_observations <- replicateM (fromIntegral $ _msg1009_header ^. glonassObservationHeader_n) $ arbitrary
    return Msg1009 {..}

instance Arbitrary Observation1010 where
  arbitrary = Observation1010 <$> arbitraryWord 6 <*> arbitrary <*> arbitrary

instance Arbitrary Msg1010 where
  arbitrary = do
    _msg1010_header       <- arbitrary
    _msg1010_observations <- replicateM (fromIntegral $ _msg1010_header ^. glonassObservationHeader_n) $ arbitrary
    return Msg1010 {..}

instance Arbitrary Observation1011 where
  arbitrary = Observation1011 <$> arbitraryWord 6 <*> arbitrary <*> arbitrary

instance Arbitrary Msg1011 where
  arbitrary = do
    _msg1011_header       <- arbitrary
    _msg1011_observations <- replicateM (fromIntegral $ _msg1011_header ^. glonassObservationHeader_n) $ arbitrary
    return Msg1011 {..}

instance Arbitrary Observation1012 where
  arbitrary = Observation1012 <$> arbitraryWord 6 <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary

instance Arbitrary Msg1012 where
  arbitrary = do
    _msg1012_header       <- arbitrary
    _msg1012_observations <- replicateM (fromIntegral $ _msg1012_header ^. glonassObservationHeader_n) $ arbitrary
    return Msg1012 {..}

instance Arbitrary Msg1230 where
  arbitrary = Msg1230 <$> arbitrary

testMsg1001 :: TestTree
testMsg1001 =
  testProperty "Roundtrip Msg1001" $ \m ->
    (decode $ encode m) == (m :: Msg1001)

testMsg1002 :: TestTree
testMsg1002 =
  testProperty "Roundtrip Msg1002" $ \m ->
    (decode $ encode m) == (m :: Msg1002)

testMsg1003 :: TestTree
testMsg1003 =
  testProperty "Roundtrip Msg1003" $ \m ->
    (decode $ encode m) == (m :: Msg1003)

testMsg1004 :: TestTree
testMsg1004 =
  testProperty "Roundtrip Msg1004" $ \m ->
    (decode $ encode m) == (m :: Msg1004)

testMsg1009 :: TestTree
testMsg1009 =
  testProperty "Roundtrip Msg1009" $ \m ->
    (decode $ encode m) == (m :: Msg1009)

testMsg1010 :: TestTree
testMsg1010 =
  testProperty "Roundtrip Msg1010" $ \m ->
    (decode $ encode m) == (m :: Msg1010)

testMsg1011 :: TestTree
testMsg1011 =
  testProperty "Roundtrip Msg1011" $ \m ->
    (decode $ encode m) == (m :: Msg1011)

testMsg1012 :: TestTree
testMsg1012 =
  testProperty "Roundtrip Msg1012" $ \m ->
    (decode $ encode m) == (m :: Msg1012)

testMsg1230 :: TestTree
testMsg1230 =
  testProperty "Roundtrip Msg1230" $ \m ->
    (decode $ encode m) == (m :: Msg1230)

tests :: TestTree
tests =
  testGroup "Observations tests"
    [ testMsg1001
    , testMsg1002
    , testMsg1003
    , testMsg1004
    , testMsg1009
    , testMsg1010
    , testMsg1011
    , testMsg1012
    , testMsg1230
    ]