import { S2_0, S2_1 } from "../symbol/S2.js" /** * @param { symbol } a * @param { symbol } b * @param { boolean } carry * @returns { [value: symbol, carry: boolean] } */ export function add2B(a, b, carry) { switch (a) { case S2_0: switch (b) { case S2_0: return carry ? [S2_1, false] : [S2_0, false]; case S2_1: return carry ? [S2_0, true ] : [S2_1, false]; default: throw new Error("unexpected symbol"); } case S2_1: switch (b) { case S2_0: return carry ? [S2_0, true] : [S2_1, false]; case S2_1: return carry ? [S2_1, true] : [S2_0, true ]; default: throw new Error("unexpected symbol"); } default: throw new Error("unexpected symbol"); } }