rand 0.9.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (8) hide show
  1. data/History.txt +25 -0
  2. data/Manifest.txt +7 -0
  3. data/README.txt +62 -0
  4. data/Rakefile +52 -0
  5. data/lib/rand.rb +319 -0
  6. data/setup.rb +1585 -0
  7. data/test/test_rand.rb +183 -0
  8. metadata +70 -0
@@ -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: