Skip to content

Commit cc931dd

Browse files
committed
tests: custom Arbitrary UTCTime instance, drop quickcheck-instances
in favor of our own small set of required instances.
1 parent 6c0edf2 commit cc931dd

File tree

17 files changed

+106
-64
lines changed

17 files changed

+106
-64
lines changed

hnix-store-remote/hnix-store-remote.cabal

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,6 @@ library
117117
, network
118118
, mtl
119119
, QuickCheck
120-
, quickcheck-instances
121120
, unordered-containers
122121
, vector
123122
hs-source-dirs: src
@@ -175,7 +174,6 @@ test-suite remote
175174
, time
176175
, hspec
177176
, QuickCheck
178-
, quickcheck-instances
179177
, unordered-containers
180178

181179
test-suite remote-io

hnix-store-remote/src/System/Nix/Store/Remote/Arbitrary.hs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import System.Nix.Store.Remote.Types
99

1010
import Test.QuickCheck (Arbitrary(..), oneof)
1111
import Test.QuickCheck.Arbitrary.Generic (GenericArbitrary(..))
12-
import Test.QuickCheck.Instances ()
1312

1413
deriving via GenericArbitrary CheckMode
1514
instance Arbitrary CheckMode

hnix-store-remote/tests/NixSerializerSpec.hs

Lines changed: 3 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,16 @@ module NixSerializerSpec (spec) where
44

55
import Crypto.Hash (MD5, SHA1, SHA256, SHA512)
66
import Data.Dependent.Sum (DSum((:=>)))
7-
import Data.Fixed (Uni)
8-
import Data.Time (NominalDiffTime)
7+
import Data.Time (UTCTime)
98
import Data.Word (Word64)
109
import Test.Hspec (Expectation, Spec, describe, it, parallel, shouldBe)
1110
import Test.Hspec.QuickCheck (prop)
1211
import Test.QuickCheck (Gen, arbitrary, forAll, suchThat)
13-
import Test.QuickCheck.Instances ()
1412

15-
import qualified Data.Time.Clock.POSIX
16-
import qualified Data.Serializer
1713
import qualified System.Nix.Build
1814
import qualified System.Nix.Hash
1915

2016
import System.Nix.Arbitrary ()
21-
import System.Nix.Build (BuildResult)
2217
import System.Nix.Derivation (Derivation(inputDrvs))
2318
import System.Nix.StorePath (StoreDir)
2419
import System.Nix.StorePath.Metadata (Metadata(..))
@@ -71,19 +66,7 @@ spec = parallel $ do
7166
prop "Maybe Text"
7267
$ forAll (arbitrary `suchThat` (/= Just ""))
7368
$ roundtripS maybeText
74-
prop "UTCTime" $ do
75-
let
76-
-- scale to seconds and back
77-
toSeconds :: Int -> NominalDiffTime
78-
toSeconds n = realToFrac (toEnum n :: Uni)
79-
fromSeconds :: NominalDiffTime -> Int
80-
fromSeconds = (fromEnum :: Uni -> Int) . realToFrac
81-
82-
roundtripS @Int @() $
83-
Data.Serializer.mapIsoSerializer
84-
(fromSeconds . Data.Time.Clock.POSIX.utcTimeToPOSIXSeconds)
85-
(Data.Time.Clock.POSIX.posixSecondsToUTCTime . toSeconds)
86-
time
69+
prop "UTCTime" $ roundtripS @UTCTime @() time
8770

8871
describe "Combinators" $ do
8972
prop "list" $ roundtripS @[Int] @() (list int)
@@ -94,12 +77,7 @@ spec = parallel $ do
9477
describe "Complex" $ do
9578
prop "BuildResult"
9679
$ forAll (arbitrary `suchThat` ((/= Just "") . System.Nix.Build.errorMessage))
97-
$ \br ->
98-
roundtripS @BuildResult buildResult
99-
-- fix time to 0 as we test UTCTime above
100-
$ br { System.Nix.Build.startTime = Data.Time.Clock.POSIX.posixSecondsToUTCTime 0
101-
, System.Nix.Build.stopTime = Data.Time.Clock.POSIX.posixSecondsToUTCTime 0
102-
}
80+
$ roundtripS buildResult
10381

