git.iko.soy/typeable/bloodhound
on master help sign in
563 lines 23 kB history raw
1{-# LANGUAGE CPP #-}
2{-# LANGUAGE GeneralizedNewtypeDeriving #-}
3{-# LANGUAGE OverloadedStrings #-}
4{-# LANGUAGE TemplateHaskell #-}
6module Test.Generators where
8import Database.Bloodhound
10import Test.Import
12import qualified Data.HashMap.Strict as HM
13import qualified Data.List as L
14import qualified Data.List.NonEmpty as NE
15import qualified Data.Map as M
16import qualified Data.Text as T
17import qualified Data.SemVer as SemVer
18import Test.QuickCheck.TH.Generators
20import Test.ApproxEq
22instance Arbitrary NominalDiffTime where
23 arbitrary = fromInteger <$> arbitrary
25#if !MIN_VERSION_QuickCheck(2,8,0)
26instance (Arbitrary k, Ord k, Arbitrary v) => Arbitrary (M.Map k v) where
27 arbitrary = M.fromList <$> arbitrary
28#endif
30instance Arbitrary Text where
31 arbitrary = T.pack <$> arbitrary
33instance Arbitrary UTCTime where
34 arbitrary = UTCTime
35 <$> arbitrary
36 <*> (fromRational . toRational <$> choose (0::Double, 86400))
38instance Arbitrary Day where
39 arbitrary =
40 ModifiedJulianDay . (2000 +) <$> arbitrary
41 shrink =
42 (ModifiedJulianDay <$>) . shrink . toModifiedJulianDay
44#if !MIN_VERSION_QuickCheck(2,9,0)
45instance Arbitrary a => Arbitrary (NonEmpty a) where
46 arbitrary = liftA2 (:|) arbitrary arbitrary
47#endif
49arbitraryScore :: Gen Score
50arbitraryScore = fmap getPositive <$> arbitrary
52instance (Arbitrary a, Typeable a) => Arbitrary (Hit a) where
53 arbitrary = Hit <$> arbitrary
54 <*> arbitrary
55 <*> arbitrary
56 <*> arbitraryScore
57 <*> arbitrary
58 <*> return Nothing
59 <*> arbitrary
60 <*> arbitrary
62instance Arbitrary HitFields where
63 arbitrary = pure (HitFields M.empty)
64 shrink = const []
66instance (Arbitrary a, Typeable a) => Arbitrary (SearchHits a) where
67 arbitrary = reduceSize $ do
68 tot <- getPositive <$> arbitrary
69 score <- arbitraryScore
70 hs <- arbitrary
71 return $ SearchHits tot score hs
74reduceSize :: Gen a -> Gen a
75reduceSize f = sized $ \n -> resize (n `div` 2) f
77arbitraryAlphaNum :: Gen Char
78arbitraryAlphaNum = oneof [choose ('a', 'z')
79 ,choose ('A','Z')
80 , choose ('0', '9')]
82instance Arbitrary RoutingValue where
83 arbitrary = RoutingValue . T.pack <$> listOf1 arbitraryAlphaNum
85instance Arbitrary AliasRouting where
86 arbitrary = oneof [allAlias
87 ,one
88 ,theOther
89 ,both']
90 where one = GranularAliasRouting
91 <$> (Just <$> arbitrary)
92 <*> pure Nothing
93 theOther = GranularAliasRouting Nothing
94 <$> (Just <$> arbitrary)
95 both' = GranularAliasRouting
96 <$> (Just <$> arbitrary)
97 <*> (Just <$> arbitrary)
98 allAlias = AllAliasRouting <$> arbitrary
102instance Arbitrary FieldName where
103 arbitrary =
104 FieldName
105 . T.pack
106 <$> listOf1 arbitraryAlphaNum
109#if MIN_VERSION_base(4,10,0)
110-- Test.QuickCheck.Modifiers
112qcNonEmptyToNonEmpty :: NonEmptyList a -> NonEmpty a
113qcNonEmptyToNonEmpty (NonEmpty (a : xs)) = (a :| xs)
114qcNonEmptyToNonEmpty (NonEmpty []) = error "NonEmpty was empty!"
116instance Arbitrary a => Arbitrary (NonEmpty a) where
117 arbitrary =
118 qcNonEmptyToNonEmpty
119 <$> arbitrary
120#endif
121instance Arbitrary ScriptFields where
122 arbitrary =
123 pure $ ScriptFields $
124 HM.fromList []
126 shrink = const []
128instance Arbitrary ScriptParams where
129 arbitrary =
130 pure $ ScriptParams $
131 HM.fromList [ ("a", Number 42)
132 , ("b", String "forty two")
133 ]
135 shrink = const []
137instance Arbitrary RegexpFlags where
138 arbitrary = oneof [ pure AllRegexpFlags
139 , pure NoRegexpFlags
140 , SomeRegexpFlags <$> genUniqueFlags
141 ]
142 where genUniqueFlags =
143 NE.fromList . L.nub
144 <$> listOf1 arbitrary
146instance Arbitrary IndexAliasCreate where
147 arbitrary =
148 IndexAliasCreate
149 <$> arbitrary
150 <*> reduceSize arbitrary
152instance Arbitrary Query where
153 arbitrary =
154 reduceSize
155 $ oneof [ TermQuery <$> arbitrary <*> arbitrary
156 , TermsQuery <$> arbitrary <*> arbitrary
157 , QueryMatchQuery <$> arbitrary
158 , QueryMultiMatchQuery <$> arbitrary
159 , QueryBoolQuery <$> arbitrary
160 , QueryBoostingQuery <$> arbitrary
161 , QueryCommonTermsQuery <$> arbitrary
162 , ConstantScoreQuery <$> arbitrary <*> arbitrary
163 , QueryDisMaxQuery <$> arbitrary
164 , QueryFuzzyLikeThisQuery <$> arbitrary
165 , QueryFuzzyLikeFieldQuery <$> arbitrary
166 , QueryFuzzyQuery <$> arbitrary
167 , QueryHasChildQuery <$> arbitrary
168 , QueryHasParentQuery <$> arbitrary
169 , IdsQuery <$> arbitrary <*> arbitrary
170 , QueryIndicesQuery <$> arbitrary
171 , MatchAllQuery <$> arbitrary
172 , QueryMoreLikeThisQuery <$> arbitrary
173 , QueryMoreLikeThisFieldQuery <$> arbitrary
174 , QueryNestedQuery <$> arbitrary
175 , QueryPrefixQuery <$> arbitrary
176 , QueryQueryStringQuery <$> arbitrary
177 , QuerySimpleQueryStringQuery <$> arbitrary
178 , QueryRangeQuery <$> arbitrary
179 , QueryRegexpQuery <$> arbitrary
180 , QueryTemplateQueryInline <$> arbitrary
181 ]
182 -- TODO: Implement shrink
183 -- shrink = genericShrink
185instance Arbitrary Filter where
186 arbitrary =
187 Filter <$> arbitrary
188 shrink (Filter q) =
189 Filter <$> shrink q
191instance Arbitrary ReplicaBounds where
192 arbitrary = oneof [ replicasBounded
193 , replicasLowerBounded
194 , pure ReplicasUnbounded
195 ]
196 where replicasBounded = do
197 Positive a <- arbitrary
198 Positive b <- arbitrary
199 return (ReplicasBounded a b)
200 replicasLowerBounded = do
201 Positive a <- arbitrary
202 return (ReplicasLowerBounded a)
204instance Arbitrary NodeAttrName where
205 arbitrary =
206 NodeAttrName
207 . T.pack
208 <$> listOf1 arbitraryAlphaNum
211instance Arbitrary NodeAttrFilter where
212 arbitrary = do
213 n <- arbitrary
214 xs <- listOf1 (listOf1 arbitraryAlphaNum)
215 let (s, ss) = unpackConsPartial xs
216 ts = T.pack <$> s :| ss
217 return (NodeAttrFilter n ts)
218 where -- listOf1 means this shouldn't blow up.
219 unpackConsPartial (x : xs) = (x, xs)
220 unpackConsPartial _ = error "unpackConsPartial failed but shouldn't have"
222instance Arbitrary VersionNumber where
223 arbitrary = do
224 major <- posInt
225 minor <- posInt
226 patch <- posInt
227 return $ VersionNumber $ SemVer.version major minor patch [] []
228 where
229 posInt = getPositive <$> arbitrary
231instance Arbitrary TemplateQueryKeyValuePairs where
232 arbitrary = TemplateQueryKeyValuePairs . HM.fromList <$> arbitrary
233 shrink (TemplateQueryKeyValuePairs x) = map (TemplateQueryKeyValuePairs . HM.fromList) . shrink $ HM.toList x
235makeArbitrary ''IndexName
236instance Arbitrary IndexName where arbitrary = arbitraryIndexName
237makeArbitrary ''MappingName
238instance Arbitrary MappingName where arbitrary = arbitraryMappingName
239makeArbitrary ''DocId
240instance Arbitrary DocId where arbitrary = arbitraryDocId
241makeArbitrary ''Version
242instance Arbitrary Version where arbitrary = arbitraryVersion
243makeArbitrary ''BuildHash
244instance Arbitrary BuildHash where arbitrary = arbitraryBuildHash
245makeArbitrary ''IndexAliasRouting
246instance Arbitrary IndexAliasRouting where arbitrary = arbitraryIndexAliasRouting
247makeArbitrary ''ShardCount
248instance Arbitrary ShardCount where arbitrary = arbitraryShardCount
249makeArbitrary ''ReplicaCount
250instance Arbitrary ReplicaCount where arbitrary = arbitraryReplicaCount
251makeArbitrary ''TemplateName
252instance Arbitrary TemplateName where arbitrary = arbitraryTemplateName
253makeArbitrary ''TemplatePattern
254instance Arbitrary TemplatePattern where arbitrary = arbitraryTemplatePattern
255makeArbitrary ''QueryString
256instance Arbitrary QueryString where arbitrary = arbitraryQueryString
257makeArbitrary ''CacheName
258instance Arbitrary CacheName where arbitrary = arbitraryCacheName
259makeArbitrary ''CacheKey
260instance Arbitrary CacheKey where arbitrary = arbitraryCacheKey
261makeArbitrary ''Existence
262instance Arbitrary Existence where arbitrary = arbitraryExistence
263makeArbitrary ''CutoffFrequency
264instance Arbitrary CutoffFrequency where arbitrary = arbitraryCutoffFrequency
265makeArbitrary ''Analyzer
266instance Arbitrary Analyzer where arbitrary = arbitraryAnalyzer
267makeArbitrary ''MaxExpansions
268instance Arbitrary MaxExpansions where arbitrary = arbitraryMaxExpansions
269makeArbitrary ''Lenient
270instance Arbitrary Lenient where arbitrary = arbitraryLenient
271makeArbitrary ''Tiebreaker
272instance Arbitrary Tiebreaker where arbitrary = arbitraryTiebreaker
273makeArbitrary ''Boost
274instance Arbitrary Boost where arbitrary = arbitraryBoost
275makeArbitrary ''BoostTerms
276instance Arbitrary BoostTerms where arbitrary = arbitraryBoostTerms
277makeArbitrary ''MinimumMatch
278instance Arbitrary MinimumMatch where arbitrary = arbitraryMinimumMatch
279makeArbitrary ''DisableCoord
280instance Arbitrary DisableCoord where arbitrary = arbitraryDisableCoord
281makeArbitrary ''IgnoreTermFrequency
282instance Arbitrary IgnoreTermFrequency where arbitrary = arbitraryIgnoreTermFrequency
283makeArbitrary ''MinimumTermFrequency
284instance Arbitrary MinimumTermFrequency where arbitrary = arbitraryMinimumTermFrequency
285makeArbitrary ''MaxQueryTerms
286instance Arbitrary MaxQueryTerms where arbitrary = arbitraryMaxQueryTerms
287makeArbitrary ''Fuzziness
288instance Arbitrary Fuzziness where arbitrary = arbitraryFuzziness
289makeArbitrary ''PrefixLength
290instance Arbitrary PrefixLength where arbitrary = arbitraryPrefixLength
291makeArbitrary ''TypeName
292instance Arbitrary TypeName where arbitrary = arbitraryTypeName
293makeArbitrary ''PercentMatch
294instance Arbitrary PercentMatch where arbitrary = arbitraryPercentMatch
295makeArbitrary ''StopWord
296instance Arbitrary StopWord where arbitrary = arbitraryStopWord
297makeArbitrary ''QueryPath
298instance Arbitrary QueryPath where arbitrary = arbitraryQueryPath
299makeArbitrary ''AllowLeadingWildcard
300instance Arbitrary AllowLeadingWildcard where arbitrary = arbitraryAllowLeadingWildcard
301makeArbitrary ''LowercaseExpanded
302instance Arbitrary LowercaseExpanded where arbitrary = arbitraryLowercaseExpanded
303makeArbitrary ''EnablePositionIncrements
304instance Arbitrary EnablePositionIncrements where arbitrary = arbitraryEnablePositionIncrements
305makeArbitrary ''AnalyzeWildcard
306instance Arbitrary AnalyzeWildcard where arbitrary = arbitraryAnalyzeWildcard
307makeArbitrary ''GeneratePhraseQueries
308instance Arbitrary GeneratePhraseQueries where arbitrary = arbitraryGeneratePhraseQueries
309makeArbitrary ''Locale
310instance Arbitrary Locale where arbitrary = arbitraryLocale
311makeArbitrary ''MaxWordLength
312instance Arbitrary MaxWordLength where arbitrary = arbitraryMaxWordLength
313makeArbitrary ''MinWordLength
314instance Arbitrary MinWordLength where arbitrary = arbitraryMinWordLength
315makeArbitrary ''PhraseSlop
316instance Arbitrary PhraseSlop where arbitrary = arbitraryPhraseSlop
317makeArbitrary ''MinDocFrequency
318instance Arbitrary MinDocFrequency where arbitrary = arbitraryMinDocFrequency
319makeArbitrary ''MaxDocFrequency
320instance Arbitrary MaxDocFrequency where arbitrary = arbitraryMaxDocFrequency
321makeArbitrary ''Regexp
322instance Arbitrary Regexp where arbitrary = arbitraryRegexp
323makeArbitrary ''SimpleQueryStringQuery
324instance Arbitrary SimpleQueryStringQuery where arbitrary = arbitrarySimpleQueryStringQuery
325makeArbitrary ''FieldOrFields
326instance Arbitrary FieldOrFields where arbitrary = arbitraryFieldOrFields
327makeArbitrary ''SimpleQueryFlag
328instance Arbitrary SimpleQueryFlag where arbitrary = arbitrarySimpleQueryFlag
329makeArbitrary ''RegexpQuery
330instance Arbitrary RegexpQuery where arbitrary = arbitraryRegexpQuery
331makeArbitrary ''QueryStringQuery
332instance Arbitrary QueryStringQuery where arbitrary = arbitraryQueryStringQuery
333makeArbitrary ''RangeQuery
334instance Arbitrary RangeQuery where arbitrary = arbitraryRangeQuery
335makeArbitrary ''RangeValue
336instance Arbitrary RangeValue where arbitrary = arbitraryRangeValue
337makeArbitrary ''PrefixQuery
338instance Arbitrary PrefixQuery where arbitrary = arbitraryPrefixQuery
339makeArbitrary ''NestedQuery
340instance Arbitrary NestedQuery where arbitrary = arbitraryNestedQuery
341makeArbitrary ''MoreLikeThisFieldQuery
342instance Arbitrary MoreLikeThisFieldQuery where arbitrary = arbitraryMoreLikeThisFieldQuery
343makeArbitrary ''MoreLikeThisQuery
344instance Arbitrary MoreLikeThisQuery where arbitrary = arbitraryMoreLikeThisQuery
345makeArbitrary ''IndicesQuery
346instance Arbitrary IndicesQuery where arbitrary = arbitraryIndicesQuery
347makeArbitrary ''HasParentQuery
348instance Arbitrary HasParentQuery where arbitrary = arbitraryHasParentQuery
349makeArbitrary ''HasChildQuery
350instance Arbitrary HasChildQuery where arbitrary = arbitraryHasChildQuery
351makeArbitrary ''FuzzyQuery
352instance Arbitrary FuzzyQuery where arbitrary = arbitraryFuzzyQuery
353makeArbitrary ''FuzzyLikeFieldQuery
354instance Arbitrary FuzzyLikeFieldQuery where arbitrary = arbitraryFuzzyLikeFieldQuery
355makeArbitrary ''FuzzyLikeThisQuery
356instance Arbitrary FuzzyLikeThisQuery where arbitrary = arbitraryFuzzyLikeThisQuery
357makeArbitrary ''DisMaxQuery
358instance Arbitrary DisMaxQuery where arbitrary = arbitraryDisMaxQuery
359makeArbitrary ''CommonTermsQuery
360instance Arbitrary CommonTermsQuery where arbitrary = arbitraryCommonTermsQuery
361makeArbitrary ''DistanceRange
362instance Arbitrary DistanceRange where arbitrary = arbitraryDistanceRange
363makeArbitrary ''MultiMatchQuery
364instance Arbitrary MultiMatchQuery where arbitrary = arbitraryMultiMatchQuery
365makeArbitrary ''LessThanD
366instance Arbitrary LessThanD where arbitrary = arbitraryLessThanD
367makeArbitrary ''LessThanEqD
368instance Arbitrary LessThanEqD where arbitrary = arbitraryLessThanEqD
369makeArbitrary ''GreaterThanD
370instance Arbitrary GreaterThanD where arbitrary = arbitraryGreaterThanD
371makeArbitrary ''GreaterThanEqD
372instance Arbitrary GreaterThanEqD where arbitrary = arbitraryGreaterThanEqD
373makeArbitrary ''LessThan
374instance Arbitrary LessThan where arbitrary = arbitraryLessThan
375makeArbitrary ''LessThanEq
376instance Arbitrary LessThanEq where arbitrary = arbitraryLessThanEq
377makeArbitrary ''GreaterThan
378instance Arbitrary GreaterThan where arbitrary = arbitraryGreaterThan
379makeArbitrary ''GreaterThanEq
380instance Arbitrary GreaterThanEq where arbitrary = arbitraryGreaterThanEq
381makeArbitrary ''GeoPoint
382instance Arbitrary GeoPoint where arbitrary = arbitraryGeoPoint
383makeArbitrary ''NullValue
384instance Arbitrary NullValue where arbitrary = arbitraryNullValue
385makeArbitrary ''MinimumMatchHighLow
386instance Arbitrary MinimumMatchHighLow where arbitrary = arbitraryMinimumMatchHighLow
387makeArbitrary ''CommonMinimumMatch
388instance Arbitrary CommonMinimumMatch where arbitrary = arbitraryCommonMinimumMatch
389makeArbitrary ''BoostingQuery
390instance Arbitrary BoostingQuery where arbitrary = arbitraryBoostingQuery
391makeArbitrary ''BoolQuery
392instance Arbitrary BoolQuery where arbitrary = arbitraryBoolQuery
393makeArbitrary ''MatchQuery
394instance Arbitrary MatchQuery where arbitrary = arbitraryMatchQuery
395makeArbitrary ''MultiMatchQueryType
396instance Arbitrary MultiMatchQueryType where arbitrary = arbitraryMultiMatchQueryType
397makeArbitrary ''BooleanOperator
398instance Arbitrary BooleanOperator where arbitrary = arbitraryBooleanOperator
399makeArbitrary ''ZeroTermsQuery
400instance Arbitrary ZeroTermsQuery where arbitrary = arbitraryZeroTermsQuery
401makeArbitrary ''MatchQueryType
402instance Arbitrary MatchQueryType where arbitrary = arbitraryMatchQueryType
403makeArbitrary ''SearchAliasRouting
404instance Arbitrary SearchAliasRouting where arbitrary = arbitrarySearchAliasRouting
405makeArbitrary ''ScoreType
406instance Arbitrary ScoreType where arbitrary = arbitraryScoreType
407makeArbitrary ''Distance
408instance Arbitrary Distance where arbitrary = arbitraryDistance
409makeArbitrary ''DistanceUnit
410instance Arbitrary DistanceUnit where arbitrary = arbitraryDistanceUnit
411makeArbitrary ''DistanceType
412instance Arbitrary DistanceType where arbitrary = arbitraryDistanceType
413makeArbitrary ''OptimizeBbox
414instance Arbitrary OptimizeBbox where arbitrary = arbitraryOptimizeBbox
415makeArbitrary ''GeoBoundingBoxConstraint
416instance Arbitrary GeoBoundingBoxConstraint where arbitrary = arbitraryGeoBoundingBoxConstraint
417makeArbitrary ''GeoFilterType
418instance Arbitrary GeoFilterType where arbitrary = arbitraryGeoFilterType
419makeArbitrary ''GeoBoundingBox
420instance Arbitrary GeoBoundingBox where arbitrary = arbitraryGeoBoundingBox
421makeArbitrary ''LatLon
422instance Arbitrary LatLon where arbitrary = arbitraryLatLon
423makeArbitrary ''RangeExecution
424instance Arbitrary RangeExecution where arbitrary = arbitraryRangeExecution
425makeArbitrary ''RegexpFlag
426instance Arbitrary RegexpFlag where arbitrary = arbitraryRegexpFlag
427makeArbitrary ''BoolMatch
428instance Arbitrary BoolMatch where arbitrary = arbitraryBoolMatch
429makeArbitrary ''Term
430instance Arbitrary Term where arbitrary = arbitraryTerm
431makeArbitrary ''IndexSettings
432instance Arbitrary IndexSettings where arbitrary = arbitraryIndexSettings
433makeArbitrary ''TokenChar
434instance Arbitrary TokenChar where arbitrary = arbitraryTokenChar
435makeArbitrary ''Ngram
436instance Arbitrary Ngram where arbitrary = arbitraryNgram
437makeArbitrary ''TokenizerDefinition
438instance Arbitrary TokenizerDefinition where arbitrary = arbitraryTokenizerDefinition
439makeArbitrary ''TokenFilter
440instance Arbitrary TokenFilter where arbitrary = arbitraryTokenFilter
441makeArbitrary ''TokenFilterDefinition
442instance Arbitrary TokenFilterDefinition where arbitrary = arbitraryTokenFilterDefinition
443makeArbitrary ''Language
444instance Arbitrary Language where arbitrary = arbitraryLanguage
445makeArbitrary ''Shingle
446instance Arbitrary Shingle where arbitrary = arbitraryShingle
448makeArbitrary ''CharFilter
449instance Arbitrary CharFilter where arbitrary = arbitraryCharFilter
450makeArbitrary ''AnalyzerDefinition
451instance Arbitrary AnalyzerDefinition where arbitrary = arbitraryAnalyzerDefinition
453-- TODO: This should have a proper generator that doesn't
454-- create garbage that has to be filtered out.
455instance Arbitrary CharFilterDefinition where
456 arbitrary =
457 oneof [ CharFilterDefinitionMapping
458 . chomp <$> arbitrary
459 , CharFilterDefinitionPatternReplace
460 <$> arbitrary <*> arbitrary <*> arbitrary
461 ]
462 where chomp =
463 M.map T.strip
464 . M.mapKeys (T.replace "=>" "" . T.strip)
466makeArbitrary ''Analysis
467instance Arbitrary Analysis where arbitrary = arbitraryAnalysis
468makeArbitrary ''Tokenizer
469instance Arbitrary Tokenizer where arbitrary = arbitraryTokenizer
470makeArbitrary ''Compression
471instance Arbitrary Compression where arbitrary = arbitraryCompression
472makeArbitrary ''Bytes
473instance Arbitrary Bytes where arbitrary = arbitraryBytes
474makeArbitrary ''AllocationPolicy
475instance Arbitrary AllocationPolicy where arbitrary = arbitraryAllocationPolicy
476makeArbitrary ''InitialShardCount
477instance Arbitrary InitialShardCount where arbitrary = arbitraryInitialShardCount
478makeArbitrary ''FSType
479instance Arbitrary FSType where arbitrary = arbitraryFSType
480makeArbitrary ''CompoundFormat
481instance Arbitrary CompoundFormat where arbitrary = arbitraryCompoundFormat
482makeArbitrary ''FsSnapshotRepo
483instance Arbitrary FsSnapshotRepo where arbitrary = arbitraryFsSnapshotRepo
484makeArbitrary ''SnapshotRepoName
485instance Arbitrary SnapshotRepoName where arbitrary = arbitrarySnapshotRepoName
486makeArbitrary ''TemplateQueryInline
487instance Arbitrary TemplateQueryInline where arbitrary = arbitraryTemplateQueryInline
488makeArbitrary ''DirectGeneratorSuggestModeTypes
489instance Arbitrary DirectGeneratorSuggestModeTypes where arbitrary = arbitraryDirectGeneratorSuggestModeTypes
490makeArbitrary ''DirectGenerators
491instance Arbitrary DirectGenerators where arbitrary = arbitraryDirectGenerators
492makeArbitrary ''PhraseSuggesterCollate
493instance Arbitrary PhraseSuggesterCollate where arbitrary = arbitraryPhraseSuggesterCollate
494makeArbitrary ''PhraseSuggesterHighlighter
495instance Arbitrary PhraseSuggesterHighlighter where arbitrary = arbitraryPhraseSuggesterHighlighter
496makeArbitrary ''Size
497instance Arbitrary Size where arbitrary = arbitrarySize
498makeArbitrary ''PhraseSuggester
499instance Arbitrary PhraseSuggester where arbitrary = arbitraryPhraseSuggester
500makeArbitrary ''SuggestType
501instance Arbitrary SuggestType where arbitrary = arbitrarySuggestType
502makeArbitrary ''Suggest
503instance Arbitrary Suggest where arbitrary = arbitrarySuggest
505makeArbitrary ''FunctionScoreQuery
506instance Arbitrary FunctionScoreQuery where arbitrary = arbitraryFunctionScoreQuery
508makeArbitrary ''FunctionScoreFunction
509instance Arbitrary FunctionScoreFunction where arbitrary = arbitraryFunctionScoreFunction
510makeArbitrary ''FunctionScoreFunctions
511instance Arbitrary FunctionScoreFunctions where arbitrary = arbitraryFunctionScoreFunctions
512makeArbitrary ''ComponentFunctionScoreFunction
513instance Arbitrary ComponentFunctionScoreFunction where arbitrary = arbitraryComponentFunctionScoreFunction
514makeArbitrary ''Script
515instance Arbitrary Script where arbitrary = arbitraryScript
516makeArbitrary ''ScriptLanguage
517instance Arbitrary ScriptLanguage where arbitrary = arbitraryScriptLanguage
518makeArbitrary ''ScriptInline
519instance Arbitrary ScriptInline where arbitrary = arbitraryScriptInline
520makeArbitrary ''ScriptId
521instance Arbitrary ScriptId where arbitrary = arbitraryScriptId
522makeArbitrary ''ScoreMode
523instance Arbitrary ScoreMode where arbitrary = arbitraryScoreMode
524makeArbitrary ''BoostMode
525instance Arbitrary BoostMode where arbitrary = arbitraryBoostMode
526makeArbitrary ''Seed
527instance Arbitrary Seed where arbitrary = arbitrarySeed
528makeArbitrary ''FieldValueFactor
529instance Arbitrary FieldValueFactor where arbitrary = arbitraryFieldValueFactor
530makeArbitrary ''Weight
531instance Arbitrary Weight where arbitrary = arbitraryWeight
532makeArbitrary ''Factor
533instance Arbitrary Factor where arbitrary = arbitraryFactor
534makeArbitrary ''FactorMissingFieldValue
535instance Arbitrary FactorMissingFieldValue where arbitrary = arbitraryFactorMissingFieldValue
536makeArbitrary ''FactorModifier
537instance Arbitrary FactorModifier where arbitrary = arbitraryFactorModifier
539makeArbitrary ''UpdatableIndexSetting
540instance Arbitrary UpdatableIndexSetting where
541 arbitrary = resize 10 arbitraryUpdatableIndexSetting
543newtype UpdatableIndexSetting' =
544 UpdatableIndexSetting' UpdatableIndexSetting
545 deriving (Show, Eq, ToJSON, FromJSON, ApproxEq, Typeable)
547instance Arbitrary UpdatableIndexSetting' where
548 arbitrary = do
549 settings <- arbitrary
550 return $ UpdatableIndexSetting' $ case settings of
551 RoutingAllocationInclude xs ->
552 RoutingAllocationInclude (dropDuplicateAttrNames xs)
553 RoutingAllocationExclude xs ->
554 RoutingAllocationExclude (dropDuplicateAttrNames xs)
555 RoutingAllocationRequire xs ->
556 RoutingAllocationRequire (dropDuplicateAttrNames xs)
557 x -> x
558 where
559 dropDuplicateAttrNames =
560 NE.fromList . L.nubBy sameAttrName . NE.toList
561 sameAttrName a b =
562 nodeAttrFilterName a == nodeAttrFilterName b
563 shrink (UpdatableIndexSetting' x) = map UpdatableIndexSetting' (shrink x)