blob: 13b9d5ec347987d2fdd0a9ee795d6c4e56f2581f [file] [log] [blame]
import os
from scripts.test import shared
from . import utils
"""Test that MemoryPacking correctly respects the web limitations by not
generating more than 100K data segments"""
class MemoryPackingTest(utils.BinaryenTestCase):
def test_large_segment(self):
data = '"' + (('A' + ('\\00' * 9)) * 100001) + '"'
module = f'''
(module
(memory 256 256)
(data $d (i32.const 0) {data})
)
'''
opts = ['--memory-packing', '--disable-bulk-memory', '--print',
'-o', os.devnull]
p = shared.run_process(shared.WASM_OPT + opts, input=module,
check=False, capture_output=True)
output = [
'(data $d (i32.const 0) "A")',
'(data $d.1 (i32.const 10) "A")',
'(data $d.99998 (i32.const 999980) "A")',
'(data $d.99999 (i32.const 999990) "A' + ('\\00' * 9) + 'A")',
]
self.assertEqual(p.returncode, 0)
for line in output:
self.assertIn(line, p.stdout)
def test_large_segment_unmergeable(self):
data = '\n'.join(f'(data (i32.const {i}) "A")' for i in range(100001))
module = f'(module (memory 256 256) {data})'
opts = ['--memory-packing', '--enable-bulk-memory', '--print',
'-o', os.devnull]
p = shared.run_process(shared.WASM_OPT + opts, input=module,
check=False, capture_output=True)
self.assertEqual(p.returncode, 0)
self.assertIn('Some VMs may not accept this binary', p.stderr)
self.assertIn('Run the limit-segments pass to merge segments.', p.stderr)