[pypy-svn] r65478 - in pypy/branch/io-lang/pypy/lang/io: . test
david at codespeak.net
david at codespeak.net
Thu May 28 14:20:39 CEST 2009
Author: david
Date: Thu May 28 14:20:38 2009
New Revision: 65478
Modified:
pypy/branch/io-lang/pypy/lang/io/number.py
pypy/branch/io-lang/pypy/lang/io/test/test_number.py
Log:
Some Number built-method (mod, ceil, floor, round, pow)
Modified: pypy/branch/io-lang/pypy/lang/io/number.py
==============================================================================
--- pypy/branch/io-lang/pypy/lang/io/number.py (original)
+++ pypy/branch/io-lang/pypy/lang/io/number.py Thu May 28 14:20:38 2009
@@ -1,3 +1,4 @@
+from math import ceil, floor
from pypy.lang.io.register import register_method
from pypy.lang.io.model import W_Number
@@ -7,4 +8,32 @@
@register_method("Number", '-', unwrap_spec=[float, float])
def w_number_minus(space, target, argument):
- return W_Number(space, target - argument)
\ No newline at end of file
+ return W_Number(space, target - argument)
+
+ at register_method('Number', '%', unwrap_spec=[float, float], alias=['mod'])
+def w_number_modulo(space, target, argument):
+ argument = abs(argument)
+ return W_Number(space, target % argument)
+
+ at register_method('Number', '**', unwrap_spec=[float, float], alias=['pow'])
+def w_number_modulo(space, target, argument):
+ return W_Number(space, target ** argument)
+
+ at register_method('Number', 'ceil', unwrap_spec=[float])
+def w_number_modulo(space, target):
+ return W_Number(space, ceil(target))
+
+ at register_method('Number', 'floor', unwrap_spec=[float])
+def w_number_modulo(space, target):
+ return W_Number(space, floor(target))
+
+ at register_method('Number', 'round', unwrap_spec=[float])
+def w_number_modulo(space, target):
+ if target < 0:
+ n = ceil(target - 0.5)
+ else:
+ n = floor(target + 0.5)
+
+ return W_Number(space, n)
+
+
Modified: pypy/branch/io-lang/pypy/lang/io/test/test_number.py
==============================================================================
--- pypy/branch/io-lang/pypy/lang/io/test/test_number.py (original)
+++ pypy/branch/io-lang/pypy/lang/io/test/test_number.py Thu May 28 14:20:38 2009
@@ -29,3 +29,93 @@
res, space = interpret(inp)
assert res.value == 8
+def test_modulo_int_int():
+ inp = '5 % 3'
+ res, space = interpret(inp)
+ assert res.value == 2
+
+def test_modulo_int_float():
+ inp = '5 % 3.2'
+ res, space = interpret(inp)
+ assert res.value == 1.7999999999999998
+
+def test_module_float_float():
+ inp = '5.3 % 3.2'
+ res, space = interpret(inp)
+ assert res.value == 2.0999999999999996
+
+def test_modulo_neg_int_int():
+ inp = '-8 % 3'
+ res, space = interpret(inp)
+ assert res.value == -2
+
+def test_modulo_int_neg_int():
+ inp = '8 % -3'
+ res, space = interpret(inp)
+ assert res.value == 2
+
+def test_modulo_int_neg_int_neg():
+ inp = '-8 % -3'
+ res, space = interpret(inp)
+ assert res.value == -2
+
+def test_modulo_float_float():
+ inp = '8.3 % 3.2'
+ res, space = interpret(inp)
+ assert res.value == 1.9000000000000004
+
+def test_modulo_neg_float_float():
+ inp = '-8.3 % 3.2'
+ res, space = interpret(inp)
+ assert res.value == -1.9000000000000004
+
+def test_modulo_float_neg_float():
+ inp = '8.3 % -3.2'
+ res, space = interpret(inp)
+ assert res.value == 1.9000000000000004
+
+def test_modulo_neg_float_neg_float():
+ inp = '-8.3 % -3.2'
+ res, space = interpret(inp)
+ assert res.value == -1.9000000000000004
+
+def test_alias_modulo():
+ inp = '-8.3 mod(-3.2)'
+ res, space = interpret(inp)
+ assert res.value == -1.9000000000000004
+
+def test_pow():
+ inp1 = '5 ** -2.2'
+ inp2 = '5 pow(-2.2)'
+ res1, space = interpret(inp1)
+ res2, space = interpret(inp2)
+ assert res1.value >= 0.0289911865471078 \
+ and res1.value <= 0.0289911865471079 \
+ and res2.value == res1.value
+
+def test_ceil():
+ inp = '3.3 ceil'
+ res, space = interpret(inp)
+ assert res.value == 4
+
+def test_floor():
+ inp = '3.9 floor'
+ res, space = interpret(inp)
+ assert res.value == 3
+
+def test_round():
+ inp = '3.3 round'
+ res, space = interpret(inp)
+ assert res.value == 3
+
+ inp = '3.7 round'
+ res, space = interpret(inp)
+ assert res.value == 4
+
+ inp = '3.5 round'
+ res, space = interpret(inp)
+ assert res.value == 4
+
+ inp = '-3.4 round'
+ res, space = interpret(inp)
+ assert res.value == -3
\ No newline at end of file
More information about the Pypy-commit
mailing list