flori-bullshit 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,8 @@
1
+ module Bullshit
2
+ # Bullshit version
3
+ VERSION = '0.1.0'
4
+ VERSION_ARRAY = VERSION.split(/\./).map { |x| x.to_i } # :nodoc:
5
+ VERSION_MAJOR = VERSION_ARRAY[0] # :nodoc:
6
+ VERSION_MINOR = VERSION_ARRAY[1] # :nodoc:
7
+ VERSION_BUILD = VERSION_ARRAY[2] # :nodoc:
8
+ end
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ puts "Creating documentation."
4
+ system "rdoc -S -d #{Dir['lib/**/*.rb'] * ' '}"
@@ -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