prop_check 0.10.4 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/prop_check/generator.rb +3 -5
- data/lib/prop_check/generators.rb +41 -15
- data/lib/prop_check/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6938e33edff09860d467d560675d04173ac8f44c487f65f22a4253bcad01a465
|
4
|
+
data.tar.gz: 1ed4f6b097d008461e251f285ad52fcd32dfce27cc306862b250cea45e0b954a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e8d7498c00b09f17ec90fced0b130158e1919270837bad1af82ca7f4140f8904816c377cdd3489aea38d6ef36b911a128a92ca956c598daf9f0f88654ca4ac64
|
7
|
+
data.tar.gz: b05e4c9364808468af3c5b9807cc8cc8e036a780e449efd0468f7b577853bd3a286371a3312073c0cf5952c5debb12dd6b13ad2d3e8d0fed0952839db680757c
|
data/lib/prop_check/generator.rb
CHANGED
@@ -100,17 +100,15 @@ module PropCheck
|
|
100
100
|
def map(&proc)
|
101
101
|
Generator.new do |size, rng|
|
102
102
|
result = self.generate(size, rng)
|
103
|
-
result.map
|
104
|
-
proc.call(*val)
|
105
|
-
end
|
103
|
+
result.map(&proc)
|
106
104
|
end
|
107
105
|
end
|
108
106
|
|
109
107
|
##
|
110
108
|
# Creates a new Generator that only produces a value when the block `condition` returns a truthy value.
|
111
109
|
def where(&condition)
|
112
|
-
self.map do
|
113
|
-
if condition.call(
|
110
|
+
self.map do |result|
|
111
|
+
if condition.call(result)
|
114
112
|
result
|
115
113
|
else
|
116
114
|
:"_PropCheck.filter_me"
|
@@ -227,19 +227,45 @@ module PropCheck
|
|
227
227
|
# is generated by `element_generator`.
|
228
228
|
#
|
229
229
|
# Shrinks to shorter arrays (with shrunken elements).
|
230
|
+
# Accepted keyword arguments:
|
230
231
|
#
|
232
|
+
# `empty:` When false, behaves the same as `min: 1`
|
233
|
+
# `min:` Ensures at least this many elements are generated. (default: 0)
|
234
|
+
# `max:` Ensures at most this many elements are generated. When nil, an arbitrary count is used instead. (default: nil)
|
235
|
+
#
|
236
|
+
#
|
237
|
+
# >> Generators.array(Generators.positive_integer).sample(5, size: 1, rng: Random.new(42))
|
238
|
+
# => [[2], [2], [2], [1], [2]]
|
231
239
|
# >> Generators.array(Generators.positive_integer).sample(5, size: 10, rng: Random.new(42))
|
232
240
|
# => [[10, 5, 1, 4], [5, 9, 1, 1, 11, 8, 4, 9, 11, 10], [6], [11, 11, 2, 2, 7, 2, 6, 5, 5], [2, 10, 9, 7, 9, 5, 11, 3]]
|
233
|
-
|
234
|
-
|
235
|
-
|
241
|
+
#
|
242
|
+
# >> Generators.array(Generators.positive_integer, empty: true).sample(5, size: 1, rng: Random.new(1))
|
243
|
+
# => [[], [2], [], [], [2]]
|
244
|
+
# >> Generators.array(Generators.positive_integer, empty: false).sample(5, size: 1, rng: Random.new(1))
|
245
|
+
# => [[2], [1], [2], [1], [1]]
|
246
|
+
|
247
|
+
|
248
|
+
def array(element_generator, min: 0, max: nil, empty: true)
|
249
|
+
min = 1 if min.zero? && !empty
|
250
|
+
|
251
|
+
res = proc do |count|
|
252
|
+
count = min + 1 if count < min
|
253
|
+
count += 1 if count == min && min != 0
|
254
|
+
generators = (min...count).map do
|
236
255
|
element_generator.clone
|
237
256
|
end
|
238
257
|
|
239
258
|
tuple(*generators)
|
240
259
|
end
|
260
|
+
|
261
|
+
if max.nil?
|
262
|
+
nonnegative_integer.bind(&res)
|
263
|
+
else
|
264
|
+
proc.call(max)
|
265
|
+
end
|
241
266
|
end
|
242
267
|
|
268
|
+
|
243
269
|
##
|
244
270
|
# Generates a hash of key->values,
|
245
271
|
# where each of the keys is made using the `key_generator`
|
@@ -249,8 +275,8 @@ module PropCheck
|
|
249
275
|
#
|
250
276
|
# >> Generators.hash(Generators.printable_ascii_string, Generators.positive_integer).sample(5, size: 3, rng: Random.new(42))
|
251
277
|
# => [{""=>2, "g\\4"=>4, "rv"=>2}, {"7"=>2}, {"!"=>1, "E!"=>1}, {"kY5"=>2}, {}]
|
252
|
-
def hash(key_generator, value_generator)
|
253
|
-
array(tuple(key_generator, value_generator))
|
278
|
+
def hash(key_generator, value_generator, **kwargs)
|
279
|
+
array(tuple(key_generator, value_generator), **kwargs)
|
254
280
|
.map(&:to_h)
|
255
281
|
end
|
256
282
|
|
@@ -276,8 +302,8 @@ module PropCheck
|
|
276
302
|
#
|
277
303
|
# >> Generators.alphanumeric_string.sample(5, size: 10, rng: Random.new(42))
|
278
304
|
# => ["ZCoQ", "8uM", "wkkx0JNx", "v0bxRDLb", "Gl5v8RyWA6"]
|
279
|
-
def alphanumeric_string
|
280
|
-
array(alphanumeric_char).map(&:join)
|
305
|
+
def alphanumeric_string(**kwargs)
|
306
|
+
array(alphanumeric_char, **kwargs).map(&:join)
|
281
307
|
end
|
282
308
|
|
283
309
|
@printable_ascii_chars = (' '..'~').to_a.freeze
|
@@ -302,8 +328,8 @@ module PropCheck
|
|
302
328
|
#
|
303
329
|
# >> Generators.printable_ascii_string.sample(5, size: 10, rng: Random.new(42))
|
304
330
|
# => ["S|.g", "rvjjw7\"5T!", "=", "!_[4@", "Y"]
|
305
|
-
def printable_ascii_string
|
306
|
-
array(printable_ascii_char).map(&:join)
|
331
|
+
def printable_ascii_string(**kwargs)
|
332
|
+
array(printable_ascii_char, **kwargs).map(&:join)
|
307
333
|
end
|
308
334
|
|
309
335
|
@ascii_chars = [
|
@@ -341,8 +367,8 @@ module PropCheck
|
|
341
367
|
#
|
342
368
|
# >> Generators.ascii_string.sample(5, size: 10, rng: Random.new(42))
|
343
369
|
# => ["S|.g", "drvjjw\b\a7\"", "!w=E!_[4@k", "x", "zZI{[o"]
|
344
|
-
def ascii_string
|
345
|
-
array(ascii_char).map(&:join)
|
370
|
+
def ascii_string(**kwargs)
|
371
|
+
array(ascii_char, **kwargs).map(&:join)
|
346
372
|
end
|
347
373
|
|
348
374
|
@printable_chars = [
|
@@ -372,8 +398,8 @@ module PropCheck
|
|
372
398
|
#
|
373
399
|
# >> Generators.printable_string.sample(5, size: 10, rng: Random.new(42))
|
374
400
|
# => ["", "Ȍ", "𐁂", "Ȕ", ""]
|
375
|
-
def printable_string
|
376
|
-
array(printable_char).map(&:join)
|
401
|
+
def printable_string(**kwargs)
|
402
|
+
array(printable_char, **kwargs).map(&:join)
|
377
403
|
end
|
378
404
|
|
379
405
|
##
|
@@ -398,8 +424,8 @@ module PropCheck
|
|
398
424
|
#
|
399
425
|
# >> Generators.string.sample(5, size: 10, rng: Random.new(42))
|
400
426
|
# => ["\u{A3DB3}𠍜\u{3F46A}\u{1AEBC}", "𡡹\u{DED74}𪱣\u{43E97}ꂂ\u{50695}\u{C0301}", "\u{4FD9D}", "\u{C14BF}\u{193BB}𭇋\u{76B58}", "𦐺\u{9FDDB}\u{80ABB}\u{9E3CF}𐂽\u{14AAE}"]
|
401
|
-
def string
|
402
|
-
array(char).map(&:join)
|
427
|
+
def string(**kwargs)
|
428
|
+
array(char, **kwargs).map(&:join)
|
403
429
|
end
|
404
430
|
|
405
431
|
##
|
data/lib/prop_check/version.rb
CHANGED