# mode: run
# tag: syntax
from __future__ import absolute_import
cimport cython
from cython cimport typeof
import sys
def valid_underscore_literals():
"""
>>> valid_underscore_literals()
"""
# Copied from CPython's test_grammar.py
assert 0_0_0 == 0
assert 4_2 == 42
assert 1_0000_0000 == 100000000
assert 0b1001_0100 == 0b10010100
assert 0xffff_ffff == 0xffffffff
assert 0o5_7_7 == 0o577
assert 1_00_00.5 == 10000.5
assert 1e1_0 == 1e10
assert .1_4 == .14
assert 1_0 == 1_0L == 1_0LL == 1_0UL == 1_0ULL
assert typeof(1_0ULL) == "unsigned long long"
@cython.test_assert_path_exists(
'//IntNode[@longness = "LL"]',
'//IntNode[@longness = "L"]',
)
@cython.test_fail_if_path_exists('//IntNode[@longness = ""]')
def c_longs():
"""
>>> c_longs() == (1, 1, -1, 18446744073709551615) or c_longs()
True
"""
cdef long a = 1L
cdef unsigned long ua = 1UL
cdef long long aa = 0xFFFFFFFFFFFFFFFFLL
cdef unsigned long long uaa = 0xFFFFFFFFFFFFFFFFULL
return a, ua, int(aa), uaa
@cython.test_assert_path_exists(
'//IntNode[@longness = "LL"]',
'//IntNode[@longness = "L"]',
)
@cython.test_fail_if_path_exists('//IntNode[@longness = ""]')
def negative_c_longs():
"""
>>> negative_c_longs() == (-1, -9223285636854775809) or negative_c_longs()
True
"""
cdef long a = -1L
cdef long long aa = -9223285636854775809LL
return a, aa
def py_longs():
"""
>>> py_longs() == (
... 1, 1, 100000000000000000000000000000000, -100000000000000000000000000000000
... ) or py_longs()
True
"""
return 1, 1L, 100000000000000000000000000000000, -100000000000000000000000000000000
@cython.test_fail_if_path_exists("//NumBinopNode", "//IntBinopNode")
@cython.test_assert_path_exists("//ReturnStatNode/IntNode")
def py_huge_calculated_long():
"""
>>> py_huge_calculated_long() == (
... 1606938044258990275541962092341162602522202993782792835301376
... ) or py_huge_calculated_long()
True
"""
return 1 << 200
@cython.test_fail_if_path_exists("//NumBinopNode", "//IntBinopNode")
@cython.test_assert_path_exists("//ReturnStatNode/IntNode")
def py_huge_computation_small_result():
"""
>>> py_huge_computation_small_result()
2
"""
return (1 << 200) >> 199
@cython.test_fail_if_path_exists("//NumBinopNode", "//IntBinopNode")
#@cython.test_assert_path_exists("//ReturnStatNode/IntNode")
def py_huge_computation_small_result_neg():
"""
>>> py_huge_computation_small_result_neg() == (
... -2535301200456458802993406410752, -2535301200456458802993406410752
... ) or py_huge_computation_small_result_neg()
True
"""
return -(2 ** 101), (-2) ** 101
def large_literal():
"""
>>> type(large_literal()) is int
True
"""
if sys.version_info[0] >= 3 or sys.maxint > 0xFFFFFFFFFFFF:
return 0xFFFFFFFFFFFF
else:
return 0xFFFFFFF
def c_long_types():
"""
>>> c_long_types()
long
long
long long
unsigned long
unsigned long
unsigned long long
"""
print typeof(1)
print typeof(1L)
print typeof(1LL)
print typeof(1U)
print typeof(1UL)
print typeof(1ULL)
# different ways to write an integer in Python
def c_oct():
"""
>>> c_oct()
(1, -17, 63)
"""
cdef int a = 0o01
cdef int b = -0o21
cdef int c = 0o77
return a,b,c
def c_oct_py2_legacy():
"""
>>> c_oct_py2_legacy()
(1, -17, 63)
"""
cdef int a = 001
cdef int b = -021
cdef int c = 077
return a,b,c
def py_oct():
"""
>>> py_oct()
(1, -17, 63)
"""
return 0o01, -0o21, 0o77
def py_oct_py2_legacy():
"""
>>> py_oct_py2_legacy()
(1, -17, 63)
"""
return 001, -021, 077
def c_hex():
"""
>>> c_hex()
(1, -33, 255)
"""
cdef int a = 0x01
cdef int b = -0x21
cdef int c = 0xFF
return a,b,c
def py_hex():
"""
>>> py_hex()
(1, -33, 255)
"""
return 0x01, -0x21, 0xFF
def c_bin():
"""
>>> c_bin()
(1, -2, 15)
"""
cdef int a = 0b01
cdef int b = -0b10
cdef int c = 0b1111
return a,b,c
def py_bin():
"""
>>> py_bin()
(1, -2, 15)
"""
return 0b01, -0b10, 0b1111