[Scummvm-cvs-logs] SF.net SVN: scummvm:[41815] tools/branches/gsoc2009-decompiler/decompiler
kjdf at users.sourceforge.net
kjdf at users.sourceforge.net
Tue Jun 23 20:36:24 CEST 2009
Revision: 41815
http://scummvm.svn.sourceforge.net/scummvm/?rev=41815&view=rev
Author: kjdf
Date: 2009-06-23 18:36:24 +0000 (Tue, 23 Jun 2009)
Log Message:
-----------
decompiler: added tests for intervals
Modified Paths:
--------------
tools/branches/gsoc2009-decompiler/decompiler/Makefile
tools/branches/gsoc2009-decompiler/decompiler/graph.h
Added Paths:
-----------
tools/branches/gsoc2009-decompiler/decompiler/test/test_graph.h
Removed Paths:
-------------
tools/branches/gsoc2009-decompiler/decompiler/intv.cc
tools/branches/gsoc2009-decompiler/decompiler/test/graph.h
Modified: tools/branches/gsoc2009-decompiler/decompiler/Makefile
===================================================================
--- tools/branches/gsoc2009-decompiler/decompiler/Makefile 2009-06-23 18:35:27 UTC (rev 41814)
+++ tools/branches/gsoc2009-decompiler/decompiler/Makefile 2009-06-23 18:36:24 UTC (rev 41815)
@@ -67,8 +67,8 @@
rm -f *.o $(TARGETS)
test:
- cxxtest/cxxtestgen.pl --error-printer -o test_runner.cpp test/graph.h
- g++ -Icxxtest -o test_runner test_runner.cpp
+ cxxtest/cxxtestgen.pl --error-printer --abort-on-fail --have-eh -o test_runner.cpp test/test_graph.h
+ g++ -I. -Icxxtest -o test_runner test_runner.cpp
./test_runner
Modified: tools/branches/gsoc2009-decompiler/decompiler/graph.h
===================================================================
--- tools/branches/gsoc2009-decompiler/decompiler/graph.h 2009-06-23 18:35:27 UTC (rev 41814)
+++ tools/branches/gsoc2009-decompiler/decompiler/graph.h 2009-06-23 18:36:24 UTC (rev 41815)
@@ -2,6 +2,7 @@
#define GRAPH_H
#include <list>
+#include <map>
#include <set>
#include <sstream>
@@ -12,7 +13,7 @@
template<typename Data>
-struct Graph : boost::noncopyable {
+struct Graph {
struct Node : boost::noncopyable {
@@ -22,6 +23,10 @@
return _out;
}
+ Node *interval() const {
+ return _interval;
+ }
+
private:
friend class Graph;
@@ -33,7 +38,7 @@
std::list<Node*> _in;
std::list<Node*> _out;
- Node(const Data &data) : _data(data), _hidden(false), _interval(0), _primitive(0) {
+ Node(const Data &data) : _data(data), _hidden(), _interval(), _primitive() {
}
~Node() {
@@ -45,6 +50,22 @@
Graph() {
}
+ Graph(const Graph &g) {
+ std::map<Node*, Node*> trans;
+ g.removeHiddenNodes();
+ foreach (Node *u, g._nodes)
+ trans[u] = addNode(u->_data);
+ foreach (Node *u, g._nodes) {
+ foreach (Node *v, u->_in)
+ trans[u]->_in.push_back(trans[v]);
+ foreach (Node *v, u->_out)
+ trans[u]->_in.push_back(trans[v]);
+ if (u->_interval)
+ trans[u]->_interval = trans[u->_interval];
+ trans[u]->_primary = u->_primary;
+ }
+ }
+
~Graph() {
foreach (Node *u, _nodes)
delete u;
@@ -91,24 +112,7 @@
return Graph();
}
-
- Graph(const Graph &g) {
- map<Node*, Node*> trans;
- foreach (Node *u, g._nodes)
- trans[u] = addNode(u->_data);
- foreach (Node *u, g._nodes) {
- foreach (Node *v, u->_in)
- trans[u]->_in.push_back(trans[v]);
- foreach (Node *v, u->_out)
- trans[u]->_in.push_back(trans[v]);
- }
- }
-
void test(int level=0) {
- if (level == 0)
- cout << _nodes.size();
- else
- derive().test(level-1);
}
void assignIntervals(Node *start) {
Deleted: tools/branches/gsoc2009-decompiler/decompiler/intv.cc
===================================================================
--- tools/branches/gsoc2009-decompiler/decompiler/intv.cc 2009-06-23 18:35:27 UTC (rev 41814)
+++ tools/branches/gsoc2009-decompiler/decompiler/intv.cc 2009-06-23 18:36:24 UTC (rev 41815)
@@ -1,78 +0,0 @@
-#include <iostream>
-#include <map>
-using namespace std;
-
-#include "graph.h"
-
-typedef Graph<int> graph;
-typedef graph::Node *node;
-
-
-string printer(int i) {
- ostringstream ret;
- ret << i;
- return ret.str();
-}
-
-int main1() {
- graph g;
- node n1 = g.addNode(1);
- node n2 = g.addNode(2);
- node n3 = g.addNode(3);
- node n4 = g.addNode(4);
- node n5 = g.addNode(5);
- node n6 = g.addNode(6);
- g.addEdge(n1, n2);
- g.addEdge(n2, n3);
- g.addEdge(n2, n5);
- g.addEdge(n3, n4);
- g.addEdge(n4, n2);
- g.addEdge(n5, n1);
- g.addEdge(n5, n6);
- g.assignIntervals(n1);
- cout << g.graphvizPrint(printer);
- return 0;
-}
-
-int main() {
- graph g;
- node n1 = g.addNode(1);
- node n2 = g.addNode(2);
- node n3 = g.addNode(3);
- node n4 = g.addNode(4);
- node n5 = g.addNode(5);
- node n6 = g.addNode(6);
- node n7 = g.addNode(7);
- node n8 = g.addNode(8);
- node n9 = g.addNode(9);
- node n10 = g.addNode(10);
- node n11 = g.addNode(11);
- node n12 = g.addNode(12);
- node n13 = g.addNode(13);
- node n14 = g.addNode(14);
- node n15 = g.addNode(15);
- g.addEdge(n1, n2);
- g.addEdge(n1, n5);
- g.addEdge(n2, n3);
- g.addEdge(n2, n4);
- g.addEdge(n3, n5);
- g.addEdge(n4, n5);
- g.addEdge(n5, n6);
- g.addEdge(n6, n7);
- g.addEdge(n6, n12);
- g.addEdge(n7, n8);
- g.addEdge(n7, n9);
- g.addEdge(n8, n9);
- g.addEdge(n8, n10);
- g.addEdge(n9, n10);
- g.addEdge(n10, n11);
- g.addEdge(n12, n13);
- g.addEdge(n13, n14);
- g.addEdge(n14, n13);
- g.addEdge(n14, n15);
- g.addEdge(n15, n6);
- g.assignIntervals(n1);
- cout << g.graphvizPrint(printer);
- g.test(0);
- return 0;
-}
Deleted: tools/branches/gsoc2009-decompiler/decompiler/test/graph.h
===================================================================
--- tools/branches/gsoc2009-decompiler/decompiler/test/graph.h 2009-06-23 18:35:27 UTC (rev 41814)
+++ tools/branches/gsoc2009-decompiler/decompiler/test/graph.h 2009-06-23 18:36:24 UTC (rev 41815)
@@ -1,11 +0,0 @@
-#include <cxxtest/TestSuite.h>
-
-class GraphTestSuite : public CxxTest::TestSuite {
-
-public:
-
- void testAddition() {
- TS_ASSERT(1 + 1 > 1);
- TS_ASSERT_EQUALS(1 + 1, 2);
- }
-};
Added: tools/branches/gsoc2009-decompiler/decompiler/test/test_graph.h
===================================================================
--- tools/branches/gsoc2009-decompiler/decompiler/test/test_graph.h (rev 0)
+++ tools/branches/gsoc2009-decompiler/decompiler/test/test_graph.h 2009-06-23 18:36:24 UTC (rev 41815)
@@ -0,0 +1,105 @@
+#include <cxxtest/TestSuite.h>
+#include <graph.h>
+
+#include <vector>
+using namespace std;
+
+
+typedef Graph<int> IntGraph;
+typedef IntGraph::Node IntNode;
+
+
+class GraphTestSuite : public CxxTest::TestSuite {
+
+public:
+
+ void test_assignIntervals() {
+ vector<IntNode*> nodes1;
+ IntGraph *g1 = makeGraph1(nodes1);
+ g1->assignIntervals(nodes1[0]);
+ TS_ASSERT_EQUALS(nodes1[0]->interval()->_data, nodes1[0]->_data);
+ TS_ASSERT_EQUALS(nodes1[1]->interval()->_data, nodes1[1]->_data);
+ TS_ASSERT_EQUALS(nodes1[2]->interval()->_data, nodes1[1]->_data);
+ TS_ASSERT_EQUALS(nodes1[3]->interval()->_data, nodes1[1]->_data);
+ TS_ASSERT_EQUALS(nodes1[4]->interval()->_data, nodes1[1]->_data);
+ TS_ASSERT_EQUALS(nodes1[5]->interval()->_data, nodes1[1]->_data);
+ vector<IntNode*> nodes2;
+ IntGraph *g2 = makeGraph2(nodes2);
+ g2->assignIntervals(nodes2[0]);
+ TS_ASSERT_EQUALS(nodes2[0]->interval()->_data, nodes2[0]->_data);
+ TS_ASSERT_EQUALS(nodes2[1]->interval()->_data, nodes2[0]->_data);
+ TS_ASSERT_EQUALS(nodes2[2]->interval()->_data, nodes2[0]->_data);
+ TS_ASSERT_EQUALS(nodes2[3]->interval()->_data, nodes2[0]->_data);
+ TS_ASSERT_EQUALS(nodes2[4]->interval()->_data, nodes2[0]->_data);
+ TS_ASSERT_EQUALS(nodes2[5]->interval()->_data, nodes2[5]->_data);
+ TS_ASSERT_EQUALS(nodes2[6]->interval()->_data, nodes2[5]->_data);
+ TS_ASSERT_EQUALS(nodes2[7]->interval()->_data, nodes2[5]->_data);
+ TS_ASSERT_EQUALS(nodes2[8]->interval()->_data, nodes2[5]->_data);
+ TS_ASSERT_EQUALS(nodes2[9]->interval()->_data, nodes2[5]->_data);
+ TS_ASSERT_EQUALS(nodes2[10]->interval()->_data, nodes2[5]->_data);
+ TS_ASSERT_EQUALS(nodes2[11]->interval()->_data, nodes2[5]->_data);
+ TS_ASSERT_EQUALS(nodes2[12]->interval()->_data, nodes2[12]->_data);
+ TS_ASSERT_EQUALS(nodes2[13]->interval()->_data, nodes2[12]->_data);
+ TS_ASSERT_EQUALS(nodes2[14]->interval()->_data, nodes2[12]->_data);
+ }
+
+private:
+
+ IntGraph *makeGraph1(vector<IntNode*> &nodes) {
+ IntGraph *g = new IntGraph;
+ nodes.push_back(g->addNode(0));
+ nodes.push_back(g->addNode(1));
+ nodes.push_back(g->addNode(2));
+ nodes.push_back(g->addNode(3));
+ nodes.push_back(g->addNode(4));
+ nodes.push_back(g->addNode(5));
+ g->addEdge(nodes[0], nodes[1]);
+ g->addEdge(nodes[1], nodes[2]);
+ g->addEdge(nodes[1], nodes[4]);
+ g->addEdge(nodes[2], nodes[3]);
+ g->addEdge(nodes[3], nodes[1]);
+ g->addEdge(nodes[4], nodes[0]);
+ g->addEdge(nodes[4], nodes[5]);
+ return g;
+ }
+
+ IntGraph *makeGraph2(vector<IntNode*> &nodes) {
+ IntGraph *g = new IntGraph;
+ nodes.push_back(g->addNode(0));
+ nodes.push_back(g->addNode(1));
+ nodes.push_back(g->addNode(2));
+ nodes.push_back(g->addNode(3));
+ nodes.push_back(g->addNode(4));
+ nodes.push_back(g->addNode(5));
+ nodes.push_back(g->addNode(6));
+ nodes.push_back(g->addNode(7));
+ nodes.push_back(g->addNode(8));
+ nodes.push_back(g->addNode(9));
+ nodes.push_back(g->addNode(10));
+ nodes.push_back(g->addNode(11));
+ nodes.push_back(g->addNode(12));
+ nodes.push_back(g->addNode(13));
+ nodes.push_back(g->addNode(14));
+ g->addEdge(nodes[0], nodes[1]);
+ g->addEdge(nodes[0], nodes[4]);
+ g->addEdge(nodes[1], nodes[2]);
+ g->addEdge(nodes[1], nodes[3]);
+ g->addEdge(nodes[2], nodes[4]);
+ g->addEdge(nodes[3], nodes[4]);
+ g->addEdge(nodes[4], nodes[5]);
+ g->addEdge(nodes[5], nodes[6]);
+ g->addEdge(nodes[5], nodes[11]);
+ g->addEdge(nodes[6], nodes[7]);
+ g->addEdge(nodes[6], nodes[8]);
+ g->addEdge(nodes[7], nodes[8]);
+ g->addEdge(nodes[7], nodes[9]);
+ g->addEdge(nodes[8], nodes[9]);
+ g->addEdge(nodes[9], nodes[10]);
+ g->addEdge(nodes[11], nodes[12]);
+ g->addEdge(nodes[12], nodes[13]);
+ g->addEdge(nodes[13], nodes[12]);
+ g->addEdge(nodes[13], nodes[14]);
+ g->addEdge(nodes[14], nodes[5]);
+ return g;
+ }
+};
Property changes on: tools/branches/gsoc2009-decompiler/decompiler/test/test_graph.h
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: svn:eol-style
+ native
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list