曾与蒿藜同雨露,한때 잡초와 쑥과 함께 비와 이슬을 나누던 곳이 이제는 소나무와 삼나무와 함께 서리와 눈을 견뎌내고 있다.终随松柏到冰霜.かつては雑草やヨモギと共に雨や露を分かち合っていたが、今では松やヒノキと共に霜や雪に耐えている。曾与蒿藜同雨露,Once sharing rain and dew with weeds and wormwood, now enduring frost and snow with pines and cypresses.终随松柏到冰霜.曾与蒿藜同雨露한때 잡초와 쑥과 함께 비와 이슬을 나누던 곳이 이제는 소나무와 삼나무와 함께 서리와 눈을 견뎌내고 있다.,终随松柏到冰霜.譖セ荳手珍阯懷酔髮ィ髴イ�檎サ磯囂譚セ譟丞芦蜀ー髴�曾与蒿藜同雨露,鏇句笌钂胯棞鍚岄洦闇诧紝缁堥殢鏉炬煆鍒板啺闇�终随松柏到冰霜.曾与蒿藜同雨露,한때 잡초와 쑥과 함께 비와 이슬을 나누던 곳이 이제는 소나무와 삼나무와 함께 서리와 눈을 견뎌내고 있다.终随松柏到冰霜.曾与蒿藜同雨露,终随松柏到冰霜.
"""
These tests are meant to exercise that requests to create objects bigger
than what the address space allows are properly met with an OverflowError
(rather than crash weirdly).
Primarily, this means 32-bit builds with at least 2 GiB of available memory.
You need to pass the -M option to regrtest (e.g. "-M 2.1G") for tests to
be enabled.
"""
from test import support
from test.support import bigaddrspacetest, MAX_Py_ssize_t
import unittest
import operator
import sys
class BytesTest(unittest.TestCase):
@bigaddrspacetest
def test_concat(self):
# Allocate a bytestring that's near the maximum size allowed by
# the address space, and then try to build a new, larger one through
# concatenation.
try:
x = b"x" * (MAX_Py_ssize_t - 128)
self.assertRaises(OverflowError, operator.add, x, b"x" * 128)
finally:
x = None
@bigaddrspacetest
def test_optimized_concat(self):
try:
x = b"x" * (MAX_Py_ssize_t - 128)
with self.assertRaises(OverflowError) as cm:
# this statement used a fast path in ceval.c
x = x + b"x" * 128
with self.assertRaises(OverflowError) as cm:
# this statement used a fast path in ceval.c
x += b"x" * 128
finally:
x = None
@bigaddrspacetest
def test_repeat(self):
try:
x = b"x" * (MAX_Py_ssize_t - 128)
self.assertRaises(OverflowError, operator.mul, x, 128)
finally:
x = None
class StrTest(unittest.TestCase):
unicodesize = 2 if sys.maxunicode < 65536 else 4
@bigaddrspacetest
def test_concat(self):
try:
# Create a string that would fill almost the address space
x = "x" * int(MAX_Py_ssize_t // (1.1 * self.unicodesize))
# Unicode objects trigger MemoryError in case an operation that's
# going to cause a size overflow is executed
self.assertRaises(MemoryError, operator.add, x, x)
finally:
x = None
@bigaddrspacetest
def test_optimized_concat(self):
try:
x = "x" * int(MAX_Py_ssize_t // (1.1 * self.unicodesize))
with self.assertRaises(MemoryError) as cm:
# this statement uses a fast path in ceval.c
x = x + x
with self.assertRaises(MemoryError) as cm:
# this statement uses a fast path in ceval.c
x += x
finally:
x = None
@bigaddrspacetest
def test_repeat(self):
try:
x = "x" * int(MAX_Py_ssize_t // (1.1 * self.unicodesize))
self.assertRaises(MemoryError, operator.mul, x, 2)
finally:
x = None
def test_main():
support.run_unittest(BytesTest, StrTest)
if __name__ == '__main__':
if len(sys.argv) > 1:
support.set_memlimit(sys.argv[1])
test_main()