[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