import { newDynamic } from "../lib/primitives/dynamic.js"; import { Int } from "../lib/primitives/primitive_types.js"; import { fnType } from "../lib/structures/type_constructors.types.js"; import { pretty } from "../lib/util/pretty.js"; import { merge, newLiteral, newSlot, read, transform, write } from "../lib/versioning/types.js"; const inc = x => x + 1n; const incLiteral = newLiteral(newDynamic(inc)(fnType(_=>Int)(_=>Int))); console.log("##############"); console.log("## Counting ##"); console.log("##############"); const counterOneSlot = write (newSlot("1d61577e704613f4e48b164852aedd20")) (newLiteral(newDynamic(1n)(Int))); console.log(pretty({counterOneSlot})); const valueOne = read(counterOneSlot); console.log(pretty({valueOne})); const onePlusOne = transform (valueOne) (incLiteral); console.log(pretty({onePlusOne})); const onePlusOnePlusOne = transform (onePlusOne) (incLiteral); console.log(pretty({onePlusOnePlusOne})); // console.log("#############"); // console.log("## Summing ##"); // console.log("#############"); // const priceSlot = newSlot(Symbol('price'))(newLiteral(20.66)); // const taxSlot = newSlot(Symbol('tax'))(newLiteral(4.34)); // const total = // transform(read(priceSlot))( // transform(read(taxSlot))( // newLiteral(tax => price => price + tax))); // console.log(pretty({total})) // const totalPlusOne = transform(total)(newLiteral(inc)); // console.log(pretty({totalPlusOne})); // verifyValue(totalPlusOne); // console.log("getReadDependencies(totalPlusOne):", getReadDependencies(totalPlusOne)); console.log("###############"); console.log("## Branching ##"); console.log("###############"); const fiveSlot = write (newSlot("Counter__4a029b3d758bcd1fffbf495531c95537")) (newLiteral(newDynamic(5n)(Int))); const sixSlot = write(fiveSlot)(newLiteral(newDynamic(6n)(Int))); const sevenSlot = write(fiveSlot)(newLiteral(newDynamic(7n)(Int))); const eightSlot = write(fiveSlot)(newLiteral(newDynamic(8n)(Int))); const sixSevenSlot = merge(sixSlot)(sevenSlot); console.log(pretty(sixSevenSlot)); // const sevenEightSlot = merge(sevenSlot)(eightSlot); // const sixSevenEightSlot = merge(sixSevenSlot)(sevenEightSlot); // // console.log(compareSlots(intCompare)(fiveSlot)(fiveSlot)); // // console.log(compareSlots(intCompare)(sixSlot)(sixSlot)); // // console.log(compareSlots(intCompare)(fiveSlot)(sixSlot)); // // console.log(compareSlots(intCompare)(sixSlot)(fiveSlot)); // console.log(pretty({sixSevenEightSlot})); // // console.log("########################"); // // console.log("## Heterogeneous data ##"); // // console.log("########################"); // // // Slot // // const numberOfSheepSlot = newSlot(Symbol('numberOfSheep'))(newLiteral(5)); // // const alternativeNumberOfSheepSlot = newSlot(Symbol('alternativeNumberOfSheep'))(newLiteral(6)); // // // Slot // // const labelSlot = newSlot(Symbol('label'))(newLiteral("number of sheep")); // // const combineFn = newLiteral(label => numberOfSheep => `${label}: ${numberOfSheep}`) // // // Slot // // const labelAndValueSlotA = overwrite(labelSlot)( // // transform(read(numberOfSheepSlot))( // // transform(read(labelSlot))(combineFn))); // // const labelAndValueSlotB = overwrite(labelSlot)( // // transform(read(alternativeNumberOfSheepSlot))( // // transform(read(labelSlot))(combineFn))); // // console.log( // // add(add(emptySet(compareSlots(compareStrings)))(labelAndValueSlotA))(labelAndValueSlotB) // // ); // // merge()(labelSlot)(labelAndValueSlot)