|
| 1 | +module Test.StrongCheck.Data.ArbDateTime where |
| 2 | + |
| 3 | +import Prelude |
| 4 | + |
| 5 | +import Data.DateTime as DT |
| 6 | +import Data.Enum (fromEnum, toEnum) |
| 7 | +import Data.Maybe (fromMaybe) |
| 8 | +import Data.Newtype (class Newtype) |
| 9 | + |
| 10 | +import Test.StrongCheck.Arbitrary (class Arbitrary, class Coarbitrary, arbitrary, coarbitrary) |
| 11 | +import Test.StrongCheck.Gen (chooseInt) |
| 12 | + |
| 13 | +newtype ArbTime = ArbTime DT.Time |
| 14 | + |
| 15 | +runArbTime ∷ ArbTime → DT.Time |
| 16 | +runArbTime (ArbTime x) = x |
| 17 | + |
| 18 | +derive instance newtypeArbTime ∷ Newtype ArbTime _ |
| 19 | + |
| 20 | +instance arbitraryArbTime ∷ Arbitrary ArbTime where |
| 21 | + arbitrary = do |
| 22 | + hour ← chooseInt 0 23 |
| 23 | + minute ← chooseInt 0 59 |
| 24 | + second ← chooseInt 0 59 |
| 25 | + millisecond ← chooseInt 0 999 |
| 26 | + pure $ ArbTime $ DT.Time |
| 27 | + (fromMaybe bottom (toEnum hour)) |
| 28 | + (fromMaybe bottom (toEnum minute)) |
| 29 | + (fromMaybe bottom (toEnum second)) |
| 30 | + (fromMaybe bottom (toEnum millisecond)) |
| 31 | + |
| 32 | +instance coarbitraryArbTime ∷ Coarbitrary ArbTime where |
| 33 | + coarbitrary (ArbTime t) = do |
| 34 | + coarbitrary $ fromEnum (DT.hour t) |
| 35 | + coarbitrary $ fromEnum (DT.minute t) |
| 36 | + coarbitrary $ fromEnum (DT.second t) |
| 37 | + coarbitrary $ fromEnum (DT.millisecond t) |
| 38 | + |
| 39 | +newtype ArbDate = ArbDate DT.Date |
| 40 | + |
| 41 | +runArbDate ∷ ArbDate → DT.Date |
| 42 | +runArbDate (ArbDate x) = x |
| 43 | + |
| 44 | +derive instance newtypeArbDate ∷ Newtype ArbDate _ |
| 45 | + |
| 46 | +instance arbitraryArbDate ∷ Arbitrary ArbDate where |
| 47 | + arbitrary = do |
| 48 | + year ← chooseInt 1950 2050 |
| 49 | + month ← chooseInt 1 12 |
| 50 | + day ← chooseInt 1 31 |
| 51 | + pure $ ArbDate $ DT.canonicalDate |
| 52 | + (fromMaybe bottom (toEnum year)) |
| 53 | + (fromMaybe bottom (toEnum month)) |
| 54 | + (fromMaybe bottom (toEnum day)) |
| 55 | + |
| 56 | +instance coarbitraryArbDate ∷ Coarbitrary ArbDate where |
| 57 | + coarbitrary (ArbDate dt) = do |
| 58 | + coarbitrary $ fromEnum (DT.year dt) |
| 59 | + coarbitrary $ fromEnum (DT.month dt) |
| 60 | + coarbitrary $ fromEnum (DT.day dt) |
| 61 | + |
| 62 | +newtype ArbDateTime = ArbDateTime DT.DateTime |
| 63 | + |
| 64 | +runArbDateTime ∷ ArbDateTime → DT.DateTime |
| 65 | +runArbDateTime (ArbDateTime x) = x |
| 66 | + |
| 67 | +derive instance newtypeArbDateTime ∷ Newtype ArbDateTime _ |
| 68 | + |
| 69 | +instance arbitraryArbDateTime ∷ Arbitrary ArbDateTime where |
| 70 | + arbitrary = do |
| 71 | + date <- runArbDate <$> arbitrary |
| 72 | + time <- runArbTime <$> arbitrary |
| 73 | + pure $ ArbDateTime $ DT.DateTime date time |
| 74 | + |
| 75 | +instance coarbitraryArbDateTime ∷ Coarbitrary ArbDateTime where |
| 76 | + coarbitrary (ArbDateTime dt) = do |
| 77 | + coarbitrary $ ArbDate (DT.date dt) |
| 78 | + coarbitrary $ ArbTime (DT.time dt) |
0 commit comments