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: "/folder1/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: "/folder1/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 getAssimmetricTree() 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{}, }, }, }, }, }, } }