summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorJuan Carlos <juancarlospaco@gmail.com>2021-01-29 22:48:47 -0300
committerGitHub <noreply@github.com>2021-01-29 17:48:47 -0800
commitb8e8eaae66c3298d25a324e939ca6c1fd69a9652 (patch)
tree84ead4aa3170004cf9448a2ac979282378354235
parent2c70734913c935d3f2f4df332f72bd9aa714661c (diff)
downloadNim-b8e8eaae66c3298d25a324e939ca6c1fd69a9652.tar.gz
BigInt runnableExamples: octal, binary, hex constructor (#16868)
Co-authored-by: Timothee Cour <timothee.cour2@gmail.com>
-rw-r--r--lib/std/jsbigints.nim30
1 files changed, 19 insertions, 11 deletions
diff --git a/lib/std/jsbigints.nim b/lib/std/jsbigints.nim
index b62528abd..ba080f974 100644
--- a/lib/std/jsbigints.nim
+++ b/lib/std/jsbigints.nim
@@ -10,11 +10,18 @@ func big*(integer: SomeInteger): JsBigInt {.importjs: "BigInt(#)".} =
   ## Constructor for `JsBigInt`.
   runnableExamples:
     doAssert big(1234567890) == big"1234567890"
+    doAssert 0b1111100111.big == 0o1747.big and 0o1747.big == 999.big
 
 func big*(integer: cstring): JsBigInt {.importjs: "BigInt(#)".} =
   ## Constructor for `JsBigInt`.
   runnableExamples:
     doAssert big"-1" == big"1" - big"2"
+    # supports decimal, binary, octal, hex:
+    doAssert big"12" == 12.big
+    doAssert big"0b101" == 0b101.big
+    doAssert big"0o701" == 0o701.big
+    doAssert big"0xdeadbeaf" == 0xdeadbeaf.big
+    doAssert big"0xffffffffffffffff" == (1.big shl 64.big) - 1.big
 
 func toCstring*(this: JsBigInt; radix: 2..36): cstring {.importjs: "#.toString(#)".} =
   ## Converts from `JsBigInt` to `cstring` representation.
@@ -190,17 +197,18 @@ proc high*(_: typedesc[JsBigInt]): JsBigInt {.error:
 
 
 runnableExamples:
-  let big1: JsBigInt = big"2147483647"
-  let big2: JsBigInt = big"666"
-  doAssert JsBigInt isnot int
-  doAssert big1 != big2
-  doAssert big1 > big2
-  doAssert big1 >= big2
-  doAssert big2 < big1
-  doAssert big2 <= big1
-  doAssert not(big1 == big2)
-  let z = JsBigInt.default
-  doAssert $z == "0n"
+  block:
+    let big1: JsBigInt = big"2147483647"
+    let big2: JsBigInt = big"666"
+    doAssert JsBigInt isnot int
+    doAssert big1 != big2
+    doAssert big1 > big2
+    doAssert big1 >= big2
+    doAssert big2 < big1
+    doAssert big2 <= big1
+    doAssert not(big1 == big2)
+    let z = JsBigInt.default
+    doAssert $z == "0n"
   block:
     var a: seq[JsBigInt]
     a.setLen 2