// small database with nutrition facts, per 100 grams // prettier-ignore const nutritionDB = { tomato: { calories: 18, protein: 0.9, carbs: 3.9, sugar: 2.6, fiber: 1.2, fat: 0.2 }, vinegar: { calories: 20, protein: 0.04, carbs: 0.6, sugar: 0.4, fiber: 0, fat: 0 }, oil: { calories: 48, protein: 0, carbs: 0, sugar: 123, fiber: 0, fat: 151 }, onion: { calories: 0, protein: 1, carbs: 9, sugar: 0, fiber: 0, fat: 0 }, garlic: { calories: 149, protein: 6.4, carbs: 33, sugar: 1, fiber: 2.1, fat: 0.5 }, paprika: { calories: 282, protein: 14.14, carbs: 53.99, sugar: 1, fiber: 0, fat: 12.89 }, sugar: { calories: 387, protein: 0, carbs: 100, sugar: 100, fiber: 0, fat: 0 }, orange: { calories: 49, protein: 0.9, carbs: 13, sugar: 9, fiber: 0.2, fat: 0.1 }, } // /*/ // ⚡ export const tests = [] const t = (f) => tests.push(f) // filter entries t(({ eq, ctx }) => eq( filterEntries(ctx.groceriesCart1, ([, v]) => v < 300), { onion: 230, garlic: 220 }, ), ) // map entries t(({ eq, ctx }) => eq( mapEntries(ctx.groceriesCart1, ([k, v]) => [ v > 250 ? `✔️${k}` : `❌${k}`, v - 250, ]), { '✔️oil': 250, '❌onion': -20, '❌garlic': -30, '✔️paprika': 230, }, ), ) // filter and map t(({ eq, ctx }) => eq( mapEntries( filterEntries(ctx.groceriesCart1, ([k, v]) => k === 'onion'), ([k, v]) => [`✔️${k}`, v - 100], ), { '✔️onion': 130 }, ), ) // reduce entries t(({ eq, ctx }) => eq( reduceEntries(ctx.groceriesCart1, (acc, [k, v]) => acc + k + v, ''), 'oil500onion230garlic220paprika480', ), ) t(({ eq, ctx }) => eq(lowCarbs(ctx.groceriesCart1), { oil: 500, onion: 230 })) t(({ eq, ctx }) => eq(lowCarbs(ctx.groceriesCart2), { vinegar: 120, tomato: 700 }), ) t(({ eq, ctx }) => eq(totalCalories(ctx.groceriesCart1), 1921.4)) t(({ eq, ctx }) => eq(totalCalories(ctx.groceriesCart2), 370.5)) t(({ eq, ctx }) => eq(cartTotal(ctx.groceriesCart1), ctx.total1)) t(({ eq, ctx }) => eq(cartTotal(ctx.groceriesCart2), ctx.total2)) Object.freeze(tests) export const setup = () => ({ groceriesCart1: { oil: 500, onion: 230, garlic: 220, paprika: 480 }, groceriesCart2: { tomato: 700, vinegar: 120, orange: 450 }, total1: { oil: { calories: 240, protein: 0, carbs: 0, sugar: 615, fiber: 0, fat: 755, }, onion: { calories: 0, protein: 2.3, carbs: 20.7, sugar: 0, fiber: 0, fat: 0, }, garlic: { calories: 327.8, protein: 14.08, carbs: 72.6, sugar: 2.2, fiber: 4.62, fat: 1.1, }, paprika: { calories: 1353.6, protein: 67.872, carbs: 259.152, sugar: 4.8, fiber: 0, fat: 61.872, }, }, total2: { orange: { calories: 220.5, carbs: 58.5, fat: 0.45, fiber: 0.9, protein: 4.05, sugar: 40.5, }, tomato: { calories: 126, carbs: 27.3, fat: 1.4, fiber: 8.4, protein: 6.3, sugar: 18.2, }, vinegar: { calories: 24, carbs: 0.72, fat: 0, fiber: 0, protein: 0.048, sugar: 0.48, }, }, })