formatRange-BigInt.js (4265B)
1 // |reftest| skip-if(!this.hasOwnProperty("Intl")) 2 3 // Int64-BigInts which can be exactly represented as doubles receive a fast-path. 4 5 const tests = { 6 "en": { 7 options: {}, 8 ranges: [ 9 // BigInt around Number.MIN_SAFE_INTEGER. 10 { 11 start: -0x20000000000001n, 12 end: -0x20000000000000n, 13 result: "-9,007,199,254,740,993 – -9,007,199,254,740,992", 14 }, 15 { 16 start: -0x20000000000000n, 17 end: -0x20000000000000n, 18 result: "~-9,007,199,254,740,992", 19 }, 20 { 21 start: -0x20000000000000n, 22 end: -0x1fffffffffffffn, 23 result: "-9,007,199,254,740,992 – -9,007,199,254,740,991", 24 }, 25 { 26 start: -0x1fffffffffffffn, 27 end: -0x1fffffffffffffn, 28 result: "~-9,007,199,254,740,991", 29 }, 30 { 31 start: -0x1fffffffffffffn, 32 end: -0x1ffffffffffffen, 33 result: "-9,007,199,254,740,991 – -9,007,199,254,740,990", 34 }, 35 { 36 start: -0x1ffffffffffffen, 37 end: -0x1ffffffffffffen, 38 result: "~-9,007,199,254,740,990", 39 }, 40 41 // BigInt around Number.MAX_SAFE_INTEGER. 42 { 43 start: 0x1ffffffffffffen, 44 end: 0x1ffffffffffffen, 45 result: "~9,007,199,254,740,990", 46 }, 47 { 48 start: 0x1ffffffffffffen, 49 end: 0x1fffffffffffffn, 50 result: "9,007,199,254,740,990–9,007,199,254,740,991", 51 }, 52 { 53 start: 0x1fffffffffffffn, 54 end: 0x1fffffffffffffn, 55 result: "~9,007,199,254,740,991", 56 }, 57 { 58 start: 0x1fffffffffffffn, 59 end: 0x20000000000000n, 60 result: "9,007,199,254,740,991–9,007,199,254,740,992", 61 }, 62 { 63 start: 0x20000000000000n, 64 end: 0x20000000000000n, 65 result: "~9,007,199,254,740,992", 66 }, 67 { 68 start: 0x20000000000000n, 69 end: 0x20000000000001n, 70 result: "9,007,199,254,740,992–9,007,199,254,740,993", 71 }, 72 73 // BigInt around INT64_MIN. 74 { 75 start: -0x8000000000000002n, 76 end: -0x8000000000000001n, 77 result: "-9,223,372,036,854,775,810 – -9,223,372,036,854,775,809", 78 }, 79 { 80 start: -0x8000000000000001n, 81 end: -0x8000000000000001n, 82 result: "~-9,223,372,036,854,775,809", 83 }, 84 { 85 start: -0x8000000000000001n, 86 end: -0x8000000000000000n, 87 result: "-9,223,372,036,854,775,809 – -9,223,372,036,854,775,808", 88 }, 89 { 90 start: -0x8000000000000000n, 91 end: -0x8000000000000000n, 92 result: "~-9,223,372,036,854,775,808", 93 }, 94 { 95 start: -0x8000000000000000n, 96 end: -0x7fffffffffffffffn, 97 result: "-9,223,372,036,854,775,808 – -9,223,372,036,854,775,807", 98 }, 99 { 100 start: -0x7fffffffffffffffn, 101 end: -0x7fffffffffffffffn, 102 result: "~-9,223,372,036,854,775,807", 103 }, 104 105 // BigInt around INT64_MAX. 106 { 107 start: 0x7ffffffffffffffen, 108 end: 0x7ffffffffffffffen, 109 result: "~9,223,372,036,854,775,806", 110 }, 111 { 112 start: 0x7ffffffffffffffen, 113 end: 0x7fffffffffffffffn, 114 result: "9,223,372,036,854,775,806–9,223,372,036,854,775,807", 115 }, 116 { 117 start: 0x7fffffffffffffffn, 118 end: 0x7fffffffffffffffn, 119 result: "~9,223,372,036,854,775,807", 120 }, 121 { 122 start: 0x7fffffffffffffffn, 123 end: 0x8000000000000000n, 124 result: "9,223,372,036,854,775,807–9,223,372,036,854,775,808", 125 }, 126 { 127 start: 0x8000000000000000n, 128 end: 0x8000000000000000n, 129 result: "~9,223,372,036,854,775,808", 130 }, 131 { 132 start: 0x8000000000000000n, 133 end: 0x8000000000000001n, 134 result: "9,223,372,036,854,775,808–9,223,372,036,854,775,809", 135 }, 136 ], 137 }, 138 }; 139 140 for (let [locale, {options, ranges}] of Object.entries(tests)) { 141 let nf = new Intl.NumberFormat(locale, options); 142 for (let {start, end, result} of ranges) { 143 assertEq(nf.formatRange(start, end), result, `${start}-${end}`); 144 assertEq(nf.formatRangeToParts(start, end).reduce((acc, part) => acc + part.value, ""), 145 result, `${start}-${end}`); 146 } 147 } 148 149 if (typeof reportCompare === "function") 150 reportCompare(true, true);