Skip to content

Commit 6b7dd48

Browse files
committed
Merge branch 'v0.12.x' of https://github.com/PythonCharmers/python-future into v0.12.x
2 parents 851e537 + 507d11c commit 6b7dd48

File tree

9 files changed

+240
-54
lines changed

9 files changed

+240
-54
lines changed

README.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ are `Mezzanine <http://mezzanine.jupo.org/>`_ and `ObsPy
2222
Features
2323
--------
2424

25-
.. image:: https://travis-ci.org/PythonCharmers/python-future.svg?branch=v0.12.x
25+
.. image:: https://travis-ci.org/PythonCharmers/python-future.svg?branch=master
2626
:target: https://travis-ci.org/PythonCharmers/python-future
2727

2828
- ``future.builtins`` package provides backports and remappings for 19

docs/conf.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@
5252
#
5353
# if 'dev' in release:
5454
# release = release.split('dev')[0] + 'dev'
55-
release = '0.12.3'
55+
release = '0.12.4'
5656
version = release # was: '.'.join(release.split('.')[:2])
5757

5858
# The language for content autogenerated by Sphinx. Refer to documentation

docs/whatsnew.rst

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,14 @@ What's New in v0.12.x
22
*********************
33

44

5+
.. whats-new-0.12.4:
6+
7+
What's new in version 0.12.4
8+
============================
9+
10+
- Fix upcasting behaviour of newint (issue #76).
11+
12+
513
.. whats-new-0.12.3:
614
715
What's new in version 0.12.3

future/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@
7373
__copyright__ = 'Copyright 2014 Python Charmers Pty Ltd'
7474
__ver_major__ = 0
7575
__ver_minor__ = 12
76-
__ver_patch__ = 3
76+
__ver_patch__ = 4
7777
__ver_sub__ = ''
7878
__version__ = "%d.%d.%d%s" % (__ver_major__, __ver_minor__,
7979
__ver_patch__, __ver_sub__)

future/tests/test_int.py

Lines changed: 160 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -398,7 +398,7 @@ def __trunc__(self):
398398
####################################################################
399399
# future-specific tests are below:
400400
####################################################################
401-
401+
402402
# Exception messages in Py2 are 8-bit strings. The following fails,
403403
# even if the testlist strings are wrapped in str() calls...
404404
@expectedFailurePY2
@@ -618,6 +618,165 @@ class longsubclass(long):
618618
print(b.dtype)
619619
assert b.dtype == np.int64 == c.dtype
620620

621+
def test_upcasting_to_floats(self):
622+
"""
623+
Integers should automatically be upcasted to floats for arithmetic
624+
operations.
625+
"""
626+
a = int(3)
627+
628+
# Addition with floats.
629+
self.assertEqual(a + 0.5, 3.5)
630+
self.assertEqual(0.5 + a, 3.5)
631+
self.assertTrue(isinstance(a + 0.5, float))
632+
self.assertTrue(isinstance(0.5 + a, float))
633+
634+
# Subtraction with floats.
635+
self.assertEqual(a - 0.5, 2.5)
636+
self.assertEqual(0.5 - a, -2.5)
637+
self.assertTrue(isinstance(a - 0.5, float))
638+
self.assertTrue(isinstance(0.5 - a, float))
639+
640+
# Multiplication with floats.
641+
self.assertEqual(a * 0.5, 1.5)
642+
self.assertEqual(0.5 * a, 1.5)
643+
self.assertTrue(isinstance(a * 0.5, float))
644+
self.assertTrue(isinstance(0.5 * a, float))
645+
646+
# Division with floats.
647+
self.assertEqual(a / 0.5, 6.0)
648+
self.assertEqual(0.5 / a, 0.5 / 3.0)
649+
self.assertTrue(isinstance(a / 0.5, float))
650+
self.assertTrue(isinstance(0.5 / a, float))
651+
652+
# Modulo with floats.
653+
self.assertEqual(a % 0.5, 0.0)
654+
self.assertEqual(0.5 % a, 0.5)
655+
self.assertTrue(isinstance(a % 0.5, float))
656+
self.assertTrue(isinstance(0.5 % a, float))
657+
658+
# Power with floats.
659+
self.assertEqual(1.0 ** a, 1.0)
660+
self.assertTrue(isinstance(1.0 ** a, float))
661+
662+
self.assertEqual(a ** 1.0, a)
663+
self.assertTrue(isinstance(a ** 1.0, float))
664+
665+
def test_upcasting_to_complex(self):
666+
"""
667+
Integers should automatically be upcasted to complex numbers for
668+
arithmetic operations.
669+
670+
Python 3 cannot mod complex numbers so this does not have to be
671+
supported here.
672+
"""
673+
a = int(3)
674+
675+
# Addition with complex.
676+
self.assertEqual(a + 0.5j, 3.0 + 0.5j)
677+
self.assertEqual(0.5j + a, 3.0 + 0.5j)
678+
self.assertTrue(isinstance(a + 0.5j, complex))
679+
self.assertTrue(isinstance(0.5j + a, complex))
680+
681+
# Subtraction with complex.
682+
self.assertEqual(a - 0.5j, 3.0 - 0.5j)
683+
self.assertEqual(0.5j - a, -3.0 + 0.5j)
684+
self.assertTrue(isinstance(a - 0.5j, complex))
685+
self.assertTrue(isinstance(0.5j - a, complex))
686+
687+
# Multiplication with complex.
688+
self.assertEqual(a * 0.5j, 1.5j)
689+
self.assertEqual(0.5j * a, 1.5j)
690+
self.assertTrue(isinstance(a * 0.5j, complex))
691+
self.assertTrue(isinstance(0.5j * a, complex))
692+
693+
# Division with complex.
694+
self.assertEqual(a / 0.5j, -6.0j)
695+
self.assertEqual(0.5j / a, (0.5 / 3.0) * 1j)
696+
self.assertTrue(isinstance(a / 0.5j, complex))
697+
self.assertTrue(isinstance(0.5j / a, complex))
698+
699+
# Power with floats.
700+
self.assertEqual(5.0j ** int(1), 5.0j)
701+
self.assertTrue(isinstance(5.0j ** int(1), complex))
702+
703+
self.assertEqual(a ** 1.0j, 3.0 ** 1.0j)
704+
self.assertTrue(isinstance(a ** 1.0j, complex))
705+
706+
def test_more_arithmetics(self):
707+
"""
708+
More arithmetic tests to improve test coverage.
709+
"""
710+
a = int(3)
711+
b = int(5)
712+
c = int(-5)
713+
714+
self.assertEqual(b - a, 2)
715+
self.assertTrue(isinstance(b - a, int))
716+
717+
self.assertEqual(a * b, 15)
718+
self.assertTrue(isinstance(a * b, int))
719+
720+
self.assertEqual(b % a, 2)
721+
self.assertTrue(isinstance(b % a, int))
722+
723+
self.assertEqual(a ** b, 243)
724+
self.assertTrue(isinstance(a ** b, int))
725+
726+
self.assertEqual(abs(c), 5)
727+
self.assertEqual(abs(c), b)
728+
self.assertTrue(isinstance(abs(c), int))
729+
730+
def test_bitwise_operations(self):
731+
"""
732+
Tests bitwise operations.
733+
"""
734+
a = int(3)
735+
b = int(1)
736+
737+
self.assertEqual(a >> b, 1)
738+
self.assertEqual(a >> 1, 1)
739+
self.assertTrue(isinstance(a >> b, int))
740+
self.assertTrue(isinstance(a >> 1, int))
741+
742+
self.assertEqual(a << b, 6)
743+
self.assertEqual(a << 1, 6)
744+
self.assertTrue(isinstance(a << b, int))
745+
self.assertTrue(isinstance(a << 1, int))
746+
747+
self.assertEqual(a & b, 1)
748+
self.assertEqual(a & 1, 1)
749+
self.assertTrue(isinstance(a & b, int))
750+
self.assertTrue(isinstance(a & 1, int))
751+
752+
self.assertEqual(a | b, 3)
753+
self.assertEqual(a | 1, 3)
754+
self.assertTrue(isinstance(a | b, int))
755+
self.assertTrue(isinstance(a | 1, int))
756+
757+
self.assertEqual(a ^ b, 2)
758+
self.assertEqual(a ^ 1, 2)
759+
self.assertTrue(isinstance(a ^ b, int))
760+
self.assertTrue(isinstance(a ^ 1, int))
761+
762+
self.assertEqual(~a, -4)
763+
self.assertTrue(isinstance(~a, int))
764+
765+
def test_unary_operators(self):
766+
a = int(3)
767+
b = int(-3)
768+
769+
self.assertEqual(+a, a)
770+
self.assertEqual(+a, 3)
771+
self.assertEqual(+b, b)
772+
self.assertEqual(+b, -3)
773+
self.assertTrue(isinstance(+a, int))
774+
775+
self.assertEqual(-a, b)
776+
self.assertEqual(-a, -3)
777+
self.assertEqual(-b, a)
778+
self.assertEqual(-b, 3)
779+
self.assertTrue(isinstance(-a, int))
621780

622781
if __name__ == "__main__":
623782
unittest.main()

0 commit comments

Comments
 (0)