/// import { bounds, setLabels, generate, generateShiftLookup } from '.'; describe('bounds', () => { test('1', () => { const b = bounds(1, { width: 100, height: 70, labelHeight: 20, }); expect(b.cell).toBe(50); expect(b.horizontalSets).toBe(1); expect(b.verticalSets).toBe(0); expect(b.xOffset).toBe(0); expect(b.yOffset).toBe(0); expect(b.xBefore).toBe(0); expect(b.yBefore).toBe(20); expect(b.hCells).toBe(2); expect(b.vCells).toBe(1); }); test('2', () => { const b = bounds(2, { width: 120, height: 120, labelHeight: 20, }); expect(b.cell).toBe(50); expect(b.horizontalSets).toBe(1); expect(b.verticalSets).toBe(1); expect(b.xOffset).toBe(0); expect(b.yOffset).toBe(0); expect(b.xBefore).toBe(20); expect(b.yBefore).toBe(20); expect(b.hCells).toBe(2); expect(b.vCells).toBe(2); }); test('3', () => { const b = bounds(3, { width: 220, height: 140, labelHeight: 20, }); expect(b.horizontalSets).toBe(2); expect(b.verticalSets).toBe(1); expect(b.cell).toBe(50); expect(b.xOffset).toBe(0); expect(b.yOffset).toBe(0); expect(b.xBefore).toBe(20); expect(b.yBefore).toBe(20); expect(b.hCells).toBe(4); expect(b.vCells).toBe(2); }); test('4', () => { const b = bounds(4, { width: 240, height: 240, labelHeight: 20, }); expect(b.horizontalSets).toBe(2); expect(b.verticalSets).toBe(2); expect(b.cell).toBe(50); expect(b.xOffset).toBe(0); expect(b.yOffset).toBe(0); expect(b.xBefore).toBe(20); expect(b.yBefore).toBe(20); expect(b.hCells).toBe(4); expect(b.vCells).toBe(4); }); test('5', () => { const b = bounds(5, { width: 8 * 50 + 20 + 20, height: 4 * 50 + 20 + 20 + 20, labelHeight: 20, }); expect(b.horizontalSets).toBe(3); expect(b.verticalSets).toBe(2); expect(b.cell).toBe(50); expect(b.xOffset).toBe(0); expect(b.yOffset).toBe(0); expect(b.xBefore).toBe(20); expect(b.yBefore).toBe(40); expect(b.hCells).toBe(8); expect(b.vCells).toBe(4); }); }); describe('setLabels', () => { test('1', () => { // A nA const b = setLabels(1, { width: 100, height: 70, labelHeight: 20, }); const c = 10; expect(b).toHaveLength(1); expect(b[0].hor).toBe(true); expect(b[0].text).toHaveLength(1); expect(b[0].notText).toHaveLength(1); expect(b[0].text[0]).toEqual({ x: 25, y: c, }); expect(b[0].notText[0]).toEqual({ x: 75, y: c, }); }); test('2', () => { // A nA //B //nB const b = setLabels(2, { width: 120, height: 120, labelHeight: 20, }); const c = 10; expect(b).toHaveLength(2); expect(b[0].hor).toBe(true); expect(b[0].text).toHaveLength(1); expect(b[0].notText).toHaveLength(1); expect(b[0].text[0]).toEqual({ x: 25 + 20, y: c, }); expect(b[0].notText[0]).toEqual({ x: 75 + 20, y: c, }); expect(b[1].hor).toBe(false); expect(b[1].text).toHaveLength(1); expect(b[1].notText).toHaveLength(1); expect(b[1].text[0]).toEqual({ x: c, y: 25 + 20, }); expect(b[1].notText[0]).toEqual({ y: 75 + 20, x: c, }); }); test('3', () => { // A nA //B //nB // C nC nC C const b = setLabels(3, { width: 220, height: 140, labelHeight: 20, }); const c = 10; const shift = 20; expect(b).toHaveLength(3); expect(b[0].hor).toBe(true); expect(b[0].text).toHaveLength(1); expect(b[0].notText).toHaveLength(1); expect(b[0].text[0]).toEqual({ x: 50 + shift, y: c, }); expect(b[0].notText[0]).toEqual({ x: 150 + shift, y: c, }); expect(b[1].hor).toBe(false); expect(b[1].text).toHaveLength(1); expect(b[1].notText).toHaveLength(1); expect(b[1].text[0]).toEqual({ x: c, y: 25 + shift, }); expect(b[1].notText[0]).toEqual({ x: c, y: 75 + shift, }); expect(b[2].hor).toBe(true); expect(b[2].text).toHaveLength(2); expect(b[2].notText).toHaveLength(2); expect(b[2].text[0]).toEqual({ x: 25 + shift, y: c + shift + 100, }); expect(b[2].notText[0]).toEqual({ x: 75 + shift, y: c + shift + 100, }); expect(b[2].notText[1]).toEqual({ x: 125 + shift, y: c + shift + 100, }); expect(b[2].text[1]).toEqual({ x: 175 + shift, y: c + shift + 100, }); }); test('4', () => { // A nA // D //B // nD // // nD //nB // D // C nC nC C const b = setLabels(4, { width: 240, height: 240, labelHeight: 20, }); const c = 10; expect(b).toHaveLength(4); expect(b[0].hor).toBe(true); expect(b[0].text).toHaveLength(1); expect(b[0].notText).toHaveLength(1); expect(b[0].text[0]).toEqual({ x: 50 + 20, y: c, }); expect(b[0].notText[0]).toEqual({ x: 150 + 20, y: c, }); expect(b[1].hor).toBe(false); expect(b[1].text).toHaveLength(1); expect(b[1].notText).toHaveLength(1); expect(b[1].text[0]).toEqual({ x: c, y: 50 + 20, }); expect(b[1].notText[0]).toEqual({ x: c, y: 150 + 20, }); expect(b[2].hor).toBe(true); expect(b[2].text).toHaveLength(2); expect(b[2].notText).toHaveLength(2); expect(b[2].text[0]).toEqual({ x: 25 + 20, y: c + 20 + 200, }); expect(b[2].notText[0]).toEqual({ x: 75 + 20, y: c + 20 + 200, }); expect(b[2].notText[1]).toEqual({ x: 125 + 20, y: c + 20 + 200, }); expect(b[2].text[1]).toEqual({ x: 175 + 20, y: c + 20 + 200, }); expect(b[3].hor).toBe(false); expect(b[3].text).toHaveLength(2); expect(b[3].notText).toHaveLength(2); expect(b[3].text[0]).toEqual({ x: c + 20 + 200, y: 25 + 20, }); expect(b[3].notText[0]).toEqual({ x: c + 20 + 200, y: 75 + 20, }); expect(b[3].notText[1]).toEqual({ x: c + 20 + 200, y: 25 + 100 + 20, }); expect(b[3].text[1]).toEqual({ x: c + 20 + 200, y: 75 + 100 + 20, }); }); test('5', () => { // A nA // D //B // nD // // nD //nB // D // C nC nC C const b = setLabels(5, { width: 8 * 50 + 20 + 20, height: 4 * 50 + 20 + 20 + 20, labelHeight: 20, }); // 50 cell const c = 10; expect(b).toHaveLength(5); expect(b[0].hor).toBe(true); expect(b[0].text).toHaveLength(1); expect(b[0].notText).toHaveLength(1); expect(b[0].text[0]).toEqual({ x: 100 + 20, y: c, }); expect(b[0].notText[0]).toEqual({ x: 300 + 20, y: c, }); expect(b[2].hor).toBe(true); expect(b[2].text).toHaveLength(2); expect(b[2].notText).toHaveLength(2); expect(b[2].text[0]).toEqual({ x: 50 + 20, y: c + 40 + 200, }); expect(b[2].notText[0]).toEqual({ x: 150 + 20, y: c + 40 + 200, }); expect(b[2].notText[1]).toEqual({ x: 250 + 20, y: c + 40 + 200, }); expect(b[2].text[1]).toEqual({ x: 350 + 20, y: c + 40 + 200, }); expect(b[4].hor).toBe(true); expect(b[4].text).toHaveLength(4); expect(b[4].notText).toHaveLength(4); expect(b[4].text[0]).toEqual({ x: 25 + 20, y: c + 20, }); expect(b[4].notText[0]).toEqual({ x: 75 + 20, y: c + 20, }); expect(b[4].notText[1]).toEqual({ x: 125 + 20, y: c + 20, }); expect(b[4].text[1]).toEqual({ x: 175 + 20, y: c + 20, }); expect(b[4].text[2]).toEqual({ x: 225 + 20, y: c + 20, }); expect(b[4].notText[2]).toEqual({ x: 275 + 20, y: c + 20, }); expect(b[4].notText[3]).toEqual({ x: 325 + 20, y: c + 20, }); expect(b[4].text[3]).toEqual({ x: 375 + 20, y: c + 20, }); }); }); describe('generateShiftLookup', () => { test('1', () => { const c = generateShiftLookup([1], 2, 1, (cs, s) => cs.includes(s)); expect(c).toHaveLength(1); expect(c[0]([], [0, 0])).toEqual([1, 0]); expect(c[0]([1], [0, 0])).toEqual([0, 0]); }); test('2', () => { const c = generateShiftLookup([1, 2], 2, 2, (cs, s) => cs.includes(s)); expect(c).toHaveLength(2); expect(c[0]([], [0, 0])).toEqual([1, 0]); expect(c[1]([], [0, 0])).toEqual([0, 1]); expect(c.reduceRight((acc, s) => s([], acc), [0, 0] as [number, number])).toEqual([1, 1]); expect(c[0]([1], [0, 0])).toEqual([0, 0]); expect(c[1]([1], [0, 0])).toEqual([0, 1]); expect(c.reduceRight((acc, s) => s([1], acc), [0, 0] as [number, number])).toEqual([0, 1]); expect(c[0]([2], [0, 0])).toEqual([1, 0]); expect(c[1]([2], [0, 0])).toEqual([0, 0]); expect(c.reduceRight((acc, s) => s([2], acc), [0, 0] as [number, number])).toEqual([1, 0]); expect(c[0]([1, 2], [0, 0])).toEqual([0, 0]); expect(c[1]([1, 2], [0, 0])).toEqual([0, 0]); expect(c.reduceRight((acc, s) => s([1, 2], acc), [0, 0] as [number, number])).toEqual([0, 0]); }); test('3', () => { const c = generateShiftLookup([1, 2, 3], 4, 2, (cs, s) => cs.includes(s)); expect(c).toHaveLength(3); expect(c.reduceRight((acc, s) => s([1, 2, 3], acc), [0, 0] as [number, number])).toEqual([0, 0]); expect(c.reduceRight((acc, s) => s([1, 2], acc), [0, 0] as [number, number])).toEqual([1, 0]); expect(c[2]([2], [0, 0])).toEqual([1, 0]); expect(c[0]([2], [0, 0])).toEqual([3, 0]); expect(c[0]([2], [1, 0])).toEqual([2, 0]); expect(c.reduceRight((acc, s) => s([2], acc), [0, 0] as [number, number])).toEqual([2, 0]); expect(c.reduceRight((acc, s) => s([2], acc), [0, 0] as [number, number])).toEqual([2, 0]); expect(c.reduceRight((acc, s) => s([2, 3], acc), [0, 0] as [number, number])).toEqual([3, 0]); expect(c.reduceRight((acc, s) => s([1, 3], acc), [0, 0] as [number, number])).toEqual([0, 1]); expect(c.reduceRight((acc, s) => s([1], acc), [0, 0] as [number, number])).toEqual([1, 1]); expect(c.reduceRight((acc, s) => s([], acc), [0, 0] as [number, number])).toEqual([2, 1]); expect(c.reduceRight((acc, s) => s([3], acc), [0, 0] as [number, number])).toEqual([3, 1]); }); }); describe('generate', () => { test('1', () => { const b = generate([1], [1, 0], (cs, s) => cs === s, { width: 100, height: 70, labelHeight: 20, }); expect(b.cell).toBe(50); expect(b.c).toHaveLength(2); expect(b.c[0]).toEqual({ x: 0, y: 20, }); expect(b.c[1]).toEqual({ x: 0 + 50, y: 20, }); }); test('2', () => { // 1 n1 //2 //n2 const b = generate([1, 2], [[1, 2], [2], [1], []], (cs, s) => cs.includes(s), { width: 120, height: 120, labelHeight: 20, }); expect(b.cell).toBe(50); expect(b.c).toHaveLength(4); expect(b.c[0]).toEqual({ x: 20, y: 20, }); expect(b.c[1]).toEqual({ x: 20 + 50, y: 20, }); expect(b.c[2]).toEqual({ x: 20, y: 20 + 50, }); expect(b.c[3]).toEqual({ x: 20 + 50, y: 20 + 50, }); }); test('3', () => { // 1 n1 //2 //n2 // 3 n3 n3 3 const b = generate( [1, 2, 3], ([] as number[][]).concat([[1, 2, 3], [1, 2], [2], [2, 3]], [[1, 3], [1], [], [3]]), (cs, s) => cs.includes(s), { width: 220, height: 140, labelHeight: 20, } ); expect(b.cell).toBe(50); expect(b.c).toHaveLength(8); expect(b.c[0]).toEqual({ x: 20, y: 20, }); expect(b.c[1]).toEqual({ x: 20 + 50, y: 20, }); expect(b.c[2]).toEqual({ x: 20 + 100, y: 20, }); expect(b.c[3]).toEqual({ x: 20 + 150, y: 20, }); expect(b.c[4]).toEqual({ x: 20, y: 20 + 50, }); expect(b.c[5]).toEqual({ x: 20 + 50, y: 20 + 50, }); expect(b.c[6]).toEqual({ x: 20 + 100, y: 20 + 50, }); expect(b.c[7]).toEqual({ x: 20 + 150, y: 20 + 50, }); }); });