assert-random 0.2.1 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +34 -11
- data/VERSION +1 -1
- data/assert-random.gemspec +1 -1
- data/lib/assert-random.rb +14 -5
- data/test/test_assert-random.rb +37 -0
- metadata +3 -3
data/README.rdoc
CHANGED
@@ -1,16 +1,39 @@
|
|
1
1
|
= assert-random
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
3
|
+
Assert random is a simple gem that extends the test/unit assertions to include an assert-random test. Assert random works like any other assertion and accepts a block of code. Assert random checks this block of code records the results of the output. The out put is then checked for the following...
|
4
|
+
|
5
|
+
* Identical results
|
6
|
+
* Sequences of numbers (eg... 1 2 3 4 or... 10 20 30 etc)
|
7
|
+
|
8
|
+
Usage(Will pass):
|
9
|
+
|
10
|
+
def test_something
|
11
|
+
assert_random do
|
12
|
+
rand(1000)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
Usage(Will fail):
|
17
|
+
|
18
|
+
def test_something_else
|
19
|
+
assert_random do
|
20
|
+
1000
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
== Tolerance
|
25
|
+
|
26
|
+
Random numbers and results are hard to test. If your generating with in a small range of numbers say 1 to 10 then you can't guarantee that the same number will not come up twice. This is despite the generator working correctly. For cases like this assert-random supports the tolerance option. Tolerance allows the test to tolerate more than one instance of a number from a narrow range.
|
27
|
+
|
28
|
+
Tolerance Usage:
|
29
|
+
|
30
|
+
def test_tolerance
|
31
|
+
assert_random :tolerance => 5 do
|
32
|
+
rand(10)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
The above example will pass even if the same number comes up 4 times.
|
14
37
|
|
15
38
|
== Copyright
|
16
39
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.1
|
data/assert-random.gemspec
CHANGED
data/lib/assert-random.rb
CHANGED
@@ -1,26 +1,35 @@
|
|
1
1
|
require 'test/unit'
|
2
|
-
|
3
2
|
module AssertRandom
|
4
3
|
module AssertionMixins
|
5
4
|
|
6
|
-
|
5
|
+
|
6
|
+
def assert_random(options = {})
|
7
7
|
_wrap_assertion do
|
8
|
+
assert_block("assert needs to be called with a block.") { block_given? }
|
9
|
+
configuration = { :tolerance => 1 }
|
10
|
+
configuration.update(options) if options.is_a?(Hash)
|
11
|
+
|
8
12
|
results = Array.new
|
9
13
|
10.times do
|
10
14
|
results.push yield
|
11
15
|
end
|
12
|
-
|
16
|
+
|
17
|
+
assert_block("#{configuration[:tolerance]} or more values match") { !same_values? results, configuration[:tolerance] }
|
13
18
|
assert_block("Results are in a sequence") { !in_sequence? results }
|
14
19
|
end
|
15
20
|
end
|
16
21
|
|
17
22
|
|
18
23
|
private
|
19
|
-
def same_values?(results)
|
24
|
+
def same_values?(results, tolerance)
|
25
|
+
same_value_counter = 0
|
20
26
|
results.each do
|
21
27
|
last_result = results.shift
|
22
28
|
results.each do |r|
|
23
|
-
|
29
|
+
if(last_result == r)
|
30
|
+
same_value_counter += 1
|
31
|
+
return true if same_value_counter > tolerance
|
32
|
+
end
|
24
33
|
end
|
25
34
|
end
|
26
35
|
false
|
data/test/test_assert-random.rb
CHANGED
@@ -62,5 +62,42 @@ class TestAssertRandom < Test::Unit::TestCase
|
|
62
62
|
end
|
63
63
|
end
|
64
64
|
end
|
65
|
+
|
66
|
+
|
67
|
+
def test_tolerance_with_random
|
68
|
+
assert_nothing_raised do
|
69
|
+
assert_random :tolerance => 5 do
|
70
|
+
rand(1000)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
|
76
|
+
def test_tolerance_with_fixed_number_set
|
77
|
+
numbers = Array.new
|
78
|
+
|
79
|
+
2.times do
|
80
|
+
numbers.push 10
|
81
|
+
end
|
82
|
+
|
83
|
+
8.times do
|
84
|
+
numbers.push rand(9)
|
85
|
+
end
|
86
|
+
|
87
|
+
i = -1
|
88
|
+
assert_raise Test::Unit::AssertionFailedError do
|
89
|
+
assert_random :tolerance => 2 do
|
90
|
+
i =+ 1
|
91
|
+
numbers[i]
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
65
95
|
|
96
|
+
def test_must_pass_block
|
97
|
+
assert_raise Test::Unit::AssertionFailedError do
|
98
|
+
assert_random
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
|
66
103
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: assert-random
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 17
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
8
|
+
- 3
|
9
9
|
- 1
|
10
|
-
version: 0.
|
10
|
+
version: 0.3.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Stewart Matheson
|