10482
prop "StorePath" $
10583
roundtripSReader @StoreDir storePath
@@ -118,9 +96,6 @@ spec = parallel $ do
11896
prop "Metadata (StorePath)"
11997
$ \sd -> forAll (arbitrary `suchThat` (\m -> narHashIsSHA256 m && narBytes m /= Just 0))
12098
$ roundtripSReader @StoreDir pathMetadata sd
121-
. (\m -> m
122-
{ registrationTime = Data.Time.Clock.POSIX.posixSecondsToUTCTime 0
123-
})
12499

125100
prop "Some HashAlgo" $
126101
roundtripS someHashAlgo

hnix-store-remote/tests/SerializeSpec.hs

Lines changed: 2 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -2,25 +2,21 @@
22

33
module SerializeSpec (spec) where
44

5-
import Data.Fixed (Uni)
65
import Data.Serialize (Serialize(..))
76
import Data.Serialize.Get (Get, runGet)
87
import Data.Serialize.Put (Putter, runPut)
98
import Data.Text (Text)
10-
import Data.Time (NominalDiffTime)
119
import Test.Hspec (Expectation, Spec, describe, it, parallel, shouldBe)
1210
import Test.Hspec.QuickCheck (prop)
1311
import Test.Hspec.Nix (roundtrips)
1412
import Test.QuickCheck (arbitrary, forAll, suchThat)
15-
import Test.QuickCheck.Instances ()
1613

1714
import qualified Data.Either
1815
import qualified Data.HashSet
19-
import qualified Data.Time.Clock.POSIX
2016
import qualified System.Nix.Build
2117

2218
import System.Nix.Arbitrary ()
23-
import System.Nix.Build (BuildMode(..), BuildStatus(..))
19+
import System.Nix.Build (BuildMode(..), BuildResult, BuildStatus(..))
2420
import System.Nix.Derivation (Derivation(inputDrvs))
2521
import System.Nix.Store.Remote.Arbitrary ()
2622
import System.Nix.Store.Remote.Serialize (getDerivation, putDerivation)
@@ -61,18 +57,6 @@ spec = parallel $ do
6157
prop "Bool" $ roundtrips2 putBool getBool
6258
prop "ByteString" $ roundtrips2 putByteString getByteString
6359

64-
prop "UTCTime" $ do
65-
let
66-
-- scale to seconds and back
67-
toSeconds :: Int -> NominalDiffTime
68-
toSeconds n = realToFrac (toEnum n :: Uni)
69-
fromSeconds :: NominalDiffTime -> Int
70-
fromSeconds = (fromEnum :: Uni -> Int) . realToFrac
71-
72-
roundtrips2
73-
(putTime . Data.Time.Clock.POSIX.posixSecondsToUTCTime . toSeconds)
74-
(fromSeconds . Data.Time.Clock.POSIX.utcTimeToPOSIXSeconds <$> getTime)
75-
7660
describe "Combinators" $ do
7761
prop "Many" $ roundtrips2 (putMany putInt) (getMany (getInt @Int))
7862
prop "[ByteString]" $ roundtrips2 putByteStrings getByteStrings
@@ -95,12 +79,7 @@ spec = parallel $ do
9579
prop "BuildStatus" $ roundtripS @BuildStatus
9680
it "BuildResult" $
9781
forAll (arbitrary `suchThat` ((/= Just "") . System.Nix.Build.errorMessage))
98-
$ \br ->
99-
roundtripS
100-
-- fix time to 0 as we test UTCTime above
101-
$ br { System.Nix.Build.startTime = Data.Time.Clock.POSIX.posixSecondsToUTCTime 0
102-
, System.Nix.Build.stopTime = Data.Time.Clock.POSIX.posixSecondsToUTCTime 0
103-
}
82+
$ roundtripS @BuildResult
10483

10584
prop "ProtoVersion" $ roundtripS @ProtoVersion
10685

