// 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: 12, fiber: 0.2, fat: 0.1 }, } // /*/ // ⚡ export const tests = [] const t = (f) => tests.push(f) // filter keys t(({ eq, ctx }) => eq( filterKeys(ctx.cart, (k) => k.length <= 6), ctx.filtered, ), ) t(({ eq, ctx }) => eq( filterKeys(ctx.cart, (k) => /onion/.test(k)), { onion: 200 }, ), ) // map keys t(({ eq, ctx }) => eq( mapKeys(ctx.cart, (k) => `✔️${k}`), ctx.mapped, ), ) t(({ eq, ctx }) => eq( mapKeys( filterKeys(ctx.cart, (k) => k === 'onion'), (k) => (k = 'orange'), ), { orange: 200 }, ), ) t(({ eq, ctx }) => eq( mapKeys( filterKeys(nutritionDB, (k) => k === 'tomato'), (k) => `${k}DB`, ), ctx.combo, ), ) // reduce keys t(({ eq, ctx }) => eq( reduceKeys(ctx.cart, (acc, cr) => acc.concat(', ', cr)), 'vinegar, sugar, oil, onion, garlic, paprika', ), ) t(({ eq, ctx }) => eq( reduceKeys(ctx.cart, (acc, cr) => `${acc}${cr}:`, ':'), ':vinegar:sugar:oil:onion:garlic:paprika:', ), ) const join = (acc, cr) => (acc == null ? cr : `${acc}:${cr}`) t(({ eq, ctx }) => eq( reduceKeys(nutritionDB, join, null), 'tomato:vinegar:oil:onion:garlic:paprika:sugar:orange', ), ) t(({ eq, ctx }) => eq( reduceKeys(ctx.cart, join, undefined), 'vinegar:sugar:oil:onion:garlic:paprika', ), ) t(({ eq, ctx }) => eq( reduceKeys(ctx.cart, (acc, cr) => (acc += (cr.length <= 4) & 1), 0), 1, ), ) Object.freeze(tests) export const setup = () => ({ cart: { vinegar: 80, sugar: 100, oil: 50, onion: 200, garlic: 22, paprika: 4, }, filtered: { sugar: 100, oil: 50, onion: 200, garlic: 22 }, mapped: { '✔️vinegar': 80, '✔️sugar': 100, '✔️oil': 50, '✔️onion': 200, '✔️garlic': 22, '✔️paprika': 4, }, combo: { tomatoDB: { calories: 18, protein: 0.9, carbs: 3.9, sugar: 2.6, fiber: 1.2, fat: 0.2, }, }, })