bigint.lisp 1.4 KB

1234567891011121314151617181920212223242526272829
  1. (import test ())
  2. (import math/bigint bigint)
  3. (describe "A big number"
  4. (it "can be created with different bases"
  5. (affirm (= (bigint/new 17) (bigint/new "17"))
  6. (= (bigint/new 17) (bigint/new "0x11"))
  7. (= (bigint/new 17) (bigint/new "0o21"))
  8. (= (bigint/new 17) (bigint/new "0b10001"))))
  9. (it "can be negated"
  10. (affirm (= (bigint/negate (bigint/new 1)) (bigint/new -1))))
  11. (it "can be added and subtracted"
  12. (affirm (= (+ (bigint/new 2) (bigint/new 3)) (bigint/new 5))))
  13. (it "can be subtracted"
  14. (affirm (= (- (bigint/new 9) (bigint/new 4)) (bigint/new 5))))
  15. (it "can be multiplied"
  16. (affirm (= (* (bigint/new 7) (bigint/new 5)) (bigint/new 35))))
  17. (it "can be divided"
  18. (affirm (= (/ (bigint/new 42) (bigint/new 4)) (bigint/new 10))))
  19. (it "can have a remainder of a division"
  20. (affirm (= (mod (bigint/new 42) (bigint/new 4)) (bigint/new 2))))
  21. (it "can be expontentiated"
  22. (affirm (= (expt (bigint/new 10) (bigint/new 10)) (* (bigint/new 100000) (bigint/new 100000)))))
  23. (it "can be converted to a string in different bases"
  24. (affirm (= (bigint/tostring (bigint/new "123456789")) "123456789")
  25. (= (bigint/tostring (bigint/new "0x123456789AB") "X") "123456789AB")
  26. (= (bigint/tostring (bigint/new "0o123456777") "o") "123456777")
  27. (= (bigint/tostring (bigint/new "0b111000111000111000") "b") "111000111000111000"))))