[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