Author: Carl Friedrich Bolz <[email protected]>
Branch:
Changeset: r61494:d71d48cdf597
Date: 2013-02-20 13:41 +0100
http://bitbucket.org/pypy/pypy/changeset/d71d48cdf597/
Log: move some tests to the newly created rlib/test/test_rfloat.py
diff --git a/rpython/rlib/test/test_rfloat.py b/rpython/rlib/test/test_rfloat.py
--- a/rpython/rlib/test/test_rfloat.py
+++ b/rpython/rlib/test/test_rfloat.py
@@ -1,8 +1,116 @@
import sys, py
from rpython.rlib.rfloat import float_as_rbigint_ratio
+from rpython.rlib.rfloat import break_up_float
+from rpython.rlib.rfloat import copysign
+from rpython.rlib.rfloat import round_away
+from rpython.rlib.rfloat import round_double
from rpython.rlib.rbigint import rbigint
+def test_copysign():
+ assert copysign(1, 1) == 1
+ assert copysign(-1, 1) == 1
+ assert copysign(-1, -1) == -1
+ assert copysign(1, -1) == -1
+ assert copysign(1, -0.) == -1
+
+def test_round_away():
+ assert round_away(.1) == 0.
+ assert round_away(.5) == 1.
+ assert round_away(.7) == 1.
+ assert round_away(1.) == 1.
+ assert round_away(-.5) == -1.
+ assert round_away(-.1) == 0.
+ assert round_away(-.7) == -1.
+ assert round_away(0.) == 0.
+
+def test_round_double():
+ def almost_equal(x, y):
+ assert round(abs(x-y), 7) == 0
+
+ almost_equal(round_double(0.125, 2), 0.13)
+ almost_equal(round_double(0.375, 2), 0.38)
+ almost_equal(round_double(0.625, 2), 0.63)
+ almost_equal(round_double(0.875, 2), 0.88)
+ almost_equal(round_double(-0.125, 2), -0.13)
+ almost_equal(round_double(-0.375, 2), -0.38)
+ almost_equal(round_double(-0.625, 2), -0.63)
+ almost_equal(round_double(-0.875, 2), -0.88)
+
+ almost_equal(round_double(0.25, 1), 0.3)
+ almost_equal(round_double(0.75, 1), 0.8)
+ almost_equal(round_double(-0.25, 1), -0.3)
+ almost_equal(round_double(-0.75, 1), -0.8)
+
+ round_double(-6.5, 0) == -7.0
+ round_double(-5.5, 0) == -6.0
+ round_double(-1.5, 0) == -2.0
+ round_double(-0.5, 0) == -1.0
+ round_double(0.5, 0) == 1.0
+ round_double(1.5, 0) == 2.0
+ round_double(2.5, 0) == 3.0
+ round_double(3.5, 0) == 4.0
+ round_double(4.5, 0) == 5.0
+ round_double(5.5, 0) == 6.0
+ round_double(6.5, 0) == 7.0
+
+ round_double(-25.0, -1) == -30.0
+ round_double(-15.0, -1) == -20.0
+ round_double(-5.0, -1) == -10.0
+ round_double(5.0, -1) == 10.0
+ round_double(15.0, -1) == 20.0
+ round_double(25.0, -1) == 30.0
+ round_double(35.0, -1) == 40.0
+ round_double(45.0, -1) == 50.0
+ round_double(55.0, -1) == 60.0
+ round_double(65.0, -1) == 70.0
+ round_double(75.0, -1) == 80.0
+ round_double(85.0, -1) == 90.0
+ round_double(95.0, -1) == 100.0
+ round_double(12325.0, -1) == 12330.0
+
+ round_double(350.0, -2) == 400.0
+ round_double(450.0, -2) == 500.0
+
+ almost_equal(round_double(0.5e21, -21), 1e21)
+ almost_equal(round_double(1.5e21, -21), 2e21)
+ almost_equal(round_double(2.5e21, -21), 3e21)
+ almost_equal(round_double(5.5e21, -21), 6e21)
+ almost_equal(round_double(8.5e21, -21), 9e21)
+
+ almost_equal(round_double(-1.5e22, -22), -2e22)
+ almost_equal(round_double(-0.5e22, -22), -1e22)
+ almost_equal(round_double(0.5e22, -22), 1e22)
+ almost_equal(round_double(1.5e22, -22), 2e22)
+
+def test_round_half_even():
+ from rpython.rlib import rfloat
+ for func in (rfloat.round_double_short_repr,
+ rfloat.round_double_fallback_repr):
+ # 2.x behavior
+ assert func(2.5, 0, False) == 3.0
+ # 3.x behavior
+ assert func(2.5, 0, True) == 2.0
+
+def test_break_up_float():
+ assert break_up_float('1') == ('', '1', '', '')
+ assert break_up_float('+1') == ('+', '1', '', '')
+ assert break_up_float('-1') == ('-', '1', '', '')
+
+ assert break_up_float('.5') == ('', '', '5', '')
+
+ assert break_up_float('1.2e3') == ('', '1', '2', '3')
+ assert break_up_float('1.2e+3') == ('', '1', '2', '+3')
+ assert break_up_float('1.2e-3') == ('', '1', '2', '-3')
+
+ # some that will get thrown out on return:
+ assert break_up_float('.') == ('', '', '', '')
+ assert break_up_float('+') == ('+', '', '', '')
+ assert break_up_float('-') == ('-', '', '', '')
+ assert break_up_float('e1') == ('', '', '', '1')
+
+ py.test.raises(ValueError, break_up_float, 'e')
+
def test_float_as_rbigint_ratio():
for f, ratio in [
diff --git a/rpython/rtyper/test/test_rfloat.py
b/rpython/rtyper/test/test_rfloat.py
--- a/rpython/rtyper/test/test_rfloat.py
+++ b/rpython/rtyper/test/test_rfloat.py
@@ -216,26 +216,6 @@
# https://bugzilla.novell.com/show_bug.cgi?id=692493
assert not self.interpret(fn, [1e200, 1e200]) # nan
- def test_break_up_float(self):
- from rpython.rlib.rfloat import break_up_float
- assert break_up_float('1') == ('', '1', '', '')
- assert break_up_float('+1') == ('+', '1', '', '')
- assert break_up_float('-1') == ('-', '1', '', '')
-
- assert break_up_float('.5') == ('', '', '5', '')
-
- assert break_up_float('1.2e3') == ('', '1', '2', '3')
- assert break_up_float('1.2e+3') == ('', '1', '2', '+3')
- assert break_up_float('1.2e-3') == ('', '1', '2', '-3')
-
- # some that will get thrown out on return:
- assert break_up_float('.') == ('', '', '', '')
- assert break_up_float('+') == ('+', '', '', '')
- assert break_up_float('-') == ('-', '', '', '')
- assert break_up_float('e1') == ('', '', '', '1')
-
- py.test.raises(ValueError, break_up_float, 'e')
-
def test_formatd(self):
from rpython.rlib.rfloat import formatd
def f(x):
@@ -296,93 +276,6 @@
assert self.interpret(func, [0]) == 1e23
assert self.interpret(func, [1]) == -1e23
- def test_copysign(self):
- from rpython.rlib.rfloat import copysign
- assert copysign(1, 1) == 1
- assert copysign(-1, 1) == 1
- assert copysign(-1, -1) == -1
- assert copysign(1, -1) == -1
- assert copysign(1, -0.) == -1
-
- def test_round_away(self):
- from rpython.rlib.rfloat import round_away
- assert round_away(.1) == 0.
- assert round_away(.5) == 1.
- assert round_away(.7) == 1.
- assert round_away(1.) == 1.
- assert round_away(-.5) == -1.
- assert round_away(-.1) == 0.
- assert round_away(-.7) == -1.
- assert round_away(0.) == 0.
-
- def test_round_double(self):
- from rpython.rlib.rfloat import round_double
- def almost_equal(x, y):
- assert round(abs(x-y), 7) == 0
-
- almost_equal(round_double(0.125, 2), 0.13)
- almost_equal(round_double(0.375, 2), 0.38)
- almost_equal(round_double(0.625, 2), 0.63)
- almost_equal(round_double(0.875, 2), 0.88)
- almost_equal(round_double(-0.125, 2), -0.13)
- almost_equal(round_double(-0.375, 2), -0.38)
- almost_equal(round_double(-0.625, 2), -0.63)
- almost_equal(round_double(-0.875, 2), -0.88)
-
- almost_equal(round_double(0.25, 1), 0.3)
- almost_equal(round_double(0.75, 1), 0.8)
- almost_equal(round_double(-0.25, 1), -0.3)
- almost_equal(round_double(-0.75, 1), -0.8)
-
- round_double(-6.5, 0) == -7.0
- round_double(-5.5, 0) == -6.0
- round_double(-1.5, 0) == -2.0
- round_double(-0.5, 0) == -1.0
- round_double(0.5, 0) == 1.0
- round_double(1.5, 0) == 2.0
- round_double(2.5, 0) == 3.0
- round_double(3.5, 0) == 4.0
- round_double(4.5, 0) == 5.0
- round_double(5.5, 0) == 6.0
- round_double(6.5, 0) == 7.0
-
- round_double(-25.0, -1) == -30.0
- round_double(-15.0, -1) == -20.0
- round_double(-5.0, -1) == -10.0
- round_double(5.0, -1) == 10.0
- round_double(15.0, -1) == 20.0
- round_double(25.0, -1) == 30.0
- round_double(35.0, -1) == 40.0
- round_double(45.0, -1) == 50.0
- round_double(55.0, -1) == 60.0
- round_double(65.0, -1) == 70.0
- round_double(75.0, -1) == 80.0
- round_double(85.0, -1) == 90.0
- round_double(95.0, -1) == 100.0
- round_double(12325.0, -1) == 12330.0
-
- round_double(350.0, -2) == 400.0
- round_double(450.0, -2) == 500.0
-
- almost_equal(round_double(0.5e21, -21), 1e21)
- almost_equal(round_double(1.5e21, -21), 2e21)
- almost_equal(round_double(2.5e21, -21), 3e21)
- almost_equal(round_double(5.5e21, -21), 6e21)
- almost_equal(round_double(8.5e21, -21), 9e21)
-
- almost_equal(round_double(-1.5e22, -22), -2e22)
- almost_equal(round_double(-0.5e22, -22), -1e22)
- almost_equal(round_double(0.5e22, -22), 1e22)
- almost_equal(round_double(1.5e22, -22), 2e22)
-
- def test_round_half_even(self):
- from rpython.rlib import rfloat
- for func in (rfloat.round_double_short_repr,
- rfloat.round_double_fallback_repr):
- # 2.x behavior
- assert func(2.5, 0, False) == 3.0
- # 3.x behavior
- assert func(2.5, 0, True) == 2.0
class TestLLtype(BaseTestRfloat, LLRtypeMixin):
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit