mirror of
https://github.com/fluencelabs/assemblyscript
synced 2025-06-21 18:51:43 +00:00
Add Array#join and Array#toString + dtoa (#275)
This commit is contained in:
@ -637,7 +637,7 @@
|
||||
(call $~lib/env/abort
|
||||
(i32.const 0)
|
||||
(i32.const 136)
|
||||
(i32.const 23)
|
||||
(i32.const 37)
|
||||
(i32.const 39)
|
||||
)
|
||||
(unreachable)
|
||||
@ -737,7 +737,7 @@
|
||||
(call $~lib/env/abort
|
||||
(i32.const 0)
|
||||
(i32.const 136)
|
||||
(i32.const 23)
|
||||
(i32.const 37)
|
||||
(i32.const 39)
|
||||
)
|
||||
(unreachable)
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -730,3 +730,39 @@ assert(isArraysEqual<string>(randomStringsActual, randomStringsExpected));
|
||||
|
||||
var randomStrings400 = createRandomStringArray(400);
|
||||
assertSorted<string>(randomStrings400, (a: string, b: string): i32 => <i32>(a > b) - <i32>(a < b));
|
||||
|
||||
// Array#join //////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class Ref { constructor() {} }
|
||||
|
||||
assert((<bool[]>[true, false]).join() == "true,false");
|
||||
assert((<i32[]>[1,-2,-3]).join("") == "1-2-3");
|
||||
assert((<u32[]>[1, 2, 3]).join("-") == "1-2-3");
|
||||
assert((<i32[]>[i32.MIN_VALUE, i32.MIN_VALUE]).join("__") == "-2147483648__-2147483648");
|
||||
assert((<f64[]>[0.0, 1.0, -2.0, NaN, -Infinity, Infinity]).join(", ") == "0.0, 1.0, -2.0, NaN, -Infinity, Infinity");
|
||||
assert((<string[]>["", "1", null]).join("") == "1");
|
||||
var refArr: Ref[] = [new Ref(), null, new Ref()];
|
||||
assert(refArr.join() == "[object Object],,[object Object]");
|
||||
|
||||
// Array#toString //////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
assert(reversed0.toString() == "");
|
||||
assert(reversed1.toString() == "1");
|
||||
assert(reversed2.toString() == "1,2");
|
||||
assert(reversed4.toString() == "0,1,2,3");
|
||||
|
||||
assert((<i8[]>[1, -1, 0]).toString() == "1,-1,0");
|
||||
assert((<u16[]>[1, 0xFFFF, 0]).toString() == "1,65535,0");
|
||||
assert((<u64[]>[1, 0xFFFFFFFFFFFFFFFF, 0]).toString() == "1,18446744073709551615,0");
|
||||
assert((<i64[]>[-1, -1234567890123456, 0, i64.MAX_VALUE]).toString() == "-1,-1234567890123456,0,9223372036854775807");
|
||||
assert(randomStringsExpected.toString() == ",a,a,ab,b,ba,");
|
||||
assert((<string[]>["1", "2", null, "4"]).toString() == "1,2,,4");
|
||||
|
||||
var subarr32: i32[][] = [[1,2], [3,4]];
|
||||
assert(subarr32.toString() == "1,2,3,4");
|
||||
|
||||
var subarr8: u8[][] = [[1,2], [3,4]];
|
||||
assert(subarr8.toString() == "1,2,3,4");
|
||||
|
||||
var subarrU32: u32[][][] = [[[1]]];
|
||||
assert(subarrU32.toString() == "1");
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -2774,7 +2774,7 @@
|
||||
(call $~lib/env/abort
|
||||
(i32.const 0)
|
||||
(i32.const 72)
|
||||
(i32.const 87)
|
||||
(i32.const 101)
|
||||
(i32.const 41)
|
||||
)
|
||||
(unreachable)
|
||||
|
@ -3478,7 +3478,7 @@
|
||||
(call $~lib/env/abort
|
||||
(i32.const 0)
|
||||
(i32.const 72)
|
||||
(i32.const 87)
|
||||
(i32.const 101)
|
||||
(i32.const 41)
|
||||
)
|
||||
(unreachable)
|
||||
|
@ -2905,7 +2905,7 @@
|
||||
(call $~lib/env/abort
|
||||
(i32.const 0)
|
||||
(i32.const 184)
|
||||
(i32.const 87)
|
||||
(i32.const 101)
|
||||
(i32.const 41)
|
||||
)
|
||||
(unreachable)
|
||||
@ -3011,7 +3011,7 @@
|
||||
(call $~lib/env/abort
|
||||
(i32.const 0)
|
||||
(i32.const 184)
|
||||
(i32.const 87)
|
||||
(i32.const 101)
|
||||
(i32.const 41)
|
||||
)
|
||||
(unreachable)
|
||||
@ -3117,7 +3117,7 @@
|
||||
(call $~lib/env/abort
|
||||
(i32.const 0)
|
||||
(i32.const 184)
|
||||
(i32.const 87)
|
||||
(i32.const 101)
|
||||
(i32.const 41)
|
||||
)
|
||||
(unreachable)
|
||||
@ -3223,7 +3223,7 @@
|
||||
(call $~lib/env/abort
|
||||
(i32.const 0)
|
||||
(i32.const 184)
|
||||
(i32.const 87)
|
||||
(i32.const 101)
|
||||
(i32.const 41)
|
||||
)
|
||||
(unreachable)
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,6 +1,12 @@
|
||||
import "allocator/arena";
|
||||
|
||||
import { utoa32, itoa32, utoa64, itoa64 } from "internal/itoa";
|
||||
import {
|
||||
utoa32,
|
||||
itoa32,
|
||||
utoa64,
|
||||
itoa64,
|
||||
itoa,
|
||||
dtoa
|
||||
} from "internal/number";
|
||||
|
||||
// preliminary
|
||||
|
||||
@ -169,3 +175,70 @@ assert(itoa64(-999868719476735) == "-999868719476735");
|
||||
assert(itoa64(-19999868719476735) == "-19999868719476735");
|
||||
assert(itoa64(i64.MAX_VALUE) == "9223372036854775807");
|
||||
assert(itoa64(i64.MIN_VALUE) == "-9223372036854775808");
|
||||
|
||||
// special cases
|
||||
assert(dtoa(0.0) == "0.0");
|
||||
assert(dtoa(-0.0) == "0.0");
|
||||
assert(dtoa(NaN) == "NaN");
|
||||
assert(dtoa(+Infinity) == "Infinity");
|
||||
assert(dtoa(-Infinity) == "-Infinity");
|
||||
assert(dtoa(+f64.EPSILON) == "2.220446049250313e-16");
|
||||
assert(dtoa(-f64.EPSILON) == "-2.220446049250313e-16");
|
||||
assert(dtoa(+f64.MAX_VALUE) == "1.7976931348623157e+308");
|
||||
assert(dtoa(-f64.MAX_VALUE) == "-1.7976931348623157e+308");
|
||||
assert(dtoa(4.185580496821357e+298) == "4.185580496821357e+298");
|
||||
assert(dtoa(2.2250738585072014e-308) == "2.2250738585072014e-308");
|
||||
assert(dtoa(2.98023223876953125e-8) == "2.9802322387695312e-8");
|
||||
assert(dtoa(-2.109808898695963e+16) == "-21098088986959630.0");
|
||||
assert(dtoa(4.940656E-318) == "4.940656e-318");
|
||||
assert(dtoa(9.0608011534336e+15) == "9060801153433600.0");
|
||||
assert(dtoa(4.708356024711512e+18) == "4708356024711512000.0");
|
||||
assert(dtoa(9.409340012568248e+18) == "9409340012568248000.0");
|
||||
assert(dtoa(5e-324) == "5e-324");
|
||||
// Known imprecise issue for Grisu alghoritm. Need workaround
|
||||
// Expeced: 1.2345e+21
|
||||
// Actual: 1.2344999999999999e+21
|
||||
// assert(dtoa(1.2345e+21) == "1.2345e+21");
|
||||
|
||||
assert(dtoa(1.0) == "1.0");
|
||||
assert(dtoa(0.1) == "0.1");
|
||||
assert(dtoa(-1.0) == "-1.0");
|
||||
assert(dtoa(-0.1) == "-0.1");
|
||||
|
||||
assert(dtoa(1e+6) == "1000000.0");
|
||||
assert(dtoa(1e-6) == "0.000001");
|
||||
assert(dtoa(-1e+6) == "-1000000.0");
|
||||
assert(dtoa(-1e-6) == "-0.000001");
|
||||
assert(dtoa(1e+7) == "10000000.0");
|
||||
assert(dtoa(1e-7) == "1e-7");
|
||||
|
||||
assert(dtoa(1e+308) == "1e+308");
|
||||
assert(dtoa(-1e+308) == "-1e+308");
|
||||
assert(dtoa(1e+309) == "Infinity");
|
||||
assert(dtoa(-1e+309) == "-Infinity");
|
||||
assert(dtoa(1e-308) == "1e-308");
|
||||
assert(dtoa(-1e-308) == "-1e-308");
|
||||
assert(dtoa(1e-323) == "1e-323");
|
||||
assert(dtoa(-1e-323) == "-1e-323");
|
||||
assert(dtoa(1e-324) == "0.0");
|
||||
|
||||
assert(dtoa(4294967272) == "4294967272.0");
|
||||
assert(dtoa(1.23121456734562345678e-8) == "1.2312145673456234e-8");
|
||||
assert(dtoa(-0.0000010471975511965976) == "-0.0000010471975511965976");
|
||||
assert(dtoa(555555555.55555555) == "555555555.5555556");
|
||||
assert(dtoa(0.9999999999999999) == "0.9999999999999999");
|
||||
assert(dtoa(0.99999999999999995) == "1.0");
|
||||
assert(dtoa(1234e-2) == "12.34");
|
||||
assert(dtoa(0.1 + 0.2) == "0.30000000000000004");
|
||||
assert(dtoa(1.0 / 3.0) == "0.3333333333333333");
|
||||
assert(dtoa(1.234e+20) == "123400000000000000000.0");
|
||||
assert(dtoa(1.234e+21) == "1.234e+21");
|
||||
assert(dtoa(2.71828) == "2.71828");
|
||||
assert(dtoa(2.71828e-2) == "0.0271828");
|
||||
assert(dtoa(2.71828e+2) == "271.828");
|
||||
assert(dtoa(1.1e+128) == "1.1e+128");
|
||||
assert(dtoa(1.1e-64) == "1.1e-64");
|
||||
assert(dtoa(0.000035689) == "0.000035689");
|
||||
|
||||
assert(dtoa(f32.MAX_VALUE) == "3.4028234663852886e+38");
|
||||
assert(dtoa(f32.EPSILON) == "1.1920928955078125e-7");
|
||||
|
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user