2 # -*- coding: utf-8 -*-
4 #Copyright 2008-2011 Carl Gherardi
5 #This program is free software: you can redistribute it and/or modify
6 #it under the terms of the GNU Affero General Public License as published by
7 #the Free Software Foundation, version 3 of the License.
9 #This program is distributed in the hope that it will be useful,
10 #but WITHOUT ANY WARRANTY; without even the implied warranty of
11 #MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 #GNU General Public License for more details.
14 #You should have received a copy of the GNU Affero General Public License
15 #along with this program. If not, see <http://www.gnu.org/licenses/>.
16 #In the "official" distribution you can find the license in agpl-3.0.txt.
22 # Should probably use our wrapper classes - creating sqlite db in memory
23 sqlite3
.register_converter("bool", lambda x
: bool(int(x
)))
24 sqlite3
.register_adapter(bool, lambda x
: "1" if x
else "0")
26 con
= sqlite3
.connect(":memory:")
27 con
.isolation_level
= None
30 con
.create_function("floor", 1, math
.floor
)
33 tmp
= Database
.sqlitemath()
34 con
.create_function("mod", 2, tmp
.mod
)
36 # Aggregate function VARIANCE()
37 con
.create_aggregate("variance", 1, Database
.VARIANCE
)
42 def testSQLiteVarianceFunction():
43 cur
.execute("CREATE TABLE test(i)")
44 cur
.execute("INSERT INTO test(i) values (1)")
45 cur
.execute("INSERT INTO test(i) values (2)")
46 cur
.execute("INSERT INTO test(i) values (3)")
47 cur
.execute("SELECT variance(i) from test")
48 result
= cur
.fetchone()[0]
50 print (_("DEBUG:") + " " + _("Testing variance function"))
51 print (_("DEBUG:") + " " + _("result: %s expecting: 0.666666 (result-expecting ~= 0.0): %s") % (result
, (result
- 0.66666)))
52 cur
.execute("DROP TABLE test")
53 assert (result
- 0.66666) <= 0.0001
55 def testSQLiteFloorFunction():
56 vars = [0.1, 1.5, 2.6, 3.5, 4.9]
57 cur
.execute("CREATE TABLE test(i float)")
59 cur
.execute("INSERT INTO test(i) values(%f)" % var
)
60 cur
.execute("SELECT floor(i) from test")
61 result
= cur
.fetchall()
62 print "DEBUG: result: %s" % result
65 print "DEBUG: int(var): %s" % int(i
[0])
66 assert answer
== int(i
[0])
68 cur
.execute("DROP TABLE test")
70 def testSQLiteModFunction():
71 vars = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ,17, 18]
72 cur
.execute("CREATE TABLE test(i int)")
74 cur
.execute("INSERT INTO test(i) values(%i)" % var
)
75 cur
.execute("SELECT mod(i,13) from test")
76 result
= cur
.fetchall()
79 print "DEBUG: int(var): %s" % i
[0]
80 assert vars[idx
]%13 == int(i
[0])
83 cur
.execute("DROP TABLE test")