1 from __future__
import division
8 def test_emptyInstance():
9 stat = OnTheFlyStatistics()
11 assert stat.getSampleSize() == 0
13 with pytest.raises(Exception):
16 with pytest.raises(Exception):
17 stat.getSampleVariance()
21 stat = OnTheFlyStatistics()
25 assert stat.getSampleSize() == 1
26 assert stat.getSampleMean() == -1
28 with pytest.raises(Exception):
29 stat.getSampleVariance()
32 def test_twoData_int():
33 stat = OnTheFlyStatistics()
40 assert stat.getSampleSize() == 2
41 assert stat.getSampleMean() == -0.5
42 assert stat.getSampleVariance() == 0.5
44 math.sqrt(stat.getSampleVariance()) == stat.getSampleStandardDeviation()
46 stat.getStandardErrorOfTheMean() == \
47 stat.getSampleStandardDeviation() / math.sqrt(stat.getSampleSize())
50 def test_twoData_float():
51 stat = OnTheFlyStatistics()
58 assert stat.getSampleSize() == 2
59 assert stat.getSampleMean() == sum(data) / len(data)
60 assert stat.getSampleVariance() == 4.5
62 math.sqrt(stat.getSampleVariance()) == stat.getSampleStandardDeviation()
64 stat.getStandardErrorOfTheMean() == \
65 stat.getSampleStandardDeviation() / math.sqrt(stat.getSampleSize())
69 stat = OnTheFlyStatistics()
76 assert stat.getSampleSize() == 3
77 assert stat.getSampleMean() == 0
78 assert stat.getSampleVariance() == 1
80 math.sqrt(stat.getSampleVariance()) == stat.getSampleStandardDeviation()
82 stat.getStandardErrorOfTheMean() == \
83 stat.getSampleStandardDeviation() / math.sqrt(stat.getSampleSize())
86 def test_mergeSample():
87 stat = OnTheFlyStatistics()
95 stat1 = copy.deepcopy(stat)
96 stat2 = OnTheFlyStatistics()
104 stat1.mergeSample(stat2)
106 assert stat1.getSampleSize() == stat.getSampleSize()
107 assert stat1.getSampleMean() == stat.getSampleMean()
108 assert stat1.getSampleVariance() == stat.getSampleVariance()
110 stat1.getSampleStandardDeviation() == stat.getSampleStandardDeviation()
112 stat1.getStandardErrorOfTheMean() == stat.getStandardErrorOfTheMean()
115 def test_mergeSamples():
116 stat = OnTheFlyStatistics()
124 stat1 = copy.deepcopy(stat)
125 stat2 = OnTheFlyStatistics()
133 stat1.mergeSample(stat2)
135 stat_threeMerged = copy.deepcopy(stat)
136 stat_threeMerged.mergeSamples([stat1, stat2])
138 stat.mergeSample(stat1)
139 stat.mergeSample(stat2)
141 assert stat_threeMerged.getSampleSize() == stat.getSampleSize()
142 assert stat_threeMerged.getSampleMean() == stat.getSampleMean()
143 assert stat_threeMerged.getSampleVariance() == stat.getSampleVariance()
145 stat_threeMerged.getSampleStandardDeviation() == \
146 stat.getSampleStandardDeviation()
148 stat_threeMerged.getStandardErrorOfTheMean() == \
149 stat.getStandardErrorOfTheMean()
152 def test_constructor_with_arguments():
153 stat = OnTheFlyStatistics(3, 4, 5)
154 assert stat.getSampleSize() == 5
155 assert stat.getSampleMean() == 3
156 assert stat.getSampleVariance() == 4
158 stat.getSampleStandardDeviation() == math.sqrt(stat.getSampleVariance())
160 stat.getStandardErrorOfTheMean() == \
161 stat.getSampleStandardDeviation() / math.sqrt(stat.getSampleSize())
163 stat2 = OnTheFlyStatistics()
164 stat2.mergeSample(stat)
166 assert stat2.getSampleSize() == stat.getSampleSize()
167 assert stat2.getSampleMean() == stat.getSampleMean()
168 assert stat2.getSampleVariance() == stat.getSampleVariance()
170 stat2.getStandardErrorOfTheMean() == \
171 stat.getStandardErrorOfTheMean()
174 def test_serializeToString():
186 for dataSize
in dataSizes:
188 data = [random.random()
for _
in range(0, dataSize)]
190 stat = OnTheFlyStatistics()
193 assert isinstance(stat.serializeToString(), str)
196 def test_unserializeFromString():
197 stat = OnTheFlyStatistics()
199 with pytest.raises(TypeError):
200 stat.unserializeFromString([
"foo"])
201 with pytest.raises(TypeError):
202 stat.unserializeFromString(stat)
204 with pytest.raises(ValueError):
205 stat.unserializeFromString(
"")
206 with pytest.raises(ValueError):
207 stat.unserializeFromString(
"foo")
208 with pytest.raises(ValueError):
209 stat.unserializeFromString(
"123;0;0;0")
210 with pytest.raises(ValueError):
211 stat.unserializeFromString(
"1;0;1;0")
212 with pytest.raises(ValueError):
213 stat.unserializeFromString(
"1;0;0;1")
214 with pytest.raises(ValueError):
215 stat.unserializeFromString(
"1;-1;0.0;0.0")
216 with pytest.raises(ValueError):
217 stat.unserializeFromString(
"1;2;0;-1")
218 with pytest.raises(ValueError):
219 stat.unserializeFromString(
"1;0;0;0;0")
220 with pytest.raises(ValueError):
221 stat.unserializeFromString(
"1;0;0;0;")
222 with pytest.raises(ValueError):
223 stat.unserializeFromString(
"1;0;;0")
226 stat.unserializeFromString(
"1;0;0;0")
227 assert stat.getSampleSize() == 0
229 stat = OnTheFlyStatistics()
230 unserialized = OnTheFlyStatistics()
231 unserialized.unserializeFromString(stat.serializeToString())
232 assert unserialized == stat
233 unserialized.unserializeFromString(stat.serializeToString())
234 assert unserialized == stat
237 def approximatelyEqual(lhs, rhs):
238 if lhs.getSampleSize() != rhs.getSampleSize():
241 if lhs.getSampleSize() == 0:
244 if lhs.getSampleMean() != pytest.approx(rhs.getSampleMean()):
247 if lhs.getSampleSize() == 1:
250 if lhs.getSampleVariance() != pytest.approx(rhs.getSampleVariance()):
257 for _
in range(0, 50):
258 for _
in range(0, random.randint(1, 5)):
259 stat.addDatum(random.random())
261 assert not approximatelyEqual(unserialized, stat)
262 unserialized.unserializeFromString(stat.serializeToString())
263 assert approximatelyEqual(unserialized, stat)
264 unserialized.unserializeFromString(stat.serializeToString())
265 assert approximatelyEqual(unserialized, stat)
268 stat = OnTheFlyStatistics()
275 unserialized = OnTheFlyStatistics()
276 unserialized.unserializeFromString(
"1;5;3.0;10.0")
277 assert approximatelyEqual(unserialized, stat)
281 def test___eq_____ne_____hash__():
282 stat1_1 = OnTheFlyStatistics(3, 4, 5)
283 stat1_2 = OnTheFlyStatistics(3, 4, 5)
284 stat2 = OnTheFlyStatistics(1, 4, 5)
285 stat3 = OnTheFlyStatistics(3, 1, 5)
286 stat4 = OnTheFlyStatistics(3, 4, 1)
288 stat2to4 = [stat2, stat3, stat4]
289 allstat = [stat1_1, stat1_2] + stat2to4
294 assert not stat != stat
295 assert stat.__hash__() == stat.__hash__()
297 assert stat1_1 == stat1_2
298 assert stat1_2 == stat1_1
299 assert not stat1_1 != stat1_2
300 assert not stat1_2 != stat1_1
301 assert stat1_1.__hash__() == stat1_2.__hash__()
303 for statcollection
in [[stat1_1] + stat2to4, [stat1_2] + stat2to4]:
304 for stat
in statcollection:
305 for other
in statcollection:
308 assert not stat == other
310 assert stat.__hash__() != other.__hash__()
325 for dataSize
in dataSizes:
327 data = [random.random()
for _
in range(0, dataSize)]
329 stat = OnTheFlyStatistics()
333 assert isinstance(stat.__repr__(), str)