void TestTreeFunction()
{
	TestData data[] = {
		{ 0, "/" },
		{ 1, "home" },
		{ 2, "usr" },
		{ 3, "var" },
		{ 4, "user" },
		{ 5, "muggle" },
		{ 6, "bin" },
		{ 7, "include" },
		{ 8, "local" },
		{ 9, "lib" },
		{ 10, "sbin" },
		{ 11, "src" },
	};

	// init
	TTreeNode<TestData>* root = TTreeNode<TestData>::Create(data[0]);
	TTreeNode<TestData>* home = root->AddChild(TTreeNode<TestData>::Create(data[1]));
	TTreeNode<TestData>* usr = root->AddChild(TTreeNode<TestData>::Create(data[2]));
	root->AddChild(TTreeNode<TestData>::Create(data[3]));
	home->AddChild(TTreeNode<TestData>::Create(data[4]));
	home->AddChild(TTreeNode<TestData>::Create(data[5]));
	usr->AddChild(TTreeNode<TestData>::Create(data[6]));
	usr->AddChild(TTreeNode<TestData>::Create(data[7]));
	TTreeNode<TestData>* local = usr->AddChild(TTreeNode<TestData>::Create(data[8]));
	local->AddChild(TTreeNode<TestData>::Create(data[9]));
	local->AddChild(TTreeNode<TestData>::Create(data[10]));
	local->AddChild(TTreeNode<TestData>::Create(data[11]));

	TTreeNode<TestData>* copy_root = TTreeNode<TestData>::Create(*root);

	TestTNodeFunction(root);
	TestTTreeFunction(copy_root);
}