packages feed

cayenne-lpp-0.2.0.0: test/ParseSpec.hs

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TemplateHaskell   #-}

module ParseSpec where

import SpecHelper

import qualified Data.ByteString.Base16.Lazy as B16L

testCases = [
    (0, DigitalIn 128)
  , (7, DigitalOut 255)
  , (0, AnalogIn 4.48)
  , (3, AnalogIn (-4.48))
  , (0, Illum 1337)
  , (1, Presence 14)
  , (2, Temperature (-15.6))
  , (3, Temperature 55.6)
  , (4, Humidity 55.5)
  , (0, Accelerometer 8.48 1.666 32)
  , (0, Accelerometer (8.484) (-1.666) (-1.132))
  , (4, Barometer 55.5)
  , (4, Voltage 230.7)
  , (4, Current 1337.7)
  , (4, Percentage 97)
  , (4, Percentage (-97))
  , (4, Pressure (-97.7))
  , (4, Pressure 99.9)
  , (4, Power 95.9)
  , (4, Energy (-95.9))
  , (4, Direction 100)
  , (0, GPS 8.48 1.37 100)
  , (0, GPS (-48.48) (-75.1337) 100)
  , (0, GPS 42.3519 (-87.9094) (-10))
  ]

spec :: Spec
spec = do
  it "parses samples" $ do
    mapM_ (\x -> (decode . encode) x `shouldBe` x) testCases
    (decode <$> B16L.decode "018806765ff2960a0003e8") `shouldBe` Right (1, GPS 42.3519 (-87.9094) 10.0)
    (decode <$> B16L.decode "067104D2FB2E0000")       `shouldBe` Right (6, Accelerometer 1.234 (-1.234) 0.0)
    (decode <$> B16L.decode "0167FFD7")               `shouldBe` Right (1, Temperature (-4.1))
    (decode <$> B16L.decode "03670110056700FF")       `shouldBe` Right (3, Temperature 27.2)

    (decodeMany <$> B16L.decode "018806765ff2960a0003e8067104D2FB2E00000167FFD703670110056700FF")
      `shouldBe`
      Right [(1, GPS 42.3519 (-87.9094) 10.0), (6, Accelerometer 1.234 (-1.234) 0.0), (1,Temperature (-4.1)), (3,Temperature 27.2), (5,Temperature 25.5)]

main :: IO ()
main = hspec spec