@@ -7,9 +7,11 @@
7{-# LANGUAGE OverloadedStrings #-}
7{-# LANGUAGE OverloadedStrings #-}
8{-# LANGUAGE RecordWildCards #-}
8{-# LANGUAGE RecordWildCards #-}
9{-# LANGUAGE ScopedTypeVariables #-}
9{-# LANGUAGE ScopedTypeVariables #-}
10−{-# LANGUAGE TemplateHaskell #-}
11{-# LANGUAGE TypeOperators #-}
10{-# LANGUAGE TypeOperators #-}
12{-# OPTIONS_GHC -fno-warn-orphans #-}
11{-# OPTIONS_GHC -fno-warn-orphans #-}
12+#if __GLASGOW_HASKELL__ < 800
13+{-# OPTIONS_GHC -fcontext-stack=100 #-}
13module Main where
15module Main where
15import Control.Applicative
17import Control.Applicative
@@ -21,7 +23,6 @@ import Control.Monad.Reader
21import Data.Aeson
23import Data.Aeson
22import Data.Aeson.Types (parseEither)
24import Data.Aeson.Types (parseEither)
23import qualified Data.ByteString.Lazy.Char8 as BL8
25import qualified Data.ByteString.Lazy.Char8 as BL8
25import qualified Data.HashMap.Strict as HM
26import qualified Data.HashMap.Strict as HM
26import Data.List (nub)
27import Data.List (nub)
27import qualified Data.List as L
28import qualified Data.List as L
@@ -54,6 +55,8 @@ import Test.QuickCheck.Property.Monoid (T (..), eq, prop_Monoid)
54import Test.Hspec.QuickCheck (prop)
55import Test.Hspec.QuickCheck (prop)
55import Test.QuickCheck
56import Test.QuickCheck
58+import qualified Generics.SOP as SOP
59+import qualified Generics.SOP.GGP as SOP
58testServer :: Server
61testServer :: Server
59testServer = Server "http://localhost:9200"
62testServer = Server "http://localhost:9200"
@@ -589,7 +592,8 @@ instance ApproxEq BoolMatch
589instance ApproxEq MultiMatchQuery
592instance ApproxEq MultiMatchQuery
590instance ApproxEq IndexSettings
593instance ApproxEq IndexSettings
591instance ApproxEq AllocationPolicy
594instance ApproxEq AllocationPolicy
592−instance ApproxEq Char where (=~) = (==)
595+instance ApproxEq Char where
593instance ApproxEq Vers.Version where
597instance ApproxEq Vers.Version where
594 (=~) = (==)
598 (=~) = (==)
595instance (ApproxEq a, Show a) => ApproxEq [a] where
599instance (ApproxEq a, Show a) => ApproxEq [a] where
@@ -787,113 +791,113 @@ instance Arbitrary VersionNumber where
788 mk versions = VersionNumber (Vers.Version versions [])
792 mk versions = VersionNumber (Vers.Version versions [])
790−$(derive makeArbitrary ''IndexName)
794+instance Arbitrary IndexName where arbitrary = sopArbitrary; shrink = genericShrink
791−$(derive makeArbitrary ''MappingName)
795+instance Arbitrary MappingName where arbitrary = sopArbitrary; shrink = genericShrink
792−$(derive makeArbitrary ''DocId)
796+instance Arbitrary DocId where arbitrary = sopArbitrary; shrink = genericShrink
793−$(derive makeArbitrary ''Version)
797+instance Arbitrary Version where arbitrary = sopArbitrary; shrink = genericShrink
794−$(derive makeArbitrary ''BuildHash)
798+instance Arbitrary BuildHash where arbitrary = sopArbitrary; shrink = genericShrink
795−$(derive makeArbitrary ''IndexAliasRouting)
799+instance Arbitrary IndexAliasRouting where arbitrary = sopArbitrary; shrink = genericShrink
796−$(derive makeArbitrary ''ShardCount)
800+instance Arbitrary ShardCount where arbitrary = sopArbitrary; shrink = genericShrink
797−$(derive makeArbitrary ''ReplicaCount)
801+instance Arbitrary ReplicaCount where arbitrary = sopArbitrary; shrink = genericShrink
798−$(derive makeArbitrary ''TemplateName)
802+instance Arbitrary TemplateName where arbitrary = sopArbitrary; shrink = genericShrink
799−$(derive makeArbitrary ''TemplatePattern)
803+instance Arbitrary TemplatePattern where arbitrary = sopArbitrary; shrink = genericShrink
800−$(derive makeArbitrary ''QueryString)
804+instance Arbitrary QueryString where arbitrary = sopArbitrary; shrink = genericShrink
801−$(derive makeArbitrary ''CacheName)
805+instance Arbitrary CacheName where arbitrary = sopArbitrary; shrink = genericShrink
802−$(derive makeArbitrary ''CacheKey)
806+instance Arbitrary CacheKey where arbitrary = sopArbitrary; shrink = genericShrink
803−$(derive makeArbitrary ''Existence)
807+instance Arbitrary Existence where arbitrary = sopArbitrary; shrink = genericShrink
804−$(derive makeArbitrary ''CutoffFrequency)
808+instance Arbitrary CutoffFrequency where arbitrary = sopArbitrary; shrink = genericShrink
805−$(derive makeArbitrary ''Analyzer)
809+instance Arbitrary Analyzer where arbitrary = sopArbitrary; shrink = genericShrink
806−$(derive makeArbitrary ''MaxExpansions)
810+instance Arbitrary MaxExpansions where arbitrary = sopArbitrary; shrink = genericShrink
807−$(derive makeArbitrary ''Lenient)
811+instance Arbitrary Lenient where arbitrary = sopArbitrary; shrink = genericShrink
808−$(derive makeArbitrary ''Tiebreaker)
812+instance Arbitrary Tiebreaker where arbitrary = sopArbitrary; shrink = genericShrink
809−$(derive makeArbitrary ''Boost)
813+instance Arbitrary Boost where arbitrary = sopArbitrary; shrink = genericShrink
810−$(derive makeArbitrary ''BoostTerms)
814+instance Arbitrary BoostTerms where arbitrary = sopArbitrary; shrink = genericShrink
811−$(derive makeArbitrary ''MinimumMatch)
815+instance Arbitrary MinimumMatch where arbitrary = sopArbitrary; shrink = genericShrink
812−$(derive makeArbitrary ''DisableCoord)
816+instance Arbitrary DisableCoord where arbitrary = sopArbitrary; shrink = genericShrink
813−$(derive makeArbitrary ''IgnoreTermFrequency)
817+instance Arbitrary IgnoreTermFrequency where arbitrary = sopArbitrary; shrink = genericShrink
814−$(derive makeArbitrary ''MinimumTermFrequency)
818+instance Arbitrary MinimumTermFrequency where arbitrary = sopArbitrary; shrink = genericShrink
815−$(derive makeArbitrary ''MaxQueryTerms)
819+instance Arbitrary MaxQueryTerms where arbitrary = sopArbitrary; shrink = genericShrink
816−$(derive makeArbitrary ''Fuzziness)
820+instance Arbitrary Fuzziness where arbitrary = sopArbitrary; shrink = genericShrink
817−$(derive makeArbitrary ''PrefixLength)
821+instance Arbitrary PrefixLength where arbitrary = sopArbitrary; shrink = genericShrink
818−$(derive makeArbitrary ''TypeName)
822+instance Arbitrary TypeName where arbitrary = sopArbitrary; shrink = genericShrink
819−$(derive makeArbitrary ''PercentMatch)
823+instance Arbitrary PercentMatch where arbitrary = sopArbitrary; shrink = genericShrink
820−$(derive makeArbitrary ''StopWord)
824+instance Arbitrary StopWord where arbitrary = sopArbitrary; shrink = genericShrink
821−$(derive makeArbitrary ''QueryPath)
825+instance Arbitrary QueryPath where arbitrary = sopArbitrary; shrink = genericShrink
822−$(derive makeArbitrary ''AllowLeadingWildcard)
826+instance Arbitrary AllowLeadingWildcard where arbitrary = sopArbitrary; shrink = genericShrink
823−$(derive makeArbitrary ''LowercaseExpanded)
827+instance Arbitrary LowercaseExpanded where arbitrary = sopArbitrary; shrink = genericShrink
824−$(derive makeArbitrary ''EnablePositionIncrements)
828+instance Arbitrary EnablePositionIncrements where arbitrary = sopArbitrary; shrink = genericShrink
825−$(derive makeArbitrary ''AnalyzeWildcard)
829+instance Arbitrary AnalyzeWildcard where arbitrary = sopArbitrary; shrink = genericShrink
826−$(derive makeArbitrary ''GeneratePhraseQueries)
830+instance Arbitrary GeneratePhraseQueries where arbitrary = sopArbitrary; shrink = genericShrink
827−$(derive makeArbitrary ''Locale)
831+instance Arbitrary Locale where arbitrary = sopArbitrary; shrink = genericShrink
828−$(derive makeArbitrary ''MaxWordLength)
832+instance Arbitrary MaxWordLength where arbitrary = sopArbitrary; shrink = genericShrink
829−$(derive makeArbitrary ''MinWordLength)
833+instance Arbitrary MinWordLength where arbitrary = sopArbitrary; shrink = genericShrink
830−$(derive makeArbitrary ''PhraseSlop)
834+instance Arbitrary PhraseSlop where arbitrary = sopArbitrary; shrink = genericShrink
831−$(derive makeArbitrary ''MinDocFrequency)
835+instance Arbitrary MinDocFrequency where arbitrary = sopArbitrary; shrink = genericShrink
832−$(derive makeArbitrary ''MaxDocFrequency)
836+instance Arbitrary MaxDocFrequency where arbitrary = sopArbitrary; shrink = genericShrink
833−$(derive makeArbitrary ''Regexp)
837+instance Arbitrary Regexp where arbitrary = sopArbitrary; shrink = genericShrink
834−$(derive makeArbitrary ''SimpleQueryStringQuery)
838+instance Arbitrary SimpleQueryStringQuery where arbitrary = sopArbitrary; shrink = genericShrink
835−$(derive makeArbitrary ''FieldOrFields)
839+instance Arbitrary FieldOrFields where arbitrary = sopArbitrary; shrink = genericShrink
836−$(derive makeArbitrary ''SimpleQueryFlag)
840+instance Arbitrary SimpleQueryFlag where arbitrary = sopArbitrary; shrink = genericShrink
837−$(derive makeArbitrary ''RegexpQuery)
841+instance Arbitrary RegexpQuery where arbitrary = sopArbitrary; shrink = genericShrink
838−$(derive makeArbitrary ''QueryStringQuery)
842+instance Arbitrary QueryStringQuery where arbitrary = sopArbitrary; shrink = genericShrink
839−$(derive makeArbitrary ''RangeQuery)
843+instance Arbitrary RangeQuery where arbitrary = sopArbitrary; shrink = genericShrink
840−$(derive makeArbitrary ''RangeValue)
844+instance Arbitrary RangeValue where arbitrary = sopArbitrary; shrink = genericShrink
841−$(derive makeArbitrary ''PrefixQuery)
845+instance Arbitrary PrefixQuery where arbitrary = sopArbitrary; shrink = genericShrink
842−$(derive makeArbitrary ''NestedQuery)
846+instance Arbitrary NestedQuery where arbitrary = sopArbitrary; shrink = genericShrink
843−$(derive makeArbitrary ''MoreLikeThisFieldQuery)
847+instance Arbitrary MoreLikeThisFieldQuery where arbitrary = sopArbitrary; shrink = genericShrink
844−$(derive makeArbitrary ''MoreLikeThisQuery)
848+instance Arbitrary MoreLikeThisQuery where arbitrary = sopArbitrary; shrink = genericShrink
845−$(derive makeArbitrary ''IndicesQuery)
849+instance Arbitrary IndicesQuery where arbitrary = sopArbitrary; shrink = genericShrink
846−$(derive makeArbitrary ''HasParentQuery)
850+instance Arbitrary HasParentQuery where arbitrary = sopArbitrary; shrink = genericShrink
847−$(derive makeArbitrary ''HasChildQuery)
851+instance Arbitrary HasChildQuery where arbitrary = sopArbitrary; shrink = genericShrink
848−$(derive makeArbitrary ''FuzzyQuery)
852+instance Arbitrary FuzzyQuery where arbitrary = sopArbitrary; shrink = genericShrink
849−$(derive makeArbitrary ''FuzzyLikeFieldQuery)
853+instance Arbitrary FuzzyLikeFieldQuery where arbitrary = sopArbitrary; shrink = genericShrink
850−$(derive makeArbitrary ''FuzzyLikeThisQuery)
854+instance Arbitrary FuzzyLikeThisQuery where arbitrary = sopArbitrary; shrink = genericShrink
851−$(derive makeArbitrary ''DisMaxQuery)
855+instance Arbitrary DisMaxQuery where arbitrary = sopArbitrary; shrink = genericShrink
852−$(derive makeArbitrary ''CommonTermsQuery)
856+instance Arbitrary CommonTermsQuery where arbitrary = sopArbitrary; shrink = genericShrink
853−$(derive makeArbitrary ''DistanceRange)
857+instance Arbitrary DistanceRange where arbitrary = sopArbitrary; shrink = genericShrink
854−$(derive makeArbitrary ''MultiMatchQuery)
858+instance Arbitrary MultiMatchQuery where arbitrary = sopArbitrary; shrink = genericShrink
855−$(derive makeArbitrary ''LessThanD)
859+instance Arbitrary LessThanD where arbitrary = sopArbitrary; shrink = genericShrink
856−$(derive makeArbitrary ''LessThanEqD)
860+instance Arbitrary LessThanEqD where arbitrary = sopArbitrary; shrink = genericShrink
857−$(derive makeArbitrary ''GreaterThanD)
861+instance Arbitrary GreaterThanD where arbitrary = sopArbitrary; shrink = genericShrink
858−$(derive makeArbitrary ''GreaterThanEqD)
862+instance Arbitrary GreaterThanEqD where arbitrary = sopArbitrary; shrink = genericShrink
859−$(derive makeArbitrary ''LessThan)
863+instance Arbitrary LessThan where arbitrary = sopArbitrary; shrink = genericShrink
860−$(derive makeArbitrary ''LessThanEq)
864+instance Arbitrary LessThanEq where arbitrary = sopArbitrary; shrink = genericShrink
861−$(derive makeArbitrary ''GreaterThan)
865+instance Arbitrary GreaterThan where arbitrary = sopArbitrary; shrink = genericShrink
862−$(derive makeArbitrary ''GreaterThanEq)
866+instance Arbitrary GreaterThanEq where arbitrary = sopArbitrary; shrink = genericShrink
863−$(derive makeArbitrary ''GeoPoint)
867+instance Arbitrary GeoPoint where arbitrary = sopArbitrary; shrink = genericShrink
864−$(derive makeArbitrary ''NullValue)
868+instance Arbitrary NullValue where arbitrary = sopArbitrary; shrink = genericShrink
865−$(derive makeArbitrary ''MinimumMatchHighLow)
869+instance Arbitrary MinimumMatchHighLow where arbitrary = sopArbitrary; shrink = genericShrink
866−$(derive makeArbitrary ''CommonMinimumMatch)
870+instance Arbitrary CommonMinimumMatch where arbitrary = sopArbitrary; shrink = genericShrink
867−$(derive makeArbitrary ''BoostingQuery)
871+instance Arbitrary BoostingQuery where arbitrary = sopArbitrary; shrink = genericShrink
868−$(derive makeArbitrary ''BoolQuery)
872+instance Arbitrary BoolQuery where arbitrary = sopArbitrary; shrink = genericShrink
869−$(derive makeArbitrary ''MatchQuery)
873+instance Arbitrary MatchQuery where arbitrary = sopArbitrary; shrink = genericShrink
870−$(derive makeArbitrary ''MultiMatchQueryType)
874+instance Arbitrary MultiMatchQueryType where arbitrary = sopArbitrary; shrink = genericShrink
871−$(derive makeArbitrary ''BooleanOperator)
875+instance Arbitrary BooleanOperator where arbitrary = sopArbitrary; shrink = genericShrink
872−$(derive makeArbitrary ''ZeroTermsQuery)
876+instance Arbitrary ZeroTermsQuery where arbitrary = sopArbitrary; shrink = genericShrink
873−$(derive makeArbitrary ''MatchQueryType)
877+instance Arbitrary MatchQueryType where arbitrary = sopArbitrary; shrink = genericShrink
874−$(derive makeArbitrary ''SearchAliasRouting)
878+instance Arbitrary SearchAliasRouting where arbitrary = sopArbitrary; shrink = genericShrink
875−$(derive makeArbitrary ''ScoreType)
879+instance Arbitrary ScoreType where arbitrary = sopArbitrary; shrink = genericShrink
876−$(derive makeArbitrary ''Distance)
880+instance Arbitrary Distance where arbitrary = sopArbitrary; shrink = genericShrink
877−$(derive makeArbitrary ''DistanceUnit)
881+instance Arbitrary DistanceUnit where arbitrary = sopArbitrary; shrink = genericShrink
878−$(derive makeArbitrary ''DistanceType)
882+instance Arbitrary DistanceType where arbitrary = sopArbitrary; shrink = genericShrink
879−$(derive makeArbitrary ''OptimizeBbox)
883+instance Arbitrary OptimizeBbox where arbitrary = sopArbitrary; shrink = genericShrink
880−$(derive makeArbitrary ''GeoBoundingBoxConstraint)
884+instance Arbitrary GeoBoundingBoxConstraint where arbitrary = sopArbitrary; shrink = genericShrink
881−$(derive makeArbitrary ''GeoFilterType)
885+instance Arbitrary GeoFilterType where arbitrary = sopArbitrary; shrink = genericShrink
882−$(derive makeArbitrary ''GeoBoundingBox)
886+instance Arbitrary GeoBoundingBox where arbitrary = sopArbitrary; shrink = genericShrink
883−$(derive makeArbitrary ''LatLon)
887+instance Arbitrary LatLon where arbitrary = sopArbitrary; shrink = genericShrink
884−$(derive makeArbitrary ''RangeExecution)
888+instance Arbitrary RangeExecution where arbitrary = sopArbitrary; shrink = genericShrink
885−$(derive makeArbitrary ''RegexpFlag)
889+instance Arbitrary RegexpFlag where arbitrary = sopArbitrary; shrink = genericShrink
886−$(derive makeArbitrary ''BoolMatch)
890+instance Arbitrary BoolMatch where arbitrary = sopArbitrary; shrink = genericShrink
887−$(derive makeArbitrary ''Term)
891+instance Arbitrary Term where arbitrary = sopArbitrary; shrink = genericShrink
888−$(derive makeArbitrary ''IndexSettings)
892+instance Arbitrary IndexSettings where arbitrary = sopArbitrary; shrink = genericShrink
889−$(derive makeArbitrary ''UpdatableIndexSetting)
893+instance Arbitrary UpdatableIndexSetting where arbitrary = sopArbitrary; shrink = genericShrink
890−$(derive makeArbitrary ''Bytes)
894+instance Arbitrary Bytes where arbitrary = sopArbitrary; shrink = genericShrink
891−$(derive makeArbitrary ''AllocationPolicy)
895+instance Arbitrary AllocationPolicy where arbitrary = sopArbitrary; shrink = genericShrink
892−$(derive makeArbitrary ''InitialShardCount)
896+instance Arbitrary InitialShardCount where arbitrary = sopArbitrary; shrink = genericShrink
893−$(derive makeArbitrary ''FSType)
897+instance Arbitrary FSType where arbitrary = sopArbitrary; shrink = genericShrink
894−$(derive makeArbitrary ''CompoundFormat)
898+instance Arbitrary CompoundFormat where arbitrary = sopArbitrary; shrink = genericShrink
895−$(derive makeArbitrary ''FsSnapshotRepo)
899+instance Arbitrary FsSnapshotRepo where arbitrary = sopArbitrary; shrink = genericShrink
896−$(derive makeArbitrary ''SnapshotRepoName)
900+instance Arbitrary SnapshotRepoName where arbitrary = sopArbitrary; shrink = genericShrink
898newtype UpdatableIndexSetting' = UpdatableIndexSetting' UpdatableIndexSetting
902newtype UpdatableIndexSetting' = UpdatableIndexSetting' UpdatableIndexSetting
899 deriving (Show, Eq, ToJSON, FromJSON, ApproxEq, Typeable)
903 deriving (Show, Eq, ToJSON, FromJSON, ApproxEq, Typeable)
@@ -1617,3 +1621,17 @@ main = hspec $ do
1617 propJSON (Proxy :: Proxy InitialShardCount)
1621 propJSON (Proxy :: Proxy InitialShardCount)
1618 propJSON (Proxy :: Proxy FSType)
1622 propJSON (Proxy :: Proxy FSType)
1619 propJSON (Proxy :: Proxy CompoundFormat)
1623 propJSON (Proxy :: Proxy CompoundFormat)
1625+-- Temporary solution for lacking of generic derivation of Arbitrary
1626+-- We use generics-sop, as it's much more concise than directly using GHC.Generics
1628+-- This will be unneeded after https://github.com/nick8325/quickcheck/pull/112
1629+-- is merged and released
1630+sopArbitrary :: forall a. (Generic a, SOP.GTo a, SOP.All SOP.SListI (SOP.GCode a), SOP.All2 Arbitrary (SOP.GCode a)) => Gen a
1631+sopArbitrary = fmap SOP.gto sopArbitrary'
1633+sopArbitrary' :: forall xss. (SOP.All SOP.SListI xss, SOP.All2 Arbitrary xss) => Gen (SOP.SOP SOP.I xss)
1634+sopArbitrary' = SOP.hsequence =<< elements (SOP.apInjs_POP $ SOP.hcpure p arbitrary)
1636+ p :: Proxy Arbitrary