File tree Expand file tree Collapse file tree 4 files changed +37
-0
lines changed Expand file tree Collapse file tree 4 files changed +37
-0
lines changed Original file line number Diff line number Diff line change 187
187
* Long#** isPositive** (): ` boolean ` <br />
188
188
Tests if this Long's value is positive or zero.
189
189
190
+ * Long#** isSafeInteger** (): ` boolean ` <br />
191
+ Tests if this Long can be safely represented as a JavaScript number.
192
+
190
193
* Long#** isZero** /** eqz** (): ` boolean ` <br />
191
194
Tests if this Long's value equals zero.
192
195
Original file line number Diff line number Diff line change @@ -645,6 +645,22 @@ LongPrototype.getNumBitsAbs = function getNumBitsAbs() {
645
645
return this . high != 0 ? bit + 33 : bit + 1 ;
646
646
} ;
647
647
648
+ /**
649
+ * Tests if this Long can be safely represented as a JavaScript number.
650
+ * @this {!Long}
651
+ * @returns {boolean }
652
+ */
653
+ LongPrototype . isSafeInteger = function isSafeInteger ( ) {
654
+ // 2^53-1 is the maximum safe value
655
+ var top11Bits = this . high >> 21 ;
656
+ // [0, 2^53-1]
657
+ if ( ! top11Bits ) return true ;
658
+ // > 2^53-1
659
+ if ( this . unsigned ) return false ;
660
+ // [-2^53, -1] except -2^53
661
+ return top11Bits === - 1 && ! ( this . low === 0 && this . high === - 0x200000 ) ;
662
+ } ;
663
+
648
664
/**
649
665
* Tests if this Long's value equals zero.
650
666
* @this {!Long}
Original file line number Diff line number Diff line change @@ -232,6 +232,19 @@ var tests = [ // BEGIN TEST CASES
232
232
var signedFromUnsigned = Long . fromBigInt ( values [ i ] . unsigned ) ;
233
233
assert . strictEqual ( signedFromUnsigned . toBigInt ( ) , values [ i ] . signed ) ;
234
234
}
235
+ } ,
236
+
237
+ function testSafeInteger ( ) {
238
+ assert ( Long . fromNumber ( 0 ) . isSafeInteger ( ) ) ;
239
+ assert ( Long . fromNumber ( 1 ) . isSafeInteger ( ) ) ;
240
+ assert ( Long . fromNumber ( - 1 ) . isSafeInteger ( ) ) ;
241
+ assert ( ! Long . fromNumber ( - 1 ) . toUnsigned ( ) . isSafeInteger ( ) ) ;
242
+ assert ( Long . fromNumber ( Math . pow ( 2 , 32 ) ) . isSafeInteger ( ) ) ;
243
+ assert ( Long . fromNumber ( - Math . pow ( 2 , 32 ) ) . isSafeInteger ( ) ) ;
244
+ assert ( Long . fromNumber ( Math . pow ( 2 , 53 ) - 1 ) . isSafeInteger ( ) ) ;
245
+ assert ( Long . fromNumber ( - Math . pow ( 2 , 53 ) + 1 ) . isSafeInteger ( ) ) ;
246
+ assert ( ! Long . fromNumber ( Math . pow ( 2 , 53 ) ) . isSafeInteger ( ) ) ;
247
+ assert ( ! Long . fromNumber ( - Math . pow ( 2 , 53 ) ) . isSafeInteger ( ) ) ;
235
248
}
236
249
237
250
] ; // END TEST CASES
Original file line number Diff line number Diff line change @@ -225,6 +225,11 @@ export declare class Long {
225
225
*/
226
226
isPositive ( ) : boolean ;
227
227
228
+ /**
229
+ * Tests if this Long can be safely represented as a JavaScript number.
230
+ */
231
+ isSafeInteger ( ) : boolean ;
232
+
228
233
/**
229
234
* Tests if this Long's value equals zero.
230
235
*/
You can’t perform that action at this time.
0 commit comments