{
  "version": 3,
  "sources": ["../../../../../src/evaluator/arithmetic/divide/divide.ts"],
  "sourcesContent": [
    "import type { ArethmeticEvaluator } from \"../../../core/types.mjs\";\nimport { FormulaError } from \"../../../core/types.mjs\";\n\nexport const divide: ArethmeticEvaluator = (left, right, context) => {\n  // Only allow number and infinity types\n  if (\n    (left.type !== \"number\" && left.type !== \"infinity\") ||\n    (right.type !== \"number\" && right.type !== \"infinity\")\n  ) {\n    return {\n      type: \"error\",\n      err: FormulaError.VALUE,\n      message: `Cannot divide ${left.type} and ${right.type}`,\n      errAddress: context.dependencyNode,\n    };\n  }\n\n  // Handle infinity cases\n  if (left.type === \"infinity\" || right.type === \"infinity\") {\n    // Both infinity: ∞ / ∞ = indeterminate\n    if (left.type === \"infinity\" && right.type === \"infinity\") {\n      return {\n        type: \"error\",\n        err: FormulaError.NUM,\n        message: \"Cannot divide infinity by infinity\",\n        errAddress: context.dependencyNode,\n      };\n    }\n\n    // Infinity divided by number: sign rules apply\n    if (left.type === \"infinity\" && right.type === \"number\") {\n      if (right.value === 0) {\n        return {\n          type: \"error\",\n          err: FormulaError.NUM,\n          message: \"Cannot divide infinity by zero\",\n          errAddress: context.dependencyNode,\n        };\n      }\n\n      if (right.value > 0) {\n        return { type: \"infinity\", sign: left.sign };\n      } else {\n        const resultSign = left.sign === \"positive\" ? \"negative\" : \"positive\";\n        return { type: \"infinity\", sign: resultSign };\n      }\n    }\n\n    // Number divided by infinity: approaches zero\n    if (left.type === \"number\" && right.type === \"infinity\") {\n      return { type: \"number\", value: 0 };\n    }\n  }\n\n  // Both numbers\n  if (left.type === \"number\" && right.type === \"number\") {\n    // Division by zero\n    if (right.value === 0) {\n      if (left.value === 0) {\n        // 0 / 0 = indeterminate\n        return {\n          type: \"error\",\n          err: FormulaError.NUM,\n          message: \"0 / 0 is undefined\",\n          errAddress: context.dependencyNode,\n        };\n      }\n\n      // n / 0 = ±∞ depending on sign of n\n      if (left.value > 0) {\n        return { type: \"infinity\", sign: \"positive\" };\n      } else {\n        return { type: \"infinity\", sign: \"negative\" };\n      }\n    }\n\n    const result = left.value / right.value;\n\n    // Check for overflow to infinity\n    if (result === Infinity) {\n      return { type: \"infinity\", sign: \"positive\" };\n    }\n    if (result === -Infinity) {\n      return { type: \"infinity\", sign: \"negative\" };\n    }\n\n    return { type: \"number\", value: result };\n  }\n\n  // This should never be reached due to the type check at the beginning\n  return {\n    type: \"error\",\n    err: FormulaError.VALUE,\n    message: `Cannot divide ${left.type} and ${right.type}`,\n    errAddress: context.dependencyNode,\n  };\n};\n"
  ],
  "mappings": ";AACA;AAEO,IAAM,SAA8B,CAAC,MAAM,OAAO,YAAY;AAAA,EAEnE,IACG,KAAK,SAAS,YAAY,KAAK,SAAS,cACxC,MAAM,SAAS,YAAY,MAAM,SAAS,YAC3C;AAAA,IACA,OAAO;AAAA,MACL,MAAM;AAAA,MACN,KAAK,aAAa;AAAA,MAClB,SAAS,iBAAiB,KAAK,YAAY,MAAM;AAAA,MACjD,YAAY,QAAQ;AAAA,IACtB;AAAA,EACF;AAAA,EAGA,IAAI,KAAK,SAAS,cAAc,MAAM,SAAS,YAAY;AAAA,IAEzD,IAAI,KAAK,SAAS,cAAc,MAAM,SAAS,YAAY;AAAA,MACzD,OAAO;AAAA,QACL,MAAM;AAAA,QACN,KAAK,aAAa;AAAA,QAClB,SAAS;AAAA,QACT,YAAY,QAAQ;AAAA,MACtB;AAAA,IACF;AAAA,IAGA,IAAI,KAAK,SAAS,cAAc,MAAM,SAAS,UAAU;AAAA,MACvD,IAAI,MAAM,UAAU,GAAG;AAAA,QACrB,OAAO;AAAA,UACL,MAAM;AAAA,UACN,KAAK,aAAa;AAAA,UAClB,SAAS;AAAA,UACT,YAAY,QAAQ;AAAA,QACtB;AAAA,MACF;AAAA,MAEA,IAAI,MAAM,QAAQ,GAAG;AAAA,QACnB,OAAO,EAAE,MAAM,YAAY,MAAM,KAAK,KAAK;AAAA,MAC7C,EAAO;AAAA,QACL,MAAM,aAAa,KAAK,SAAS,aAAa,aAAa;AAAA,QAC3D,OAAO,EAAE,MAAM,YAAY,MAAM,WAAW;AAAA;AAAA,IAEhD;AAAA,IAGA,IAAI,KAAK,SAAS,YAAY,MAAM,SAAS,YAAY;AAAA,MACvD,OAAO,EAAE,MAAM,UAAU,OAAO,EAAE;AAAA,IACpC;AAAA,EACF;AAAA,EAGA,IAAI,KAAK,SAAS,YAAY,MAAM,SAAS,UAAU;AAAA,IAErD,IAAI,MAAM,UAAU,GAAG;AAAA,MACrB,IAAI,KAAK,UAAU,GAAG;AAAA,QAEpB,OAAO;AAAA,UACL,MAAM;AAAA,UACN,KAAK,aAAa;AAAA,UAClB,SAAS;AAAA,UACT,YAAY,QAAQ;AAAA,QACtB;AAAA,MACF;AAAA,MAGA,IAAI,KAAK,QAAQ,GAAG;AAAA,QAClB,OAAO,EAAE,MAAM,YAAY,MAAM,WAAW;AAAA,MAC9C,EAAO;AAAA,QACL,OAAO,EAAE,MAAM,YAAY,MAAM,WAAW;AAAA;AAAA,IAEhD;AAAA,IAEA,MAAM,SAAS,KAAK,QAAQ,MAAM;AAAA,IAGlC,IAAI,WAAW,UAAU;AAAA,MACvB,OAAO,EAAE,MAAM,YAAY,MAAM,WAAW;AAAA,IAC9C;AAAA,IACA,IAAI,WAAW,WAAW;AAAA,MACxB,OAAO,EAAE,MAAM,YAAY,MAAM,WAAW;AAAA,IAC9C;AAAA,IAEA,OAAO,EAAE,MAAM,UAAU,OAAO,OAAO;AAAA,EACzC;AAAA,EAGA,OAAO;AAAA,IACL,MAAM;AAAA,IACN,KAAK,aAAa;AAAA,IAClB,SAAS,iBAAiB,KAAK,YAAY,MAAM;AAAA,IACjD,YAAY,QAAQ;AAAA,EACtB;AAAA;",
  "debugId": "8621814E1648C93A64756E2164756E21",
  "names": []
}