flori-bullshit 0.1.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.
- data/COPYING +340 -0
- data/Rakefile +95 -0
- data/VERSION +1 -0
- data/bullshit.gemspec +25 -0
- data/examples/compare.rb +11 -0
- data/examples/fibonacci.rb +75 -0
- data/examples/iteration.rb +116 -0
- data/examples/josephus.rb +136 -0
- data/examples/sorting.rb +363 -0
- data/install.rb +15 -0
- data/lib/bullshit.rb +2244 -0
- data/lib/bullshit/version.rb +8 -0
- data/make_doc.rb +4 -0
- data/tests/test_analysis.rb +321 -0
- data/tests/test_bullshit.rb +222 -0
- data/tests/test_continued_fraction.rb +40 -0
- data/tests/test_distribution.rb +69 -0
- data/tests/test_functions.rb +33 -0
- data/tests/test_newton_bisection.rb +28 -0
- data/tests/test_window.rb +34 -0
- metadata +94 -0
data/make_doc.rb
ADDED
@@ -0,0 +1,321 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
require 'bullshit'
|
5
|
+
|
6
|
+
class TestAnalysis < Test::Unit::TestCase
|
7
|
+
include Bullshit
|
8
|
+
|
9
|
+
def setup
|
10
|
+
@flat = Analysis.new([0.3] * 100)
|
11
|
+
@flat_fuzzy = Analysis.new(
|
12
|
+
[ 0.291296142070089, 0.398027886480809, 0.23101231921608,
|
13
|
+
0.340627534773153, 0.254242992113383, 0.205044980114447,
|
14
|
+
0.278185292370019, 0.291682510899134, 0.261657208149687,
|
15
|
+
0.259844137242866, 0.378499162508619, 0.229358104972725,
|
16
|
+
0.386112073235523, 0.235255070067096, 0.296721262492287,
|
17
|
+
0.314698077842112, 0.363272733105109, 0.252507159666997,
|
18
|
+
0.24662025484673, 0.267331187480918, 0.250067060724856,
|
19
|
+
0.284270210340375, 0.262626100532033, 0.352433737639362,
|
20
|
+
0.26289285183689, 0.320853587421585, 0.311156494750873,
|
21
|
+
0.334225510831559, 0.356205648289854, 0.390488123286748,
|
22
|
+
0.232295923957093, 0.306018392326888, 0.226951061989688,
|
23
|
+
0.214593004467917, 0.28960026747272, 0.265265575971784,
|
24
|
+
0.281799797229565, 0.337363136532618, 0.342475071004423,
|
25
|
+
0.284553882868128, 0.389206786931739, 0.351602477407745,
|
26
|
+
0.387218788482334, 0.251003385993573, 0.257866093151574,
|
27
|
+
0.328824195781741, 0.328242240833557, 0.318885903421821,
|
28
|
+
0.319274078029297, 0.29658003664557, 0.24884905382522,
|
29
|
+
0.301770636812583, 0.248911378817175, 0.275471776328434,
|
30
|
+
0.220091513752346, 0.283076025940448, 0.388218608044549,
|
31
|
+
0.283229339831472, 0.224570945957831, 0.362485839646397,
|
32
|
+
0.221550677368212, 0.269482540591461, 0.339070334243095,
|
33
|
+
0.325182999080969, 0.308728933369353, 0.3863941656383,
|
34
|
+
0.202792339314435, 0.362856265274183, 0.265505144702292,
|
35
|
+
0.353077334823915, 0.324128317440701, 0.296975637938554,
|
36
|
+
0.331591291884613, 0.205993447724166, 0.214480100701257,
|
37
|
+
0.344614724259284, 0.370516595329498, 0.207412716360969,
|
38
|
+
0.314721036012706, 0.228984115281106, 0.259032440399333,
|
39
|
+
0.326352618555389, 0.353756258146666, 0.230771059239658,
|
40
|
+
0.250581960820831, 0.21462520718052, 0.241570172219703,
|
41
|
+
0.296495456059297, 0.336874993277199, 0.399203721142938,
|
42
|
+
0.330151086176299, 0.327699314698143, 0.235627029696985,
|
43
|
+
0.325564466304218, 0.398295977228244, 0.33192554316584,
|
44
|
+
0.22526704197204, 0.342117813790757, 0.32678523559579,
|
45
|
+
0.214938036987578 ]
|
46
|
+
)
|
47
|
+
@flat_fuzzy2 = Analysis.new(
|
48
|
+
[ 0.234651800685522, 0.291677132057536, 0.381325747665659,
|
49
|
+
0.37072453863211, 0.368865699927557, 0.35787506718781,
|
50
|
+
0.350720373167135, 0.258635475849321, 0.31707597552194,
|
51
|
+
0.307893709010183, 0.237849819950067, 0.315881610046543,
|
52
|
+
0.201585641064648, 0.344368312712124, 0.34501166666737,
|
53
|
+
0.294042914293632, 0.211771331394304, 0.363815509779845,
|
54
|
+
0.33673412152282, 0.37498088769697, 0.201244093764913,
|
55
|
+
0.236387765961558, 0.296850838293593, 0.223829530755105,
|
56
|
+
0.213694650150962, 0.227416795706971, 0.200625724917622,
|
57
|
+
0.31227957802719, 0.385983037604518, 0.287242927867868,
|
58
|
+
0.258470258047964, 0.344169516126964, 0.26994416010751,
|
59
|
+
0.249768846393261, 0.354426097251265, 0.34021066927398,
|
60
|
+
0.307077285175548, 0.3497224779728, 0.254650791783532,
|
61
|
+
0.285180048375893, 0.201603698883297, 0.314417350151038,
|
62
|
+
0.320909639401826, 0.287679809618447, 0.328814685203504,
|
63
|
+
0.370476190838299, 0.291359505243309, 0.273781936455096,
|
64
|
+
0.325113918862285, 0.367110740063297, 0.247073598694453,
|
65
|
+
0.350942986897521, 0.232261700593331, 0.236635735267053,
|
66
|
+
0.240796903369692, 0.323428956239516, 0.324614910738737,
|
67
|
+
0.237871567371432, 0.310816928958706, 0.264609945655404,
|
68
|
+
0.236819188672949, 0.28398352994042, 0.366840181124702,
|
69
|
+
0.339882426068036, 0.397478482750453, 0.379375601208701,
|
70
|
+
0.281206116730092, 0.203947998858132, 0.231558650797902,
|
71
|
+
0.380785793096893, 0.334270739370193, 0.266229655641688,
|
72
|
+
0.315762224650585, 0.243378114262551, 0.294001949668671,
|
73
|
+
0.247508966656796, 0.382845661950797, 0.369479413879656,
|
74
|
+
0.241683415140724, 0.218541361179393, 0.319914186441019,
|
75
|
+
0.310250120051708, 0.234697684147101, 0.34734046492662,
|
76
|
+
0.218217334366937, 0.312537298293074, 0.374319776312122,
|
77
|
+
0.392178633368011, 0.314428694398314, 0.386204177791726,
|
78
|
+
0.359061970124816, 0.362334074442194, 0.229293408035385,
|
79
|
+
0.313763536361359, 0.239344793134688, 0.265237324138875,
|
80
|
+
0.329259743982286, 0.351767216150251, 0.211193779699827,
|
81
|
+
0.258235773260784 ]
|
82
|
+
)
|
83
|
+
@flat_higher = Analysis.new(
|
84
|
+
[ 0.417776755544947, 0.326476805772892, 0.332887733006402,
|
85
|
+
0.410565271773857, 0.426114386030809, 0.435935520406595,
|
86
|
+
0.339995159533461, 0.364761157546518, 0.378397233333935,
|
87
|
+
0.35210733002035, 0.330688506187733, 0.492648864412129,
|
88
|
+
0.33833199089868, 0.42789271416588, 0.302423735510181,
|
89
|
+
0.305407403523733, 0.408725319360953, 0.444623946541953,
|
90
|
+
0.494162827022184, 0.386239353430498, 0.306437290600178,
|
91
|
+
0.376703331326491, 0.419906847790677, 0.301955977987602,
|
92
|
+
0.487468198801442, 0.312290516021979, 0.495906290662686,
|
93
|
+
0.303379939018008, 0.460384318463054, 0.473534870478338,
|
94
|
+
0.333912270251847, 0.460143618655486, 0.419257177279749,
|
95
|
+
0.355072829732943, 0.453419475031392, 0.468523177257953,
|
96
|
+
0.405173514106214, 0.490981451264441, 0.333761262319564,
|
97
|
+
0.405754543238307, 0.495673694657207, 0.302783349166472,
|
98
|
+
0.432418922874345, 0.329915804259514, 0.356588738342812,
|
99
|
+
0.354349707229742, 0.452693480248568, 0.474877692732008,
|
100
|
+
0.405383243600942, 0.402915847080871, 0.492915699075631,
|
101
|
+
0.462094206093751, 0.339883346924172, 0.451846443788079,
|
102
|
+
0.464163288957183, 0.405878012725365, 0.467568948869427,
|
103
|
+
0.419585038305752, 0.422900365624952, 0.494116259378179,
|
104
|
+
0.300073213028546, 0.474018244228735, 0.38822872923958,
|
105
|
+
0.441707083196939, 0.406814346112675, 0.403958151779294,
|
106
|
+
0.307247538830431, 0.409650643221185, 0.493148685003474,
|
107
|
+
0.36058138779566, 0.36321317486353, 0.393068747347969,
|
108
|
+
0.468879326612198, 0.425234138346863, 0.421949132207673,
|
109
|
+
0.306005645410334, 0.439055703332639, 0.317183300984821,
|
110
|
+
0.470848293063698, 0.440820107004846, 0.438285035336276,
|
111
|
+
0.434787376714648, 0.453596753001295, 0.399893734859051,
|
112
|
+
0.458116608707833, 0.330973155542121, 0.31666421784907,
|
113
|
+
0.467682075506155, 0.452806591013364, 0.379423936292945,
|
114
|
+
0.357212688143182, 0.385848611013958, 0.349586136874291,
|
115
|
+
0.46683976269393, 0.484776275752459, 0.30829081820033,
|
116
|
+
0.41637633029041, 0.350847171677106, 0.416615749876575,
|
117
|
+
0.382674729559805 ]
|
118
|
+
)
|
119
|
+
@half = Analysis.new(Array.new(100) { |i| 0.5 * i })
|
120
|
+
@rand = Analysis.new(rand = [
|
121
|
+
97, 26, 9, 78, 15, 86, 82, 24, 57, 67, 46, 86, 28,
|
122
|
+
50, 71, 92, 18, 19, 16, 70, 80, 45, 26, 4, 16, 55, 15,
|
123
|
+
94, 12, 73, 89, 97, 10, 2, 77, 35, 76, 46, 48, 31, 39,
|
124
|
+
52, 82, 53, 88, 90, 1, 39, 77, 71, 37, 37, 50, 19, 60,
|
125
|
+
48, 0, 13, 62, 34, 90, 28, 42, 9, 63, 82, 43, 98, 86,
|
126
|
+
3, 94, 5, 79, 11, 16, 0, 90, 81, 42, 64, 76, 92, 25,
|
127
|
+
3, 90, 51, 15, 0, 74, 98, 93, 90, 14, 81, 85, 28, 30,
|
128
|
+
73, 32, 88])
|
129
|
+
@rand_up = Analysis.new(Array.new(rand.size) { |i| rand[i] * (1 - 4.0 / (i + 1)) })
|
130
|
+
@rand_down = Analysis.new(Array.new(rand.size) { |i| rand[i] * (1 + 4.0 / (i + 1)) })
|
131
|
+
@rasi = Analysis.new(
|
132
|
+
[ 0.0, 11.7813239550446, 23.8742291678261, 0.368124552684678,
|
133
|
+
20.233654312272, 7.64120827980215, 61.609239533582, 69.346191849821,
|
134
|
+
66.7019061146592, 26.2399845215146, 2.85316954888546, 29.4686175218607,
|
135
|
+
15.9684276548523, 15.9684276548523, 36.3446282769615, 66.5739561406607,
|
136
|
+
85.9585699842718, 75.9895132951814, 9.24615891330947, 7.53001816521557,
|
137
|
+
22.335839587114, 32.2774961648149, 31.2905869781976, 15.1700831170561,
|
138
|
+
6.1413284446509, -2.95898288510399e-14, -4.63732964187926,
|
139
|
+
-2.2382089844837, -2.20874731610807, -0.0, -20.5724838302366,
|
140
|
+
-60.2401453217246, -39.2961753815653, -59.9472827106431,
|
141
|
+
-47.051006728233, -4.75528258147577, -20.6280322653025, -43.913176050844,
|
142
|
+
-78.8441115458335, -30.4509047725893, -38.0422606518061,
|
143
|
+
-77.8151265120777, -4.22163962751007, -32.3615561965831,
|
144
|
+
-42.4419205675787, -40.5571824081806, -6.2627977633223,
|
145
|
+
-5.52186829027017, -6.96331684061593, -10.4026583858372,
|
146
|
+
3.8595428936139e-15, 9.0239928166299, 12.9318741325725, 34.9718325050444,
|
147
|
+
46.7301063878664, 49.3739611925678, 58.1865040039386, 30.8205297110316,
|
148
|
+
36.3061007965867, 29.8592927313786, 88.4482560154493, 54.0257987900779,
|
149
|
+
16.9664543832806, 92.8164857438293, 62.8663840466361, 78.9376908524978,
|
150
|
+
41.6220444134369, 78.5224970716874, 35.4436091676863, 66.4010692750828,
|
151
|
+
14.6946313073118, 19.2701469640686, 31.6587115308823, 15.1700831170561,
|
152
|
+
1.25333233564304, 1.83690953073357e-15, -4.76266287544359,
|
153
|
+
-17.6569819887047, -12.1481102385944, -39.5038012763407,
|
154
|
+
-20.5724838302365, -28.0664313430763, -20.8038575549463,
|
155
|
+
-10.1319351060242, -10.8579246295922, -33.2869780703304,
|
156
|
+
-77.6006928075664, -21.956588025422, -44.9112027792722,
|
157
|
+
-56.9726605422639, -19.0211303259031, -80.5296076694757,
|
158
|
+
-15.1979026590363, -51.6243872659778, -45.1801089912934,
|
159
|
+
-54.6640284631999, -17.3431322676617, -21.719348608396, -11.937114583913,
|
160
|
+
-3.38399730623621 ]
|
161
|
+
)
|
162
|
+
@rasi_mean = Analysis.new([ 3.48 ] * 100)
|
163
|
+
@book = Analysis.new(
|
164
|
+
[ 47, 64, 23, 71, 38, 64, 55, 41, 59, 48, 71, 35, 57, 40, 58,
|
165
|
+
44, 89, 55, 37, 74, 51, 57, 50, 60, 45, 57, 50, 45, 25, 59,
|
166
|
+
50, 71, 56, 74, 50, 58, 45, 54, 36, 54, 48, 55, 45, 57, 50,
|
167
|
+
62, 44, 64, 43, 52, 38, 59, 55, 41, 53, 49, 34, 35, 54, 45,
|
168
|
+
68, 38, 50, 60, 39, 59, 40, 57, 54, 23 ]
|
169
|
+
)
|
170
|
+
end
|
171
|
+
|
172
|
+
def test_flat
|
173
|
+
assert_equal 100, @flat.size
|
174
|
+
assert_in_delta 0.3, @flat.mean, 1E-8
|
175
|
+
assert_in_delta 0.3, @flat.geometric_mean, 1E-8
|
176
|
+
assert_in_delta 0.3, @flat.harmonic_mean, 1E-8
|
177
|
+
assert_in_delta 0, @flat.variance, 1E-8
|
178
|
+
assert_in_delta 0, @flat.standard_deviation, 1E-8
|
179
|
+
assert_in_delta 0, @flat.sample_standard_deviation, 1E-8
|
180
|
+
assert_in_delta 30, @flat.sum, 1E-8
|
181
|
+
assert_in_delta 0.3, @flat.min, 1E-8
|
182
|
+
assert_in_delta 0.3, @flat.max, 1E-8
|
183
|
+
assert_in_delta 0.3, @flat.percentile(25), 1E-8
|
184
|
+
assert_in_delta 0.3, @flat.median, 1E-8
|
185
|
+
assert_in_delta 0.3, @flat.percentile(75), 1E-8
|
186
|
+
assert_equal 100, @flat.histogram(10).to_a.first[1]
|
187
|
+
end
|
188
|
+
|
189
|
+
def test_half
|
190
|
+
assert_equal 100, @half.size
|
191
|
+
assert_in_delta 24.75, @half.mean, 1E-8
|
192
|
+
assert_in_delta 0.0, @half.geometric_mean, 1E-8
|
193
|
+
assert_equal 'NaN', @half.harmonic_mean.to_s
|
194
|
+
assert_in_delta 208.31, @half.variance, 1E-2
|
195
|
+
assert_in_delta 14.43, @half.standard_deviation, 1E-2
|
196
|
+
assert_in_delta 14.50, @half.sample_standard_deviation, 1E-2
|
197
|
+
assert_in_delta 2475, @half.sum, 1E-8
|
198
|
+
assert_in_delta 0, @half.min, 1E-8
|
199
|
+
assert_in_delta 99 / 2.0, @half.max, 1E-8
|
200
|
+
assert_in_delta 12.125, @half.percentile(25), 1E-8
|
201
|
+
assert_in_delta 24.75, @half.median, 1E-8
|
202
|
+
assert_in_delta 37.375, @half.percentile(75), 1E-8
|
203
|
+
assert_equal [10] * 10, counts = @half.histogram(10).to_a.transpose[1]
|
204
|
+
assert_equal 100, counts.inject { |s, x| s + x }
|
205
|
+
end
|
206
|
+
|
207
|
+
def test_rand
|
208
|
+
assert_equal 100, @rand.size
|
209
|
+
assert_in_delta 50.84, @rand.mean, 1E-2
|
210
|
+
assert_in_delta 0.0, @rand.geometric_mean, 1E-8
|
211
|
+
assert_equal 'NaN', @rand.harmonic_mean.to_s
|
212
|
+
assert_in_delta 976.95, @rand.variance, 1E-2
|
213
|
+
assert_in_delta 31.25, @rand.standard_deviation, 1E-2
|
214
|
+
assert_in_delta 31.41, @rand.sample_standard_deviation, 1E-2
|
215
|
+
assert_in_delta 5084, @rand.sum, 1E-8
|
216
|
+
assert_in_delta 0, @rand.min, 1E-8
|
217
|
+
assert_in_delta 98, @rand.max, 1E-8
|
218
|
+
assert_in_delta 20.25, @rand.percentile(25), 1E-8
|
219
|
+
assert_in_delta 50.0, @rand.median, 1E-8
|
220
|
+
assert_in_delta 81, @rand.percentile(75), 1E-8
|
221
|
+
assert_in_delta 0.05660, @rand.linear_regression.a, 1E-4
|
222
|
+
assert_in_delta 47.9812, @rand.linear_regression.b, 1E-4
|
223
|
+
assert @rand.linear_regression.slope_zero?
|
224
|
+
assert_in_delta(-0.4019, @rand_down.linear_regression.a, 1E-4)
|
225
|
+
assert_in_delta 82.7303, @rand_down.linear_regression.b, 1E-4
|
226
|
+
assert !@rand_down.linear_regression.slope_zero?
|
227
|
+
assert_in_delta 0.5151, @rand_up.linear_regression.a, 1E-4
|
228
|
+
assert_in_delta(13.2320, @rand_up.linear_regression.b, 1E-4)
|
229
|
+
assert !@rand_up.linear_regression.slope_zero?
|
230
|
+
assert_nil @rand.detect_outliers
|
231
|
+
assert !@rand.detect_autocorrelation[:detected]
|
232
|
+
assert_equal [11, 14, 7, 9, 8, 7, 5, 11, 13, 15],
|
233
|
+
counts = @rand.histogram(10).to_a.transpose[1]
|
234
|
+
assert_equal 100, counts.inject { |s, x| s + x }
|
235
|
+
end
|
236
|
+
|
237
|
+
def test_rasi
|
238
|
+
assert_equal 100, @rasi.size
|
239
|
+
assert_in_delta 3.48, @rasi.mean, 1E-2
|
240
|
+
assert_in_delta 0.0, @rasi.geometric_mean, 1E-8
|
241
|
+
assert_equal 'NaN', @rasi.harmonic_mean.to_s
|
242
|
+
assert_in_delta 1604.67, @rasi.variance, 1E-2
|
243
|
+
assert_in_delta 40.05, @rasi.standard_deviation, 1E-2
|
244
|
+
assert_in_delta 40.26, @rasi.sample_standard_deviation, 1E-2
|
245
|
+
assert_in_delta 348.007, @rasi.sum, 1E-3
|
246
|
+
assert_in_delta 92.81, @rasi.max, 1E-2
|
247
|
+
assert_in_delta(-20.75, @rasi.percentile(25), 1E-2)
|
248
|
+
assert_in_delta 0.0, @rasi.median, 1E-2
|
249
|
+
assert_in_delta 30.58, @rasi.percentile(75), 1E-2
|
250
|
+
assert_in_delta(-0.41, @rasi.linear_regression.a, 1E-2)
|
251
|
+
assert_in_delta(24.35, @rasi.linear_regression.b, 1E-2)
|
252
|
+
assert !@rasi.linear_regression.slope_zero?
|
253
|
+
assert_equal 13, @rasi.detect_outliers[:high]
|
254
|
+
assert @rasi.detect_autocorrelation[:detected]
|
255
|
+
assert_equal [4, 6, 11, 13, 22, 15, 12, 4, 7, 6],
|
256
|
+
counts = @rasi.histogram(10).to_a.transpose[1]
|
257
|
+
assert_equal 100, counts.inject { |s, x| s + x }
|
258
|
+
end
|
259
|
+
|
260
|
+
def test_book
|
261
|
+
assert_equal 70, @book.size
|
262
|
+
assert_in_delta 51.25, @book.mean, 1E-2
|
263
|
+
assert_in_delta 49.70, @book.geometric_mean, 1E-2
|
264
|
+
assert_in_delta 47.98, @book.harmonic_mean, 1E-2
|
265
|
+
assert_in_delta 148.36, @book.variance, 1E-2
|
266
|
+
assert_in_delta 12.18, @book.standard_deviation, 1E-2
|
267
|
+
assert_in_delta 12.26, @book.sample_standard_deviation, 1E-2
|
268
|
+
assert_in_delta 3588.0, @book.sum, 1E-2
|
269
|
+
assert_in_delta 23, @book.min, 1E-2
|
270
|
+
assert_in_delta 89, @book.max, 1E-2
|
271
|
+
assert_in_delta(43.75, @book.percentile(25), 1E-2)
|
272
|
+
assert_in_delta 51.5, @book.median, 1E-2
|
273
|
+
assert_in_delta 58.25, @book.percentile(75), 1E-2
|
274
|
+
assert_in_delta(-0.0952, @book.linear_regression.a, 1E-4)
|
275
|
+
assert_in_delta(54.6372, @book.linear_regression.b, 1E-4)
|
276
|
+
assert @book.linear_regression.slope_zero?
|
277
|
+
assert_equal 7, @book.detect_outliers[:high]
|
278
|
+
ought = [1.0, -0.39, 0.3, -0.17, 0.07, -0.10, 0.05, 0.04, -0.04, -0.01,
|
279
|
+
0.01, 0.11, -0.07, 0.15, 0.04, -0.01
|
280
|
+
]
|
281
|
+
@book.autocorrelation[0, ought.size].zip(ought) do |x, x_o|
|
282
|
+
assert_in_delta x, x_o, 8E-2
|
283
|
+
end
|
284
|
+
assert @book.detect_autocorrelation(10)[:detected]
|
285
|
+
assert_equal [3, 4, 9, 12, 18, 14, 4, 5, 0, 1],
|
286
|
+
counts = @book.histogram(10).to_a.transpose[1]
|
287
|
+
assert_equal 70, counts.inject { |s, x| s + x }
|
288
|
+
end
|
289
|
+
|
290
|
+
def test_cover
|
291
|
+
assert @flat.cover?(@flat)
|
292
|
+
assert @flat_fuzzy2.cover?(@flat_fuzzy2)
|
293
|
+
assert @flat_fuzzy.cover?(@flat_fuzzy)
|
294
|
+
assert @flat.cover?(@flat_fuzzy)
|
295
|
+
assert_operator @flat.suggested_sample_size(@flat_fuzzy), '>', 1000
|
296
|
+
assert @flat.cover?(@flat_fuzzy2)
|
297
|
+
assert_operator @flat.suggested_sample_size(@flat_fuzzy2), '>', 9000
|
298
|
+
assert @flat_fuzzy.cover?(@flat)
|
299
|
+
assert_operator @flat_fuzzy.suggested_sample_size(@flat), '>', 1000
|
300
|
+
assert @flat_fuzzy2.cover?(@flat)
|
301
|
+
assert_operator @flat_fuzzy2.suggested_sample_size(@flat), '>', 9000
|
302
|
+
assert !@flat.cover?(@flat_higher)
|
303
|
+
assert !@flat_higher.cover?(@flat)
|
304
|
+
assert !@flat_fuzzy.cover?(@flat_higher)
|
305
|
+
assert !@flat_fuzzy2.cover?(@flat_higher)
|
306
|
+
assert !@flat_higher.cover?(@flat_fuzzy)
|
307
|
+
assert !@flat_higher.cover?(@flat_fuzzy2)
|
308
|
+
assert @flat_fuzzy.cover?(@flat_fuzzy2)
|
309
|
+
assert_operator @flat_fuzzy.suggested_sample_size(@flat_fuzzy2), '>', 4000
|
310
|
+
assert @flat_fuzzy2.cover?(@flat_fuzzy)
|
311
|
+
assert_operator @flat_fuzzy2.suggested_sample_size(@flat_fuzzy), '>', 4000
|
312
|
+
assert @rasi.cover?(@rasi_mean)
|
313
|
+
assert_operator @rasi.suggested_sample_size(@rasi_mean), '>', 10_000
|
314
|
+
assert @rasi_mean.cover?(@rasi)
|
315
|
+
assert_operator @rasi_mean.suggested_sample_size(@rasi), '>', 10_000
|
316
|
+
assert @rasi.cover?(@flat)
|
317
|
+
assert_operator @rasi.suggested_sample_size(@flat), '>', 500
|
318
|
+
assert @flat.cover?(@rasi)
|
319
|
+
assert_operator @flat.suggested_sample_size(@rasi), '>', 500
|
320
|
+
end
|
321
|
+
end
|
@@ -0,0 +1,222 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
require 'bullshit'
|
5
|
+
|
6
|
+
module MyCases
|
7
|
+
def setup
|
8
|
+
@setup = true
|
9
|
+
@befores = 0
|
10
|
+
@afters = 0
|
11
|
+
end
|
12
|
+
|
13
|
+
def teardown
|
14
|
+
@teardown = true
|
15
|
+
end
|
16
|
+
|
17
|
+
def setup_foo
|
18
|
+
@setup_foo = true
|
19
|
+
end
|
20
|
+
|
21
|
+
def before_foo
|
22
|
+
@befores += 1
|
23
|
+
@before_foo = true
|
24
|
+
end
|
25
|
+
|
26
|
+
def benchmark_foo
|
27
|
+
@benchmark_foo = true
|
28
|
+
@args_foo = args rescue nil
|
29
|
+
sleep rand(2) / 64.0
|
30
|
+
end
|
31
|
+
|
32
|
+
def after_foo
|
33
|
+
@afters += 1
|
34
|
+
@after_foo = true
|
35
|
+
end
|
36
|
+
|
37
|
+
def teardown_foo
|
38
|
+
@teardown_foo = true
|
39
|
+
end
|
40
|
+
|
41
|
+
def setup_bar
|
42
|
+
@setup_bar = true
|
43
|
+
end
|
44
|
+
|
45
|
+
def before_bar
|
46
|
+
@before_bar = true
|
47
|
+
end
|
48
|
+
|
49
|
+
def benchmark_bar
|
50
|
+
@benchmark_bar = true
|
51
|
+
end
|
52
|
+
|
53
|
+
def after_bar
|
54
|
+
@after_bar = true
|
55
|
+
end
|
56
|
+
|
57
|
+
def teardown_bar
|
58
|
+
@teardown_bar = true
|
59
|
+
end
|
60
|
+
|
61
|
+
alias iv instance_variable_get
|
62
|
+
end
|
63
|
+
|
64
|
+
class RepeatBenchmark < Bullshit::RepeatCase
|
65
|
+
warmup yes
|
66
|
+
iterations 200
|
67
|
+
|
68
|
+
output_dir 'data'
|
69
|
+
output_filename "#{benchmark_name}.log"
|
70
|
+
data_file yes
|
71
|
+
|
72
|
+
autocorrelation do
|
73
|
+
file yes
|
74
|
+
end
|
75
|
+
|
76
|
+
histogram do
|
77
|
+
bins 10
|
78
|
+
end
|
79
|
+
|
80
|
+
include MyCases
|
81
|
+
end
|
82
|
+
|
83
|
+
class TimeBenchmark < Bullshit::TimeCase
|
84
|
+
warmup yes
|
85
|
+
duration 5
|
86
|
+
|
87
|
+
benchmark_name 'ZeitBenchmark'
|
88
|
+
|
89
|
+
output_dir 'data'
|
90
|
+
output_filename "#{benchmark_name}.log"
|
91
|
+
data_file yes
|
92
|
+
|
93
|
+
autocorrelation no
|
94
|
+
|
95
|
+
histogram no
|
96
|
+
|
97
|
+
include MyCases
|
98
|
+
end
|
99
|
+
|
100
|
+
class RangeBenchmark < Bullshit::RangeCase
|
101
|
+
warmup yes
|
102
|
+
range 1..10
|
103
|
+
scatter 3
|
104
|
+
|
105
|
+
output_dir 'data'
|
106
|
+
output_filename "#{benchmark_name}.log"
|
107
|
+
data_file yes
|
108
|
+
|
109
|
+
histogram no
|
110
|
+
|
111
|
+
include MyCases
|
112
|
+
end
|
113
|
+
|
114
|
+
class TestBullshit < Test::Unit::TestCase
|
115
|
+
include Bullshit
|
116
|
+
Case.autorun false
|
117
|
+
|
118
|
+
def setup
|
119
|
+
@repeat = RepeatBenchmark.new
|
120
|
+
@time = TimeBenchmark.new
|
121
|
+
@range = RangeBenchmark.new
|
122
|
+
end
|
123
|
+
|
124
|
+
def test_version
|
125
|
+
assert_kind_of String, ::Bullshit::VERSION
|
126
|
+
end
|
127
|
+
|
128
|
+
def test_repeat
|
129
|
+
assert_equal nil, @repeat.iv(:@setup)
|
130
|
+
assert_equal nil, @repeat.iv(:@teardown)
|
131
|
+
assert_equal nil, @repeat.iv(:@setup_foo)
|
132
|
+
assert_equal nil, @repeat.iv(:@before_foo)
|
133
|
+
assert_equal nil, @repeat.iv(:@benchmark_foo)
|
134
|
+
assert_equal nil, @repeat.iv(:@after_foo)
|
135
|
+
assert_equal nil, @repeat.iv(:@teardown_foo)
|
136
|
+
assert_equal nil, @repeat.iv(:@setup_bar)
|
137
|
+
assert_equal nil, @repeat.iv(:@benchmark_bar)
|
138
|
+
assert_equal nil, @repeat.iv(:@after_bar)
|
139
|
+
assert_equal nil, @repeat.iv(:@teardown_bar)
|
140
|
+
rc = Case.run_count
|
141
|
+
@repeat.run
|
142
|
+
assert_equal rc + 1, Case.run_count
|
143
|
+
assert_equal true, @repeat.iv(:@setup)
|
144
|
+
assert_equal true, @repeat.iv(:@teardown)
|
145
|
+
assert_equal true, @repeat.iv(:@setup_foo)
|
146
|
+
assert_equal true, @repeat.iv(:@before_foo)
|
147
|
+
assert_equal true, @repeat.iv(:@benchmark_foo)
|
148
|
+
assert_equal true, @repeat.iv(:@after_foo)
|
149
|
+
assert_equal true, @repeat.iv(:@teardown_foo)
|
150
|
+
assert_equal true, @repeat.iv(:@setup_bar)
|
151
|
+
assert_equal true, @repeat.iv(:@benchmark_bar)
|
152
|
+
assert_equal true, @repeat.iv(:@after_bar)
|
153
|
+
assert_equal true, @repeat.iv(:@teardown_bar)
|
154
|
+
assert_equal RepeatBenchmark.iterations * 2, @repeat.iv(:@befores)
|
155
|
+
assert_equal RepeatBenchmark.iterations * 2, @repeat.iv(:@afters)
|
156
|
+
end
|
157
|
+
|
158
|
+
def test_time
|
159
|
+
assert_equal nil, @time.iv(:@setup)
|
160
|
+
assert_equal nil, @time.iv(:@teardown)
|
161
|
+
assert_equal nil, @time.iv(:@setup_foo)
|
162
|
+
assert_equal nil, @time.iv(:@before_foo)
|
163
|
+
assert_equal nil, @time.iv(:@benchmark_foo)
|
164
|
+
assert_equal nil, @time.iv(:@after_foo)
|
165
|
+
assert_equal nil, @time.iv(:@teardown_foo)
|
166
|
+
assert_equal nil, @time.iv(:@setup_bar)
|
167
|
+
assert_equal nil, @time.iv(:@benchmark_bar)
|
168
|
+
assert_equal nil, @time.iv(:@after_bar)
|
169
|
+
assert_equal nil, @time.iv(:@teardown_bar)
|
170
|
+
rc = Case.run_count
|
171
|
+
@time.run
|
172
|
+
assert_equal rc + 1, Case.run_count
|
173
|
+
assert_equal true, @time.iv(:@setup)
|
174
|
+
assert_equal true, @time.iv(:@teardown)
|
175
|
+
assert_equal true, @time.iv(:@setup_foo)
|
176
|
+
assert_equal true, @time.iv(:@before_foo)
|
177
|
+
assert_equal true, @time.iv(:@benchmark_foo)
|
178
|
+
assert_equal true, @time.iv(:@after_foo)
|
179
|
+
assert_equal true, @time.iv(:@teardown_foo)
|
180
|
+
assert_equal true, @time.iv(:@setup_bar)
|
181
|
+
assert_equal true, @time.iv(:@benchmark_bar)
|
182
|
+
assert_equal true, @time.iv(:@after_bar)
|
183
|
+
assert_equal true, @time.iv(:@teardown_bar)
|
184
|
+
assert_operator @time.iv(:@afters), '>', 2
|
185
|
+
assert_operator @time.iv(:@befores), '>', 2
|
186
|
+
end
|
187
|
+
|
188
|
+
def test_range
|
189
|
+
assert_equal nil, @range.iv(:@setup)
|
190
|
+
assert_equal nil, @range.iv(:@teardown)
|
191
|
+
assert_equal nil, @range.iv(:@setup_foo)
|
192
|
+
assert_equal nil, @range.iv(:@before_foo)
|
193
|
+
assert_equal nil, @range.iv(:@benchmark_foo)
|
194
|
+
assert_equal nil, @range.iv(:@after_foo)
|
195
|
+
assert_equal nil, @range.iv(:@teardown_foo)
|
196
|
+
assert_equal nil, @range.iv(:@args_foo)
|
197
|
+
assert_equal nil, @range.iv(:@setup_bar)
|
198
|
+
assert_equal nil, @range.iv(:@benchmark_bar)
|
199
|
+
assert_equal nil, @range.iv(:@after_bar)
|
200
|
+
assert_equal nil, @range.iv(:@teardown_bar)
|
201
|
+
assert_equal nil, @range.iv(:@args_bar)
|
202
|
+
rc = Case.run_count
|
203
|
+
@range.run
|
204
|
+
assert_equal rc + 1, Case.run_count
|
205
|
+
assert_equal true, @range.iv(:@setup)
|
206
|
+
assert_equal true, @range.iv(:@teardown)
|
207
|
+
assert_equal true, @range.iv(:@setup_foo)
|
208
|
+
assert_equal true, @range.iv(:@before_foo)
|
209
|
+
assert_equal true, @range.iv(:@benchmark_foo)
|
210
|
+
assert_equal true, @range.iv(:@after_foo)
|
211
|
+
assert_equal true, @range.iv(:@teardown_foo)
|
212
|
+
assert_equal 10, @range.iv(:@args_foo)
|
213
|
+
assert_equal true, @range.iv(:@setup_bar)
|
214
|
+
assert_equal true, @range.iv(:@benchmark_bar)
|
215
|
+
assert_equal true, @range.iv(:@after_bar)
|
216
|
+
assert_equal true, @range.iv(:@teardown_bar)
|
217
|
+
assert_equal nil, @range.iv(:@args_bar)
|
218
|
+
runs = 2 * RangeBenchmark.range.inject(0) { |s,| s + 1 } * RangeBenchmark.scatter
|
219
|
+
assert_equal runs, @range.iv(:@befores)
|
220
|
+
assert_equal runs, @range.iv(:@afters)
|
221
|
+
end
|
222
|
+
end
|