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.
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: