summaryrefslogtreecommitdiffstatshomepage
path: root/tests/float/float_divmod_relaxed.py
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2014-09-13 19:58:18 +0100
committerDamien George <damien.p.george@gmail.com>2014-09-13 19:58:18 +0100
commit83695596ed4fe3ad990b68cc5ff52c26caf2174d (patch)
treeed56b5df87a3c1837ee55808643fe2738c1124e1 /tests/float/float_divmod_relaxed.py
parent8594ce228011e6264f59ade4ff8a7f2bfa90a649 (diff)
downloadmicropython-83695596ed4fe3ad990b68cc5ff52c26caf2174d.tar.gz
micropython-83695596ed4fe3ad990b68cc5ff52c26caf2174d.zip
py: Fix build error when float disabled; add test for divmod.
Diffstat (limited to 'tests/float/float_divmod_relaxed.py')
-rw-r--r--tests/float/float_divmod_relaxed.py27
1 files changed, 27 insertions, 0 deletions
diff --git a/tests/float/float_divmod_relaxed.py b/tests/float/float_divmod_relaxed.py
new file mode 100644
index 0000000000..7054d2ca67
--- /dev/null
+++ b/tests/float/float_divmod_relaxed.py
@@ -0,0 +1,27 @@
+# test floating point floor divide and modulus
+# it has some tricky corner cases
+
+# pyboard has 32-bit floating point and gives different (but still
+# correct) answers for certain combinations of divmod arguments.
+
+def test(x, y):
+ div, mod = divmod(x, y)
+ print(div == x // y, mod == x % y, abs(div * y + mod - x) < 1e-6)
+
+test(1.23456, 0.7)
+test(-1.23456, 0.7)
+test(1.23456, -0.7)
+test(-1.23456, -0.7)
+
+a = 1.23456
+b = 0.7
+test(a, b)
+test(a, -b)
+test(-a, b)
+test(-a, -b)
+
+for i in range(25):
+ x = (i - 12.5) / 6
+ for j in range(25):
+ y = (j - 12.5) / 6
+ test(x, y)