import { assert } from 'chai'; import { interpolate as interpolateNumber } from '../../../../../../lib/math/functions'; import { MetaContext } from '../../../../../../lib/experimental/meta/MetaContext'; import { $INTERPOLATE, withInterpolate } from '../../../../../../lib/experimental/meta/operations/base/$interpolate'; import builtins from '../../../../../../lib/experimental/meta/operations/builtins/$interpolate'; const interpolate = (function () { const context = new (withInterpolate(class extends MetaContext { interpolateNumber(from: number, to: number, progress: number) { return interpolateNumber(from, to, progress); } }))(); context.registerAll(builtins); return function interpolate(lhs: T, rhs: T, progress: number) { return context[$INTERPOLATE](lhs, rhs, progress); }; })(); describe('experimental.meta.operations.builtins.$interpolate', () => { describe('number', () => { test.each([ [0, 10, 0, 0], [0, 10, 1, 10], [0, 10, .5, 5], ])('number#%#', (from: number, to: number, progress: number, result: number) => { assert.strictEqual(interpolate(from, to, progress), result); }); }); describe('Number', () => { test.each([ [0, 10, 0, 0], [0, 10, 1, 10], [0, 10, .5, 5], ])('Number#%#', (fromValue: number, toValue: number, progress: number, result: number) => { const from = new Number(fromValue); const to = new Number(toValue); assert.strictEqual(interpolate(from, to, progress), result); }); }); describe('Date', () => { const now = Date.now(); test.each([ [new Date(now), new Date(now + 1000), 0, new Date(now)], [new Date(now), new Date(now + 1000), 1, new Date(now + 1000)], [new Date(now), new Date(now + 1000), .5, new Date(now + 500)], ])('Date#%#', (from: Date, to: Date, progress: number, result: Date) => { assert.strictEqual(interpolate(from, to, progress).getTime(), result.getTime()); }); }); });