mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-20 11:48:30 -06:00
This switches swig to use python 3 specific features when generating the bindings, switches the build over to python 3 and makes the neccesary python 2 to 3 conversions in the bindings and tests.
103 lines
3.3 KiB
Python
103 lines
3.3 KiB
Python
from unittest import TestCase, main
|
|
|
|
from gnucash import GncNumeric, GNC_DENOM_AUTO, GNC_HOW_DENOM_FIXED, \
|
|
GNC_HOW_RND_NEVER, GNC_HOW_RND_FLOOR, GNC_HOW_RND_CEIL
|
|
|
|
class TestGncNumeric( TestCase ):
|
|
def test_defaut(self):
|
|
num = GncNumeric()
|
|
self.assertEqual(str(num), "0/1")
|
|
self.assertEqual(num.num(), 0)
|
|
self.assertEqual(num.denom(), 1)
|
|
|
|
def test_from_num_denom(self):
|
|
num = GncNumeric(1, 2)
|
|
self.assertEqual(str(num), "1/2")
|
|
self.assertEqual(num.num(), 1)
|
|
self.assertEqual(num.denom(), 2)
|
|
|
|
def test_from_int(self):
|
|
num = GncNumeric(3)
|
|
self.assertEqual(str(num), "3/1")
|
|
self.assertEqual(num.num(), 3)
|
|
self.assertEqual(num.denom(), 1)
|
|
|
|
with self.assertRaises(Exception) as context:
|
|
GncNumeric((2**64)+1)
|
|
|
|
#On Linux it raises an OverflowError while on MacOS it's a TypeError.
|
|
self.assertTrue(isinstance(context.exception, TypeError) or
|
|
isinstance(context.exception, OverflowError))
|
|
|
|
def test_from_float(self):
|
|
num = GncNumeric(3.1, 20, GNC_HOW_DENOM_FIXED | GNC_HOW_RND_NEVER)
|
|
self.assertEqual(str(num), "62/20")
|
|
self.assertEqual(num.num(), 62)
|
|
self.assertEqual(num.denom(), 20)
|
|
|
|
num = GncNumeric(1/3.0, 10000000000, GNC_HOW_RND_FLOOR)
|
|
self.assertEqual(str(num), "3333333333/10000000000")
|
|
self.assertEqual(num.num(), 3333333333)
|
|
self.assertEqual(num.denom(), 10000000000)
|
|
|
|
num = GncNumeric(1/3.0, 10000000000, GNC_HOW_RND_CEIL)
|
|
self.assertEqual(str(num), "3333333334/10000000000")
|
|
self.assertEqual(num.num(), 3333333334)
|
|
self.assertEqual(num.denom(), 10000000000)
|
|
|
|
def test_from_float_auto(self):
|
|
num = GncNumeric(3.1)
|
|
self.assertEqual(str(num), "31/10")
|
|
self.assertEqual(num.num(), 31)
|
|
self.assertEqual(num.denom(), 10)
|
|
|
|
def test_from_instance(self):
|
|
orig = GncNumeric(3)
|
|
num = GncNumeric(instance=orig.instance)
|
|
self.assertEqual(str(num), "3/1")
|
|
self.assertEqual(num.num(), 3)
|
|
self.assertEqual(num.denom(), 1)
|
|
|
|
def test_from_str(self):
|
|
num = GncNumeric("3.1")
|
|
self.assertEqual(str(num), "31/10")
|
|
self.assertEqual(num.num(), 31)
|
|
self.assertEqual(num.denom(), 10)
|
|
|
|
num = GncNumeric("1/3")
|
|
self.assertEqual(str(num), "1/3")
|
|
self.assertEqual(num.num(), 1)
|
|
self.assertEqual(num.denom(), 3)
|
|
|
|
def test_to_str(self):
|
|
num = GncNumeric("1000/3")
|
|
self.assertEqual(str(num), "1000/3")
|
|
|
|
num = GncNumeric(1, 0)
|
|
self.assertEqual(str(num), "1/0")
|
|
|
|
def test_to_double(self):
|
|
for test_num in [0.0, 1.1, -1.1, 1/3.0]:
|
|
self.assertEqual(GncNumeric(test_num).to_double(), test_num)
|
|
|
|
def test_to_fraction(self):
|
|
fraction = GncNumeric("1000/3").to_fraction()
|
|
self.assertEqual(fraction.numerator, 1000)
|
|
self.assertEqual(fraction.denominator, 3)
|
|
|
|
def test_incorect_args(self):
|
|
with self.assertRaises(TypeError):
|
|
GncNumeric(1, 2, 3)
|
|
|
|
with self.assertRaises(TypeError):
|
|
GncNumeric("1", 2)
|
|
|
|
with self.assertRaises(TypeError):
|
|
GncNumeric(1.1, "round")
|
|
|
|
with self.assertRaises(TypeError):
|
|
GncNumeric(complex(1, 1))
|
|
|
|
if __name__ == '__main__':
|
|
main()
|