summaryrefslogtreecommitdiff
path: root/tests/db_functions/math/test_abs.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/db_functions/math/test_abs.py')
-rw-r--r--tests/db_functions/math/test_abs.py50
1 files changed, 50 insertions, 0 deletions
diff --git a/tests/db_functions/math/test_abs.py b/tests/db_functions/math/test_abs.py
new file mode 100644
index 0000000000..99f2a336f7
--- /dev/null
+++ b/tests/db_functions/math/test_abs.py
@@ -0,0 +1,50 @@
+from decimal import Decimal
+
+from django.db.models import DecimalField
+from django.db.models.functions import Abs
+from django.test import TestCase
+
+from ..models import DecimalModel, FloatModel, IntegerModel
+
+
+class AbsTests(TestCase):
+
+ def test_decimal(self):
+ DecimalModel.objects.create(n1=Decimal('-0.8'), n2=Decimal('1.2'))
+ obj = DecimalModel.objects.annotate(n1_abs=Abs('n1'), n2_abs=Abs('n2')).first()
+ self.assertIsInstance(obj.n1_abs, Decimal)
+ self.assertIsInstance(obj.n2_abs, Decimal)
+ self.assertEqual(obj.n1, -obj.n1_abs)
+ self.assertEqual(obj.n2, obj.n2_abs)
+
+ def test_float(self):
+ obj = FloatModel.objects.create(f1=-0.5, f2=12)
+ obj = FloatModel.objects.annotate(f1_abs=Abs('f1'), f2_abs=Abs('f2')).first()
+ self.assertIsInstance(obj.f1_abs, float)
+ self.assertIsInstance(obj.f2_abs, float)
+ self.assertEqual(obj.f1, -obj.f1_abs)
+ self.assertEqual(obj.f2, obj.f2_abs)
+
+ def test_integer(self):
+ IntegerModel.objects.create(small=12, normal=0, big=-45)
+ obj = IntegerModel.objects.annotate(
+ small_abs=Abs('small'),
+ normal_abs=Abs('normal'),
+ big_abs=Abs('big'),
+ ).first()
+ self.assertIsInstance(obj.small_abs, int)
+ self.assertIsInstance(obj.normal_abs, int)
+ self.assertIsInstance(obj.big_abs, int)
+ self.assertEqual(obj.small, obj.small_abs)
+ self.assertEqual(obj.normal, obj.normal_abs)
+ self.assertEqual(obj.big, -obj.big_abs)
+
+ def test_transform(self):
+ try:
+ DecimalField.register_lookup(Abs)
+ DecimalModel.objects.create(n1=Decimal('-1.5'), n2=Decimal('0'))
+ DecimalModel.objects.create(n1=Decimal('-0.5'), n2=Decimal('0'))
+ objs = DecimalModel.objects.filter(n1__abs__gt=1)
+ self.assertQuerysetEqual(objs, [Decimal('-1.5')], lambda a: a.n1)
+ finally:
+ DecimalField._unregister_lookup(Abs)