packages feed

hora-2.2.0: test/Test/TestDatePartSmall.hs

module Test.TestDatePartSmall where

import Data.Semigroup hiding (Min)
import Data.Time.Hora.Internal.DatePartSmall
import Prelude hiding (negate)
import Test.Hspec


main::IO()
main = hspec $ do
   describe "TestDatePartSmall merge" $ do
      it "1 Day <> Time" $ do
           Day 2 <> Time 3 5 `shouldBe` DatePartSmall 2 3 5
      it "2 Min <> Ms" $ do
           Min 2 <> Ms 3 `shouldBe` Time 2 3

   describe "TestDatePartSmall increment" $ do
      it "3" $ do
           DatePartSmall 1 2 3 <> Day' 2 `shouldBe` DatePartSmall 3 2 3
      it "4" $ do
           DatePartSmall 1 2 3 <> Min' 2 `shouldBe` DatePartSmall 1 4 3
      it "5" $ do
           DatePartSmall 1 2 3 <> Ms' 2 `shouldBe` DatePartSmall 1 2 5
      it "6" $ do
           Time 2 3 <> Min' 2 `shouldBe` Time 4 3
      it "7" $ do
           Time 2 3 <> Ms' 2 `shouldBe` Time 2 5
      it "8" $ do
           Day 1 <> Day' 2 `shouldBe` Day 3
      it "9" $ do
           Min 1 <> Min' 2 `shouldBe` Min 3
      it "10" $ do
           Ms 1 <> Ms' 2 `shouldBe` Ms 3

      it "8: 2 x spans" $ do
           Day' 1 <> Day' 2 `shouldBe` Day' 3
      it "9: 2 x spans" $ do
           Min' 1 <> Min' 2 `shouldBe` Min' 3
      it "10: 2 x spans" $ do
           Ms' 1 <> Ms' 2 `shouldBe` Ms' 3

   describe "TestDatePartSmall decrement" $ do
      it "3" $ do
           DatePartSmall 10 2 3 <> negate (Day' 2) `shouldBe` DatePartSmall 8 2 3
      it "4" $ do
           DatePartSmall 1 2 3 <> negate (Min' 2) `shouldBe` DatePartSmall 1 0 3
      it "5" $ do
           DatePartSmall 1 2 3 <> negate (Ms' 2) `shouldBe` DatePartSmall 1 2 1
      it "6" $ do
           Time 20 3 <> negate (Min' 2) `shouldBe` Time 18 3
      it "7" $ do
           Time 2 30 <> negate (Ms' 5) `shouldBe` Time 2 25
      it "8" $ do
           Day 10 <> negate (Day' 2) `shouldBe` Day 8
      it "9" $ do
           Min 10 <> negate (Min' 3) `shouldBe` Min 7
      it "10" $ do
           Ms 100 <> negate (Ms' 12) `shouldBe` Ms 88

      it "8: 2 x spans" $ do
           Day' 10 <> negate (Day' 4) `shouldBe` Day' 6
      it "9: 2 x spans" $ do
           Min' 14 <> negate (Min' 2) `shouldBe` Min' 12
      it "10: 2 x spans" $ do
           Ms' 23 <> negate (Ms' 2) `shouldBe` Ms' 21

      it "8: 2 x spans" $ do
           Day' 10 <> negate (Day' 4) `shouldBe` Day' 6
      it "9: 2 x spans" $ do
           Min' 14 <> negate (Min' 2) `shouldBe` Min' 12
      it "10: 2 x spans" $ do
           Ms' 23 <> negate (Ms' 2) `shouldBe` Ms' 21

      it "8: 2 x spans" $ do
           negate (Day' 10) <> negate (Day' 4) `shouldBe` (negate $ Day' 14)
      it "9: 2 x spans" $ do
           negate (Min' 14) <> negate (Min' 2) `shouldBe` (negate $ Min' 16)
      it "10: 2 x spans" $ do
           negate (Ms' 23) <> negate (Ms' 2) `shouldBe` (negate $ Ms' 25)

   describe "TestDatePartSmall overwrite" $ do
      it "11" $ do
           DatePartSmall 1 2 3 <> DatePartSmall 5 6 7 `shouldBe` DatePartSmall 5 6 7
      it "12" $ do
           Time 2 3 <> Time 7 8 `shouldBe` Time 7 8
      it "13" $ do
           Day 3 <> Day 8 `shouldBe` Day 8
      it "14" $ do
           Min 1 <> Min 20 `shouldBe` Min 20
      it "15" $ do
           Ms 1 <> Ms 20 `shouldBe` Ms 20

   describe "TestDatePartSmall update" $ do
      it "16" $ do
           DatePartSmall 1 2 3 <> Time 5 6 `shouldBe` DatePartSmall 1 5 6
      it "17" $ do
           Time 2 3 <> Min 8 `shouldBe` Time 8 3
      it "18" $ do
           Time 2 3 <> Ms 8 `shouldBe` Time 2 8

      it "19" $ do
           Error Invalid <> Error Invalid `shouldBe` Error Invalid
      it "20" $ do
           Error Invalid <> Error Overflow `shouldBe` Error Invalid_Overflow
      it "21" $ do
           Error Overflow <> Error Overflow `shouldBe` Error Overflow
      it "22" $ do
           Error Overflow <> Error Invalid ` shouldBe ` Error Invalid_Overflow
      it "23" $ do
           Error Invalid_Overflow <> Min 1 ` shouldBe ` Error Invalid_Overflow
      it "24" $ do
           Min 1 <> Error Invalid_Overflow ` shouldBe ` Error Invalid_Overflow
      it "25" $ do
           Error Overflow <> Min 1 ` shouldBe ` Error Overflow
      it "26" $ do
           Day 3 <> Error Invalid ` shouldBe ` Error Invalid
      it "27" $ do
           Time 1 2 <> Day 3 `shouldBe` Error Invalid