import { assert, expect, test } from 'vitest'; import { TreeNode } from '../src/types/tree'; test('Tree of numbers', () => { const VALUE_NOT_UNDER_TEST = -1000; const TEST_VALUE_1 = 1; const TEST_VALUE_10 = 10; const TEST_VALUE_100 = 100; const ZERO_CHILDREN = 0; const ONE_CHILD = 1; const TWO_CHILDREN = 2; const THREE_CHILDREN = 3; let fluentNode = TreeNode.createRoot(TEST_VALUE_1); expect(fluentNode.value).toBe(TEST_VALUE_1); expect(fluentNode.children.length).toBe(ZERO_CHILDREN); fluentNode = fluentNode.addChild(TEST_VALUE_10); expect(fluentNode.value).toBe(TEST_VALUE_10); expect(fluentNode.parent().value).toBe(TEST_VALUE_1); expect(fluentNode.children.length).toBe(ZERO_CHILDREN); expect(fluentNode.parent().children.length).toBe(ONE_CHILD); fluentNode = fluentNode.addChild(TEST_VALUE_100); expect(fluentNode.value).toBe(TEST_VALUE_100); expect(fluentNode.parent().value).toBe(TEST_VALUE_10); expect(fluentNode.parent().parent().value).toBe(TEST_VALUE_1); expect(fluentNode.parent().parent()).toBe(fluentNode.root()); expect(fluentNode.parent().parent().parent().parent().parent().parent().value).toBe(TEST_VALUE_1); expect(fluentNode.root().value).toBe(TEST_VALUE_1); expect(fluentNode.root().root().root().root().root().root().root().value).toBe(TEST_VALUE_1); fluentNode = fluentNode.root(); expect(fluentNode.value).toBe(TEST_VALUE_1); expect(fluentNode.children.length).toBe(ONE_CHILD); expect(fluentNode.children[0].children.length).toBe(ONE_CHILD); expect(fluentNode.children[0].children[0].children.length).toBe(ZERO_CHILDREN); expect(fluentNode.is(value => value === TEST_VALUE_1)).toBe(true); expect(fluentNode.is(value => value === TEST_VALUE_10)).toBe(false); expect(fluentNode.is(value => value === TEST_VALUE_100)).toBe(false); expect(fluentNode.is(value => value === VALUE_NOT_UNDER_TEST)).toBe(false); expect(fluentNode.findOne(value => value === TEST_VALUE_1)?.value).toBe(TEST_VALUE_1); expect(fluentNode.findOne(value => value === TEST_VALUE_10)?.value).toBe(TEST_VALUE_10); expect(fluentNode.findOne(value => value === TEST_VALUE_100)?.value).toBe(undefined); expect(fluentNode.findOne(value => value === TEST_VALUE_1)?.value).toBe(TEST_VALUE_1); expect(fluentNode.findOne(value => value === VALUE_NOT_UNDER_TEST)).toBe(undefined); expect(fluentNode.findOneRecursive(value => value === TEST_VALUE_1)?.value).toBe(TEST_VALUE_1); expect(fluentNode.findOneRecursive(value => value === TEST_VALUE_10)?.value).toBe(TEST_VALUE_10); expect(fluentNode.findOneRecursive(value => value === TEST_VALUE_100)?.value).toBe(TEST_VALUE_100); expect(fluentNode.findOneRecursive(value => value === VALUE_NOT_UNDER_TEST)).toBe(undefined); expect(fluentNode.findAll(value => value === TEST_VALUE_1).length).toBe(ONE_CHILD); expect(fluentNode.findAll(value => value === TEST_VALUE_1)[0].value).toBe(TEST_VALUE_1); expect(fluentNode.findAll(value => value === TEST_VALUE_10).length).toBe(ONE_CHILD); expect(fluentNode.findAll(value => value === TEST_VALUE_10)[0].value).toBe(TEST_VALUE_10); expect(fluentNode.findAll(value => value === TEST_VALUE_100).length).toBe(ZERO_CHILDREN); expect(fluentNode.findAll(value => value === VALUE_NOT_UNDER_TEST).length).toBe(ZERO_CHILDREN); expect(fluentNode.findAll(value => value >= TEST_VALUE_1).length).toBe(TWO_CHILDREN); expect(fluentNode.findAll(value => value >= TEST_VALUE_1)[0].value).toBe(TEST_VALUE_1); expect(fluentNode.findAll(value => value >= TEST_VALUE_1)[1].value).toBe(TEST_VALUE_10); expect(fluentNode.findAll(value => value >= TEST_VALUE_10).length).toBe(ONE_CHILD); expect(fluentNode.findAll(value => value >= TEST_VALUE_10)[0].value).toBe(TEST_VALUE_10); expect(fluentNode.findAllRecursive(value => value === TEST_VALUE_1).length).toBe(ONE_CHILD); expect(fluentNode.findAllRecursive(value => value === TEST_VALUE_1)[0].value).toBe(TEST_VALUE_1); expect(fluentNode.findAllRecursive(value => value === TEST_VALUE_10).length).toBe(ONE_CHILD); expect(fluentNode.findAllRecursive(value => value === TEST_VALUE_10)[0].value).toBe(TEST_VALUE_10); expect(fluentNode.findAllRecursive(value => value === TEST_VALUE_100).length).toBe(ONE_CHILD); expect(fluentNode.findAllRecursive(value => value === TEST_VALUE_100)[0].value).toBe(TEST_VALUE_100); expect(fluentNode.findAllRecursive(value => value === VALUE_NOT_UNDER_TEST).length).toBe(ZERO_CHILDREN); expect(fluentNode.findAllRecursive(value => value >= TEST_VALUE_1).length).toBe(THREE_CHILDREN); expect(fluentNode.findAllRecursive(value => value >= TEST_VALUE_1)[0].value).toBe(TEST_VALUE_1); expect(fluentNode.findAllRecursive(value => value >= TEST_VALUE_1)[1].value).toBe(TEST_VALUE_10); expect(fluentNode.findAllRecursive(value => value >= TEST_VALUE_1)[2].value).toBe(TEST_VALUE_100); expect(fluentNode.getAllNodes().length).toBe(THREE_CHILDREN); expect(fluentNode.getAllNodes()[0].value).toBe(TEST_VALUE_1); expect(fluentNode.getAllNodes()[1].value).toBe(TEST_VALUE_10); expect(fluentNode.getAllNodes()[2].value).toBe(TEST_VALUE_100); })