{
  "SymbolNode": {
    "type": "SymbolNode",
    "formula": "a",
    "expected": "<ci>a</ci>"
  },
  "ConstantNode 1": {
    "type": "ConstantNode",
    "formula": "1",
    "expected": "<cn>1</cn>"
  },
  "ConstantNode 2": {
    "type": "ConstantNode",
    "formula": "1.2e-9",
    "expected": "<cn type=\"e-notation\">1.2<sep/>-9</cn>"
  },
  "FunctionNode 0": {
    "type": "FunctionNode",
    "formula": "f()",
    "expected": "<apply><f/></apply>"
  },
  "FunctionNode 1": {
    "type": "FunctionNode",
    "formula": "g(x)",
    "expected": "<apply><g/><ci>x</ci></apply>"
  },
  "FunctionNode 2": {
    "type": "FunctionNode",
    "formula": "h(x, y, 1)",
    "expected": "<apply><h/><ci>x</ci><ci>y</ci><cn>1</cn></apply>"
  },
  "OperatorNode": {
    "type": "OperatorNode",
    "formula": "x+1",
    "expected": "<apply><plus/><ci>x</ci><cn>1</cn></apply>"
  },
  "ParenthesisNode": {
    "type": "ParenthesisNode",
    "formula": "x*(y*z)",
    "expected": "<apply><times/><ci>x</ci><apply><times/><ci>y</ci><ci>z</ci></apply></apply>"
  },
  "FunctionAssignmentNode": {
    "type": "FunctionAssignmentNode",
    "formula": "f(x) = x",
    "expected": "<lambda><bvar><ci>x</ci></bvar><ci>x</ci></lambda>"
  },
  "ConditionalNode": {
    "type": "ConditionalNode",
    "formula": "a > 0 ? a : -a",
    "expected": "<piecewise><piece><ci>a</ci><apply><gt/><ci>a</ci><cn>0</cn></apply></piece><otherwise><apply><minus/><ci>a</ci></apply></otherwise></piecewise>"
  },
  "AssignmentNode(simple)": {
    "type": "AssignmentNode",
    "formula": "x = 5",
    "expected": "<apply><eq/><ci>x</ci><cn>5</cn></apply>"
  },
  "AssignmentNode": {
    "type": "AssignmentNode",
    "formula": "x = a + 1",
    "expected": "<apply><eq/><ci>x</ci><apply><plus/><ci>a</ci><cn>1</cn></apply></apply>"
  },
  "ArrayNode": {
    "type": "ArrayNode",
    "formula": "[1, 2, 3]",
    "expected": "<list><cn>1</cn><cn>2</cn><cn>3</cn></list>"
  },
  "BlockNode": {
    "type": "BlockNode",
    "formula": "a=1; b=2; c=3",
    "expected": "<list><apply><eq/><ci>a</ci><cn>1</cn></apply><apply><eq/><ci>b</ci><cn>2</cn></apply><apply><eq/><ci>c</ci><cn>3</cn></apply></list>"
  },
  "Complex expression": {
    "type": "Node",
    "formula": "x*y/z+a*exp(t)*log(15)",
    "expected": "<apply><plus/><apply><divide/><apply><times/><ci>x</ci><ci>y</ci></apply><ci>z</ci></apply><apply><times/><apply><times/><ci>a</ci><apply><exp/><ci>t</ci></apply></apply><apply><ln/><cn>15</cn></apply></apply></apply>"
  },
  "cube function": {
    "type": "FunctionNode",
    "formula": "cube(x)",
    "expected": "<apply><power/><ci>x</ci><cn>3</cn></apply>"
  },
  "square function": {
    "type": "FunctionNode",
    "formula": "square(x)",
    "expected": "<apply><power/><ci>x</ci><cn>2</cn></apply>"
  },
  "log with base": {
    "type": "FunctionNode",
    "formula": "log(x, base)",
    "expected": "<apply><log/><logbase><ci>base</ci></logbase><ci>x</ci></apply>"
  },
  "log10 to log": {
    "type": "FunctionNode",
    "formula": "log10(x)",
    "expected": "<apply><log/><ci>x</ci></apply>"
  },
  "log to ln": {
    "type": "FunctionNode",
    "formula": "log(x)",
    "expected": "<apply><ln/><ci>x</ci></apply>"
  },
  "log2": {
    "type": "FunctionNode",
    "formula": "log2(x)",
    "expected": "<apply><log/><logbase><cn>2</cn></logbase><ci>x</ci></apply>"
  },
  "csymbol test": {
    "formula": "t/24",
    "csymbols": { "t": "hello!" },
    "expected": "<apply><divide/><csymbol definitionURL=\"hello!\">t</csymbol><cn>24</cn></apply>"
  },
  "single true": {
    "formula": "true",
    "expected": "<true/>"
  },
  "single false": {
    "formula": "false",
    "expected": "<false/>"
  },
  "true or false": {
    "formula": "true or false",
    "expected": "<apply><or/><true/><false/></apply>"
  },
  "true and false": {
    "formula": "true and false",
    "expected": "<apply><and/><true/><false/></apply>"
  },
  "true xor false": {
    "formula": "true xor false",
    "expected": "<apply><xor/><true/><false/></apply>"
  },
  "not false": {
    "formula": "not false",
    "expected": "<apply><not/><false/></apply>"
  },
  "piecewise": {
    "formula": "123 * piecewise(1, x > 1, 2, x > 2, 0)",
    "expected": "<apply><times/><cn>123</cn><piecewise><piece><cn>1</cn><apply><gt/><ci>x</ci><cn>1</cn></apply></piece><piece><cn>2</cn><apply><gt/><ci>x</ci><cn>2</cn></apply></piece><otherwise><cn>0</cn></otherwise></piecewise></apply>"
  },
  "piecewise without otherwise": {
    "formula": "123 * piecewise(1, x > 1, 2, x > 2)",
    "expected": "<apply><times/><cn>123</cn><piecewise><piece><cn>1</cn><apply><gt/><ci>x</ci><cn>1</cn></apply></piece><piece><cn>2</cn><apply><gt/><ci>x</ci><cn>2</cn></apply></piece></piecewise></apply>"
  },
  "Infinity and e": {
    "formula": "Infinity * e * NaN * pi",
    "expected": "<apply><times/><apply><times/><apply><times/><infinity/><exponentiale/></apply><notanumber/></apply><pi/></apply>"
  }
}
