UNPKG

@featurevisor/core

Version:

Core package of Featurevisor for Node.js usage

106 lines (83 loc) 3.22 kB
import type { Range } from "@featurevisor/types"; import { getAllocation, getUpdatedAvailableRangesAfterFilling } from "./allocator"; describe("core: allocator", function () { test("is a function", function () { expect(getAllocation).toBeInstanceOf(Function); expect(getUpdatedAvailableRangesAfterFilling).toBeInstanceOf(Function); }); test("fills a single range fully", function () { const availableRanges = [[0, 100]] as Range[]; const result = getAllocation(availableRanges, 100); expect(result).toEqual(availableRanges); const updatedAvailableRanges = getUpdatedAvailableRangesAfterFilling(availableRanges, 100); expect(updatedAvailableRanges).toEqual([]); }); test("fills a single range partially", function () { const availableRanges = [[0, 100]] as Range[]; const result = getAllocation(availableRanges, 80); expect(result).toEqual([[0, 80]]); const updatedAvailableRanges = getUpdatedAvailableRangesAfterFilling(availableRanges, 80); expect(updatedAvailableRanges).toEqual([[80, 100]]); }); test("fills multiple ranges fully", function () { const availableRanges = [ [0, 50], [50, 100], ] as Range[]; const result = getAllocation(availableRanges, 100); expect(result).toEqual(availableRanges); const updatedAvailableRanges = getUpdatedAvailableRangesAfterFilling(availableRanges, 100); expect(updatedAvailableRanges).toEqual([]); }); test("fills multiple ranges with breaks in between fully", function () { const availableRanges = [ [0, 40], [60, 100], ] as Range[]; const result = getAllocation(availableRanges, 80); expect(result).toEqual(availableRanges); const updatedAvailableRanges = getUpdatedAvailableRangesAfterFilling(availableRanges, 80); expect(updatedAvailableRanges).toEqual([]); }); test("fills multiple ranges partially", function () { const availableRanges = [ [0, 50], [50, 100], ] as Range[]; const result = getAllocation(availableRanges, 80); expect(result).toEqual([ [0, 50], [50, 80], ]); const updatedAvailableRanges = getUpdatedAvailableRangesAfterFilling(availableRanges, 80); expect(updatedAvailableRanges).toEqual([[80, 100]]); }); test("fills multiple ranges with breaks in between partially", function () { const availableRanges = [ [0, 40], [60, 100], ] as Range[]; const result = getAllocation(availableRanges, 50); expect(result).toEqual([ [0, 40], [60, 70], ]); const updatedAvailableRanges = getUpdatedAvailableRangesAfterFilling(availableRanges, 50); expect(updatedAvailableRanges).toEqual([[70, 100]]); }); test("fills multiple ranges with breaks in between partially, with 3 range items", function () { const availableRanges = [ [0, 30], [60, 70], [90, 95], ] as Range[]; const result = getAllocation(availableRanges, 42); expect(result).toEqual([ [0, 30], [60, 70], [90, 92], ]); const updatedAvailableRanges = getUpdatedAvailableRangesAfterFilling(availableRanges, 42); expect(updatedAvailableRanges).toEqual([[92, 95]]); }); });