UNPKG

@jscad/modeling

Version:

Constructive Solid Geometry (CSG) Library for JSCAD

95 lines (79 loc) 2.74 kB
const test = require('ava') const flatten = require('./flatten') test('flatten: test an empty array returns empty.', (t) => { t.deepEqual(flatten([]), []) }) test('flatten: test a flat array is unchanged.', (t) => { t.deepEqual(flatten([1, 2, 3]), [1, 2, 3]) }) test('flatten: test single level nesting is flattened.', (t) => { t.deepEqual(flatten([1, [2, 3], 4]), [1, 2, 3, 4]) t.deepEqual(flatten([[1, 2], [3, 4]]), [1, 2, 3, 4]) t.deepEqual(flatten([[1], [2], [3]]), [1, 2, 3]) }) test('flatten: test deep nesting is flattened.', (t) => { t.deepEqual(flatten([1, [2, [3, [4]]]]), [1, 2, 3, 4]) t.deepEqual(flatten([[[[1]]]]), [1]) t.deepEqual(flatten([1, [2, [3, [4, [5]]]]]), [1, 2, 3, 4, 5]) }) test('flatten: test mixed nesting depths are flattened.', (t) => { t.deepEqual(flatten([1, [2, 3], [[4, 5]], [[[6]]]]), [1, 2, 3, 4, 5, 6]) }) test('flatten: test empty nested arrays are removed.', (t) => { t.deepEqual(flatten([[]]), []) t.deepEqual(flatten([[], []]), []) t.deepEqual(flatten([1, [], 2]), [1, 2]) t.deepEqual(flatten([[], [1], []]), [1]) }) test('flatten: test single element arrays are flattened.', (t) => { t.deepEqual(flatten([1]), [1]) t.deepEqual(flatten([[1]]), [1]) t.deepEqual(flatten([[[1]]]), [1]) }) test('flatten: test element order is preserved.', (t) => { t.deepEqual(flatten([1, [2, 3], 4, [5, 6]]), [1, 2, 3, 4, 5, 6]) t.deepEqual(flatten([[1, 2], 3, [4, [5, 6]]]), [1, 2, 3, 4, 5, 6]) }) test('flatten: test object references are preserved.', (t) => { const obj1 = { id: 1 } const obj2 = { id: 2 } const obj3 = { id: 3 } const result = flatten([obj1, [obj2, obj3]]) t.is(result[0], obj1) t.is(result[1], obj2) t.is(result[2], obj3) }) test('flatten: test various types are preserved.', (t) => { const obj = { a: 1 } const fn = () => {} t.deepEqual(flatten([1, 'string', null, undefined, true]), [1, 'string', null, undefined, true]) const result = flatten([obj, [fn]]) t.is(result[0], obj) t.is(result[1], fn) }) test('flatten: test large flat array is unchanged.', (t) => { const large = [] for (let i = 0; i < 1000; i++) { large.push(i) } const result = flatten(large) t.is(result.length, 1000) t.is(result[0], 0) t.is(result[999], 999) }) test('flatten: test large nested array is flattened.', (t) => { const nested = [] for (let i = 0; i < 100; i++) { nested.push([i * 10, i * 10 + 1, i * 10 + 2]) } const result = flatten(nested) t.is(result.length, 300) t.is(result[0], 0) t.is(result[3], 10) }) test('flatten: test input array is not modified.', (t) => { const input = [1, [2, 3], 4] const inputCopy = JSON.stringify(input) flatten(input) t.is(JSON.stringify(input), inputCopy) })