package main type testDecomposingData struct { TreeWeighted map[string]*WeightedNode Threshold uint16 Parts []SubTree } func getSmallTree() testDecomposingData { newTree := &Node{ ID: "1.0.0.0", Name: "/", Children: []*Node{ { ID: "1.1.0.0", Name: "folder1", Children: []*Node{ { ID: "1.1.1.0", Name: "folder1", Children: []*Node{ { ID: "1.1.1.1", Name: "folder1", Children: []*Node{}, }, { ID: "1.1.1.2", Name: "folder2", Children: []*Node{}, }, { ID: "1.1.1.3", Name: "folder3", Children: []*Node{}, }, }, }, { ID: "1.1.2.0", Name: "folder2", Children: []*Node{ { ID: "1.1.2.1", Name: "folder1", Children: []*Node{}, }, { ID: "1.1.2.2", Name: "folder2", Children: []*Node{}, }, { ID: "1.1.2.3", Name: "folder3", Children: []*Node{}, }, }, }, { ID: "1.1.3.0", Name: "folder3", Children: []*Node{ { ID: "1.1.3.1", Name: "folder1", Children: []*Node{}, }, { ID: "1.1.3.2", Name: "folder2", Children: []*Node{}, }, { ID: "1.1.3.3", Name: "folder3", Children: []*Node{}, }, }, }, }, }, { ID: "1.2.0.0", Name: "folder2", Children: []*Node{ { ID: "1.2.1.0", Name: "folder1", Children: []*Node{ { ID: "1.2.1.1", Name: "folder1", Children: []*Node{}, }, { ID: "1.2.1.2", Name: "folder2", Children: []*Node{}, }, { ID: "1.2.1.3", Name: "folder3", Children: []*Node{}, }, }, }, { ID: "1.2.2.0", Name: "folder2", Children: []*Node{ { ID: "1.2.2.1", Name: "folder1", Children: []*Node{}, }, { ID: "1.2.2.2", Name: "folder2", Children: []*Node{}, }, { ID: "1.2.2.3", Name: "folder3", Children: []*Node{}, }, }, }, { ID: "1.2.3.0", Name: "folder3", Children: []*Node{ { ID: "1.2.3.1", Name: "folder1", Children: []*Node{}, }, { ID: "1.2.3.2", Name: "folder2", Children: []*Node{}, }, { ID: "1.2.3.3", Name: "folder3", Children: []*Node{}, }, }, }, }, }, { ID: "1.3.0.0", Name: "folder3", Children: []*Node{ { ID: "1.3.1.0", Name: "folder1", Children: []*Node{ { ID: "1.3.1.1", Name: "folder1", Children: []*Node{}, }, { ID: "1.3.1.2", Name: "folder2", Children: []*Node{}, }, { ID: "1.3.1.3", Name: "folder3", Children: []*Node{}, }, }, }, { ID: "1.3.2.0", Name: "folder2", Children: []*Node{ { ID: "1.3.2.1", Name: "folder1", Children: []*Node{}, }, { ID: "1.3.2.2", Name: "folder2", Children: []*Node{}, }, { ID: "1.3.2.3", Name: "folder3", Children: []*Node{}, }, }, }, { ID: "1.3.3.0", Name: "folder3", Children: []*Node{ { ID: "1.3.3.1", Name: "folder1", Children: []*Node{}, }, { ID: "1.3.3.2", Name: "folder2", Children: []*Node{}, }, { ID: "1.3.3.3", Name: "folder3", Children: []*Node{}, }, }, }, }, }, }, } return testDecomposingData{ TreeWeighted: newTree.WeightingTreeWithStack(), Threshold: 200, Parts: []SubTree{ { path: "/folder1", tree: &Node{ ID: "1.1.1.0", Name: "folder1", Children: []*Node{ { ID: "1.1.1.1", Name: "folder1", Children: []*Node{}, }, { ID: "1.1.1.2", Name: "folder2", Children: []*Node{}, }, { ID: "1.1.1.3", Name: "folder3", Children: []*Node{}, }, }, }, }, { path: "/folder1", tree: &Node{ ID: "1.1.2.0", Name: "folder2", Children: []*Node{ { ID: "1.1.2.1", Name: "folder1", Children: []*Node{}, }, { ID: "1.1.2.2", Name: "folder2", Children: []*Node{}, }, { ID: "1.1.2.3", Name: "folder3", Children: []*Node{}, }, }, }, }, { path: "/folder1", tree: &Node{ ID: "1.1.3.0", Name: "folder3", Children: []*Node{ { ID: "1.1.3.1", Name: "folder1", Children: []*Node{}, }, { ID: "1.1.3.2", Name: "folder2", Children: []*Node{}, }, { ID: "1.1.3.3", Name: "folder3", Children: []*Node{}, }, }, }, }, { path: "/folder2", tree: &Node{ ID: "1.2.1.0", Name: "folder1", Children: []*Node{ { ID: "1.2.1.1", Name: "folder1", Children: []*Node{}, }, { ID: "1.2.1.2", Name: "folder2", Children: []*Node{}, }, { ID: "1.2.1.3", Name: "folder3", Children: []*Node{}, }, }, }, }, { path: "/folder2", tree: &Node{ ID: "1.2.2.0", Name: "folder2", Children: []*Node{ { ID: "1.2.2.1", Name: "folder1", Children: []*Node{}, }, { ID: "1.2.2.2", Name: "folder2", Children: []*Node{}, }, { ID: "1.2.2.3", Name: "folder3", Children: []*Node{}, }, }, }, }, { path: "/folder2", tree: &Node{ ID: "1.2.3.0", Name: "folder3", Children: []*Node{ { ID: "1.2.3.1", Name: "folder1", Children: []*Node{}, }, { ID: "1.2.3.2", Name: "folder2", Children: []*Node{}, }, { ID: "1.2.3.3", Name: "folder3", Children: []*Node{}, }, }, }, }, { path: "/folder3", tree: &Node{ ID: "1.3.1.0", Name: "folder1", Children: []*Node{ { ID: "1.3.1.1", Name: "folder1", Children: []*Node{}, }, { ID: "1.3.1.2", Name: "folder2", Children: []*Node{}, }, { ID: "1.3.1.3", Name: "folder3", Children: []*Node{}, }, }, }, }, { path: "/folder3", tree: &Node{ ID: "1.3.2.0", Name: "folder2", Children: []*Node{ { ID: "1.3.2.1", Name: "folder1", Children: []*Node{}, }, { ID: "1.3.2.2", Name: "folder2", Children: []*Node{}, }, { ID: "1.3.2.3", Name: "folder3", Children: []*Node{}, }, }, }, }, { path: "/folder3", tree: &Node{ ID: "1.3.3.0", Name: "folder3", Children: []*Node{ { ID: "1.3.3.1", Name: "folder1", Children: []*Node{}, }, { ID: "1.3.3.2", Name: "folder2", Children: []*Node{}, }, { ID: "1.3.3.3", Name: "folder3", Children: []*Node{}, }, }, }, }, { path: "/", tree: &Node{ ID: "1.0.0.0", Name: "/", Children: []*Node{ { ID: "1.1.0.0", Name: "folder1", Children: []*Node{}, }, { ID: "1.2.0.0", Name: "folder2", Children: []*Node{}, }, { ID: "1.3.0.0", Name: "folder3", Children: []*Node{}, }, }, }, }, }, } } func getSingleNodeTree() testDecomposingData { newTree := &Node{ ID: "1.0.0.0", Name: "/", Children: []*Node{}, } return testDecomposingData{ TreeWeighted: newTree.WeightingTreeWithStack(), Threshold: 200, Parts: []SubTree{ { path: "/", tree: &Node{ ID: "1.0.0.0", Name: "/", Children: []*Node{}, }, }, }, } } func getDeepTree() testDecomposingData { newTree := &Node{ ID: "1", Name: "/", Children: []*Node{ { ID: "1.2", Name: "folder2", Children: []*Node{ { ID: "1.2.3", Name: "folder3", Children: []*Node{ { ID: "1.2.3.4", Name: "folder4", Children: []*Node{ { ID: "1.2.3.4.5", Name: "folder5", Children: []*Node{ { ID: "1.2.3.4.5.6", Name: "folder6", Children: []*Node{ { ID: "1.2.3.4.5.6.7", Name: "folder7", Children: []*Node{ { ID: "1.2.3.4.5.6.7.8", Name: "folder8", Children: []*Node{ { ID: "1.2.3.4.5.6.7.8.9", Name: "folder9", Children: []*Node{ { ID: "1.2.3.4.5.6.7.8.9.0", Name: "folder0", Children: []*Node{ { ID: "1.2.3.4.5.6.7.8.9.0.A", Name: "folderA", Children: []*Node{}, }, }, }, }, }, }, }, }, }, }, }, }, }, }, }, }, }, }, }, }, } return testDecomposingData{ TreeWeighted: newTree.WeightingTreeWithStack(), Threshold: 200, Parts: []SubTree{ { path: "/folder2/folder3/folder4/folder5/folder6/folder7/folder8", tree: &Node{ ID: "1.2.3.4.5.6.7.8.9", Name: "folder9", Children: []*Node{ { ID: "1.2.3.4.5.6.7.8.9.0", Name: "folder0", Children: []*Node{ { ID: "1.2.3.4.5.6.7.8.9.0.A", Name: "folderA", Children: []*Node{}, }, }, }, }, }, }, { path: "/folder2/folder3/folder4/folder5", tree: &Node{ ID: "1.2.3.4.5.6", Name: "folder6", Children: []*Node{ { ID: "1.2.3.4.5.6.7", Name: "folder7", Children: []*Node{ { ID: "1.2.3.4.5.6.7.8", Name: "folder8", Children: []*Node{}, }, }, }, }, }, }, { path: "/", tree: &Node{ ID: "1.2", Name: "folder2", Children: []*Node{ { ID: "1.2.3", Name: "folder3", Children: []*Node{ { ID: "1.2.3.4", Name: "folder4", Children: []*Node{ { ID: "1.2.3.4.5", Name: "folder5", Children: []*Node{}, }, }, }, }, }, }, }, }, { path: "/", tree: &Node{ ID: "1", Name: "/", Children: []*Node{}, }, }, }, } } func getWideTree() testDecomposingData { newTree := &Node{ ID: "0", Name: "/", Children: []*Node{ { ID: "0.1", Name: "folder01", Children: []*Node{ { ID: "0.1.1", Name: "folder011", Children: []*Node{ { ID: "0.1.1.1", Name: "folder0111", Children: []*Node{}, }, { ID: "0.1.1.2", Name: "folder0112", Children: []*Node{}, }, { ID: "0.1.1.3", Name: "folder0113", Children: []*Node{}, }, { ID: "0.1.1.4", Name: "folder0114", Children: []*Node{}, }, { ID: "0.1.1.5", Name: "folder0115", Children: []*Node{}, }, { ID: "0.1.1.6", Name: "folder0116", Children: []*Node{}, }, { ID: "0.1.1.7", Name: "folder0117", Children: []*Node{}, }, { ID: "0.1.1.8", Name: "folder0118", Children: []*Node{}, }, { ID: "0.1.1.9", Name: "folder0119", Children: []*Node{}, }, }, }, }, }, }, } return testDecomposingData{ TreeWeighted: newTree.WeightingTreeWithStack(), Threshold: 60, Parts: []SubTree{ { path: "/folder01/folder011", tree: &Node{ ID: "0.1.1.1", Name: "folder0111", Children: []*Node{}, }, }, { path: "/folder01/folder011", tree: &Node{ ID: "0.1.1.2", Name: "folder0112", Children: []*Node{}, }, }, { path: "/folder01/folder011", tree: &Node{ ID: "0.1.1.3", Name: "folder0113", Children: []*Node{}, }, }, { path: "/folder01/folder011", tree: &Node{ ID: "0.1.1.4", Name: "folder0114", Children: []*Node{}, }, }, { path: "/folder01/folder011", tree: &Node{ ID: "0.1.1.5", Name: "folder0115", Children: []*Node{}, }, }, { path: "/folder01/folder011", tree: &Node{ ID: "0.1.1.6", Name: "folder0116", Children: []*Node{}, }, }, { path: "/folder01/folder011", tree: &Node{ ID: "0.1.1.7", Name: "folder0117", Children: []*Node{}, }, }, { path: "/folder01/folder011", tree: &Node{ ID: "0.1.1.8", Name: "folder0118", Children: []*Node{}, }, }, { path: "/folder01/folder011", tree: &Node{ ID: "0.1.1.9", Name: "folder0119", Children: []*Node{}, }, }, { path: "/folder01", tree: &Node{ ID: "0.1.1", Name: "folder011", Children: []*Node{}, }, }, { path: "/", tree: &Node{ ID: "0.1", Name: "folder01", Children: []*Node{}, }, }, { path: "/", tree: &Node{ ID: "0", Name: "/", Children: []*Node{}, }, }, }, } } func getAssimmetricTree() testDecomposingData { newTree := &Node{ ID: "0", Name: "/", Children: []*Node{ { ID: "01", Name: "folder1", Children: []*Node{ { ID: "011", Name: "folder11", Children: []*Node{ { ID: "0111", Name: "folder111", Children: []*Node{}, }, }, }, { ID: "012", Name: "folder12", Children: []*Node{}, }, { ID: "013", Name: "folder13", Children: []*Node{ { ID: "0131", Name: "folder131", Children: []*Node{ { ID: "01311", Name: "folder1311", Children: []*Node{ { ID: "013111", Name: "folder13111", Children: []*Node{ { ID: "0131111", Name: "folder131111", Children: []*Node{}, }, { ID: "0131112", Name: "folder131112", Children: []*Node{}, }, }, }, }, }, }, }, { ID: "0132", Name: "folder132", Children: []*Node{ { ID: "01321", Name: "folder1321", Children: []*Node{}, }, }, }, { ID: "0133", Name: "folder133", Children: []*Node{}, }, }, }, }, }, { ID: "02", Name: "folder2", Children: []*Node{}, }, { ID: "03", Name: "folder3", Children: []*Node{}, }, { ID: "04", Name: "folder4", Children: []*Node{}, }, }, } return testDecomposingData{ TreeWeighted: newTree.WeightingTreeWithStack(), Threshold: 220, Parts: []SubTree{ { path: "/folder1/folder13/folder131", tree: &Node{ ID: "01311", Name: "folder1311", Children: []*Node{ { ID: "013111", Name: "folder13111", Children: []*Node{ { ID: "0131111", Name: "folder131111", Children: []*Node{}, }, { ID: "0131112", Name: "folder131112", Children: []*Node{}, }, }, }, }, }, }, { path: "/folder1/folder13", tree: &Node{ ID: "0132", Name: "folder132", Children: []*Node{ { ID: "01321", Name: "folder1321", Children: []*Node{}, }, }, }, }, { path: "/folder1", tree: &Node{ ID: "013", Name: "folder13", Children: []*Node{ { ID: "0131", Name: "folder131", Children: []*Node{}, }, { ID: "0133", Name: "folder133", Children: []*Node{}, }, }, }, }, { path: "/", tree: &Node{ ID: "01", Name: "folder1", Children: []*Node{ { ID: "011", Name: "folder11", Children: []*Node{ { ID: "0111", Name: "folder111", Children: []*Node{}, }, }, }, { ID: "012", Name: "folder12", Children: []*Node{}, }, }, }, }, { path: "/", tree: &Node{ ID: "0", Name: "/", Children: []*Node{ { ID: "04", Name: "folder4", Children: []*Node{}, }, { ID: "02", Name: "folder2", Children: []*Node{}, }, { ID: "03", Name: "folder3", Children: []*Node{}, }, }, }, }, }, } }