test cleanup
[PyX/mjg.git] / test / unit / test_data.py
blob1efc102f7edab87af2aeda9305ba549bcc92eaed
1 import sys
2 if sys.path[0] != "../..":
3 sys.path.insert(0, "../..")
5 import unittest
7 import StringIO, ConfigParser, types
8 from pyx import *
10 class DataTestCase(unittest.TestCase):
12 def testAccess(self):
13 mydata = data.data([[1, 2, 3], [4, 5, 6]], ["a", "b", "b"])
14 self.failUnlessEqual(mydata.getcolumnno("a"), 0)
15 self.failUnlessEqual(mydata.getcolumnno(1), 1)
16 self.failUnlessRaises(data.ColumnError, mydata.getcolumnno, 3)
17 self.failUnlessRaises(data.ColumnError, mydata.getcolumnno, "b")
18 self.failUnlessRaises(data.ColumnError, mydata.getcolumnno, "c")
19 self.failUnlessEqual(mydata.getcolumn("a"), [1, 4])
20 self.failUnlessEqual(mydata.getcolumn(1), [2, 5])
22 def testAdd(self):
23 mydata = data.data([[1], [2]], ["a"])
24 mydata.addcolumn("b=2*a")
25 mydata.addcolumn("2*$1*a")
26 #mydata.addcolumn("2*$(i)*a", context={"i":1}) # not supported
27 self.failUnlessEqual(mydata.titles, ["a", "b", None])
28 self.failUnlessEqual(mydata.data, [[1, 2.0, 4.0], [2, 4.0, 16.0]])
30 a = "nothing"
31 two = 2
32 f = lambda x: x*x
33 mydata = data.data([[1], [2]], ["a"])
34 mydata.addcolumn("b=two*a", context=locals())
35 mydata.addcolumn("two*$(-1)*a", context=locals())
36 mydata.addcolumn("two*$(-1)*a", context=locals())
37 mydata.addcolumn("f($(-1))", context=locals())
38 self.failUnlessEqual(mydata.titles, ["a", "b", None, None, None])
39 self.failUnlessEqual(mydata.data, [[1, 2.0, 4.0, 8.0, 64.0], [2, 4.0, 16.0, 64.0, 4096.0]])
41 def testFile(self):
42 teststr = """#a
44 1 eins
45 2 "2"
46 3 x"x
47 """
48 mydata = data.datafile(StringIO.StringIO(teststr))
49 self.failUnlessEqual(mydata.titles, [None, "a", None])
50 self.failUnlessEqual(len(mydata.data), 4)
51 self.failUnlessEqual(mydata.data[0], [1, 0.0, None])
52 self.failUnlessEqual(mydata.data[1], [2, 1.0, "eins"])
53 self.failUnlessEqual(mydata.data[2], [3, 2.0, "2"])
54 self.failUnlessEqual(mydata.data[3], [4, 3.0, "x\"x"])
56 def testSec(self):
57 teststr = """[sec1]
58 opt1=bla1
59 opt2=bla2
60 val=1
61 val=2
63 [sec2]
64 opt1=bla1
65 opt2=bla2
66 val=2
67 val=1
69 [sec1]
70 opt3=bla3"""
72 mydata = data.sectionfile(StringIO.StringIO(teststr))
74 configfile = ConfigParser.ConfigParser()
75 configfile.optionxform = str
76 configfile.readfp(StringIO.StringIO(teststr))
78 sec1 = list(mydata.getcolumn("section"))
79 sec1.sort()
80 sec2 = list(configfile.sections())
81 sec2.sort()
82 self.failUnlessEqual(sec1, sec2)
84 for line in mydata.data:
85 sec = line[0]
86 for i in range(1, len(mydata.titles)):
87 opt = mydata.titles[i]
88 if type(line[i]) == types.FloatType:
89 self.failUnlessEqual(configfile.getfloat(sec, opt), line[i])
90 elif type(line[i]) == types.StringType:
91 self.failUnlessEqual(configfile.get(sec, opt), line[i])
92 else:
93 self.failIf(configfile.has_option(sec, opt))
96 if __name__ == "__main__":
97 unittest.main()