From acbda29f838280ba98cf9e9e539e9d8a6e8fc6ad Mon Sep 17 00:00:00 2001 From: David Robillard Date: Fri, 9 Jun 2006 15:07:31 +0000 Subject: Added Om aka Graph aka god knows what git-svn-id: http://svn.drobilla.net/lad/grauph@9 a436a847-0d15-0410-975c-d299462d15a1 --- src/engine/tests/.deps/list_test.Po | 1 + src/engine/tests/.deps/node_tree_test.Po | 1 + src/engine/tests/.deps/path_test.Po | 1 + src/engine/tests/.deps/queue_test.Po | 1 + src/engine/tests/Makefile.am | 27 +++++++++ src/engine/tests/list_test.cpp | 93 +++++++++++++++++++++++++++++++ src/engine/tests/node_tree_test.cpp | 94 ++++++++++++++++++++++++++++++++ src/engine/tests/old_node_tree_test.cpp | 72 ++++++++++++++++++++++++ src/engine/tests/queue_test.cpp | 47 ++++++++++++++++ 9 files changed, 337 insertions(+) create mode 100644 src/engine/tests/.deps/list_test.Po create mode 100644 src/engine/tests/.deps/node_tree_test.Po create mode 100644 src/engine/tests/.deps/path_test.Po create mode 100644 src/engine/tests/.deps/queue_test.Po create mode 100644 src/engine/tests/Makefile.am create mode 100644 src/engine/tests/list_test.cpp create mode 100644 src/engine/tests/node_tree_test.cpp create mode 100644 src/engine/tests/old_node_tree_test.cpp create mode 100644 src/engine/tests/queue_test.cpp (limited to 'src/engine/tests') diff --git a/src/engine/tests/.deps/list_test.Po b/src/engine/tests/.deps/list_test.Po new file mode 100644 index 00000000..9ce06a81 --- /dev/null +++ b/src/engine/tests/.deps/list_test.Po @@ -0,0 +1 @@ +# dummy diff --git a/src/engine/tests/.deps/node_tree_test.Po b/src/engine/tests/.deps/node_tree_test.Po new file mode 100644 index 00000000..9ce06a81 --- /dev/null +++ b/src/engine/tests/.deps/node_tree_test.Po @@ -0,0 +1 @@ +# dummy diff --git a/src/engine/tests/.deps/path_test.Po b/src/engine/tests/.deps/path_test.Po new file mode 100644 index 00000000..9ce06a81 --- /dev/null +++ b/src/engine/tests/.deps/path_test.Po @@ -0,0 +1 @@ +# dummy diff --git a/src/engine/tests/.deps/queue_test.Po b/src/engine/tests/.deps/queue_test.Po new file mode 100644 index 00000000..9ce06a81 --- /dev/null +++ b/src/engine/tests/.deps/queue_test.Po @@ -0,0 +1 @@ +# dummy diff --git a/src/engine/tests/Makefile.am b/src/engine/tests/Makefile.am new file mode 100644 index 00000000..54f6ad1f --- /dev/null +++ b/src/engine/tests/Makefile.am @@ -0,0 +1,27 @@ +if BUILD_UNIT_TESTS + +AM_CXXFLAGS = @JACK_CFLAGS@ @LOSC_CFLAGS@ @ALSA_CFLAGS@ -I../../common +common_ldadd = @JACK_LIBS@ @LOSC_LIBS@ @ALSA_LIBS@ -lrt +node_tree_test_LDADD = $(common_ldadd) +queue_test_LDADD = $(common_ldadd) + +bin_PROGRAMS = node_tree_test queue_test list_test path_test + +list_test_SOURCES = \ + ../List.h \ + list_test.cpp + +path_test_SOURCES = \ + ../../common/Path.h \ + path_test.cpp + +node_tree_test_SOURCES = \ + node_tree_test.cpp \ + ../Tree.h \ + ../TreeImplementation.h + +queue_test_SOURCES = \ + queue_test.cpp \ + ../../common/Queue.h + +endif # BUILD_UNIT_TESTS diff --git a/src/engine/tests/list_test.cpp b/src/engine/tests/list_test.cpp new file mode 100644 index 00000000..d2f91c9d --- /dev/null +++ b/src/engine/tests/list_test.cpp @@ -0,0 +1,93 @@ +#include "../List.h" +#include +#include + +using std::cout; using std::endl; + + +int main() +{ + List l; + + l.push_back(new ListNode(1)); + l.push_back(new ListNode(2)); + l.push_back(new ListNode(3)); + l.push_back(new ListNode(4)); + l.push_back(new ListNode(5)); + l.push_back(new ListNode(6)); + l.push_back(new ListNode(7)); + l.push_back(new ListNode(8)); + + cout << "List:" << endl; + for (List::iterator i = l.begin(); i != l.end(); ++i) { + cout << *i << endl; + } + cout << endl; + + + for (List::iterator i = l.begin(); i != l.end(); ++i) { + if ((*i) == 4) + l.remove(i); + } + + std::cerr << "Removed 4 (by iterator)...\n"; + for (List::iterator i = l.begin(); i != l.end(); ++i) { + cout << *i << endl; + } + cout << endl; + + l.remove(1); + + std::cerr << "Removed 1 (head) (by value)...\n"; + for (List::iterator i = l.begin(); i != l.end(); ++i) { + cout << *i << endl; + } + cout << endl; + + for (List::iterator i = l.begin(); i != l.end(); ++i) { + if ((*i) == 2) + l.remove(i); + } + + std::cerr << "Removed 2 (head) (by iterator)...\n"; + for (List::iterator i = l.begin(); i != l.end(); ++i) { + cout << *i << endl; + } + cout << endl; + + l.remove(5); + + std::cerr << "Removed 5 (by value)...\n"; + for (List::iterator i = l.begin(); i != l.end(); ++i) { + cout << *i << endl; + } + cout << endl; + + l.remove(8); + + std::cerr << "Removed 8 (tail) (by value)...\n"; + for (List::iterator i = l.begin(); i != l.end(); ++i) { + cout << *i << endl; + } + cout << endl; + + for (List::iterator i = l.begin(); i != l.end(); ++i) { + if ((*i) == 7) + l.remove(i); + } + + std::cerr << "Removed 7 (tail) (by iterator)...\n"; + for (List::iterator i = l.begin(); i != l.end(); ++i) { + cout << *i << endl; + } + cout << endl; + + List r; + r.push_back(new ListNode(9)); + r.remove(9); + std::cerr << "Should not see ANY numbers:\n"; + for (List::iterator i = r.begin(); i != r.end(); ++i) { + cout << *i << endl; + } + return 0; +} diff --git a/src/engine/tests/node_tree_test.cpp b/src/engine/tests/node_tree_test.cpp new file mode 100644 index 00000000..2bce9b97 --- /dev/null +++ b/src/engine/tests/node_tree_test.cpp @@ -0,0 +1,94 @@ +#include +#include +#include +#include "../Tree.h" +#include "../TreeImplementation.h" + +using std::vector; +using std::cout; using std::cerr; using std::endl; + +static const uint NUM_NODES = 20; + +int +main() +{ + cout << "\n\n\n\n"; + + Tree tree; + vector names; + vector in_tree; // arrays + uint num_in_tree = 0; + + + string name; + + for (uint i=0; i < NUM_NODES; ++i) { + name = (char)(i+'A'); + TreeNode* n = new TreeNode(name, name); + tree.insert(n); + names.push_back(name); + in_tree.push_back(true); + ++num_in_tree; + } + + cout << "Added " << NUM_NODES << " nodes." << endl; + cout << "Tree size: " << tree.size() << endl << endl; + + cout << "Tree contents: " << endl; + for (Tree::iterator i = tree.begin(); i != tree.end(); ++i) { + cout << (*i) << ", "; + } + cout << endl; + + + while (true) { + bool insert; + int num = rand() % NUM_NODES; + + if (num_in_tree == 0) + insert = true; + else if (num_in_tree == NUM_NODES) + insert = false; + else { + while (true) { + insert = rand() % 2; + num = rand() % NUM_NODES; + if ((insert && !in_tree[num]) || (!insert && in_tree[num])) + break; + } + } + + string name = names[num]; + + if (insert) { + assert(in_tree[num] == false); + cout << "\nInserting '" << name << "'" << endl; + tree.insert(new TreeNode(name, name)); + in_tree[num] = true; + ++num_in_tree; + cout << "Tree size: " << tree.size() << endl; + assert(num_in_tree == tree.size()); + } else { + assert(in_tree[num] == true); + cout << "\nRemoving '" << name << "'" << endl; + TreeNode* removed = tree.remove(name); + assert(removed != NULL); + assert(removed->node() == name); + assert(removed->key() == name); + delete removed; + in_tree[num] = false; + assert(names[num] == name); + --num_in_tree; + cout << "Tree size: " << tree.size() << endl; + assert(num_in_tree == tree.size()); + } + assert(num_in_tree == tree.size()); + cout << "Tree contents: " << endl; + for (Tree::iterator i = tree.begin(); i != tree.end(); ++i) { + cout << (*i) << ", "; + } + cout << endl; + } + + return 0; +} diff --git a/src/engine/tests/old_node_tree_test.cpp b/src/engine/tests/old_node_tree_test.cpp new file mode 100644 index 00000000..3b5ed485 --- /dev/null +++ b/src/engine/tests/old_node_tree_test.cpp @@ -0,0 +1,72 @@ +#include +#include "../NodeTree.h" +#include "../NodeBase.h" + +using std::cout; using std::cerr; using std::endl; + +int main() +{ + cout << "\n\n\n\n"; + + NodeBase* n = NULL; + TreeNode* tn = NULL; + TreeNode* baz = NULL; + TreeNode* quuux = NULL; + TreeNode* bar = NULL; + + NodeTree tree; + n = new NodeBase("foo", 0, 0, 0); + tn = new TreeNode(n); + tree.insert(tn); + n = new NodeBase("bar", 0, 0, 0); + bar = new TreeNode(n); + tree.insert(bar); + n = new NodeBase("baz", 0, 0, 0); + baz = new TreeNode(n); + tree.insert(baz); + n = new NodeBase("quux", 0, 0, 0); + tn = new TreeNode(n); + tree.insert(tn); + n = new NodeBase("quuux", 0, 0, 0); + quuux = new TreeNode(n); + tree.insert(quuux); + n = new NodeBase("quuuux", 0, 0, 0); + tn = new TreeNode(n); + tree.insert(tn); + + + cout << "Added 6 nodes." << endl; + cout << "Tree size: " << tree.size() << endl << endl; + + cout << "Iterating: " << endl; + for (NodeTree::iterator i = tree.begin(); i != tree.end(); ++i) { + cout << (*i)->name() << endl; + } + + cout << endl << "Search 'foo' - " << tree.find("foo")->name() << endl; + cout << endl << "Search 'bar' - " << tree.find("bar")->name() << endl; + cout << endl << "Search 'baz' - " << tree.find("baz")->name() << endl; + cout << endl << "Search 'quux' - " << tree.find("quux")->name() << endl; + cout << endl << "Search 'quuux' - " << tree.find("quuux")->name() << endl; + cout << endl << "Search 'quuuux' - " << tree.find("quuuux")->name() << endl; + cout << endl << "Search 'dave' - " << tree.find("dave") << endl; + cout << endl << "Search 'fo' - " << tree.find("fo") << endl << endl; + + cout << "Removing 'baz'." << endl; + tree.remove(baz); + + cout << "Iterating: " << endl; + for (NodeTree::iterator i = tree.begin(); i != tree.end(); ++i) { + cout << (*i)->name() << endl; + } + + cout << "Removing 'bar' (the root): " << endl; + tree.remove(bar); + + cout << "Iterating: " << endl; + for (NodeTree::iterator i = tree.begin(); i != tree.end(); ++i) { + cout << (*i)->name() << endl; + } + + return 0; +} diff --git a/src/engine/tests/queue_test.cpp b/src/engine/tests/queue_test.cpp new file mode 100644 index 00000000..3381a329 --- /dev/null +++ b/src/engine/tests/queue_test.cpp @@ -0,0 +1,47 @@ +#include +#include +#include "../../common/Queue.h" + +using std::string; using std::cerr; using std::cout; using std::endl; + + +int main() +{ + Queue q(10); + + cout << "New queue. Should be empty: " << q.is_empty() << endl; + cout << "Capacity: " << q.capacity() << endl; + cout << "Fill: " << q.fill() << endl; + + for (uint i=0; i < 5; ++i) { + q.push(i); + assert(!q.is_full()); + q.pop(); + } + cout << "Pushed and popped 5 elements. Queue should be empty: " << q.is_empty() << endl; + cout << "Fill: " << q.fill() << endl; + + for (uint i=10; i < 20; ++i) { + q.push(i); + } + cout << "Pushed 10 elements. Queue should be full: " << q.is_full() << endl; + cout << "Fill: " << q.fill() << endl; + + cout << "The digits 10->19 should print: " << endl; + while (!q.is_empty()) { + int foo = q.pop(); + cout << "Popped: " << foo << endl; + } + cout << "Queue should be empty: " << q.is_empty() << endl; + cout << "Fill: " << q.fill() << endl; + + cout << "Attempting to add eleven elements to queue of size 10. Only first 10 should succeed:" << endl; + for (uint i=20; i <= 39; ++i) { + cout << i; + cout << " - Fill: " << q.fill(); + cout << ", is full: " << q.is_full(); + cout << ", succeeded: " << q.push(i) << endl; + } + + return 0; +} -- cgit v1.2.1