python-damaris/tests/datatest.py
2014-06-26 11:10:51 +00:00

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()