10a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoimport unittest
20a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
30a8c90248264a8b26970b4473770bcc3df8515fJosh Gaofrom ctypes import *
40a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoimport _ctypes_test
50a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
60a8c90248264a8b26970b4473770bcc3df8515fJosh Gaolib = CDLL(_ctypes_test.__file__)
70a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
80a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoclass LibTest(unittest.TestCase):
90a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_sqrt(self):
100a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        lib.my_sqrt.argtypes = c_double,
110a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        lib.my_sqrt.restype = c_double
120a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(lib.my_sqrt(4.0), 2.0)
130a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        import math
140a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(lib.my_sqrt(2.0), math.sqrt(2.0))
150a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
160a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_qsort(self):
170a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        comparefunc = CFUNCTYPE(c_int, POINTER(c_char), POINTER(c_char))
180a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        lib.my_qsort.argtypes = c_void_p, c_size_t, c_size_t, comparefunc
190a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        lib.my_qsort.restype = None
200a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
210a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        def sort(a, b):
220a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            return cmp(a[0], b[0])
230a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
240a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        chars = create_string_buffer("spam, spam, and spam")
250a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        lib.my_qsort(chars, len(chars)-1, sizeof(c_char), comparefunc(sort))
260a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(chars.raw, "   ,,aaaadmmmnpppsss\x00")
270a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
280a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoif __name__ == "__main__":
290a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    unittest.main()
30