// objects

// load math.js (using node.js)
const { evaluate, format } = require('..')

// create an object. Keys can be symbols or strings
print(evaluate('{x: 2 + 1, y: 4}')) // {"x": 3, "y": 4}
print(evaluate('{"name": "John"}')) // {"name": "John"}

// create an object containing an object
print(evaluate('{a: 2, b: {c: 3, d: 4}}')) // {"a": 2, "b": {"c": 3, "d": 4}}

const scope = {
  obj: {
    prop: 42
  }
}

// retrieve properties using dot notation or bracket notation
print(evaluate('obj.prop', scope)) // 42
print(evaluate('obj["prop"]', scope)) // 42

// set properties (returns the whole object, not the property value!)
print(evaluate('obj.prop = 43', scope)) // 43
print(evaluate('obj["prop"] = 43', scope)) // 43
print(scope.obj) // {"prop": 43}

/**
 * Helper function to output a value in the console. Value will be formatted.
 * @param {*} value
 */
function print (value) {
  const precision = 14
  console.log(format(value, precision))
}
