ref: ab947447ae997b056ad53200d0dc87acad13cc5b
dir: /test/bigint.myr/
use std const main = { var a, b, c, d, e var buf : byte[4096], n a = std.mkbigint(1234) b = std.mkbigint(0x7fffffff) c = std.mkbigint(7919) d = std.mkbigint(113051) e = std.mkbigint(11) std.bigmul(a, b) std.bigmul(a, b) std.bigadd(a, c) std.bigsub(a, d) std.bigdiv(a, e) std.bigfree(b) std.bigfree(c) std.bigfree(d) std.bigfree(e) n = std.bigbfmt(buf[:], a, 0) std.put("%s\n", buf[:n]) /* smoke test */ match std.bigparse("1234_5678_1234_6789_6666_7777_8888") | `std.Some val: a = val | `std.None: std.die("Failed to parse a\n") ;; match std.bigparse("1234_5678_1234_6789_6666_7777") | `std.Some val: b = val | `std.None: std.die("Failed to parse b\n") ;; n = std.bigbfmt(buf[:], a, 0) std.put("%s / ", buf[:n]) n = std.bigbfmt(buf[:], b, 0) std.put("%s == ", buf[:n]) std.bigdiv(a, b) n = std.bigbfmt(buf[:], a, 0) std.put("%s\n", buf[:n]) /* test big shifts */ a = std.mkbigint(1) var shift = 4095 n = std.bigbfmt(buf[:], a, 0) std.put("%s << %i == 0x", buf[:n], shift) std.bigshli(a, shift) n = std.bigbfmt(buf[:], a, 10) std.put("%s\n", buf[:n]) std.put("top bits: %xi\n", a.dig[a.dig.len - 1]) /* no shifting */ match std.bigparse("0xffff_1234_1234_1234_1234") | `std.Some val: a = val | `std.None: std.die("Failed to parse a\n") ;; match std.bigparse("0xf010_1234_2314") | `std.Some val: b = val | `std.None: std.die("Failed to parse b\n") ;; n = std.bigbfmt(buf[:], a, 0) std.put("%s / ", buf[:n]) n = std.bigbfmt(buf[:], b, 0) std.put("%s == ", buf[:n]) std.bigdiv(a, b) n = std.bigbfmt(buf[:], a, 0) std.put("%s\n", buf[:n]) /* no shifting */ match std.bigparse("0xffff_1234_1234_1234_1234") | `std.Some val: a = val | `std.None: std.die("Failed to parse a\n") ;; match std.bigparse("0x0ff_1234_2314") | `std.Some val: b = val | `std.None: std.die("Failed to parse b\n") ;; n = std.bigbfmt(buf[:], a, 0) std.put("%s / ", buf[:n]) n = std.bigbfmt(buf[:], b, 0) std.put("%s == ", buf[:n]) std.bigdiv(a, b) n = std.bigbfmt(buf[:], a, 0) std.put("%s\n", buf[:n]) }