1 #include "testlib/testlib_test.h"
2 //:
3 // \file
4 // Copyright 2006-2009 Brad King, Chuck Stewart
5 // Distributed under the Boost Software License, Version 1.0.
6 // (See accompanying file rgtl_license_1_0.txt or copy at
7 // http://www.boost.org/LICENSE_1_0.txt)
8 
9 #include <rgtl/rgtl_compact_tree.hxx>
10 #include <rgtl/rgtl_compact_tree_data_fixed.h>
11 
12 
13 typedef rgtl_compact_tree_data_fixed<3> tt0;
14 
15 template class rgtl_compact_tree_data_fixed<3>;
16 
17 template class rgtl_compact_tree<tt0::derived_arg0,
18                                  tt0::derived_arg1,
19                                  tt0::derived_arg2>;
20 
21 typedef rgtl_compact_tree_data_fixed<3, int, float> tt1;
22 template class rgtl_compact_tree_data_fixed<3, int, float>;
23 template class rgtl_compact_tree<tt1::derived_arg0,
24                                  tt1::derived_arg1,
25                                  tt1::derived_arg2>;
26 
27 static void
test_data_empty()28 test_data_empty()
29 {
30   typedef rgtl_compact_tree_data_fixed<3> tree_type;
31 
32   testlib_test_begin("empty data construct");
33   tree_type tree;
34   testlib_test_perform(true);
35 
36   testlib_test_begin("empty data subdivide");
37   tree_type::child_index_type c0;
38   tree_type::cell_index_type root;
39   tree.subdivide(root);
40   tree.subdivide(tree.get_child(root, c0));
41   testlib_test_perform(tree.has_children(root) &&
42                        tree.has_children(tree.get_child(root, c0)));
43 
44   testlib_test_begin("empty data collapse");
45   tree.collapse(tree.get_child(root, c0));
46   tree.collapse(root);
47   testlib_test_perform(!tree.has_children(root));
48 }
49 
50 static void
test_data_fixed()51 test_data_fixed()
52 {
53   typedef rgtl_compact_tree_data_fixed<3, int, float> tree_type;
54   testlib_test_begin("fixed data construct");
55   tree_type tree;
56   testlib_test_perform(true);
57 
58   testlib_test_begin("fixed data subdivide");
59   tree_type::child_index_type c0;
60   tree_type::cell_index_type root;
61   tree.subdivide(root);
62   tree_type::cell_index_type child0 = tree.get_child(root, c0);
63   tree.subdivide(child0);
64   tree_type::cell_index_type grandchild0 = tree.get_child(child0, c0);
65   testlib_test_perform(tree.has_children(root) &&
66                        tree.has_children(child0));
67 
68   testlib_test_begin("fixed data parents");
69   testlib_test_perform(!tree.get_parent(root) &&
70                        root == tree.get_parent(child0) &&
71                        child0 == tree.get_parent(grandchild0));
72 
73   testlib_test_begin("fixed data store node");
74   float nd = 1.2f;
75   tree.set_node_data(child0, &nd);
76   testlib_test_perform(true);
77 
78   testlib_test_begin("fixed data store leaf");
79   int ld = 1;
80   tree.set_leaf_data(grandchild0, &ld);
81   testlib_test_perform(true);
82 
83   testlib_test_begin("fixed data read node");
84   float const* pnd = tree.get_node_data(child0);
85   testlib_test_perform(pnd && *pnd == nd);
86 
87   testlib_test_begin("fixed data read leaf");
88   int const* pld = tree.get_leaf_data(grandchild0);
89   testlib_test_perform(pld && *pld == ld);
90 
91   testlib_test_begin("fixed data clear leaf");
92   tree.set_leaf_data(grandchild0, 0);
93   testlib_test_perform(true);
94 
95   testlib_test_begin("fixed data clear node");
96   tree.set_node_data(child0, 0);
97   testlib_test_perform(true);
98 
99   testlib_test_begin("fixed data collapse");
100   tree.collapse(child0);
101   tree.collapse(root);
102   testlib_test_perform(!tree.has_children(root));
103 }
104 
test_compact_tree_data_fixed()105 static void test_compact_tree_data_fixed()
106 {
107   test_data_empty();
108   test_data_fixed();
109 }
110 
111 TESTMAIN(test_compact_tree_data_fixed);
112