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 = ''' (module (memory 256 256) (data $d (i32.const 0) %s) ) ''' % 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('(data (i32.const %i) "A")' % i for i in range(100001)) module = '(module (memory 256 256) %s)' % 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)