From c45a35b1c1af5d584e9ece0039540f2aafd056d9 Mon Sep 17 00:00:00 2001 From: Max Graey Date: Wed, 4 Apr 2018 01:42:23 +0300 Subject: [PATCH] Implement Array#sort (#57) --- std/assembly.d.ts | 1 + std/assembly/array.ts | 141 ++ std/portable.d.ts | 1 + tests/compiler/std/array.optimized.wat | 1914 ++++++++++++--- tests/compiler/std/array.ts | 144 ++ tests/compiler/std/array.untouched.wat | 2063 ++++++++++++++--- tests/compiler/std/static-array.optimized.wat | 4 +- tests/compiler/std/static-array.untouched.wat | 8 +- 8 files changed, 3734 insertions(+), 542 deletions(-) diff --git a/std/assembly.d.ts b/std/assembly.d.ts index edfd72c3..00c069d5 100644 --- a/std/assembly.d.ts +++ b/std/assembly.d.ts @@ -304,6 +304,7 @@ declare class Array { slice(from: i32, to?: i32): T[]; splice(start: i32, deleteCount?: i32): void; reverse(): T[]; + sort(comparator?: (a: T, b: T) => i32): T[]; } /** Class representing a C-like array of values of type `T` with limited capabilities. */ diff --git a/std/assembly/array.ts b/std/assembly/array.ts index 83f34bc0..512e79a0 100644 --- a/std/assembly/array.ts +++ b/std/assembly/array.ts @@ -1,3 +1,4 @@ + export class Array { private __memory: usize; @@ -287,6 +288,10 @@ export class Array { } return this; } + + sort(comparator: (a: T, b: T) => i32 = createDefaultComparator()): Array { + return sort(this, comparator); + } } @unmanaged @@ -311,3 +316,139 @@ export class CArray { store(changetype(this) + index * sizeof(), value); } } + +/* + * Internal methods + */ + +// TODO remove this wrapper when indirect table landed +function createDefaultComparator(): (a: T, b: T) => i32 { + return (a: T, b: T): i32 => ( + (a > b) - (a < b) + ); +} + +function insertionSort(arr: Array, comparator: (a: T, b: T) => i32): Array { + var a: T, b: T, j: i32; + const typeShift = alignof(); + + for (let i: i32 = 0, len: i32 = arr.length; i < len; i++) { + a = load(arr.__memory + (i << typeShift)); // a = arr[i]; + j = i - 1; + while (j >= 0) { + b = load(arr.__memory + (j << typeShift)); // b = arr[j]; + if (comparator(a, b) < 0) { + store(arr.__memory + ((j + 1) << typeShift), b); // arr[j + 1] = b; + j--; + } else break; + } + + store(arr.__memory + ((j + 1) << typeShift), a); // arr[j + 1] = a; + } + + return arr; +} + +/* Weak Heap Sort implementation based on paper: + http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.21.1863&rep=rep1&type=pdf +*/ +function weakHeapSort(arr: Array, comparator: (a: T, b: T) => i32): Array { + var len: i32 = arr.length; + var i: i32, j: i32, y: i32, p: i32, a: T, b: T; + + const typeShift = alignof(); + const intShift = alignof(); + + var blen = (len + 7) >> 3; + var bitset = allocate_memory(blen << intShift); + + set_memory(bitset, 0, blen << intShift); + + for (i = len - 1; i > 0; i--) { + j = i; + while ((j & 1) == ((load(bitset + ((j >> 4) << intShift)) >> ((j >> 1) & 7)) & 1)) { + j >>= 1; + } + + p = j >> 1; + + a = load(arr.__memory + (p << typeShift)); // a = arr[p]; + b = load(arr.__memory + (i << typeShift)); // b = arr[i]; + + if (comparator(a, b) < 0) { + store( + bitset + ((i >> 3) << intShift), + load(bitset + ((i >> 3) << intShift)) ^ (1 << (i & 7)) + ); + store(arr.__memory + (i << typeShift), a); // arr[i] = a; + store(arr.__memory + (p << typeShift), b); // arr[p] = b; + } + } + + for (i = len - 1; i >= 2; i--) { + /* + a = arr[0]; + arr[0] = arr[i]; + arr[i] = a; + */ + a = load(arr.__memory, 0); + store(arr.__memory, load(arr.__memory + (i << typeShift)), 0); + store(arr.__memory + (i << typeShift), a); + + let x = 1; + while ((y = (x << 1) + ((load(bitset + ((x >> 3) << intShift)) >> (x & 7)) & 1)) < i) { + x = y; + } + + while (x > 0) { + a = load(arr.__memory, 0); // a = arr[0]; + b = load(arr.__memory + (x << typeShift)); // b = arr[x]; + + if (comparator(a, b) < 0) { + store( + bitset + ((x >> 3) << intShift), + load(bitset + ((x >> 3) << intShift)) ^ (1 << (x & 7)) + ); + + store(arr.__memory + (x << typeShift), a); // arr[x] = a; + store(arr.__memory, b, 0); // arr[0] = b; + } + x >>= 1; + } + } + + free_memory(bitset); + + /* + let t = arr[1]; + arr[1] = arr[0]; + arr[0] = t; + */ + var t = load(arr.__memory, sizeof()); + store(arr.__memory, load(arr.__memory, 0), sizeof()); + store(arr.__memory, t, 0); + + return arr; +} + +function sort(arr: Array, comparator: (a: T, b: T) => i32): Array { + var len = arr.length; + + if (len <= 1) return arr; + + if (len == 2) { + let a = load(arr.__memory, sizeof()); // var a = arr[1]; + let b = load(arr.__memory, 0); // var b = arr[0]; + if (comparator(a, b) < 0) { + store(arr.__memory, b, sizeof()); // arr[1] = b; + store(arr.__memory, a, 0); // arr[0] = a; + } + return arr; + } + + if (len <= 256) { + return insertionSort(arr, comparator); + } + + return weakHeapSort(arr, comparator); +} diff --git a/std/portable.d.ts b/std/portable.d.ts index 5568d552..a8396a25 100644 --- a/std/portable.d.ts +++ b/std/portable.d.ts @@ -232,6 +232,7 @@ declare class Array { slice(from: i32, to?: i32): T[]; splice(start: i32, deleteCount?: i32): void; reverse(): T[]; + sort(comparator?: (a: T, b: T) => i32): T[]; join(delim: string): string; } diff --git a/tests/compiler/std/array.optimized.wat b/tests/compiler/std/array.optimized.wat index 58eac032..6a302520 100644 --- a/tests/compiler/std/array.optimized.wat +++ b/tests/compiler/std/array.optimized.wat @@ -1,6 +1,10 @@ (module - (type $ii (func (param i32) (result i32))) + (type $i (func (result i32))) + (type $F (func (result f64))) + (type $Iv (func (param i64))) (type $iiiiv (func (param i32 i32 i32 i32))) + (type $II (func (param i64) (result i64))) + (type $ii (func (param i32) (result i32))) (type $iii (func (param i32 i32) (result i32))) (type $iiv (func (param i32 i32))) (type $iiiv (func (param i32 i32 i32))) @@ -8,9 +12,13 @@ (type $iiii (func (param i32 i32 i32) (result i32))) (type $iiiii (func (param i32 i32 i32 i32) (result i32))) (type $v (func)) + (import "JSMath" "random" (func $~lib/math/JSMath.random (result f64))) (import "env" "abort" (func $abort (param i32 i32 i32 i32))) (global $~lib/allocator/arena/startOffset (mut i32) (i32.const 0)) (global $~lib/allocator/arena/offset (mut i32) (i32.const 0)) + (global $~lib/math/random_seeded (mut i32) (i32.const 0)) + (global $~lib/math/random_state0 (mut i64) (i64.const 0)) + (global $~lib/math/random_state1 (mut i64) (i64.const 0)) (global $std/array/arr (mut i32) (i32.const 0)) (global $std/array/i (mut i32) (i32.const 0)) (global $argumentCount (mut i32) (i32.const 0)) @@ -18,16 +26,96 @@ (global $std/array/every (mut i32) (i32.const 0)) (global $std/array/some (mut i32) (i32.const 0)) (global $std/array/boolVal (mut i32) (i32.const 0)) - (global $HEAP_BASE i32 (i32.const 64)) - (table 23 23 anyfunc) - (elem (i32.const 0) $start~anonymous|0 $start~anonymous|1 $start~anonymous|2 $start~anonymous|3 $start~anonymous|2 $start~anonymous|5 $start~anonymous|6 $start~anonymous|7 $start~anonymous|8 $start~anonymous|9 $start~anonymous|10 $start~anonymous|11 $start~anonymous|12 $start~anonymous|13 $start~anonymous|14 $start~anonymous|15 $start~anonymous|16 $start~anonymous|16 $start~anonymous|18 $start~anonymous|19 $start~anonymous|20 $start~anonymous|16 $start~anonymous|22) + (global $std/array/revesed0 (mut i32) (i32.const 96)) + (global $std/array/revesed1 (mut i32) (i32.const 112)) + (global $std/array/revesed2 (mut i32) (i32.const 128)) + (global $std/array/revesed4 (mut i32) (i32.const 152)) + (global $std/array/expected4 (mut i32) (i32.const 184)) + (global $std/array/revesed64 (mut i32) (i32.const 0)) + (global $std/array/revesed128 (mut i32) (i32.const 0)) + (global $std/array/revesed1024 (mut i32) (i32.const 0)) + (global $std/array/revesed10000 (mut i32) (i32.const 0)) + (global $std/array/randomized512 (mut i32) (i32.const 0)) + (global $std/array/randomized64 (mut i32) (i32.const 0)) + (global $std/array/randomized257 (mut i32) (i32.const 0)) + (global $HEAP_BASE i32 (i32.const 252)) + (table 28 28 anyfunc) + (elem (i32.const 0) $start~anonymous|0 $start~anonymous|1 $start~anonymous|2 $start~anonymous|3 $start~anonymous|2 $start~anonymous|5 $start~anonymous|6 $start~anonymous|7 $start~anonymous|8 $start~anonymous|9 $start~anonymous|10 $start~anonymous|11 $start~anonymous|12 $start~anonymous|13 $start~anonymous|14 $start~anonymous|15 $start~anonymous|16 $start~anonymous|16 $start~anonymous|18 $start~anonymous|19 $start~anonymous|20 $start~anonymous|16 $start~anonymous|22 $std/array/createDefaultComparator~anonymous|23 $start~anonymous|24 $start~anonymous|25 $start~anonymous|24 $start~anonymous|25) (memory $0 1) - (data (i32.const 4) "\0c\00\00\00s\00t\00d\00/\00a\00r\00r\00a\00y\00.\00t\00s") - (data (i32.const 32) "\0d\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") + (data (i32.const 4) "\0c\00\00\00~\00l\00i\00b\00/\00m\00a\00t\00h\00.\00t\00s") + (data (i32.const 32) "\0c\00\00\00s\00t\00d\00/\00a\00r\00r\00a\00y\00.\00t\00s") + (data (i32.const 60) "\0d\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") + (data (i32.const 96) "l") + (data (i32.const 112) "|\00\00\00\01\00\00\00\01\00\00\00\01") + (data (i32.const 128) "\8c\00\00\00\02\00\00\00\02\00\00\00\02\00\00\00\01") + (data (i32.const 152) "\a4\00\00\00\04\00\00\00\04\00\00\00\03\00\00\00\02\00\00\00\01") + (data (i32.const 184) "\c4\00\00\00\04\00\00\00\04\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00\03") + (data (i32.const 216) "\e4\00\00\00\01\00\00\00\01\00\00\00\01") + (data (i32.const 232) "\f4\00\00\00\02\00\00\00\02\00\00\00\01\00\00\00\02") (export "memory" (memory $0)) (export "table" (table $0)) (start $start) - (func $~lib/allocator/arena/allocate_memory (; 1 ;) (type $ii) (param $0 i32) (result i32) + (func $~lib/math/murmurHash3 (; 2 ;) (type $II) (param $0 i64) (result i64) + (i64.xor + (tee_local $0 + (i64.mul + (i64.xor + (tee_local $0 + (i64.mul + (i64.xor + (get_local $0) + (i64.shr_u + (get_local $0) + (i64.const 33) + ) + ) + (i64.const -49064778989728563) + ) + ) + (i64.shr_u + (get_local $0) + (i64.const 33) + ) + ) + (i64.const -4265267296055464877) + ) + ) + (i64.shr_u + (get_local $0) + (i64.const 33) + ) + ) + ) + (func $~lib/math/NativeMath.seedRandom (; 3 ;) (type $Iv) (param $0 i64) + (if + (i64.eqz + (get_local $0) + ) + (block + (call $abort + (i32.const 0) + (i32.const 4) + (i32.const 993) + (i32.const 4) + ) + (unreachable) + ) + ) + (set_global $~lib/math/random_seeded + (i32.const 1) + ) + (set_global $~lib/math/random_state0 + (call $~lib/math/murmurHash3 + (get_local $0) + ) + ) + (set_global $~lib/math/random_state1 + (call $~lib/math/murmurHash3 + (get_global $~lib/math/random_state0) + ) + ) + ) + (func $~lib/allocator/arena/allocate_memory (; 4 ;) (type $ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -116,12 +204,12 @@ ) (i32.const 0) ) - (func $~lib/array/Array#get:length (; 2 ;) (type $ii) (param $0 i32) (result i32) + (func $~lib/array/Array#get:length (; 5 ;) (type $ii) (param $0 i32) (result i32) (i32.load offset=8 (get_local $0) ) ) - (func $~lib/memory/copy_memory (; 3 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/memory/copy_memory (; 6 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (loop $continue|0 @@ -1697,7 +1785,7 @@ ) ) ) - (func $~lib/memory/move_memory (; 4 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/memory/move_memory (; 7 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (if (i32.eq @@ -1987,10 +2075,10 @@ ) ) ) - (func $~lib/allocator/arena/free_memory (; 5 ;) (type $iv) (param $0 i32) + (func $~lib/allocator/arena/free_memory (; 8 ;) (type $iv) (param $0 i32) (nop) ) - (func $~lib/array/Array#__grow (; 6 ;) (type $iiv) (param $0 i32) (param $1 i32) + (func $~lib/array/Array#__grow (; 9 ;) (type $iiv) (param $0 i32) (param $1 i32) (local $2 i32) (if (i32.le_s @@ -2002,8 +2090,8 @@ (block (call $abort (i32.const 0) - (i32.const 32) - (i32.const 8) + (i32.const 60) + (i32.const 9) (i32.const 4) ) (unreachable) @@ -2050,7 +2138,7 @@ (get_local $1) ) ) - (func $~lib/array/Array#push (; 7 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#push (; 10 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (if (i32.eq @@ -2104,7 +2192,7 @@ ) (get_local $2) ) - (func $~lib/array/Array#__get (; 8 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#__get (; 11 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (if (i32.ge_u (get_local $1) @@ -2126,7 +2214,7 @@ ) ) ) - (func $~lib/array/Array#pop (; 9 ;) (type $ii) (param $0 i32) (result i32) + (func $~lib/array/Array#pop (; 12 ;) (type $ii) (param $0 i32) (result i32) (local $1 i32) (if (i32.lt_s @@ -2162,7 +2250,7 @@ ) ) ) - (func $~lib/array/Array#unshift (; 10 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#unshift (; 13 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -2197,8 +2285,8 @@ (block (call $abort (i32.const 0) - (i32.const 32) - (i32.const 206) + (i32.const 60) + (i32.const 207) (i32.const 6) ) (unreachable) @@ -2281,7 +2369,7 @@ ) (get_local $3) ) - (func $~lib/memory/set_memory (; 11 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/memory/set_memory (; 14 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i64) (local $4 i32) (if @@ -2614,7 +2702,7 @@ ) ) ) - (func $~lib/array/Array#shift (; 12 ;) (type $ii) (param $0 i32) (result i32) + (func $~lib/array/Array#shift (; 15 ;) (type $ii) (param $0 i32) (result i32) (local $1 i32) (if (i32.lt_s @@ -2681,7 +2769,7 @@ ) (get_local $1) ) - (func $~lib/array/Array#reverse (; 13 ;) (type $ii) (param $0 i32) (result i32) + (func $~lib/array/Array#reverse (; 16 ;) (type $ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -2765,7 +2853,7 @@ ) (get_local $0) ) - (func $~lib/array/Array#indexOf (; 14 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/array/Array#indexOf (; 17 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (if (i32.and @@ -2853,7 +2941,7 @@ ) (i32.const -1) ) - (func $~lib/array/Array#indexOf|trampoline (; 15 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/array/Array#indexOf|trampoline (; 18 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (block $1of1 (block $0of1 (block $oob @@ -2876,7 +2964,7 @@ (get_local $2) ) ) - (func $~lib/array/Array#includes (; 16 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/array/Array#includes (; 19 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (if (i32.and @@ -2964,7 +3052,7 @@ ) (i32.const 0) ) - (func $~lib/array/Array#includes|trampoline (; 17 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/array/Array#includes|trampoline (; 20 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (block $1of1 (block $0of1 (block $oob @@ -2987,7 +3075,7 @@ (get_local $2) ) ) - (func $~lib/array/Array#splice (; 18 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/array/Array#splice (; 21 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) (if (i32.lt_s (get_local $2) @@ -3088,7 +3176,7 @@ ) ) ) - (func $~lib/array/Array#__set (; 19 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/array/Array#__set (; 22 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (if @@ -3142,12 +3230,12 @@ (get_local $2) ) ) - (func $start~anonymous|0 (; 20 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start~anonymous|0 (; 23 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (i32.eqz (get_local $0) ) ) - (func $~lib/array/Array#findIndex (; 21 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#findIndex (; 24 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -3215,19 +3303,19 @@ ) (i32.const -1) ) - (func $start~anonymous|1 (; 22 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start~anonymous|1 (; 25 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (i32.eq (get_local $0) (i32.const 1) ) ) - (func $start~anonymous|2 (; 23 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start~anonymous|2 (; 26 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (i32.eq (get_local $0) (i32.const 100) ) ) - (func $start~anonymous|3 (; 24 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start~anonymous|3 (; 27 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (drop (call $~lib/array/Array#push (get_local $2) @@ -3239,7 +3327,7 @@ (i32.const 100) ) ) - (func $start~anonymous|5 (; 25 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start~anonymous|5 (; 28 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (drop (call $~lib/array/Array#pop (get_local $2) @@ -3250,13 +3338,13 @@ (i32.const 100) ) ) - (func $start~anonymous|6 (; 26 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start~anonymous|6 (; 29 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (i32.ge_s (get_local $0) (i32.const 0) ) ) - (func $~lib/array/Array#every (; 27 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#every (; 30 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -3326,13 +3414,13 @@ ) (i32.const 1) ) - (func $start~anonymous|7 (; 28 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start~anonymous|7 (; 31 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (i32.le_s (get_local $0) (i32.const 0) ) ) - (func $start~anonymous|8 (; 29 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start~anonymous|8 (; 32 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (drop (call $~lib/array/Array#push (get_local $2) @@ -3344,13 +3432,13 @@ (i32.const 10) ) ) - (func $start~anonymous|9 (; 30 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start~anonymous|9 (; 33 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (i32.lt_s (get_local $0) (i32.const 10) ) ) - (func $start~anonymous|10 (; 31 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start~anonymous|10 (; 34 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (drop (call $~lib/array/Array#pop (get_local $2) @@ -3361,13 +3449,13 @@ (i32.const 3) ) ) - (func $start~anonymous|11 (; 32 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start~anonymous|11 (; 35 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (i32.ge_s (get_local $0) (i32.const 3) ) ) - (func $~lib/array/Array#some (; 33 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#some (; 36 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -3435,13 +3523,13 @@ ) (i32.const 0) ) - (func $start~anonymous|12 (; 34 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start~anonymous|12 (; 37 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (i32.le_s (get_local $0) (i32.const -1) ) ) - (func $start~anonymous|13 (; 35 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start~anonymous|13 (; 38 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (drop (call $~lib/array/Array#push (get_local $2) @@ -3453,13 +3541,13 @@ (i32.const 10) ) ) - (func $start~anonymous|14 (; 36 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start~anonymous|14 (; 39 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (i32.gt_s (get_local $0) (i32.const 10) ) ) - (func $start~anonymous|15 (; 37 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start~anonymous|15 (; 40 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (drop (call $~lib/array/Array#pop (get_local $2) @@ -3470,13 +3558,13 @@ (i32.const 3) ) ) - (func $start~anonymous|16 (; 38 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $start~anonymous|16 (; 41 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (i32.add (get_local $0) (get_local $1) ) ) - (func $~lib/array/Array#reduce (; 39 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/array/Array#reduce (; 42 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -3540,7 +3628,7 @@ ) (get_local $2) ) - (func $start~anonymous|18 (; 40 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $start~anonymous|18 (; 43 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (i32.and (select (get_local $0) @@ -3553,7 +3641,7 @@ (i32.const 1) ) ) - (func $start~anonymous|19 (; 41 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $start~anonymous|19 (; 44 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (i32.and (select (get_local $0) @@ -3566,7 +3654,7 @@ (i32.const 1) ) ) - (func $start~anonymous|20 (; 42 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $start~anonymous|20 (; 45 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (drop (call $~lib/array/Array#push (get_local $3) @@ -3578,7 +3666,7 @@ (get_local $1) ) ) - (func $start~anonymous|22 (; 43 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $start~anonymous|22 (; 46 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (drop (call $~lib/array/Array#pop (get_local $3) @@ -3589,7 +3677,1077 @@ (get_local $1) ) ) - (func $start (; 44 ;) (type $v) + (func $~lib/array/Array#constructor (; 47 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (if + (i32.lt_s + (get_local $1) + (i32.const 0) + ) + (unreachable) + ) + (i32.store + (if (result i32) + (get_local $0) + (get_local $0) + (block (result i32) + (i32.store + (tee_local $2 + (call $~lib/allocator/arena/allocate_memory + (i32.const 12) + ) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $2) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $2) + (i32.const 0) + ) + (tee_local $0 + (get_local $2) + ) + ) + ) + (if (result i32) + (get_local $1) + (call $~lib/allocator/arena/allocate_memory + (i32.shl + (get_local $1) + (i32.const 2) + ) + ) + (i32.const 0) + ) + ) + (i32.store offset=8 + (get_local $0) + (tee_local $2 + (get_local $1) + ) + ) + (i32.store offset=4 + (get_local $0) + (get_local $2) + ) + (get_local $0) + ) + (func $std/array/createReverseOrderedArray (; 48 ;) (type $ii) (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (call $~lib/array/Array#constructor + (i32.const 0) + (get_local $0) + ) + ) + (set_local $0 + (i32.const 0) + ) + (loop $continue|0 + (if + (i32.lt_s + (get_local $0) + (call $~lib/array/Array#get:length + (get_local $1) + ) + ) + (block + (call $~lib/array/Array#__set + (get_local $1) + (get_local $0) + (i32.sub + (i32.sub + (call $~lib/array/Array#get:length + (get_local $1) + ) + (i32.const 1) + ) + (get_local $0) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $continue|0) + ) + ) + ) + (get_local $1) + ) + (func $~lib/math/NativeMath.random (; 49 ;) (type $F) (result f64) + (local $0 i64) + (local $1 i64) + (if + (i32.eqz + (get_global $~lib/math/random_seeded) + ) + (unreachable) + ) + (set_local $0 + (get_global $~lib/math/random_state0) + ) + (set_global $~lib/math/random_state0 + (tee_local $1 + (get_global $~lib/math/random_state1) + ) + ) + (set_global $~lib/math/random_state1 + (tee_local $0 + (i64.xor + (i64.xor + (i64.xor + (tee_local $0 + (i64.xor + (get_local $0) + (i64.shl + (get_local $0) + (i64.const 23) + ) + ) + ) + (i64.shr_u + (get_local $0) + (i64.const 17) + ) + ) + (get_local $1) + ) + (i64.shr_u + (get_local $1) + (i64.const 26) + ) + ) + ) + ) + (f64.sub + (f64.reinterpret/i64 + (i64.or + (i64.and + (i64.add + (get_local $1) + (get_local $0) + ) + (i64.const 4503599627370495) + ) + (i64.const 4607182418800017408) + ) + ) + (f64.const 1) + ) + ) + (func $std/array/createRandomOrderedArray (; 50 ;) (type $ii) (param $0 i32) (result i32) + (local $1 i32) + (set_local $0 + (call $~lib/array/Array#constructor + (i32.const 0) + (get_local $0) + ) + ) + (loop $continue|0 + (if + (i32.lt_s + (get_local $1) + (call $~lib/array/Array#get:length + (get_local $0) + ) + ) + (block + (call $~lib/array/Array#__set + (get_local $0) + (get_local $1) + (i32.trunc_s/f64 + (f64.mul + (call $~lib/math/NativeMath.random) + (f64.convert_s/i32 + (call $~lib/array/Array#get:length + (get_local $0) + ) + ) + ) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (br $continue|0) + ) + ) + ) + (get_local $0) + ) + (func $std/array/createDefaultComparator~anonymous|23 (; 51 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (i32.sub + (i32.gt_s + (get_local $0) + (get_local $1) + ) + (i32.lt_s + (get_local $0) + (get_local $1) + ) + ) + ) + (func $std/array/createDefaultComparator (; 52 ;) (type $i) (result i32) + (i32.const 23) + ) + (func $~lib/array/insertionSort (; 53 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (set_local $6 + (call $~lib/array/Array#get:length + (get_local $0) + ) + ) + (loop $continue|0 + (if + (i32.lt_s + (get_local $3) + (get_local $6) + ) + (block + (set_local $4 + (i32.load + (i32.add + (i32.load + (get_local $0) + ) + (i32.shl + (get_local $3) + (i32.const 2) + ) + ) + ) + ) + (set_local $2 + (i32.sub + (get_local $3) + (i32.const 1) + ) + ) + (block $break|1 + (loop $continue|1 + (if + (i32.ge_s + (get_local $2) + (i32.const 0) + ) + (block + (set_local $5 + (i32.load + (i32.add + (i32.load + (get_local $0) + ) + (i32.shl + (get_local $2) + (i32.const 2) + ) + ) + ) + ) + (set_global $argumentCount + (i32.const 2) + ) + (br_if $break|1 + (i32.ge_s + (call_indirect (type $iii) + (get_local $4) + (get_local $5) + (get_local $1) + ) + (i32.const 0) + ) + ) + (i32.store + (i32.add + (i32.load + (get_local $0) + ) + (i32.shl + (i32.add + (get_local $2) + (i32.const 1) + ) + (i32.const 2) + ) + ) + (get_local $5) + ) + (set_local $2 + (i32.sub + (get_local $2) + (i32.const 1) + ) + ) + (br $continue|1) + ) + ) + ) + ) + (i32.store + (i32.add + (i32.load + (get_local $0) + ) + (i32.shl + (i32.add + (get_local $2) + (i32.const 1) + ) + (i32.const 2) + ) + ) + (get_local $4) + ) + (set_local $3 + (i32.add + (get_local $3) + (i32.const 1) + ) + ) + (br $continue|0) + ) + ) + ) + (get_local $0) + ) + (func $~lib/array/weakHeapSort (; 54 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (call $~lib/memory/set_memory + (tee_local $5 + (call $~lib/allocator/arena/allocate_memory + (i32.shl + (tee_local $2 + (i32.shr_s + (i32.add + (tee_local $7 + (call $~lib/array/Array#get:length + (get_local $0) + ) + ) + (i32.const 7) + ) + (i32.const 3) + ) + ) + (i32.const 2) + ) + ) + ) + (i32.const 0) + (i32.shl + (get_local $2) + (i32.const 2) + ) + ) + (set_local $3 + (i32.sub + (get_local $7) + (i32.const 1) + ) + ) + (loop $continue|0 + (if + (i32.gt_s + (get_local $3) + (i32.const 0) + ) + (block + (set_local $2 + (get_local $3) + ) + (loop $continue|1 + (if + (i32.eq + (i32.and + (get_local $2) + (i32.const 1) + ) + (i32.and + (i32.shr_s + (i32.load + (i32.add + (get_local $5) + (i32.shl + (i32.shr_s + (get_local $2) + (i32.const 4) + ) + (i32.const 2) + ) + ) + ) + (i32.and + (i32.shr_s + (get_local $2) + (i32.const 1) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + ) + (block + (set_local $2 + (i32.shr_s + (get_local $2) + (i32.const 1) + ) + ) + (br $continue|1) + ) + ) + ) + (set_local $4 + (i32.load + (i32.add + (i32.load + (get_local $0) + ) + (i32.shl + (tee_local $2 + (i32.shr_s + (get_local $2) + (i32.const 1) + ) + ) + (i32.const 2) + ) + ) + ) + ) + (set_local $6 + (i32.load + (i32.add + (i32.load + (get_local $0) + ) + (i32.shl + (get_local $3) + (i32.const 2) + ) + ) + ) + ) + (if + (block (result i32) + (set_global $argumentCount + (i32.const 2) + ) + (i32.lt_s + (call_indirect (type $iii) + (get_local $4) + (get_local $6) + (get_local $1) + ) + (i32.const 0) + ) + ) + (block + (i32.store + (i32.add + (get_local $5) + (i32.shl + (i32.shr_s + (get_local $3) + (i32.const 3) + ) + (i32.const 2) + ) + ) + (i32.xor + (i32.load + (i32.add + (get_local $5) + (i32.shl + (i32.shr_s + (get_local $3) + (i32.const 3) + ) + (i32.const 2) + ) + ) + ) + (i32.shl + (i32.const 1) + (i32.and + (get_local $3) + (i32.const 7) + ) + ) + ) + ) + (i32.store + (i32.add + (i32.load + (get_local $0) + ) + (i32.shl + (get_local $3) + (i32.const 2) + ) + ) + (get_local $4) + ) + (i32.store + (i32.add + (i32.load + (get_local $0) + ) + (i32.shl + (get_local $2) + (i32.const 2) + ) + ) + (get_local $6) + ) + ) + ) + (set_local $3 + (i32.sub + (get_local $3) + (i32.const 1) + ) + ) + (br $continue|0) + ) + ) + ) + (set_local $3 + (i32.sub + (get_local $7) + (i32.const 1) + ) + ) + (loop $continue|2 + (if + (i32.ge_s + (get_local $3) + (i32.const 2) + ) + (block + (set_local $4 + (i32.load + (i32.load + (get_local $0) + ) + ) + ) + (i32.store + (i32.load + (get_local $0) + ) + (i32.load + (i32.add + (i32.load + (get_local $0) + ) + (i32.shl + (get_local $3) + (i32.const 2) + ) + ) + ) + ) + (i32.store + (i32.add + (i32.load + (get_local $0) + ) + (i32.shl + (get_local $3) + (i32.const 2) + ) + ) + (get_local $4) + ) + (set_local $2 + (i32.const 1) + ) + (loop $continue|3 + (if + (i32.lt_s + (tee_local $4 + (i32.add + (i32.shl + (get_local $2) + (i32.const 1) + ) + (i32.and + (i32.shr_s + (i32.load + (i32.add + (get_local $5) + (i32.shl + (i32.shr_s + (get_local $2) + (i32.const 3) + ) + (i32.const 2) + ) + ) + ) + (i32.and + (get_local $2) + (i32.const 7) + ) + ) + (i32.const 1) + ) + ) + ) + (get_local $3) + ) + (block + (set_local $2 + (get_local $4) + ) + (br $continue|3) + ) + ) + ) + (loop $continue|4 + (if + (i32.gt_s + (get_local $2) + (i32.const 0) + ) + (block + (set_local $4 + (i32.load + (i32.load + (get_local $0) + ) + ) + ) + (set_local $6 + (i32.load + (i32.add + (i32.load + (get_local $0) + ) + (i32.shl + (get_local $2) + (i32.const 2) + ) + ) + ) + ) + (if + (block (result i32) + (set_global $argumentCount + (i32.const 2) + ) + (i32.lt_s + (call_indirect (type $iii) + (get_local $4) + (get_local $6) + (get_local $1) + ) + (i32.const 0) + ) + ) + (block + (i32.store + (i32.add + (get_local $5) + (i32.shl + (i32.shr_s + (get_local $2) + (i32.const 3) + ) + (i32.const 2) + ) + ) + (i32.xor + (i32.load + (i32.add + (get_local $5) + (i32.shl + (i32.shr_s + (get_local $2) + (i32.const 3) + ) + (i32.const 2) + ) + ) + ) + (i32.shl + (i32.const 1) + (i32.and + (get_local $2) + (i32.const 7) + ) + ) + ) + ) + (i32.store + (i32.add + (i32.load + (get_local $0) + ) + (i32.shl + (get_local $2) + (i32.const 2) + ) + ) + (get_local $4) + ) + (i32.store + (i32.load + (get_local $0) + ) + (get_local $6) + ) + ) + ) + (set_local $2 + (i32.shr_s + (get_local $2) + (i32.const 1) + ) + ) + (br $continue|4) + ) + ) + ) + (set_local $3 + (i32.sub + (get_local $3) + (i32.const 1) + ) + ) + (br $continue|2) + ) + ) + ) + (call $~lib/allocator/arena/free_memory + (get_local $5) + ) + (set_local $1 + (i32.load offset=4 + (i32.load + (get_local $0) + ) + ) + ) + (i32.store offset=4 + (i32.load + (get_local $0) + ) + (i32.load + (i32.load + (get_local $0) + ) + ) + ) + (i32.store + (i32.load + (get_local $0) + ) + (get_local $1) + ) + (get_local $0) + ) + (func $~lib/array/sort (; 55 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (if + (i32.le_s + (tee_local $2 + (call $~lib/array/Array#get:length + (get_local $0) + ) + ) + (i32.const 1) + ) + (return + (get_local $0) + ) + ) + (if + (i32.eq + (get_local $2) + (i32.const 2) + ) + (block + (set_local $2 + (i32.load offset=4 + (i32.load + (get_local $0) + ) + ) + ) + (set_local $3 + (i32.load + (i32.load + (get_local $0) + ) + ) + ) + (if + (block (result i32) + (set_global $argumentCount + (i32.const 2) + ) + (i32.lt_s + (call_indirect (type $iii) + (get_local $2) + (get_local $3) + (get_local $1) + ) + (i32.const 0) + ) + ) + (block + (i32.store offset=4 + (i32.load + (get_local $0) + ) + (get_local $3) + ) + (i32.store + (i32.load + (get_local $0) + ) + (get_local $2) + ) + ) + ) + (return + (get_local $0) + ) + ) + ) + (if + (i32.le_s + (get_local $2) + (i32.const 256) + ) + (return + (call $~lib/array/insertionSort + (get_local $0) + (get_local $1) + ) + ) + ) + (call $~lib/array/weakHeapSort + (get_local $0) + (get_local $1) + ) + ) + (func $~lib/array/Array#sort (; 56 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (call $~lib/array/sort + (get_local $0) + (get_local $1) + ) + ) + (func $std/array/isSorted (; 57 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (set_local $2 + (i32.const 1) + ) + (set_local $3 + (call $~lib/array/Array#get:length + (get_local $0) + ) + ) + (loop $continue|0 + (if + (i32.lt_s + (get_local $2) + (get_local $3) + ) + (block + (if + (block (result i32) + (set_global $argumentCount + (i32.const 2) + ) + (i32.gt_s + (call_indirect (type $iii) + (call $~lib/array/Array#__get + (get_local $0) + (i32.sub + (get_local $2) + (i32.const 1) + ) + ) + (call $~lib/array/Array#__get + (get_local $0) + (get_local $2) + ) + (get_local $1) + ) + (i32.const 0) + ) + ) + (return + (i32.const 0) + ) + ) + (set_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (br $continue|0) + ) + ) + ) + (i32.const 1) + ) + (func $std/array/assertSorted (; 58 ;) (type $iiv) (param $0 i32) (param $1 i32) + (if + (i32.eqz + (call $std/array/isSorted + (call $~lib/array/Array#sort + (get_local $0) + (get_local $1) + ) + (get_local $1) + ) + ) + (block + (call $abort + (i32.const 0) + (i32.const 32) + (i32.const 77) + (i32.const 2) + ) + (unreachable) + ) + ) + ) + (func $std/array/assertSortedDefault (; 59 ;) (type $iv) (param $0 i32) + (call $std/array/assertSorted + (get_local $0) + (call $std/array/createDefaultComparator) + ) + ) + (func $std/array/isArraysEqual (; 60 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (set_local $3 + (get_local $2) + ) + (if + (i32.eqz + (get_local $2) + ) + (block + (if + (i32.ne + (call $~lib/array/Array#get:length + (get_local $0) + ) + (call $~lib/array/Array#get:length + (get_local $1) + ) + ) + (return + (i32.const 0) + ) + ) + (set_local $3 + (call $~lib/array/Array#get:length + (get_local $0) + ) + ) + ) + ) + (set_local $2 + (i32.const 0) + ) + (loop $continue|0 + (if + (i32.lt_s + (get_local $2) + (get_local $3) + ) + (block + (if + (i32.ne + (call $~lib/array/Array#__get + (get_local $0) + (get_local $2) + ) + (call $~lib/array/Array#__get + (get_local $1) + (get_local $2) + ) + ) + (return + (i32.const 0) + ) + ) + (set_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (br $continue|0) + ) + ) + ) + (i32.const 1) + ) + (func $std/array/isArraysEqual|trampoline (; 61 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (block $1of1 + (block $0of1 + (block $oob + (br_table $0of1 $1of1 $oob + (i32.sub + (get_global $argumentCount) + (i32.const 2) + ) + ) + ) + (unreachable) + ) + (set_local $2 + (i32.const 0) + ) + ) + (call $std/array/isArraysEqual + (get_local $0) + (get_local $1) + (get_local $2) + ) + ) + (func $start~anonymous|24 (; 62 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (i32.sub + (get_local $0) + (get_local $1) + ) + ) + (func $start~anonymous|25 (; 63 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (i32.sub + (get_local $1) + (get_local $0) + ) + ) + (func $start (; 64 ;) (type $v) (set_global $~lib/allocator/arena/startOffset (i32.and (i32.add @@ -3602,6 +4760,11 @@ (set_global $~lib/allocator/arena/offset (get_global $~lib/allocator/arena/startOffset) ) + (call $~lib/math/NativeMath.seedRandom + (i64.reinterpret/f64 + (call $~lib/math/JSMath.random) + ) + ) (set_global $std/array/arr (call $~lib/allocator/arena/allocate_memory (i32.const 12) @@ -3614,8 +4777,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 5) + (i32.const 32) + (i32.const 86) (i32.const 0) ) (unreachable) @@ -3628,8 +4791,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 6) + (i32.const 32) + (i32.const 87) (i32.const 0) ) (unreachable) @@ -3652,8 +4815,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 10) + (i32.const 32) + (i32.const 91) (i32.const 0) ) (unreachable) @@ -3669,8 +4832,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 11) + (i32.const 32) + (i32.const 92) (i32.const 0) ) (unreachable) @@ -3686,8 +4849,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 12) + (i32.const 32) + (i32.const 93) (i32.const 0) ) (unreachable) @@ -3706,8 +4869,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 16) + (i32.const 32) + (i32.const 97) (i32.const 0) ) (unreachable) @@ -3720,8 +4883,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 17) + (i32.const 32) + (i32.const 98) (i32.const 0) ) (unreachable) @@ -3737,8 +4900,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 18) + (i32.const 32) + (i32.const 99) (i32.const 0) ) (unreachable) @@ -3760,8 +4923,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 22) + (i32.const 32) + (i32.const 103) (i32.const 0) ) (unreachable) @@ -3777,8 +4940,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 23) + (i32.const 32) + (i32.const 104) (i32.const 0) ) (unreachable) @@ -3795,8 +4958,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 24) + (i32.const 32) + (i32.const 105) (i32.const 0) ) (unreachable) @@ -3818,8 +4981,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 28) + (i32.const 32) + (i32.const 109) (i32.const 0) ) (unreachable) @@ -3835,8 +4998,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 29) + (i32.const 32) + (i32.const 110) (i32.const 0) ) (unreachable) @@ -3853,8 +5016,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 30) + (i32.const 32) + (i32.const 111) (i32.const 0) ) (unreachable) @@ -3871,8 +5034,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 31) + (i32.const 32) + (i32.const 112) (i32.const 0) ) (unreachable) @@ -3894,8 +5057,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 35) + (i32.const 32) + (i32.const 116) (i32.const 0) ) (unreachable) @@ -3911,8 +5074,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 36) + (i32.const 32) + (i32.const 117) (i32.const 0) ) (unreachable) @@ -3929,8 +5092,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 37) + (i32.const 32) + (i32.const 118) (i32.const 0) ) (unreachable) @@ -3947,8 +5110,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 38) + (i32.const 32) + (i32.const 119) (i32.const 0) ) (unreachable) @@ -3965,8 +5128,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 39) + (i32.const 32) + (i32.const 120) (i32.const 0) ) (unreachable) @@ -3988,8 +5151,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 43) + (i32.const 32) + (i32.const 124) (i32.const 0) ) (unreachable) @@ -4005,8 +5168,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 44) + (i32.const 32) + (i32.const 125) (i32.const 0) ) (unreachable) @@ -4023,8 +5186,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 45) + (i32.const 32) + (i32.const 126) (i32.const 0) ) (unreachable) @@ -4041,8 +5204,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 46) + (i32.const 32) + (i32.const 127) (i32.const 0) ) (unreachable) @@ -4059,8 +5222,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 47) + (i32.const 32) + (i32.const 128) (i32.const 0) ) (unreachable) @@ -4077,8 +5240,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 48) + (i32.const 32) + (i32.const 129) (i32.const 0) ) (unreachable) @@ -4100,8 +5263,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 52) + (i32.const 32) + (i32.const 133) (i32.const 0) ) (unreachable) @@ -4117,8 +5280,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 53) + (i32.const 32) + (i32.const 134) (i32.const 0) ) (unreachable) @@ -4135,8 +5298,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 54) + (i32.const 32) + (i32.const 135) (i32.const 0) ) (unreachable) @@ -4153,8 +5316,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 55) + (i32.const 32) + (i32.const 136) (i32.const 0) ) (unreachable) @@ -4171,8 +5334,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 56) + (i32.const 32) + (i32.const 137) (i32.const 0) ) (unreachable) @@ -4189,8 +5352,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 57) + (i32.const 32) + (i32.const 138) (i32.const 0) ) (unreachable) @@ -4207,8 +5370,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 58) + (i32.const 32) + (i32.const 139) (i32.const 0) ) (unreachable) @@ -4227,8 +5390,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 62) + (i32.const 32) + (i32.const 143) (i32.const 0) ) (unreachable) @@ -4244,8 +5407,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 63) + (i32.const 32) + (i32.const 144) (i32.const 0) ) (unreachable) @@ -4261,8 +5424,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 64) + (i32.const 32) + (i32.const 145) (i32.const 0) ) (unreachable) @@ -4279,8 +5442,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 65) + (i32.const 32) + (i32.const 146) (i32.const 0) ) (unreachable) @@ -4297,8 +5460,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 66) + (i32.const 32) + (i32.const 147) (i32.const 0) ) (unreachable) @@ -4315,8 +5478,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 67) + (i32.const 32) + (i32.const 148) (i32.const 0) ) (unreachable) @@ -4333,8 +5496,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 68) + (i32.const 32) + (i32.const 149) (i32.const 0) ) (unreachable) @@ -4353,8 +5516,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 72) + (i32.const 32) + (i32.const 153) (i32.const 0) ) (unreachable) @@ -4370,8 +5533,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 73) + (i32.const 32) + (i32.const 154) (i32.const 0) ) (unreachable) @@ -4387,8 +5550,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 74) + (i32.const 32) + (i32.const 155) (i32.const 0) ) (unreachable) @@ -4405,8 +5568,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 75) + (i32.const 32) + (i32.const 156) (i32.const 0) ) (unreachable) @@ -4423,8 +5586,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 76) + (i32.const 32) + (i32.const 157) (i32.const 0) ) (unreachable) @@ -4441,8 +5604,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 77) + (i32.const 32) + (i32.const 158) (i32.const 0) ) (unreachable) @@ -4463,8 +5626,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 81) + (i32.const 32) + (i32.const 162) (i32.const 0) ) (unreachable) @@ -4480,8 +5643,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 82) + (i32.const 32) + (i32.const 163) (i32.const 0) ) (unreachable) @@ -4498,8 +5661,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 83) + (i32.const 32) + (i32.const 164) (i32.const 0) ) (unreachable) @@ -4516,8 +5679,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 84) + (i32.const 32) + (i32.const 165) (i32.const 0) ) (unreachable) @@ -4534,8 +5697,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 85) + (i32.const 32) + (i32.const 166) (i32.const 0) ) (unreachable) @@ -4570,8 +5733,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 92) + (i32.const 32) + (i32.const 173) (i32.const 0) ) (unreachable) @@ -4597,8 +5760,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 96) + (i32.const 32) + (i32.const 177) (i32.const 0) ) (unreachable) @@ -4624,8 +5787,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 100) + (i32.const 32) + (i32.const 181) (i32.const 0) ) (unreachable) @@ -4646,8 +5809,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 104) + (i32.const 32) + (i32.const 185) (i32.const 0) ) (unreachable) @@ -4668,8 +5831,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 108) + (i32.const 32) + (i32.const 189) (i32.const 0) ) (unreachable) @@ -4690,8 +5853,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 112) + (i32.const 32) + (i32.const 193) (i32.const 0) ) (unreachable) @@ -4712,8 +5875,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 116) + (i32.const 32) + (i32.const 197) (i32.const 0) ) (unreachable) @@ -4734,8 +5897,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 120) + (i32.const 32) + (i32.const 201) (i32.const 0) ) (unreachable) @@ -4756,8 +5919,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 124) + (i32.const 32) + (i32.const 205) (i32.const 0) ) (unreachable) @@ -4778,8 +5941,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 128) + (i32.const 32) + (i32.const 209) (i32.const 0) ) (unreachable) @@ -4805,8 +5968,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 132) + (i32.const 32) + (i32.const 213) (i32.const 0) ) (unreachable) @@ -4832,8 +5995,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 136) + (i32.const 32) + (i32.const 217) (i32.const 0) ) (unreachable) @@ -4856,8 +6019,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 140) + (i32.const 32) + (i32.const 221) (i32.const 0) ) (unreachable) @@ -4875,8 +6038,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 144) + (i32.const 32) + (i32.const 225) (i32.const 0) ) (unreachable) @@ -4897,8 +6060,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 148) + (i32.const 32) + (i32.const 229) (i32.const 0) ) (unreachable) @@ -4919,8 +6082,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 152) + (i32.const 32) + (i32.const 233) (i32.const 0) ) (unreachable) @@ -4941,8 +6104,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 156) + (i32.const 32) + (i32.const 237) (i32.const 0) ) (unreachable) @@ -4963,8 +6126,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 160) + (i32.const 32) + (i32.const 241) (i32.const 0) ) (unreachable) @@ -4985,8 +6148,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 164) + (i32.const 32) + (i32.const 245) (i32.const 0) ) (unreachable) @@ -5007,8 +6170,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 168) + (i32.const 32) + (i32.const 249) (i32.const 0) ) (unreachable) @@ -5029,8 +6192,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 172) + (i32.const 32) + (i32.const 253) (i32.const 0) ) (unreachable) @@ -5046,8 +6209,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 173) + (i32.const 32) + (i32.const 254) (i32.const 0) ) (unreachable) @@ -5064,8 +6227,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 174) + (i32.const 32) + (i32.const 255) (i32.const 0) ) (unreachable) @@ -5082,8 +6245,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 175) + (i32.const 32) + (i32.const 256) (i32.const 0) ) (unreachable) @@ -5120,8 +6283,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 184) + (i32.const 32) + (i32.const 265) (i32.const 0) ) (unreachable) @@ -5141,8 +6304,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 187) + (i32.const 32) + (i32.const 268) (i32.const 0) ) (unreachable) @@ -5162,8 +6325,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 190) + (i32.const 32) + (i32.const 271) (i32.const 0) ) (unreachable) @@ -5183,8 +6346,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 198) + (i32.const 32) + (i32.const 279) (i32.const 0) ) (unreachable) @@ -5200,8 +6363,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 199) + (i32.const 32) + (i32.const 280) (i32.const 0) ) (unreachable) @@ -5221,8 +6384,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 201) + (i32.const 32) + (i32.const 282) (i32.const 0) ) (unreachable) @@ -5262,8 +6425,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 214) + (i32.const 32) + (i32.const 295) (i32.const 0) ) (unreachable) @@ -5279,8 +6442,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 215) + (i32.const 32) + (i32.const 296) (i32.const 0) ) (unreachable) @@ -5312,8 +6475,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 221) + (i32.const 32) + (i32.const 302) (i32.const 0) ) (unreachable) @@ -5330,8 +6493,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 224) + (i32.const 32) + (i32.const 305) (i32.const 0) ) (unreachable) @@ -5351,8 +6514,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 232) + (i32.const 32) + (i32.const 313) (i32.const 0) ) (unreachable) @@ -5368,8 +6531,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 233) + (i32.const 32) + (i32.const 314) (i32.const 0) ) (unreachable) @@ -5386,8 +6549,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 235) + (i32.const 32) + (i32.const 316) (i32.const 0) ) (unreachable) @@ -5427,8 +6590,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 248) + (i32.const 32) + (i32.const 329) (i32.const 0) ) (unreachable) @@ -5444,8 +6607,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 249) + (i32.const 32) + (i32.const 330) (i32.const 0) ) (unreachable) @@ -5477,8 +6640,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 255) + (i32.const 32) + (i32.const 336) (i32.const 0) ) (unreachable) @@ -5495,8 +6658,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 258) + (i32.const 32) + (i32.const 339) (i32.const 0) ) (unreachable) @@ -5513,8 +6676,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 266) + (i32.const 32) + (i32.const 347) (i32.const 0) ) (unreachable) @@ -5530,8 +6693,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 267) + (i32.const 32) + (i32.const 348) (i32.const 0) ) (unreachable) @@ -5551,8 +6714,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 269) + (i32.const 32) + (i32.const 350) (i32.const 0) ) (unreachable) @@ -5589,8 +6752,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 282) + (i32.const 32) + (i32.const 363) (i32.const 0) ) (unreachable) @@ -5606,8 +6769,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 283) + (i32.const 32) + (i32.const 364) (i32.const 0) ) (unreachable) @@ -5640,8 +6803,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 290) + (i32.const 32) + (i32.const 371) (i32.const 0) ) (unreachable) @@ -5662,8 +6825,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 294) + (i32.const 32) + (i32.const 375) (i32.const 0) ) (unreachable) @@ -5684,8 +6847,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 297) + (i32.const 32) + (i32.const 378) (i32.const 0) ) (unreachable) @@ -5703,8 +6866,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 300) + (i32.const 32) + (i32.const 381) (i32.const 0) ) (unreachable) @@ -5725,8 +6888,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 308) + (i32.const 32) + (i32.const 389) (i32.const 0) ) (unreachable) @@ -5742,8 +6905,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 309) + (i32.const 32) + (i32.const 390) (i32.const 0) ) (unreachable) @@ -5764,8 +6927,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 311) + (i32.const 32) + (i32.const 392) (i32.const 0) ) (unreachable) @@ -5806,8 +6969,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 324) + (i32.const 32) + (i32.const 405) (i32.const 0) ) (unreachable) @@ -5823,12 +6986,231 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 325) + (i32.const 32) + (i32.const 406) (i32.const 0) ) (unreachable) ) ) + (set_global $std/array/revesed64 + (call $std/array/createReverseOrderedArray + (i32.const 64) + ) + ) + (set_global $std/array/revesed128 + (call $std/array/createReverseOrderedArray + (i32.const 128) + ) + ) + (set_global $std/array/revesed1024 + (call $std/array/createReverseOrderedArray + (i32.const 1024) + ) + ) + (set_global $std/array/revesed10000 + (call $std/array/createReverseOrderedArray + (i32.const 10000) + ) + ) + (set_global $std/array/randomized512 + (call $std/array/createRandomOrderedArray + (i32.const 512) + ) + ) + (call $std/array/assertSortedDefault + (get_global $std/array/revesed0) + ) + (call $std/array/assertSortedDefault + (get_global $std/array/revesed1) + ) + (if + (block (result i32) + (set_global $argumentCount + (i32.const 2) + ) + (i32.eqz + (call $std/array/isArraysEqual|trampoline + (get_global $std/array/revesed1) + (i32.const 216) + (i32.const 0) + ) + ) + ) + (block + (call $abort + (i32.const 0) + (i32.const 32) + (i32.const 429) + (i32.const 0) + ) + (unreachable) + ) + ) + (call $std/array/assertSortedDefault + (get_global $std/array/revesed2) + ) + (if + (block (result i32) + (set_global $argumentCount + (i32.const 2) + ) + (i32.eqz + (call $std/array/isArraysEqual|trampoline + (get_global $std/array/revesed2) + (i32.const 232) + (i32.const 0) + ) + ) + ) + (block + (call $abort + (i32.const 0) + (i32.const 32) + (i32.const 432) + (i32.const 0) + ) + (unreachable) + ) + ) + (call $std/array/assertSortedDefault + (get_global $std/array/revesed4) + ) + (if + (block (result i32) + (set_global $argumentCount + (i32.const 2) + ) + (i32.eqz + (call $std/array/isArraysEqual|trampoline + (get_global $std/array/revesed4) + (get_global $std/array/expected4) + (i32.const 0) + ) + ) + ) + (block + (call $abort + (i32.const 0) + (i32.const 32) + (i32.const 435) + (i32.const 0) + ) + (unreachable) + ) + ) + (call $std/array/assertSortedDefault + (get_global $std/array/revesed64) + ) + (if + (i32.eqz + (call $std/array/isArraysEqual + (get_global $std/array/revesed64) + (get_global $std/array/expected4) + (i32.const 4) + ) + ) + (block + (call $abort + (i32.const 0) + (i32.const 32) + (i32.const 438) + (i32.const 0) + ) + (unreachable) + ) + ) + (call $std/array/assertSortedDefault + (get_global $std/array/revesed128) + ) + (if + (i32.eqz + (call $std/array/isArraysEqual + (get_global $std/array/revesed128) + (get_global $std/array/expected4) + (i32.const 4) + ) + ) + (block + (call $abort + (i32.const 0) + (i32.const 32) + (i32.const 441) + (i32.const 0) + ) + (unreachable) + ) + ) + (call $std/array/assertSortedDefault + (get_global $std/array/revesed1024) + ) + (if + (i32.eqz + (call $std/array/isArraysEqual + (get_global $std/array/revesed1024) + (get_global $std/array/expected4) + (i32.const 4) + ) + ) + (block + (call $abort + (i32.const 0) + (i32.const 32) + (i32.const 444) + (i32.const 0) + ) + (unreachable) + ) + ) + (call $std/array/assertSortedDefault + (get_global $std/array/revesed10000) + ) + (if + (i32.eqz + (call $std/array/isArraysEqual + (get_global $std/array/revesed10000) + (get_global $std/array/expected4) + (i32.const 4) + ) + ) + (block + (call $abort + (i32.const 0) + (i32.const 32) + (i32.const 447) + (i32.const 0) + ) + (unreachable) + ) + ) + (call $std/array/assertSortedDefault + (get_global $std/array/randomized512) + ) + (set_global $std/array/randomized64 + (call $std/array/createRandomOrderedArray + (i32.const 64) + ) + ) + (set_global $std/array/randomized257 + (call $std/array/createRandomOrderedArray + (i32.const 257) + ) + ) + (call $std/array/assertSorted + (get_global $std/array/randomized64) + (i32.const 24) + ) + (call $std/array/assertSorted + (get_global $std/array/randomized64) + (i32.const 25) + ) + (call $std/array/assertSorted + (get_global $std/array/randomized257) + (i32.const 26) + ) + (call $std/array/assertSorted + (get_global $std/array/randomized257) + (i32.const 27) + ) ) ) diff --git a/tests/compiler/std/array.ts b/tests/compiler/std/array.ts index 80b7891f..d083f1d0 100644 --- a/tests/compiler/std/array.ts +++ b/tests/compiler/std/array.ts @@ -1,5 +1,86 @@ import "allocator/arena"; +// Default comparator +function createDefaultComparator(): (a: T, b: T) => i32 { + return (a: T, b: T): i32 => ( + (a > b) - (a < b) + ); +} + +// Check is array sorted +function isSorted(data: Array, comparator: (a: T, b: T) => i32 = createDefaultComparator()): bool { + for (let i: i32 = 1, len: i32 = data.length; i < len; i++) { + if (comparator(data[i - 1], data[i]) > 0) { + return false; + } + } + return true; +} + +// Check is equality for arrays +function isArraysEqual(a: Array, b: Array, maxLen: i32 = 0): bool { + var len = maxLen; + if (!maxLen) { + if (a.length != b.length) { + return false; + } + len = a.length; + } + for (let i: i32 = 0; i < len; i++) { + if (a[i] != b[i]) return false; + } + return true; +} + +function createReverseOrderedArray(size: i32): Array { + var arr = new Array(size); + for (let i: i32 = 0; i < arr.length; i++) { + arr[i] = arr.length - 1 - i; + } + return arr; +} + +NativeMath.seedRandom(reinterpret(JSMath.random())); + +function createRandomOrderedArray(size: i32): Array { + var arr = new Array(size); + for (let i: i32 = 0; i < arr.length; i++) { + arr[i] = (NativeMath.random() * arr.length); + } + return arr; +} + +/* +function createReverseOrderedNestedArray(size: i32): Array> { + var arr = new Array>(size); + for (let i: i32 = 0; i < arr.length; i++) { + arr[i] = new Array(1); + arr[i][0] = arr.length - 1 - i; + } + return arr; +} + +class Proxy { + constructor(public x: T) {} +} + +function createReverseOrderedElementsArray(size: i32): Proxy[] { + var arr = new Array>(size); + for (let i: i32 = 0; i < arr.length; i++) { + arr[i] = new Proxy(arr.length - 1 - i); + } + return arr; +} +*/ + +function assertSorted(arr: Array, comparator: (a: T, b: T) => i32): void { + assert(isSorted(arr.sort(comparator), comparator)); +} + +function assertSortedDefault(arr: Array): void { + assertSorted(arr, createDefaultComparator()); +} + var arr = changetype(allocate_memory(sizeof() + 2 * sizeof())); assert(arr.length == 0); @@ -323,3 +404,66 @@ i = arr.reduce(((prev: i32, current: i32, index: i32, array: Array): i // only 2 first items was reduced, since last 2 was removed by .pop() assert(i == 1); assert(arr.length == 2); + +/*=============================== sort ==========================*/ + +var revesed0: Array = []; +var revesed1: Array = [1]; +var revesed2: Array = [2, 1]; +var revesed4: Array = [3, 2, 1, 0]; + +var expected4: Array = [0, 1, 2, 3]; + +var revesed64 = createReverseOrderedArray(64); +var revesed128 = createReverseOrderedArray(128); +var revesed1024 = createReverseOrderedArray(1024); +var revesed10000 = createReverseOrderedArray(10000); + +var randomized512 = createRandomOrderedArray(512); + +// Test sorting with with default comparator + +assertSortedDefault(revesed0); + +assertSortedDefault(revesed1); +assert(isArraysEqual(revesed1, [1])); + +assertSortedDefault(revesed2); +assert(isArraysEqual(revesed2, [1, 2])); + +assertSortedDefault(revesed4); +assert(isArraysEqual(revesed4, expected4)); + +assertSortedDefault(revesed64); +assert(isArraysEqual(revesed64, expected4, 4)); + +assertSortedDefault(revesed128); +assert(isArraysEqual(revesed128, expected4, 4)); + +assertSortedDefault(revesed1024); +assert(isArraysEqual(revesed1024, expected4, 4)); + +assertSortedDefault(revesed10000); +assert(isArraysEqual(revesed10000, expected4, 4)); + +assertSortedDefault(randomized512); + +// Test sorting with custom comparator + +var randomized64 = createRandomOrderedArray(64); +var randomized257 = createRandomOrderedArray(257); + +assertSorted(randomized64, (a: i32, b: i32): i32 => a - b); +assertSorted(randomized64, (a: i32, b: i32): i32 => b - a); + +assertSorted(randomized257, (a: i32, b: i32): i32 => a - b); +assertSorted(randomized257, (a: i32, b: i32): i32 => b - a); + +// Test sorting complex objects + +// var reversedNested512 = createReverseOrderedNestedArray(512); +// assertSorted(reversedNested512, (a: i32[], b: i32[]): i32 => a[0] - b[0]); + +// Test sorting reference elements +// var reversedElements512 = createReverseOrderedElementsArray(512); +// assertSorted>(reversedElements512, (a: Proxy, b: Proxy): i32 => a.x - b.x); diff --git a/tests/compiler/std/array.untouched.wat b/tests/compiler/std/array.untouched.wat index 91875416..4cd80766 100644 --- a/tests/compiler/std/array.untouched.wat +++ b/tests/compiler/std/array.untouched.wat @@ -1,7 +1,10 @@ (module (type $i (func (result i32))) - (type $ii (func (param i32) (result i32))) + (type $F (func (result f64))) + (type $Iv (func (param i64))) (type $iiiiv (func (param i32 i32 i32 i32))) + (type $II (func (param i64) (result i64))) + (type $ii (func (param i32) (result i32))) (type $iii (func (param i32 i32) (result i32))) (type $iiv (func (param i32 i32))) (type $iiiv (func (param i32 i32 i32))) @@ -9,6 +12,7 @@ (type $iiii (func (param i32 i32 i32) (result i32))) (type $iiiii (func (param i32 i32 i32 i32) (result i32))) (type $v (func)) + (import "JSMath" "random" (func $~lib/math/JSMath.random (result f64))) (import "env" "abort" (func $abort (param i32 i32 i32 i32))) (global $~lib/allocator/common/index/AL_BITS i32 (i32.const 3)) (global $~lib/allocator/common/index/AL_SIZE i32 (i32.const 8)) @@ -16,6 +20,9 @@ (global $~lib/allocator/common/index/MAX_SIZE_32 i32 (i32.const 1073741824)) (global $~lib/allocator/arena/startOffset (mut i32) (i32.const 0)) (global $~lib/allocator/arena/offset (mut i32) (i32.const 0)) + (global $~lib/math/random_seeded (mut i32) (i32.const 0)) + (global $~lib/math/random_state0 (mut i64) (i64.const 0)) + (global $~lib/math/random_state1 (mut i64) (i64.const 0)) (global $std/array/arr (mut i32) (i32.const 0)) (global $std/array/i (mut i32) (i32.const 0)) (global $argumentCount (mut i32) (i32.const 0)) @@ -23,16 +30,109 @@ (global $std/array/every (mut i32) (i32.const 0)) (global $std/array/some (mut i32) (i32.const 0)) (global $std/array/boolVal (mut i32) (i32.const 0)) - (global $HEAP_BASE i32 (i32.const 64)) - (table 23 23 anyfunc) - (elem (i32.const 0) $start~anonymous|0 $start~anonymous|1 $start~anonymous|2 $start~anonymous|3 $start~anonymous|4 $start~anonymous|5 $start~anonymous|6 $start~anonymous|7 $start~anonymous|8 $start~anonymous|9 $start~anonymous|10 $start~anonymous|11 $start~anonymous|12 $start~anonymous|13 $start~anonymous|14 $start~anonymous|15 $start~anonymous|16 $start~anonymous|17 $start~anonymous|18 $start~anonymous|19 $start~anonymous|20 $start~anonymous|21 $start~anonymous|22) + (global $std/array/revesed0 (mut i32) (i32.const 96)) + (global $std/array/revesed1 (mut i32) (i32.const 112)) + (global $std/array/revesed2 (mut i32) (i32.const 128)) + (global $std/array/revesed4 (mut i32) (i32.const 152)) + (global $std/array/expected4 (mut i32) (i32.const 184)) + (global $std/array/revesed64 (mut i32) (i32.const 0)) + (global $std/array/revesed128 (mut i32) (i32.const 0)) + (global $std/array/revesed1024 (mut i32) (i32.const 0)) + (global $std/array/revesed10000 (mut i32) (i32.const 0)) + (global $std/array/randomized512 (mut i32) (i32.const 0)) + (global $std/array/randomized64 (mut i32) (i32.const 0)) + (global $std/array/randomized257 (mut i32) (i32.const 0)) + (global $HEAP_BASE i32 (i32.const 252)) + (table 28 28 anyfunc) + (elem (i32.const 0) $start~anonymous|0 $start~anonymous|1 $start~anonymous|2 $start~anonymous|3 $start~anonymous|4 $start~anonymous|5 $start~anonymous|6 $start~anonymous|7 $start~anonymous|8 $start~anonymous|9 $start~anonymous|10 $start~anonymous|11 $start~anonymous|12 $start~anonymous|13 $start~anonymous|14 $start~anonymous|15 $start~anonymous|16 $start~anonymous|17 $start~anonymous|18 $start~anonymous|19 $start~anonymous|20 $start~anonymous|21 $start~anonymous|22 $std/array/createDefaultComparator~anonymous|23 $start~anonymous|24 $start~anonymous|25 $start~anonymous|26 $start~anonymous|27) (memory $0 1) - (data (i32.const 4) "\0c\00\00\00s\00t\00d\00/\00a\00r\00r\00a\00y\00.\00t\00s\00") - (data (i32.const 32) "\0d\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s\00") + (data (i32.const 4) "\0c\00\00\00~\00l\00i\00b\00/\00m\00a\00t\00h\00.\00t\00s\00") + (data (i32.const 32) "\0c\00\00\00s\00t\00d\00/\00a\00r\00r\00a\00y\00.\00t\00s\00") + (data (i32.const 60) "\0d\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s\00") + (data (i32.const 96) "l\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 112) "|\00\00\00\01\00\00\00\01\00\00\00\01\00\00\00") + (data (i32.const 128) "\8c\00\00\00\02\00\00\00\02\00\00\00\02\00\00\00\01\00\00\00") + (data (i32.const 152) "\a4\00\00\00\04\00\00\00\04\00\00\00\03\00\00\00\02\00\00\00\01\00\00\00\00\00\00\00") + (data (i32.const 184) "\c4\00\00\00\04\00\00\00\04\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00") + (data (i32.const 216) "\e4\00\00\00\01\00\00\00\01\00\00\00\01\00\00\00") + (data (i32.const 232) "\f4\00\00\00\02\00\00\00\02\00\00\00\01\00\00\00\02\00\00\00") (export "memory" (memory $0)) (export "table" (table $0)) (start $start) - (func $~lib/allocator/arena/allocate_memory (; 1 ;) (type $ii) (param $0 i32) (result i32) + (func $~lib/math/murmurHash3 (; 2 ;) (type $II) (param $0 i64) (result i64) + (set_local $0 + (i64.xor + (get_local $0) + (i64.shr_u + (get_local $0) + (i64.const 33) + ) + ) + ) + (set_local $0 + (i64.mul + (get_local $0) + (i64.const -49064778989728563) + ) + ) + (set_local $0 + (i64.xor + (get_local $0) + (i64.shr_u + (get_local $0) + (i64.const 33) + ) + ) + ) + (set_local $0 + (i64.mul + (get_local $0) + (i64.const -4265267296055464877) + ) + ) + (set_local $0 + (i64.xor + (get_local $0) + (i64.shr_u + (get_local $0) + (i64.const 33) + ) + ) + ) + (return + (get_local $0) + ) + ) + (func $~lib/math/NativeMath.seedRandom (; 3 ;) (type $Iv) (param $0 i64) + (if + (i64.eqz + (get_local $0) + ) + (block + (call $abort + (i32.const 0) + (i32.const 4) + (i32.const 993) + (i32.const 4) + ) + (unreachable) + ) + ) + (set_global $~lib/math/random_seeded + (i32.const 1) + ) + (set_global $~lib/math/random_state0 + (call $~lib/math/murmurHash3 + (get_local $0) + ) + ) + (set_global $~lib/math/random_state1 + (call $~lib/math/murmurHash3 + (get_global $~lib/math/random_state0) + ) + ) + ) + (func $~lib/allocator/arena/allocate_memory (; 4 ;) (type $ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -143,14 +243,14 @@ (i32.const 0) ) ) - (func $~lib/array/Array#get:length (; 2 ;) (type $ii) (param $0 i32) (result i32) + (func $~lib/array/Array#get:length (; 5 ;) (type $ii) (param $0 i32) (result i32) (return (i32.load offset=8 (get_local $0) ) ) ) - (func $~lib/memory/copy_memory (; 3 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/memory/copy_memory (; 6 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -1953,7 +2053,7 @@ ) ) ) - (func $~lib/memory/move_memory (; 4 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/memory/move_memory (; 7 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (if (i32.eq @@ -2276,9 +2376,9 @@ ) ) ) - (func $~lib/allocator/arena/free_memory (; 5 ;) (type $iv) (param $0 i32) + (func $~lib/allocator/arena/free_memory (; 8 ;) (type $iv) (param $0 i32) ) - (func $~lib/array/Array#__grow (; 6 ;) (type $iiv) (param $0 i32) (param $1 i32) + (func $~lib/array/Array#__grow (; 9 ;) (type $iiv) (param $0 i32) (param $1 i32) (local $2 i32) (if (i32.eqz @@ -2292,8 +2392,8 @@ (block (call $abort (i32.const 0) - (i32.const 32) - (i32.const 8) + (i32.const 60) + (i32.const 9) (i32.const 4) ) (unreachable) @@ -2340,7 +2440,7 @@ (get_local $1) ) ) - (func $~lib/array/Array#push (; 7 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#push (; 10 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (if (i32.eq @@ -2399,7 +2499,7 @@ ) ) ) - (func $~lib/array/Array#__get (; 8 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#__get (; 11 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (if (i32.ge_u (get_local $1) @@ -2423,7 +2523,7 @@ ) ) ) - (func $~lib/array/Array#pop (; 9 ;) (type $ii) (param $0 i32) (result i32) + (func $~lib/array/Array#pop (; 12 ;) (type $ii) (param $0 i32) (result i32) (local $1 i32) (if (i32.lt_s @@ -2462,7 +2562,7 @@ ) ) ) - (func $~lib/array/Array#unshift (; 10 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#unshift (; 13 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -2501,8 +2601,8 @@ (block (call $abort (i32.const 0) - (i32.const 32) - (i32.const 206) + (i32.const 60) + (i32.const 207) (i32.const 6) ) (unreachable) @@ -2590,7 +2690,7 @@ ) ) ) - (func $~lib/memory/set_memory (; 11 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/memory/set_memory (; 14 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i64) @@ -2939,7 +3039,7 @@ ) ) ) - (func $~lib/array/Array#shift (; 12 ;) (type $ii) (param $0 i32) (result i32) + (func $~lib/array/Array#shift (; 15 ;) (type $ii) (param $0 i32) (result i32) (local $1 i32) (if (i32.lt_s @@ -3008,7 +3108,7 @@ (get_local $1) ) ) - (func $~lib/array/Array#reverse (; 13 ;) (type $ii) (param $0 i32) (result i32) + (func $~lib/array/Array#reverse (; 16 ;) (type $ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -3105,7 +3205,7 @@ (get_local $0) ) ) - (func $~lib/array/Array#indexOf (; 14 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/array/Array#indexOf (; 17 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (if (i32.and @@ -3203,7 +3303,7 @@ (i32.const -1) ) ) - (func $~lib/array/Array#indexOf|trampoline (; 15 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/array/Array#indexOf|trampoline (; 18 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (block $1of1 (block $0of1 (block $oob @@ -3226,7 +3326,7 @@ (get_local $2) ) ) - (func $~lib/array/Array#includes (; 16 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/array/Array#includes (; 19 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (if (i32.and @@ -3324,7 +3424,7 @@ (i32.const 0) ) ) - (func $~lib/array/Array#includes|trampoline (; 17 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/array/Array#includes|trampoline (; 20 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (block $1of1 (block $0of1 (block $oob @@ -3347,7 +3447,7 @@ (get_local $2) ) ) - (func $~lib/array/Array#splice (; 18 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/array/Array#splice (; 21 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (if @@ -3456,7 +3556,7 @@ ) ) ) - (func $~lib/array/Array#__set (; 19 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/array/Array#__set (; 22 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (if @@ -3510,13 +3610,13 @@ (get_local $2) ) ) - (func $start~anonymous|0 (; 20 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start~anonymous|0 (; 23 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (i32.eq (get_local $0) (i32.const 0) ) ) - (func $~lib/array/Array#findIndex (; 21 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#findIndex (; 24 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -3593,19 +3693,19 @@ (i32.const -1) ) ) - (func $start~anonymous|1 (; 22 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start~anonymous|1 (; 25 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (i32.eq (get_local $0) (i32.const 1) ) ) - (func $start~anonymous|2 (; 23 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start~anonymous|2 (; 26 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (i32.eq (get_local $0) (i32.const 100) ) ) - (func $start~anonymous|3 (; 24 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start~anonymous|3 (; 27 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (drop (call $~lib/array/Array#push (get_local $2) @@ -3619,13 +3719,13 @@ ) ) ) - (func $start~anonymous|4 (; 25 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start~anonymous|4 (; 28 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (i32.eq (get_local $0) (i32.const 100) ) ) - (func $start~anonymous|5 (; 26 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start~anonymous|5 (; 29 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (drop (call $~lib/array/Array#pop (get_local $2) @@ -3638,13 +3738,13 @@ ) ) ) - (func $start~anonymous|6 (; 27 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start~anonymous|6 (; 30 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (i32.ge_s (get_local $0) (i32.const 0) ) ) - (func $~lib/array/Array#every (; 28 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#every (; 31 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -3723,13 +3823,13 @@ (i32.const 1) ) ) - (func $start~anonymous|7 (; 29 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start~anonymous|7 (; 32 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (i32.le_s (get_local $0) (i32.const 0) ) ) - (func $start~anonymous|8 (; 30 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start~anonymous|8 (; 33 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (drop (call $~lib/array/Array#push (get_local $2) @@ -3743,13 +3843,13 @@ ) ) ) - (func $start~anonymous|9 (; 31 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start~anonymous|9 (; 34 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (i32.lt_s (get_local $0) (i32.const 10) ) ) - (func $start~anonymous|10 (; 32 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start~anonymous|10 (; 35 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (drop (call $~lib/array/Array#pop (get_local $2) @@ -3762,13 +3862,13 @@ ) ) ) - (func $start~anonymous|11 (; 33 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start~anonymous|11 (; 36 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (i32.ge_s (get_local $0) (i32.const 3) ) ) - (func $~lib/array/Array#some (; 34 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#some (; 37 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -3845,13 +3945,13 @@ (i32.const 0) ) ) - (func $start~anonymous|12 (; 35 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start~anonymous|12 (; 38 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (i32.le_s (get_local $0) (i32.const -1) ) ) - (func $start~anonymous|13 (; 36 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start~anonymous|13 (; 39 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (drop (call $~lib/array/Array#push (get_local $2) @@ -3865,13 +3965,13 @@ ) ) ) - (func $start~anonymous|14 (; 37 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start~anonymous|14 (; 40 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (i32.gt_s (get_local $0) (i32.const 10) ) ) - (func $start~anonymous|15 (; 38 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $start~anonymous|15 (; 41 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (drop (call $~lib/array/Array#pop (get_local $2) @@ -3884,13 +3984,13 @@ ) ) ) - (func $start~anonymous|16 (; 39 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $start~anonymous|16 (; 42 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (i32.add (get_local $0) (get_local $1) ) ) - (func $~lib/array/Array#reduce (; 40 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/array/Array#reduce (; 43 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -3969,13 +4069,13 @@ (get_local $3) ) ) - (func $start~anonymous|17 (; 41 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $start~anonymous|17 (; 44 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (i32.add (get_local $0) (get_local $1) ) ) - (func $start~anonymous|18 (; 42 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $start~anonymous|18 (; 45 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (i32.and (if (result i32) (get_local $0) @@ -3988,7 +4088,7 @@ (i32.const 1) ) ) - (func $~lib/array/Array#reduce (; 43 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/array/Array#reduce (; 46 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -4067,7 +4167,7 @@ (get_local $3) ) ) - (func $start~anonymous|19 (; 44 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $start~anonymous|19 (; 47 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (i32.and (if (result i32) (get_local $0) @@ -4080,7 +4180,7 @@ (i32.const 1) ) ) - (func $start~anonymous|20 (; 45 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $start~anonymous|20 (; 48 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (drop (call $~lib/array/Array#push (get_local $3) @@ -4094,13 +4194,13 @@ ) ) ) - (func $start~anonymous|21 (; 46 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $start~anonymous|21 (; 49 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (i32.add (get_local $0) (get_local $1) ) ) - (func $start~anonymous|22 (; 47 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $start~anonymous|22 (; 50 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (drop (call $~lib/array/Array#pop (get_local $3) @@ -4113,7 +4213,1206 @@ ) ) ) - (func $start (; 48 ;) (type $v) + (func $~lib/array/Array#constructor (; 51 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (block + (if + (i32.lt_s + (get_local $1) + (i32.const 0) + ) + (unreachable) + ) + (i32.store + (tee_local $0 + (if (result i32) + (get_local $0) + (get_local $0) + (tee_local $0 + (block (result i32) + (set_local $2 + (call $~lib/allocator/arena/allocate_memory + (i32.const 12) + ) + ) + (i32.store + (get_local $2) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $2) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $2) + (i32.const 0) + ) + (get_local $2) + ) + ) + ) + ) + (if (result i32) + (get_local $1) + (call $~lib/allocator/arena/allocate_memory + (i32.mul + (get_local $1) + (i32.const 4) + ) + ) + (i32.const 0) + ) + ) + (i32.store offset=4 + (get_local $0) + (block (result i32) + (set_local $2 + (get_local $1) + ) + (i32.store offset=8 + (get_local $0) + (get_local $2) + ) + (get_local $2) + ) + ) + ) + (get_local $0) + ) + (func $std/array/createReverseOrderedArray (; 52 ;) (type $ii) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (set_local $1 + (call $~lib/array/Array#constructor + (i32.const 0) + (get_local $0) + ) + ) + (block $break|0 + (set_local $2 + (i32.const 0) + ) + (loop $continue|0 + (if + (i32.lt_s + (get_local $2) + (call $~lib/array/Array#get:length + (get_local $1) + ) + ) + (block + (block + (call $~lib/array/Array#__set + (get_local $1) + (get_local $2) + (i32.sub + (i32.sub + (call $~lib/array/Array#get:length + (get_local $1) + ) + (i32.const 1) + ) + (get_local $2) + ) + ) + ) + (set_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (br $continue|0) + ) + ) + ) + ) + (return + (get_local $1) + ) + ) + (func $~lib/math/NativeMath.random (; 53 ;) (type $F) (result f64) + (local $0 i64) + (local $1 i64) + (local $2 i64) + (if + (i32.eqz + (get_global $~lib/math/random_seeded) + ) + (unreachable) + ) + (set_local $0 + (get_global $~lib/math/random_state0) + ) + (set_local $1 + (get_global $~lib/math/random_state1) + ) + (set_global $~lib/math/random_state0 + (get_local $1) + ) + (set_local $0 + (i64.xor + (get_local $0) + (i64.shl + (get_local $0) + (i64.const 23) + ) + ) + ) + (set_local $0 + (i64.xor + (get_local $0) + (i64.shr_u + (get_local $0) + (i64.const 17) + ) + ) + ) + (set_local $0 + (i64.xor + (get_local $0) + (get_local $1) + ) + ) + (set_local $0 + (i64.xor + (get_local $0) + (i64.shr_u + (get_local $1) + (i64.const 26) + ) + ) + ) + (set_global $~lib/math/random_state1 + (get_local $0) + ) + (set_local $2 + (i64.or + (i64.and + (i64.add + (get_local $1) + (get_local $0) + ) + (i64.const 4503599627370495) + ) + (i64.const 4607182418800017408) + ) + ) + (return + (f64.sub + (f64.reinterpret/i64 + (get_local $2) + ) + (f64.const 1) + ) + ) + ) + (func $std/array/createRandomOrderedArray (; 54 ;) (type $ii) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (set_local $1 + (call $~lib/array/Array#constructor + (i32.const 0) + (get_local $0) + ) + ) + (block $break|0 + (set_local $2 + (i32.const 0) + ) + (loop $continue|0 + (if + (i32.lt_s + (get_local $2) + (call $~lib/array/Array#get:length + (get_local $1) + ) + ) + (block + (block + (call $~lib/array/Array#__set + (get_local $1) + (get_local $2) + (i32.trunc_s/f64 + (f64.mul + (call $~lib/math/NativeMath.random) + (f64.convert_s/i32 + (call $~lib/array/Array#get:length + (get_local $1) + ) + ) + ) + ) + ) + ) + (set_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (br $continue|0) + ) + ) + ) + ) + (return + (get_local $1) + ) + ) + (func $std/array/createDefaultComparator~anonymous|23 (; 55 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (i32.sub + (i32.gt_s + (get_local $0) + (get_local $1) + ) + (i32.lt_s + (get_local $0) + (get_local $1) + ) + ) + ) + (func $std/array/createDefaultComparator (; 56 ;) (type $i) (result i32) + (return + (i32.const 23) + ) + ) + (func $~lib/array/insertionSort (; 57 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (nop) + (nop) + (block $break|0 + (block + (set_local $5 + (i32.const 0) + ) + (set_local $6 + (call $~lib/array/Array#get:length + (get_local $0) + ) + ) + ) + (loop $continue|0 + (if + (i32.lt_s + (get_local $5) + (get_local $6) + ) + (block + (block + (set_local $2 + (i32.load + (i32.add + (i32.load + (get_local $0) + ) + (i32.shl + (get_local $5) + (i32.const 2) + ) + ) + ) + ) + (set_local $4 + (i32.sub + (get_local $5) + (i32.const 1) + ) + ) + (block $break|1 + (loop $continue|1 + (if + (i32.ge_s + (get_local $4) + (i32.const 0) + ) + (block + (block + (set_local $3 + (i32.load + (i32.add + (i32.load + (get_local $0) + ) + (i32.shl + (get_local $4) + (i32.const 2) + ) + ) + ) + ) + (if + (i32.lt_s + (block (result i32) + (set_global $argumentCount + (i32.const 2) + ) + (call_indirect (type $iii) + (get_local $2) + (get_local $3) + (get_local $1) + ) + ) + (i32.const 0) + ) + (block + (i32.store + (i32.add + (i32.load + (get_local $0) + ) + (i32.shl + (i32.add + (get_local $4) + (i32.const 1) + ) + (i32.const 2) + ) + ) + (get_local $3) + ) + (set_local $4 + (i32.sub + (get_local $4) + (i32.const 1) + ) + ) + ) + (br $break|1) + ) + ) + (br $continue|1) + ) + ) + ) + ) + (i32.store + (i32.add + (i32.load + (get_local $0) + ) + (i32.shl + (i32.add + (get_local $4) + (i32.const 1) + ) + (i32.const 2) + ) + ) + (get_local $2) + ) + ) + (set_local $5 + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (br $continue|0) + ) + ) + ) + ) + (return + (get_local $0) + ) + ) + (func $~lib/array/weakHeapSort (; 58 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (set_local $2 + (call $~lib/array/Array#get:length + (get_local $0) + ) + ) + (nop) + (nop) + (nop) + (set_local $9 + (i32.shr_s + (i32.add + (get_local $2) + (i32.const 7) + ) + (i32.const 3) + ) + ) + (set_local $10 + (call $~lib/allocator/arena/allocate_memory + (i32.shl + (get_local $9) + (i32.const 2) + ) + ) + ) + (call $~lib/memory/set_memory + (get_local $10) + (i32.const 0) + (i32.shl + (get_local $9) + (i32.const 2) + ) + ) + (block $break|0 + (set_local $3 + (i32.sub + (get_local $2) + (i32.const 1) + ) + ) + (loop $continue|0 + (if + (i32.gt_s + (get_local $3) + (i32.const 0) + ) + (block + (block + (set_local $4 + (get_local $3) + ) + (block $break|1 + (loop $continue|1 + (if + (i32.eq + (i32.and + (get_local $4) + (i32.const 1) + ) + (i32.and + (i32.shr_s + (i32.load + (i32.add + (get_local $10) + (i32.shl + (i32.shr_s + (get_local $4) + (i32.const 4) + ) + (i32.const 2) + ) + ) + ) + (i32.and + (i32.shr_s + (get_local $4) + (i32.const 1) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + ) + (block + (block + (set_local $4 + (i32.shr_s + (get_local $4) + (i32.const 1) + ) + ) + ) + (br $continue|1) + ) + ) + ) + ) + (set_local $6 + (i32.shr_s + (get_local $4) + (i32.const 1) + ) + ) + (set_local $7 + (i32.load + (i32.add + (i32.load + (get_local $0) + ) + (i32.shl + (get_local $6) + (i32.const 2) + ) + ) + ) + ) + (set_local $8 + (i32.load + (i32.add + (i32.load + (get_local $0) + ) + (i32.shl + (get_local $3) + (i32.const 2) + ) + ) + ) + ) + (if + (i32.lt_s + (block (result i32) + (set_global $argumentCount + (i32.const 2) + ) + (call_indirect (type $iii) + (get_local $7) + (get_local $8) + (get_local $1) + ) + ) + (i32.const 0) + ) + (block + (i32.store + (i32.add + (get_local $10) + (i32.shl + (i32.shr_s + (get_local $3) + (i32.const 3) + ) + (i32.const 2) + ) + ) + (i32.xor + (i32.load + (i32.add + (get_local $10) + (i32.shl + (i32.shr_s + (get_local $3) + (i32.const 3) + ) + (i32.const 2) + ) + ) + ) + (i32.shl + (i32.const 1) + (i32.and + (get_local $3) + (i32.const 7) + ) + ) + ) + ) + (i32.store + (i32.add + (i32.load + (get_local $0) + ) + (i32.shl + (get_local $3) + (i32.const 2) + ) + ) + (get_local $7) + ) + (i32.store + (i32.add + (i32.load + (get_local $0) + ) + (i32.shl + (get_local $6) + (i32.const 2) + ) + ) + (get_local $8) + ) + ) + ) + ) + (set_local $3 + (i32.sub + (get_local $3) + (i32.const 1) + ) + ) + (br $continue|0) + ) + ) + ) + ) + (block $break|2 + (set_local $3 + (i32.sub + (get_local $2) + (i32.const 1) + ) + ) + (loop $continue|2 + (if + (i32.ge_s + (get_local $3) + (i32.const 2) + ) + (block + (block + (set_local $7 + (i32.load + (i32.load + (get_local $0) + ) + ) + ) + (i32.store + (i32.load + (get_local $0) + ) + (i32.load + (i32.add + (i32.load + (get_local $0) + ) + (i32.shl + (get_local $3) + (i32.const 2) + ) + ) + ) + ) + (i32.store + (i32.add + (i32.load + (get_local $0) + ) + (i32.shl + (get_local $3) + (i32.const 2) + ) + ) + (get_local $7) + ) + (set_local $11 + (i32.const 1) + ) + (block $break|3 + (loop $continue|3 + (if + (i32.lt_s + (tee_local $5 + (i32.add + (i32.shl + (get_local $11) + (i32.const 1) + ) + (i32.and + (i32.shr_s + (i32.load + (i32.add + (get_local $10) + (i32.shl + (i32.shr_s + (get_local $11) + (i32.const 3) + ) + (i32.const 2) + ) + ) + ) + (i32.and + (get_local $11) + (i32.const 7) + ) + ) + (i32.const 1) + ) + ) + ) + (get_local $3) + ) + (block + (block + (set_local $11 + (get_local $5) + ) + ) + (br $continue|3) + ) + ) + ) + ) + (block $break|4 + (loop $continue|4 + (if + (i32.gt_s + (get_local $11) + (i32.const 0) + ) + (block + (block + (set_local $7 + (i32.load + (i32.load + (get_local $0) + ) + ) + ) + (set_local $8 + (i32.load + (i32.add + (i32.load + (get_local $0) + ) + (i32.shl + (get_local $11) + (i32.const 2) + ) + ) + ) + ) + (if + (i32.lt_s + (block (result i32) + (set_global $argumentCount + (i32.const 2) + ) + (call_indirect (type $iii) + (get_local $7) + (get_local $8) + (get_local $1) + ) + ) + (i32.const 0) + ) + (block + (i32.store + (i32.add + (get_local $10) + (i32.shl + (i32.shr_s + (get_local $11) + (i32.const 3) + ) + (i32.const 2) + ) + ) + (i32.xor + (i32.load + (i32.add + (get_local $10) + (i32.shl + (i32.shr_s + (get_local $11) + (i32.const 3) + ) + (i32.const 2) + ) + ) + ) + (i32.shl + (i32.const 1) + (i32.and + (get_local $11) + (i32.const 7) + ) + ) + ) + ) + (i32.store + (i32.add + (i32.load + (get_local $0) + ) + (i32.shl + (get_local $11) + (i32.const 2) + ) + ) + (get_local $7) + ) + (i32.store + (i32.load + (get_local $0) + ) + (get_local $8) + ) + ) + ) + (set_local $11 + (i32.shr_s + (get_local $11) + (i32.const 1) + ) + ) + ) + (br $continue|4) + ) + ) + ) + ) + ) + (set_local $3 + (i32.sub + (get_local $3) + (i32.const 1) + ) + ) + (br $continue|2) + ) + ) + ) + ) + (call $~lib/allocator/arena/free_memory + (get_local $10) + ) + (set_local $12 + (i32.load offset=4 + (i32.load + (get_local $0) + ) + ) + ) + (i32.store offset=4 + (i32.load + (get_local $0) + ) + (i32.load + (i32.load + (get_local $0) + ) + ) + ) + (i32.store + (i32.load + (get_local $0) + ) + (get_local $12) + ) + (return + (get_local $0) + ) + ) + (func $~lib/array/sort (; 59 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (set_local $2 + (call $~lib/array/Array#get:length + (get_local $0) + ) + ) + (if + (i32.le_s + (get_local $2) + (i32.const 1) + ) + (return + (get_local $0) + ) + ) + (if + (i32.eq + (get_local $2) + (i32.const 2) + ) + (block + (set_local $3 + (i32.load offset=4 + (i32.load + (get_local $0) + ) + ) + ) + (set_local $4 + (i32.load + (i32.load + (get_local $0) + ) + ) + ) + (if + (i32.lt_s + (block (result i32) + (set_global $argumentCount + (i32.const 2) + ) + (call_indirect (type $iii) + (get_local $3) + (get_local $4) + (get_local $1) + ) + ) + (i32.const 0) + ) + (block + (i32.store offset=4 + (i32.load + (get_local $0) + ) + (get_local $4) + ) + (i32.store + (i32.load + (get_local $0) + ) + (get_local $3) + ) + ) + ) + (return + (get_local $0) + ) + ) + ) + (if + (i32.le_s + (get_local $2) + (i32.const 256) + ) + (return + (call $~lib/array/insertionSort + (get_local $0) + (get_local $1) + ) + ) + ) + (return + (call $~lib/array/weakHeapSort + (get_local $0) + (get_local $1) + ) + ) + ) + (func $~lib/array/Array#sort (; 60 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (return + (call $~lib/array/sort + (get_local $0) + (get_local $1) + ) + ) + ) + (func $std/array/isSorted (; 61 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (block $break|0 + (block + (set_local $2 + (i32.const 1) + ) + (set_local $3 + (call $~lib/array/Array#get:length + (get_local $0) + ) + ) + ) + (loop $continue|0 + (if + (i32.lt_s + (get_local $2) + (get_local $3) + ) + (block + (block + (if + (i32.gt_s + (block (result i32) + (set_global $argumentCount + (i32.const 2) + ) + (call_indirect (type $iii) + (call $~lib/array/Array#__get + (get_local $0) + (i32.sub + (get_local $2) + (i32.const 1) + ) + ) + (call $~lib/array/Array#__get + (get_local $0) + (get_local $2) + ) + (get_local $1) + ) + ) + (i32.const 0) + ) + (return + (i32.const 0) + ) + ) + ) + (set_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (br $continue|0) + ) + ) + ) + ) + (return + (i32.const 1) + ) + ) + (func $std/array/assertSorted (; 62 ;) (type $iiv) (param $0 i32) (param $1 i32) + (if + (i32.eqz + (call $std/array/isSorted + (call $~lib/array/Array#sort + (get_local $0) + (get_local $1) + ) + (get_local $1) + ) + ) + (block + (call $abort + (i32.const 0) + (i32.const 32) + (i32.const 77) + (i32.const 2) + ) + (unreachable) + ) + ) + ) + (func $std/array/assertSortedDefault (; 63 ;) (type $iv) (param $0 i32) + (call $std/array/assertSorted + (get_local $0) + (call $std/array/createDefaultComparator) + ) + ) + (func $std/array/isArraysEqual (; 64 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (set_local $3 + (get_local $2) + ) + (if + (i32.eqz + (get_local $2) + ) + (block + (if + (i32.ne + (call $~lib/array/Array#get:length + (get_local $0) + ) + (call $~lib/array/Array#get:length + (get_local $1) + ) + ) + (return + (i32.const 0) + ) + ) + (set_local $3 + (call $~lib/array/Array#get:length + (get_local $0) + ) + ) + ) + ) + (block $break|0 + (set_local $4 + (i32.const 0) + ) + (loop $continue|0 + (if + (i32.lt_s + (get_local $4) + (get_local $3) + ) + (block + (block + (if + (i32.ne + (call $~lib/array/Array#__get + (get_local $0) + (get_local $4) + ) + (call $~lib/array/Array#__get + (get_local $1) + (get_local $4) + ) + ) + (return + (i32.const 0) + ) + ) + ) + (set_local $4 + (i32.add + (get_local $4) + (i32.const 1) + ) + ) + (br $continue|0) + ) + ) + ) + ) + (return + (i32.const 1) + ) + ) + (func $std/array/isArraysEqual|trampoline (; 65 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (block $1of1 + (block $0of1 + (block $oob + (br_table $0of1 $1of1 $oob + (i32.sub + (get_global $argumentCount) + (i32.const 2) + ) + ) + ) + (unreachable) + ) + (set_local $2 + (i32.const 0) + ) + ) + (call $std/array/isArraysEqual + (get_local $0) + (get_local $1) + (get_local $2) + ) + ) + (func $start~anonymous|24 (; 66 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (i32.sub + (get_local $0) + (get_local $1) + ) + ) + (func $start~anonymous|25 (; 67 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (i32.sub + (get_local $1) + (get_local $0) + ) + ) + (func $start~anonymous|26 (; 68 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (i32.sub + (get_local $0) + (get_local $1) + ) + ) + (func $start~anonymous|27 (; 69 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (i32.sub + (get_local $1) + (get_local $0) + ) + ) + (func $start (; 70 ;) (type $v) (set_global $~lib/allocator/arena/startOffset (i32.and (i32.add @@ -4129,6 +5428,11 @@ (set_global $~lib/allocator/arena/offset (get_global $~lib/allocator/arena/startOffset) ) + (call $~lib/math/NativeMath.seedRandom + (i64.reinterpret/f64 + (call $~lib/math/JSMath.random) + ) + ) (set_global $std/array/arr (call $~lib/allocator/arena/allocate_memory (i32.add @@ -4152,8 +5456,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 5) + (i32.const 32) + (i32.const 86) (i32.const 0) ) (unreachable) @@ -4171,8 +5475,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 6) + (i32.const 32) + (i32.const 87) (i32.const 0) ) (unreachable) @@ -4197,8 +5501,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 10) + (i32.const 32) + (i32.const 91) (i32.const 0) ) (unreachable) @@ -4216,8 +5520,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 11) + (i32.const 32) + (i32.const 92) (i32.const 0) ) (unreachable) @@ -4235,8 +5539,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 12) + (i32.const 32) + (i32.const 93) (i32.const 0) ) (unreachable) @@ -4257,8 +5561,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 16) + (i32.const 32) + (i32.const 97) (i32.const 0) ) (unreachable) @@ -4276,8 +5580,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 17) + (i32.const 32) + (i32.const 98) (i32.const 0) ) (unreachable) @@ -4295,8 +5599,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 18) + (i32.const 32) + (i32.const 99) (i32.const 0) ) (unreachable) @@ -4320,8 +5624,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 22) + (i32.const 32) + (i32.const 103) (i32.const 0) ) (unreachable) @@ -4339,8 +5643,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 23) + (i32.const 32) + (i32.const 104) (i32.const 0) ) (unreachable) @@ -4359,8 +5663,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 24) + (i32.const 32) + (i32.const 105) (i32.const 0) ) (unreachable) @@ -4384,8 +5688,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 28) + (i32.const 32) + (i32.const 109) (i32.const 0) ) (unreachable) @@ -4403,8 +5707,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 29) + (i32.const 32) + (i32.const 110) (i32.const 0) ) (unreachable) @@ -4423,8 +5727,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 30) + (i32.const 32) + (i32.const 111) (i32.const 0) ) (unreachable) @@ -4443,8 +5747,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 31) + (i32.const 32) + (i32.const 112) (i32.const 0) ) (unreachable) @@ -4468,8 +5772,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 35) + (i32.const 32) + (i32.const 116) (i32.const 0) ) (unreachable) @@ -4487,8 +5791,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 36) + (i32.const 32) + (i32.const 117) (i32.const 0) ) (unreachable) @@ -4507,8 +5811,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 37) + (i32.const 32) + (i32.const 118) (i32.const 0) ) (unreachable) @@ -4527,8 +5831,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 38) + (i32.const 32) + (i32.const 119) (i32.const 0) ) (unreachable) @@ -4547,8 +5851,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 39) + (i32.const 32) + (i32.const 120) (i32.const 0) ) (unreachable) @@ -4572,8 +5876,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 43) + (i32.const 32) + (i32.const 124) (i32.const 0) ) (unreachable) @@ -4591,8 +5895,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 44) + (i32.const 32) + (i32.const 125) (i32.const 0) ) (unreachable) @@ -4611,8 +5915,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 45) + (i32.const 32) + (i32.const 126) (i32.const 0) ) (unreachable) @@ -4631,8 +5935,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 46) + (i32.const 32) + (i32.const 127) (i32.const 0) ) (unreachable) @@ -4651,8 +5955,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 47) + (i32.const 32) + (i32.const 128) (i32.const 0) ) (unreachable) @@ -4671,8 +5975,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 48) + (i32.const 32) + (i32.const 129) (i32.const 0) ) (unreachable) @@ -4696,8 +6000,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 52) + (i32.const 32) + (i32.const 133) (i32.const 0) ) (unreachable) @@ -4715,8 +6019,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 53) + (i32.const 32) + (i32.const 134) (i32.const 0) ) (unreachable) @@ -4735,8 +6039,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 54) + (i32.const 32) + (i32.const 135) (i32.const 0) ) (unreachable) @@ -4755,8 +6059,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 55) + (i32.const 32) + (i32.const 136) (i32.const 0) ) (unreachable) @@ -4775,8 +6079,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 56) + (i32.const 32) + (i32.const 137) (i32.const 0) ) (unreachable) @@ -4795,8 +6099,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 57) + (i32.const 32) + (i32.const 138) (i32.const 0) ) (unreachable) @@ -4815,8 +6119,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 58) + (i32.const 32) + (i32.const 139) (i32.const 0) ) (unreachable) @@ -4837,8 +6141,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 62) + (i32.const 32) + (i32.const 143) (i32.const 0) ) (unreachable) @@ -4856,8 +6160,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 63) + (i32.const 32) + (i32.const 144) (i32.const 0) ) (unreachable) @@ -4875,8 +6179,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 64) + (i32.const 32) + (i32.const 145) (i32.const 0) ) (unreachable) @@ -4895,8 +6199,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 65) + (i32.const 32) + (i32.const 146) (i32.const 0) ) (unreachable) @@ -4915,8 +6219,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 66) + (i32.const 32) + (i32.const 147) (i32.const 0) ) (unreachable) @@ -4935,8 +6239,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 67) + (i32.const 32) + (i32.const 148) (i32.const 0) ) (unreachable) @@ -4955,8 +6259,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 68) + (i32.const 32) + (i32.const 149) (i32.const 0) ) (unreachable) @@ -4977,8 +6281,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 72) + (i32.const 32) + (i32.const 153) (i32.const 0) ) (unreachable) @@ -4996,8 +6300,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 73) + (i32.const 32) + (i32.const 154) (i32.const 0) ) (unreachable) @@ -5015,8 +6319,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 74) + (i32.const 32) + (i32.const 155) (i32.const 0) ) (unreachable) @@ -5035,8 +6339,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 75) + (i32.const 32) + (i32.const 156) (i32.const 0) ) (unreachable) @@ -5055,8 +6359,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 76) + (i32.const 32) + (i32.const 157) (i32.const 0) ) (unreachable) @@ -5075,8 +6379,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 77) + (i32.const 32) + (i32.const 158) (i32.const 0) ) (unreachable) @@ -5099,8 +6403,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 81) + (i32.const 32) + (i32.const 162) (i32.const 0) ) (unreachable) @@ -5118,8 +6422,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 82) + (i32.const 32) + (i32.const 163) (i32.const 0) ) (unreachable) @@ -5138,8 +6442,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 83) + (i32.const 32) + (i32.const 164) (i32.const 0) ) (unreachable) @@ -5158,8 +6462,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 84) + (i32.const 32) + (i32.const 165) (i32.const 0) ) (unreachable) @@ -5178,8 +6482,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 85) + (i32.const 32) + (i32.const 166) (i32.const 0) ) (unreachable) @@ -5219,8 +6523,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 92) + (i32.const 32) + (i32.const 173) (i32.const 0) ) (unreachable) @@ -5248,8 +6552,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 96) + (i32.const 32) + (i32.const 177) (i32.const 0) ) (unreachable) @@ -5277,8 +6581,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 100) + (i32.const 32) + (i32.const 181) (i32.const 0) ) (unreachable) @@ -5301,8 +6605,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 104) + (i32.const 32) + (i32.const 185) (i32.const 0) ) (unreachable) @@ -5325,8 +6629,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 108) + (i32.const 32) + (i32.const 189) (i32.const 0) ) (unreachable) @@ -5349,8 +6653,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 112) + (i32.const 32) + (i32.const 193) (i32.const 0) ) (unreachable) @@ -5373,8 +6677,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 116) + (i32.const 32) + (i32.const 197) (i32.const 0) ) (unreachable) @@ -5397,8 +6701,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 120) + (i32.const 32) + (i32.const 201) (i32.const 0) ) (unreachable) @@ -5421,8 +6725,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 124) + (i32.const 32) + (i32.const 205) (i32.const 0) ) (unreachable) @@ -5445,8 +6749,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 128) + (i32.const 32) + (i32.const 209) (i32.const 0) ) (unreachable) @@ -5474,8 +6778,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 132) + (i32.const 32) + (i32.const 213) (i32.const 0) ) (unreachable) @@ -5503,8 +6807,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 136) + (i32.const 32) + (i32.const 217) (i32.const 0) ) (unreachable) @@ -5532,8 +6836,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 140) + (i32.const 32) + (i32.const 221) (i32.const 0) ) (unreachable) @@ -5556,8 +6860,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 144) + (i32.const 32) + (i32.const 225) (i32.const 0) ) (unreachable) @@ -5580,8 +6884,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 148) + (i32.const 32) + (i32.const 229) (i32.const 0) ) (unreachable) @@ -5604,8 +6908,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 152) + (i32.const 32) + (i32.const 233) (i32.const 0) ) (unreachable) @@ -5628,8 +6932,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 156) + (i32.const 32) + (i32.const 237) (i32.const 0) ) (unreachable) @@ -5652,8 +6956,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 160) + (i32.const 32) + (i32.const 241) (i32.const 0) ) (unreachable) @@ -5676,8 +6980,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 164) + (i32.const 32) + (i32.const 245) (i32.const 0) ) (unreachable) @@ -5700,8 +7004,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 168) + (i32.const 32) + (i32.const 249) (i32.const 0) ) (unreachable) @@ -5724,8 +7028,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 172) + (i32.const 32) + (i32.const 253) (i32.const 0) ) (unreachable) @@ -5743,8 +7047,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 173) + (i32.const 32) + (i32.const 254) (i32.const 0) ) (unreachable) @@ -5763,8 +7067,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 174) + (i32.const 32) + (i32.const 255) (i32.const 0) ) (unreachable) @@ -5783,8 +7087,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 175) + (i32.const 32) + (i32.const 256) (i32.const 0) ) (unreachable) @@ -5826,8 +7130,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 184) + (i32.const 32) + (i32.const 265) (i32.const 0) ) (unreachable) @@ -5849,8 +7153,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 187) + (i32.const 32) + (i32.const 268) (i32.const 0) ) (unreachable) @@ -5872,8 +7176,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 190) + (i32.const 32) + (i32.const 271) (i32.const 0) ) (unreachable) @@ -5895,8 +7199,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 198) + (i32.const 32) + (i32.const 279) (i32.const 0) ) (unreachable) @@ -5914,8 +7218,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 199) + (i32.const 32) + (i32.const 280) (i32.const 0) ) (unreachable) @@ -5937,8 +7241,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 201) + (i32.const 32) + (i32.const 282) (i32.const 0) ) (unreachable) @@ -5980,8 +7284,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 214) + (i32.const 32) + (i32.const 295) (i32.const 0) ) (unreachable) @@ -5999,8 +7303,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 215) + (i32.const 32) + (i32.const 296) (i32.const 0) ) (unreachable) @@ -6034,8 +7338,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 221) + (i32.const 32) + (i32.const 302) (i32.const 0) ) (unreachable) @@ -6057,8 +7361,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 224) + (i32.const 32) + (i32.const 305) (i32.const 0) ) (unreachable) @@ -6080,8 +7384,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 232) + (i32.const 32) + (i32.const 313) (i32.const 0) ) (unreachable) @@ -6099,8 +7403,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 233) + (i32.const 32) + (i32.const 314) (i32.const 0) ) (unreachable) @@ -6122,8 +7426,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 235) + (i32.const 32) + (i32.const 316) (i32.const 0) ) (unreachable) @@ -6165,8 +7469,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 248) + (i32.const 32) + (i32.const 329) (i32.const 0) ) (unreachable) @@ -6184,8 +7488,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 249) + (i32.const 32) + (i32.const 330) (i32.const 0) ) (unreachable) @@ -6219,8 +7523,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 255) + (i32.const 32) + (i32.const 336) (i32.const 0) ) (unreachable) @@ -6242,8 +7546,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 258) + (i32.const 32) + (i32.const 339) (i32.const 0) ) (unreachable) @@ -6265,8 +7569,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 266) + (i32.const 32) + (i32.const 347) (i32.const 0) ) (unreachable) @@ -6284,8 +7588,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 267) + (i32.const 32) + (i32.const 348) (i32.const 0) ) (unreachable) @@ -6307,8 +7611,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 269) + (i32.const 32) + (i32.const 350) (i32.const 0) ) (unreachable) @@ -6350,8 +7654,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 282) + (i32.const 32) + (i32.const 363) (i32.const 0) ) (unreachable) @@ -6369,8 +7673,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 283) + (i32.const 32) + (i32.const 364) (i32.const 0) ) (unreachable) @@ -6405,8 +7709,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 290) + (i32.const 32) + (i32.const 371) (i32.const 0) ) (unreachable) @@ -6429,8 +7733,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 294) + (i32.const 32) + (i32.const 375) (i32.const 0) ) (unreachable) @@ -6453,8 +7757,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 297) + (i32.const 32) + (i32.const 378) (i32.const 0) ) (unreachable) @@ -6477,8 +7781,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 300) + (i32.const 32) + (i32.const 381) (i32.const 0) ) (unreachable) @@ -6501,8 +7805,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 308) + (i32.const 32) + (i32.const 389) (i32.const 0) ) (unreachable) @@ -6520,8 +7824,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 309) + (i32.const 32) + (i32.const 390) (i32.const 0) ) (unreachable) @@ -6544,8 +7848,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 311) + (i32.const 32) + (i32.const 392) (i32.const 0) ) (unreachable) @@ -6588,8 +7892,8 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 324) + (i32.const 32) + (i32.const 405) (i32.const 0) ) (unreachable) @@ -6607,12 +7911,231 @@ (block (call $abort (i32.const 0) - (i32.const 4) - (i32.const 325) + (i32.const 32) + (i32.const 406) (i32.const 0) ) (unreachable) ) ) + (set_global $std/array/revesed64 + (call $std/array/createReverseOrderedArray + (i32.const 64) + ) + ) + (set_global $std/array/revesed128 + (call $std/array/createReverseOrderedArray + (i32.const 128) + ) + ) + (set_global $std/array/revesed1024 + (call $std/array/createReverseOrderedArray + (i32.const 1024) + ) + ) + (set_global $std/array/revesed10000 + (call $std/array/createReverseOrderedArray + (i32.const 10000) + ) + ) + (set_global $std/array/randomized512 + (call $std/array/createRandomOrderedArray + (i32.const 512) + ) + ) + (call $std/array/assertSortedDefault + (get_global $std/array/revesed0) + ) + (call $std/array/assertSortedDefault + (get_global $std/array/revesed1) + ) + (if + (i32.eqz + (block (result i32) + (set_global $argumentCount + (i32.const 2) + ) + (call $std/array/isArraysEqual|trampoline + (get_global $std/array/revesed1) + (i32.const 216) + (i32.const 0) + ) + ) + ) + (block + (call $abort + (i32.const 0) + (i32.const 32) + (i32.const 429) + (i32.const 0) + ) + (unreachable) + ) + ) + (call $std/array/assertSortedDefault + (get_global $std/array/revesed2) + ) + (if + (i32.eqz + (block (result i32) + (set_global $argumentCount + (i32.const 2) + ) + (call $std/array/isArraysEqual|trampoline + (get_global $std/array/revesed2) + (i32.const 232) + (i32.const 0) + ) + ) + ) + (block + (call $abort + (i32.const 0) + (i32.const 32) + (i32.const 432) + (i32.const 0) + ) + (unreachable) + ) + ) + (call $std/array/assertSortedDefault + (get_global $std/array/revesed4) + ) + (if + (i32.eqz + (block (result i32) + (set_global $argumentCount + (i32.const 2) + ) + (call $std/array/isArraysEqual|trampoline + (get_global $std/array/revesed4) + (get_global $std/array/expected4) + (i32.const 0) + ) + ) + ) + (block + (call $abort + (i32.const 0) + (i32.const 32) + (i32.const 435) + (i32.const 0) + ) + (unreachable) + ) + ) + (call $std/array/assertSortedDefault + (get_global $std/array/revesed64) + ) + (if + (i32.eqz + (call $std/array/isArraysEqual + (get_global $std/array/revesed64) + (get_global $std/array/expected4) + (i32.const 4) + ) + ) + (block + (call $abort + (i32.const 0) + (i32.const 32) + (i32.const 438) + (i32.const 0) + ) + (unreachable) + ) + ) + (call $std/array/assertSortedDefault + (get_global $std/array/revesed128) + ) + (if + (i32.eqz + (call $std/array/isArraysEqual + (get_global $std/array/revesed128) + (get_global $std/array/expected4) + (i32.const 4) + ) + ) + (block + (call $abort + (i32.const 0) + (i32.const 32) + (i32.const 441) + (i32.const 0) + ) + (unreachable) + ) + ) + (call $std/array/assertSortedDefault + (get_global $std/array/revesed1024) + ) + (if + (i32.eqz + (call $std/array/isArraysEqual + (get_global $std/array/revesed1024) + (get_global $std/array/expected4) + (i32.const 4) + ) + ) + (block + (call $abort + (i32.const 0) + (i32.const 32) + (i32.const 444) + (i32.const 0) + ) + (unreachable) + ) + ) + (call $std/array/assertSortedDefault + (get_global $std/array/revesed10000) + ) + (if + (i32.eqz + (call $std/array/isArraysEqual + (get_global $std/array/revesed10000) + (get_global $std/array/expected4) + (i32.const 4) + ) + ) + (block + (call $abort + (i32.const 0) + (i32.const 32) + (i32.const 447) + (i32.const 0) + ) + (unreachable) + ) + ) + (call $std/array/assertSortedDefault + (get_global $std/array/randomized512) + ) + (set_global $std/array/randomized64 + (call $std/array/createRandomOrderedArray + (i32.const 64) + ) + ) + (set_global $std/array/randomized257 + (call $std/array/createRandomOrderedArray + (i32.const 257) + ) + ) + (call $std/array/assertSorted + (get_global $std/array/randomized64) + (i32.const 24) + ) + (call $std/array/assertSorted + (get_global $std/array/randomized64) + (i32.const 25) + ) + (call $std/array/assertSorted + (get_global $std/array/randomized257) + (i32.const 26) + ) + (call $std/array/assertSorted + (get_global $std/array/randomized257) + (i32.const 27) + ) ) ) diff --git a/tests/compiler/std/static-array.optimized.wat b/tests/compiler/std/static-array.optimized.wat index 99986cba..89d43b3b 100644 --- a/tests/compiler/std/static-array.optimized.wat +++ b/tests/compiler/std/static-array.optimized.wat @@ -2024,7 +2024,7 @@ (call $abort (i32.const 0) (i32.const 160) - (i32.const 8) + (i32.const 9) (i32.const 4) ) (unreachable) @@ -2160,7 +2160,7 @@ (call $abort (i32.const 0) (i32.const 160) - (i32.const 8) + (i32.const 9) (i32.const 4) ) (unreachable) diff --git a/tests/compiler/std/static-array.untouched.wat b/tests/compiler/std/static-array.untouched.wat index bde91ca2..4efb7736 100644 --- a/tests/compiler/std/static-array.untouched.wat +++ b/tests/compiler/std/static-array.untouched.wat @@ -2322,7 +2322,7 @@ (call $abort (i32.const 0) (i32.const 160) - (i32.const 8) + (i32.const 9) (i32.const 4) ) (unreachable) @@ -2469,7 +2469,7 @@ (call $abort (i32.const 0) (i32.const 160) - (i32.const 8) + (i32.const 9) (i32.const 4) ) (unreachable) @@ -2616,7 +2616,7 @@ (call $abort (i32.const 0) (i32.const 160) - (i32.const 8) + (i32.const 9) (i32.const 4) ) (unreachable) @@ -2763,7 +2763,7 @@ (call $abort (i32.const 0) (i32.const 160) - (i32.const 8) + (i32.const 9) (i32.const 4) ) (unreachable)