97 lines
2.8 KiB
Python
97 lines
2.8 KiB
Python
import sys
|
|
import numpy
|
|
import math
|
|
import os.path
|
|
import unittest
|
|
|
|
print "running tests on modules in source directory"
|
|
# assume, script is in tests directory and we are testing modules in src
|
|
sys.path[0:0]=[os.path.join(os.path.dirname(sys.argv[0]), "..", "src", "data")]
|
|
from MeasurementResult import *
|
|
|
|
class TestAccumulatedValueClass(unittest.TestCase):
|
|
|
|
def setUp(self):
|
|
# is called before each test
|
|
pass
|
|
|
|
def testInitialization_Empty(self):
|
|
a=AccumulatedValue()
|
|
self.assert_(a.mean() is None)
|
|
self.assert_(a.mean_error() is None)
|
|
self.assert_(a.sigma() is None)
|
|
self.assert_(a.n==0)
|
|
|
|
def testInitialization_1Value(self):
|
|
a=AccumulatedValue(0)
|
|
self.assert_(a.mean()==0)
|
|
self.assertAlmostEqual(a.mean_error(),0)
|
|
self.assertAlmostEqual(a.sigma(),0)
|
|
self.assert_(a.n==1)
|
|
|
|
def testInitialization_2Values(self):
|
|
a=AccumulatedValue(1, 0.1)
|
|
self.assert_(a.mean(),1.0)
|
|
self.assertAlmostEqual(a.mean_error(), 0.1)
|
|
self.assertAlmostEqual(a.sigma(), 0.1*math.sqrt(2.0))
|
|
self.assert_(a.n==2)
|
|
|
|
def testInitialization_3Values(self):
|
|
a=AccumulatedValue(1, 0.1, 10)
|
|
self.assertAlmostEqual(a.mean(),1)
|
|
self.assertAlmostEqual(a.mean_error(), 0.1)
|
|
self.assertAlmostEqual(a.sigma(), 0.1*math.sqrt(10.0))
|
|
self.assert_(a.n==10)
|
|
|
|
def testStatistics(self):
|
|
test_dataset=numpy.arange(10.0)
|
|
a=AccumulatedValue()
|
|
for i in test_dataset:
|
|
a+=i
|
|
self.assert_(a.n==len(test_dataset))
|
|
# sum x_i/n
|
|
self.assertAlmostEqual(a.mean(), test_dataset.mean())
|
|
# std_dev_n-1 x_i= sqrt(sum (x-xmean)**2/(n-1))
|
|
self.assertAlmostEqual(a.sigma(), math.sqrt(((test_dataset-a.mean())**2).sum()/(len(test_dataset)-1.)))
|
|
# std_dev_n-1 x_i/sqrt(n)
|
|
self.assertAlmostEqual(a.mean_error(), a.sigma()/math.sqrt(len(test_dataset)))
|
|
|
|
def tearDown(self):
|
|
# is called after each test
|
|
pass
|
|
|
|
class TestMeasurementResult(unittest.TestCase):
|
|
|
|
def testImplicitCast(self):
|
|
# check wether other data types will be converted to AccumulatedValue
|
|
m=MeasurementResult("TestData")
|
|
m[1.0]
|
|
m[2.0]=2
|
|
self.assert_(isinstance(m[1.0], AccumulatedValue))
|
|
self.assert_(isinstance(m[2.0], AccumulatedValue))
|
|
|
|
def testUninitalizedEntries(self):
|
|
# assure that entries with no data are listed as xdata
|
|
m=MeasurementResult("TestData")
|
|
a=m[2.0]
|
|
self.assert_(isinstance(a, AccumulatedValue))
|
|
self.assert_(2.0 in m)
|
|
self.assert_(2.0 not in m.get_xdata())
|
|
m[2.0]+=1
|
|
self.assert_(2.0 in m.get_xdata())
|
|
|
|
def testZeroError(self):
|
|
# AccumulatedValues with only one Accumulation should have 0 error
|
|
m=MeasurementResult("TestData")
|
|
m[0.0]
|
|
m[1.0]=AccumulatedValue()
|
|
m[2.0]=0
|
|
m[3.0]=AccumulatedValue(0,1.0)
|
|
k,v,e=m.get_errorplotdata()
|
|
self.assert_(2.0 in k and 3.0 in k)
|
|
self.assert_(1.0 not in k and 0.0 not in k)
|
|
self.assertAlmostEqual(e[k==2.0][0], 0)
|
|
self.assertAlmostEqual(e[k==3.0][0], 1.0)
|
|
|
|
if __name__=="__main__":
|
|
unittest.main() |