JSFiddle - React, Tailwind, and code Playground

by magneto903

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjs/8.1.0/math.js" integrity="sha512-ne87j5uORxbrU7+bsqeJJWfWj5in65R9PCjaQL161xtH5cesZgULVbeVAkzAAN7hnYOcrHeBas9Wbd/Lm8gXFA==" crossorigin="anonymous"></script>

JavaScript

var parser = math.parser()

//console.log(math.parse("2+2").toString())
var compiled_func = math.compile("sin(cos(x^2))").evaluate
var js_func = function(x) {
	return Math.sin(Math.cos(Math.pow(x, 2)))
}

var s_time = performance.now()
var test_val = 0;
for (var i=0; i < 1000000; i++) {
	test_val = js_func(Math.random())
}
document.write("Native js func: " + (performance.now()-s_time).toFixed(2)+'ms <br>')

var s_time = performance.now()
var test_val = 0;
for (var i=0; i < 1000000; i++) {
	test_val = compiled_func({"x":Math.random()})
}
document.write("Compiled to js func: " + (performance.now()-s_time).toFixed(2)+'ms <br>')

var defined_func = math.evaluate("f(x) = sin(cos(x^2))")
var s_time = performance.now()
var test_val = 0;
for (var i=0; i < 1000000; i++) {
	test_val = defined_func(Math.random())
}
document.write("Defined to js func: " + (performance.now()-s_time).toFixed(2)+'ms')

parser.evaluate("f1(x)=2*x")
parser.evaluate("f2(x)=x^2")

parser.evaluate("f3(x)=f1(f2(x))")

//console.log(parser.get('f3'))

math.import({
	"f3": parser.get('f3')
})

var node = math.parse('f3(2)')
node.traverse(function (node, path, parent) {
  switch (node.type) {
    case 'OperatorNode':
      console.log(node.type, node.op)
      break
    case 'ConstantNode':
      console.log(node.type, node.value)
      break
    case 'SymbolNode':
      console.log(node.type, node.name)
      break
    default:
      console.log(node.type)
  }
})
// outputs:
//   OperatorNode +
//   OperatorNode *
//   ConstantNode 3
//   SymbolNode x
//   ConstantNode 2