hnix-store-tests/hnix-store-tests.cabal

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,11 @@ common commons
3535
library
3636
import: commons
3737
exposed-modules:
38-
System.Nix.Arbitrary
38+
Data.ByteString.Arbitrary
39+
, Data.HashSet.Arbitrary
40+
, Data.Text.Arbitrary
41+
, Data.Vector.Arbitrary
42+
, System.Nix.Arbitrary
3943
, System.Nix.Arbitrary.Base
4044
, System.Nix.Arbitrary.Build
4145
, System.Nix.Arbitrary.ContentAddress
@@ -46,6 +50,7 @@ library
4650
, System.Nix.Arbitrary.Store.Types
4751
, System.Nix.Arbitrary.StorePath
4852
, System.Nix.Arbitrary.StorePath.Metadata
53+
, System.Nix.Arbitrary.UTCTime
4954
, Test.Hspec.Nix
5055
build-depends:
5156
base >=4.12 && <5
@@ -55,10 +60,13 @@ library
5560
, crypton
5661
, dependent-sum > 0.7
5762
, generic-arbitrary < 1.1
63+
, hashable
5864
, hspec
5965
, QuickCheck
60-
, quickcheck-instances
6166
, text
67+
, time
68+
, unordered-containers
69+
, vector
6270
hs-source-dirs: src
6371

6472
test-suite props
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{-# OPTIONS_GHC -Wno-orphans #-}
2+
module Data.ByteString.Arbitrary () where
3+
4+
import Data.ByteString (ByteString)
5+
import Test.QuickCheck (Arbitrary(..))
6+
import qualified Data.ByteString.Char8
7+
8+
instance Arbitrary ByteString where
9+
arbitrary = Data.ByteString.Char8.pack <$> arbitrary
10+
shrink xs = Data.ByteString.Char8.pack <$> shrink (Data.ByteString.Char8.unpack xs)
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{-# OPTIONS_GHC -fno-warn-orphans #-}
2+
module Data.HashSet.Arbitrary where
3+
4+
import Data.Hashable (Hashable)
5+
import Data.HashSet (HashSet)
6+
import Test.QuickCheck (Arbitrary(..))
7+
import qualified Data.HashSet
8+
9+
instance (Hashable a, Eq a, Arbitrary a) => Arbitrary (HashSet a) where
10+
arbitrary = Data.HashSet.fromList <$> arbitrary
11+
shrink hashset = Data.HashSet.fromList <$> shrink (Data.HashSet.toList hashset)
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{-# OPTIONS_GHC -Wno-orphans #-}
2+
module Data.Text.Arbitrary () where
3+
4+
import Data.Text (Text)
5+
import Test.QuickCheck (Arbitrary(..))
6+
import qualified Data.Text
7+
8+
instance Arbitrary Text where
9+
arbitrary = Data.Text.pack <$> arbitrary
10+
shrink xs = Data.Text.pack <$> shrink (Data.Text.unpack xs)
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{-# OPTIONS_GHC -Wno-orphans #-}
2+
-- Stolen from quickcheck-instances (BSD-3)
3+
module Data.Vector.Arbitrary () where
4+
5+
import Data.Vector (Vector)
6+
import Test.QuickCheck (Arbitrary(..), Arbitrary1(..), arbitrary1, shrink1)
7+
import qualified Data.Vector
8+
9+
instance Arbitrary1 Vector where
10+
liftArbitrary =
11+
fmap Data.Vector.fromList
12+
. liftArbitrary
13+
liftShrink shr =
14+
fmap Data.Vector.fromList
15+
. liftShrink shr
16+
. Data.Vector.toList
17+
18+
instance Arbitrary a => Arbitrary (Vector a) where
19+
arbitrary = arbitrary1
20+
shrink = shrink1

hnix-store-tests/src/System/Nix/Arbitrary.hs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
module System.Nix.Arbitrary where
22

3+
import Data.ByteString.Arbitrary ()
4+
import Data.HashSet.Arbitrary ()
5+
import Data.Text.Arbitrary ()
6+
import Data.Vector.Arbitrary ()
7+
38
import System.Nix.Arbitrary.Base ()
49
import System.Nix.Arbitrary.Build ()
510
import System.Nix.Arbitrary.ContentAddress ()

0 commit comments

Comments
 (0)