Skip to content

Commit a884cc2

Browse files
MaxGraeydcodeIO
authored andcommitted
Fix 10 digits case in decimalCount64 (AssemblyScript#785)
1 parent a08c7cb commit a884cc2

File tree

8 files changed

+1225
-682
lines changed

8 files changed

+1225
-682
lines changed

std/assembly/util/number.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,8 @@ export function decimalCount32(value: u32): u32 {
129129
export function decimalCount64(value: u64): u32 {
130130
if (value < 1000000000000000) {
131131
if (value < 1000000000000) {
132-
return select<u32>(11, 12, value < 100000000000);
132+
let m = select<u32>(11, 12, value < 100000000000);
133+
return select<u32>(10, m, value < 10000000000);
133134
} else {
134135
let m = select<u32>(14, 15, value < 100000000000000);
135136
return select<u32>(13, m, value < 10000000000000);

tests/compiler/resolve-access.optimized.wat

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -387,12 +387,17 @@
387387
end
388388
)
389389
(func $~lib/util/number/decimalCount64 (; 7 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32)
390+
i32.const 10
390391
i32.const 11
391392
i32.const 12
392393
local.get $0
393394
i64.const 100000000000
394395
i64.lt_u
395396
select
397+
local.get $0
398+
i64.const 10000000000
399+
i64.lt_u
400+
select
396401
i32.const 13
397402
i32.const 14
398403
i32.const 15

tests/compiler/resolve-access.untouched.wat

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1668,6 +1668,13 @@
16681668
i64.const 100000000000
16691669
i64.lt_u
16701670
select
1671+
local.set $1
1672+
i32.const 10
1673+
local.get $1
1674+
local.get $0
1675+
i64.const 10000000000
1676+
i64.lt_u
1677+
select
16711678
return
16721679
else
16731680
i32.const 14

tests/compiler/std/array.optimized.wat

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9581,12 +9581,17 @@
95819581
local.get $1
95829582
)
95839583
(func $~lib/util/number/decimalCount64 (; 181 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32)
9584+
i32.const 10
95849585
i32.const 11
95859586
i32.const 12
95869587
local.get $0
95879588
i64.const 100000000000
95889589
i64.lt_u
95899590
select
9591+
local.get $0
9592+
i64.const 10000000000
9593+
i64.lt_u
9594+
select
95909595
i32.const 13
95919596
i32.const 14
95929597
i32.const 15

tests/compiler/std/array.untouched.wat

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15001,6 +15001,13 @@
1500115001
i64.const 100000000000
1500215002
i64.lt_u
1500315003
select
15004+
local.set $1
15005+
i32.const 10
15006+
local.get $1
15007+
local.get $0
15008+
i64.const 10000000000
15009+
i64.lt_u
15010+
select
1500415011
return
1500515012
else
1500615013
i32.const 14

tests/compiler/std/string.optimized.wat

Lines changed: 596 additions & 345 deletions
Large diffs are not rendered by default.

tests/compiler/std/string.ts

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -247,13 +247,16 @@ assert(str.slice(0, -1) == "abcdefghijklm");
247247
assert(itoa32(0) == "0");
248248
assert(itoa32(1) == "1");
249249
assert(itoa32(8) == "8");
250+
assert(itoa32(12) == "12");
250251
assert(itoa32(123) == "123");
251252
assert(itoa32(-1000) == "-1000");
252253
assert(itoa32(1234) == "1234");
253254
assert(itoa32(12345) == "12345");
254255
assert(itoa32(123456) == "123456");
255256
assert(itoa32(1111111) == "1111111");
256257
assert(itoa32(1234567) == "1234567");
258+
assert(itoa32(12345678) == "12345678");
259+
assert(itoa32(123456789) == "123456789");
257260
assert(itoa32(0x7ffffffe) == "2147483646");
258261
assert(itoa32(0x7fffffff) == "2147483647");
259262
assert(itoa32(0x80000000) == "-2147483648");
@@ -266,20 +269,31 @@ assert(utoa32(0x80000000) == "2147483648");
266269
assert(utoa32(u32.MAX_VALUE) == "4294967295");
267270

268271
assert(utoa64(0) == "0");
272+
assert(utoa64(12) == "12");
273+
assert(utoa64(123) == "123");
269274
assert(utoa64(1234) == "1234");
275+
assert(utoa64(12345) == "12345");
276+
assert(utoa64(123456) == "123456");
277+
assert(utoa64(1234567) == "1234567");
270278
assert(utoa64(99999999) == "99999999");
271279
assert(utoa64(100000000) == "100000000");
272280
assert(utoa64(0xffffffff) == "4294967295");
281+
assert(utoa64(4294967297) == "4294967297");
273282
assert(utoa64(0xfffffffff) == "68719476735");
274283
assert(utoa64(868719476735) == "868719476735");
284+
assert(utoa64(8687194767350) == "8687194767350");
285+
assert(utoa64(86871947673501) == "86871947673501");
275286
assert(utoa64(999868719476735) == "999868719476735");
276287
assert(utoa64(9999868719476735) == "9999868719476735");
277288
assert(utoa64(19999868719476735) == "19999868719476735");
278-
assert(utoa64(u64.MAX_VALUE) == "18446744073709551615");
289+
assert(utoa64(129999868719476735) == "129999868719476735");
290+
assert(utoa64(1239999868719476735) == "1239999868719476735");
291+
assert(utoa64(u64.MAX_VALUE) == "18446744073709551615");
279292

280293
assert(itoa64(0) == "0");
281294
assert(itoa64(-1234) == "-1234");
282295
assert(itoa64(0xffffffff) == "4294967295");
296+
assert(itoa64(4294967297) == "4294967297");
283297
assert(itoa64(-0xffffffff) == "-4294967295");
284298
assert(itoa64(68719476735) == "68719476735");
285299
assert(itoa64(-68719476735) == "-68719476735");

tests/compiler/std/string.untouched.wat

Lines changed: 588 additions & 335 deletions
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)