rand 0.9.1
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.
- data/History.txt +25 -0
- data/Manifest.txt +7 -0
- data/README.txt +62 -0
- data/Rakefile +52 -0
- data/lib/rand.rb +319 -0
- data/setup.rb +1585 -0
- data/test/test_rand.rb +183 -0
- metadata +70 -0
data/test/test_rand.rb
ADDED
@@ -0,0 +1,183 @@
|
|
1
|
+
# $Id: test_rand.rb 23 2007-07-14 13:13:48Z keegan $
|
2
|
+
# Copyright 2007 Keegan Quinn
|
3
|
+
# Copyright 2004 Christian Neukirchen
|
4
|
+
# Copyright 2004 Ilmari Heikkinen
|
5
|
+
#
|
6
|
+
# test_rand.rb -- tests for the rand library
|
7
|
+
|
8
|
+
require 'test/unit'
|
9
|
+
require 'rand'
|
10
|
+
|
11
|
+
|
12
|
+
module RandTestHelpers
|
13
|
+
def picker(enum, enum_check, method, n=50)
|
14
|
+
(1..n).all?{ enum_check.include? enum.send(method) }
|
15
|
+
end
|
16
|
+
|
17
|
+
def try_shuffling(enum, enum_c, method)
|
18
|
+
rv = nil
|
19
|
+
10.times{
|
20
|
+
rv = enum.send method
|
21
|
+
break if rv != enum_c
|
22
|
+
}
|
23
|
+
rv
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
|
28
|
+
class RandArrayTest < Test::Unit::TestCase
|
29
|
+
include RandTestHelpers
|
30
|
+
|
31
|
+
def ar
|
32
|
+
(0..99).to_a
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_pick
|
36
|
+
a = ar
|
37
|
+
results = (0...a.size).map{ a.pick }
|
38
|
+
assert true, results.all? {|r| a.include? r }
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_pick!
|
42
|
+
a = ar
|
43
|
+
results = (0...a.size).map{ a.pick! }
|
44
|
+
assert true, results.sort == (0..99).to_a and a.empty?
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_pick_index
|
48
|
+
a = ar
|
49
|
+
results = (0...a.size).map{ a.pick_index }
|
50
|
+
assert true, results.all? {|r| r.between?(0, a.size-1) }
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_pick_index!
|
54
|
+
a = ar
|
55
|
+
# side-effect-relying block; a.size = a.size-1 after pick_index!,
|
56
|
+
# so the picked index max value is the new a.size
|
57
|
+
assert true, (0...a.size).all?{ a.pick_index!.between?(0, a.size) } and a.empty?
|
58
|
+
end
|
59
|
+
|
60
|
+
def test_shuffle
|
61
|
+
a = ar
|
62
|
+
shuffled = try_shuffling(a, a, :shuffle)
|
63
|
+
assert true, shuffled.sort == a and shuffled != a
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_shuffle!
|
67
|
+
a = ar
|
68
|
+
try_shuffling(a, ar, :shuffle!)
|
69
|
+
assert true, a != ar and a.sort == ar
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
|
74
|
+
class RandHashTest < Test::Unit::TestCase
|
75
|
+
include RandTestHelpers
|
76
|
+
|
77
|
+
def ha
|
78
|
+
Hash[*(1..100).to_a]
|
79
|
+
end
|
80
|
+
|
81
|
+
def test_pick
|
82
|
+
assert true, picker(ha, ha.entries, :pick)
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_pick!
|
86
|
+
h = ha
|
87
|
+
assert true, picker(h, ha.entries, :pick!) and h.empty?
|
88
|
+
end
|
89
|
+
|
90
|
+
def test_pick_key
|
91
|
+
assert true, picker(ha, ha.keys, :pick_key)
|
92
|
+
end
|
93
|
+
|
94
|
+
def test_pick_key!
|
95
|
+
h = ha
|
96
|
+
assert true, picker(h, ha.keys, :pick_key!) and h.empty?
|
97
|
+
end
|
98
|
+
|
99
|
+
def test_pick_value
|
100
|
+
assert true, picker(ha, ha.values, :pick_value)
|
101
|
+
end
|
102
|
+
|
103
|
+
def test_pick_value!
|
104
|
+
h = ha
|
105
|
+
assert true, picker(h, ha.values, :pick_value!) and h.empty?
|
106
|
+
end
|
107
|
+
|
108
|
+
def test_shuffle_hash
|
109
|
+
h = ha
|
110
|
+
hs = try_shuffling(ha, h, :shuffle_hash)
|
111
|
+
assert true, hs != h and (hs.keys + hs.values).sort == (h.keys + h.values).sort
|
112
|
+
end
|
113
|
+
|
114
|
+
def test_shuffle_hash!
|
115
|
+
h = ha
|
116
|
+
hs = ha
|
117
|
+
try_shuffling(hs, h, :shuffle_hash!)
|
118
|
+
assert true, hs != h and (hs.keys + hs.values).sort == (h.keys + h.values).sort
|
119
|
+
end
|
120
|
+
|
121
|
+
def test_shuffle
|
122
|
+
h = ha
|
123
|
+
hs = try_shuffling(ha, h, :shuffle)
|
124
|
+
assert true, hs != h and hs.entries.sort == h.entries.sort
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
|
129
|
+
class RandStringTest < Test::Unit::TestCase
|
130
|
+
include RandTestHelpers
|
131
|
+
|
132
|
+
def self.pick_tests(endings)
|
133
|
+
endings.each{|ending, compare_str_f|
|
134
|
+
define_method("test_pick#{ending}"){
|
135
|
+
s = str
|
136
|
+
assert true, picker(s, instance_eval(&compare_str_f), "pick#{ending}", s.size)
|
137
|
+
}
|
138
|
+
}
|
139
|
+
end
|
140
|
+
|
141
|
+
def self.pick_tests!(endings)
|
142
|
+
endings.each{|ending, compare_str_f|
|
143
|
+
define_method("test_pick#{ending}!"){
|
144
|
+
s = str
|
145
|
+
assert true, picker(s, instance_eval(&compare_str_f), "pick#{ending}!", s.size) and s.empty?
|
146
|
+
}
|
147
|
+
}
|
148
|
+
end
|
149
|
+
|
150
|
+
def str
|
151
|
+
(("a".."z").to_s + "\n") * 10
|
152
|
+
end
|
153
|
+
|
154
|
+
def test_shuffle
|
155
|
+
s = str
|
156
|
+
ss = try_shuffling(s, s.to_a, :shuffle)
|
157
|
+
assert true, ss != s.to_a and ss.sort == s.to_a.sort
|
158
|
+
end
|
159
|
+
|
160
|
+
def test_shuffle_chars
|
161
|
+
s = str
|
162
|
+
ss = try_shuffling(s, s.split(//), :shuffle_chars)
|
163
|
+
assert true, ss != s and ss.split(//).sort == s.split(//).sort
|
164
|
+
end
|
165
|
+
|
166
|
+
def test_shuffle_chars!
|
167
|
+
s = str
|
168
|
+
ss = str
|
169
|
+
try_shuffling(ss, s.split(//), :shuffle_chars!)
|
170
|
+
assert true, ss != s and ss.split(//).sort == s.split(//).sort
|
171
|
+
end
|
172
|
+
|
173
|
+
pick_tests({ "" => lambda{str.to_a},
|
174
|
+
:_char => lambda{str.split(//)},
|
175
|
+
:_byte => lambda{str.split(//).map{|c| c[0]}},
|
176
|
+
:_index => lambda{(0...str.size).to_a}
|
177
|
+
})
|
178
|
+
|
179
|
+
pick_tests!({ :_char => lambda{str.split(//)},
|
180
|
+
:_byte => lambda{str.split(//).map{|c| c[0]}},
|
181
|
+
:_index => lambda{(0...str.size).to_a}
|
182
|
+
})
|
183
|
+
end
|
metadata
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
rubygems_version: 0.9.0
|
3
|
+
specification_version: 1
|
4
|
+
name: rand
|
5
|
+
version: !ruby/object:Gem::Version
|
6
|
+
version: 0.9.1
|
7
|
+
date: 2007-07-14 00:00:00 -07:00
|
8
|
+
summary: A library for picking random elements and shuffling.
|
9
|
+
require_paths:
|
10
|
+
- lib
|
11
|
+
email: keegan@rubyforge.org
|
12
|
+
homepage: http://rand.rubyforge.org
|
13
|
+
rubyforge_project: rand
|
14
|
+
description: A library for picking random elements and shuffling.
|
15
|
+
autorequire:
|
16
|
+
default_executable:
|
17
|
+
bindir: bin
|
18
|
+
has_rdoc: true
|
19
|
+
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">"
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 0.0.0
|
24
|
+
version:
|
25
|
+
platform: ruby
|
26
|
+
signing_key:
|
27
|
+
cert_chain:
|
28
|
+
post_install_message:
|
29
|
+
authors:
|
30
|
+
- Ilmari Heikkinen
|
31
|
+
- Christian Neukirchen
|
32
|
+
- Keegan Quinn
|
33
|
+
files:
|
34
|
+
- History.txt
|
35
|
+
- Manifest.txt
|
36
|
+
- README.txt
|
37
|
+
- Rakefile
|
38
|
+
- lib/rand.rb
|
39
|
+
- setup.rb
|
40
|
+
- test/test_rand.rb
|
41
|
+
test_files:
|
42
|
+
- test/test_rand.rb
|
43
|
+
rdoc_options:
|
44
|
+
- --title
|
45
|
+
- rand -- Random elements and shuffling
|
46
|
+
- --main
|
47
|
+
- README.txt
|
48
|
+
- --line-numbers
|
49
|
+
- --inline-source
|
50
|
+
- --all
|
51
|
+
extra_rdoc_files:
|
52
|
+
- History.txt
|
53
|
+
- Manifest.txt
|
54
|
+
- README.txt
|
55
|
+
executables: []
|
56
|
+
|
57
|
+
extensions: []
|
58
|
+
|
59
|
+
requirements: []
|
60
|
+
|
61
|
+
dependencies:
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: hoe
|
64
|
+
version_requirement:
|
65
|
+
version_requirements: !ruby/object:Gem::Version::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ">="
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 1.2.1
|
70
|
+
version:
|