simple-squiggle

A restricted subset of Squiggle
Log | Files | Refs | README

use_bigint.js (1341B)


      1 // This example demonstrates how you could integrate support for BigInt
      2 // in mathjs. It's just a proof of concept, for full support you will
      3 // have to defined more functions and define conversions from and to
      4 // other data types.
      5 
      6 const { create, all, factory } = require('../..')
      7 const math = create(all)
      8 
      9 // we can also add conversions here from number or string to BigInt
     10 // and vice versa using math.typed.addConversion(...)
     11 
     12 math.import([
     13   factory('BigInt', ['typed'], function createBigInt ({ typed }) {
     14     typed.addType({
     15       name: 'BigInt',
     16       test: (x) => typeof x === 'bigint' // eslint-disable-line
     17     })
     18 
     19     return BigInt // eslint-disable-line
     20   }, { lazy: false }),
     21 
     22   factory('bigint', ['typed', 'BigInt'], function createBigint ({ typed, BigInt }) {
     23     return typed('bigint', {
     24       'number | string ': (x) => BigInt(x) // eslint-disable-line
     25     })
     26   }),
     27 
     28   factory('add', ['typed'], function createBigIntAdd ({ typed }) {
     29     return typed('add', {
     30       'BigInt, BigInt': (a, b) => a + b
     31     })
     32   }),
     33 
     34   factory('pow', ['typed'], function createBigIntPow ({ typed }) {
     35     return typed('pow', {
     36       'BigInt, BigInt': (a, b) => a ** b
     37     })
     38   })
     39 ])
     40 
     41 console.log(math.evaluate('4349 + 5249'))
     42 console.log(math.evaluate('bigint(4349) + bigint(5249)'))
     43 console.log(math.evaluate('bigint(4349) ^ bigint(5249)'))