[Scummvm-cvs-logs] SF.net SVN: scummvm:[51718] tools/branches/gsoc2010-decompiler/decompiler/ test

pidgeot at users.sourceforge.net pidgeot at users.sourceforge.net
Wed Aug 4 03:12:42 CEST 2010


Revision: 51718
          http://scummvm.svn.sourceforge.net/scummvm/?rev=51718&view=rev
Author:   pidgeot
Date:     2010-08-04 01:12:41 +0000 (Wed, 04 Aug 2010)

Log Message:
-----------
Improve a codegen test, reset engine in cfg_test.h

Modified Paths:
--------------
    tools/branches/gsoc2010-decompiler/decompiler/test/cfg_test.h
    tools/branches/gsoc2010-decompiler/decompiler/test/codegen.h

Modified: tools/branches/gsoc2010-decompiler/decompiler/test/cfg_test.h
===================================================================
--- tools/branches/gsoc2010-decompiler/decompiler/test/cfg_test.h	2010-08-04 00:33:54 UTC (rev 51717)
+++ tools/branches/gsoc2010-decompiler/decompiler/test/cfg_test.h	2010-08-04 01:12:41 UTC (rev 51718)
@@ -199,7 +199,9 @@
 				TS_ASSERT(gr->_type == kBreak);
 		}
 		delete c;
+		delete engine;
 
+		engine = new Scumm::v6::Engine();
 		d = engine->getDisassembler();
 		d->open("decompiler/test/break-do-while.dmp");
 		insts = d->disassemble();
@@ -214,7 +216,9 @@
 				TS_ASSERT(gr->_type == kBreak);
 		}
 		delete c;
+		delete engine;
 
+		engine = new Scumm::v6::Engine();
 		d = engine->getDisassembler();
 		d->open("decompiler/test/break-do-while2.dmp");
 		insts = d->disassemble();
@@ -250,7 +254,9 @@
 				TS_ASSERT(gr->_type == kNormal);
 		}
 		delete c;
+		delete engine;
 
+		engine = new Scumm::v6::Engine();
 		d = engine->getDisassembler();
 		d->open("decompiler/test/continue-do-while.dmp");
 		insts = d->disassemble();
@@ -265,7 +271,9 @@
 				TS_ASSERT(gr->_type == kContinue);
 		}
 		delete c;
+		delete engine;
 
+		engine = new Scumm::v6::Engine();
 		d = engine->getDisassembler();
 		d->open("decompiler/test/continue-do-while2.dmp");
 		insts = d->disassemble();
@@ -299,7 +307,9 @@
 				TS_ASSERT(gr->_type == kIfCond);
 		}
 		delete c;
+		delete engine;
 
+		engine = new Scumm::v6::Engine();
 		d = engine->getDisassembler();
 		d->open("decompiler/test/break-do-while.dmp");
 		insts = d->disassemble();
@@ -314,7 +324,9 @@
 				TS_ASSERT(gr->_type == kIfCond);
 		}
 		delete c;
+		delete engine;
 
+		engine = new Scumm::v6::Engine();
 		d = engine->getDisassembler();
 		d->open("decompiler/test/break-do-while2.dmp");
 		insts = d->disassemble();
@@ -329,7 +341,9 @@
 				TS_ASSERT(gr->_type == kIfCond);
 		}
 		delete c;
+		delete engine;
 
+		engine = new Scumm::v6::Engine();
 		d = engine->getDisassembler();
 		d->open("decompiler/test/continue-do-while.dmp");
 		insts = d->disassemble();
@@ -344,7 +358,9 @@
 				TS_ASSERT(gr->_type == kIfCond);
 		}
 		delete c;
+		delete engine;
 
+		engine = new Scumm::v6::Engine();
 		d = engine->getDisassembler();
 		d->open("decompiler/test/continue-do-while2.dmp");
 		insts = d->disassemble();
@@ -380,7 +396,9 @@
 			}
 		}
 		delete c;
+		delete engine;
 
+		engine = new Scumm::v6::Engine();
 		d = engine->getDisassembler();
 		d->open("decompiler/test/if-no-else.dmp");
 		insts = d->disassemble();
@@ -418,7 +436,9 @@
 				TS_ASSERT(gr->_type == kDoWhileCond);
 		}
 		delete c;
+		delete engine;
 
+		engine = new Scumm::v6::Engine();
 		d = engine->getDisassembler();
 		d->open("decompiler/test/nested-do-while.dmp");
 		insts = d->disassemble();
@@ -435,7 +455,9 @@
 				TS_ASSERT(gr->_type == kDoWhileCond);
 		}
 		delete c;
+		delete engine;
 
+		engine = new Scumm::v6::Engine();
 		d = engine->getDisassembler();
 		d->open("decompiler/test/nested-while.dmp");
 		insts = d->disassemble();
@@ -452,7 +474,9 @@
 				TS_ASSERT(gr->_type == kWhileCond);
 		}
 		delete c;
+		delete engine;
 
+		engine = new Scumm::v6::Engine();
 		d = engine->getDisassembler();
 		d->open("decompiler/test/nested-while2.dmp");
 		insts = d->disassemble();
@@ -469,7 +493,9 @@
 				TS_ASSERT(gr->_type == kWhileCond);
 		}
 		delete c;
+		delete engine;
 
+		engine = new Scumm::v6::Engine();
 		d = engine->getDisassembler();
 		d->open("decompiler/test/while-in-do-while.dmp");
 		insts = d->disassemble();
@@ -486,7 +512,9 @@
 				TS_ASSERT(gr->_type == kDoWhileCond);
 		}
 		delete c;
+		delete engine;
 
+		engine = new Scumm::v6::Engine();
 		d = engine->getDisassembler();
 		d->open("decompiler/test/while-in-do-while2.dmp");
 		insts = d->disassemble();
@@ -503,7 +531,6 @@
 				TS_ASSERT(gr->_type == kDoWhileCond);
 		}
 		delete c;
-
 		delete engine;
 	}
 

Modified: tools/branches/gsoc2010-decompiler/decompiler/test/codegen.h
===================================================================
--- tools/branches/gsoc2010-decompiler/decompiler/test/codegen.h	2010-08-04 00:33:54 UTC (rev 51717)
+++ tools/branches/gsoc2010-decompiler/decompiler/test/codegen.h	2010-08-04 01:12:41 UTC (rev 51718)
@@ -199,12 +199,13 @@
 		delete engine;
 	}
 
-	// This test requires script-48.dmp from Sam & Max: Hit The Road.
+	// This test requires script-30 and script-48.dmp from Sam & Max: Hit The Road.
+	// 6e48faca13e1f6df9341567608962744 *script-30.dmp
 	// afd7dc5d377894b3b9d0504927adf1b1 *script-48.dmp
 	void testCoalescing() {
 		Scumm::v6::Engine *engine = new Scumm::v6::Engine();
 		Disassembler *d = engine->getDisassembler();
-		d->open("decompiler/test/script-48.dmp");
+		d->open("decompiler/test/script-30.dmp");
 		std::vector<Instruction> insts = d->disassemble();
 		delete d;
 		ControlFlow *c = new ControlFlow(insts, engine);
@@ -220,16 +221,43 @@
 		while (gr->_prev != NULL)
 			gr = gr->_prev;
 		// Find vertex to test
-		while (gr->_start->_address != 0x1A3)
+		while (gr->_start->_address != 0x91)
 			gr = gr->_next;
 
-		TS_ASSERT(gr->_code.size() == 3);
+		TS_ASSERT(gr->_code.size() == 2);
 		TS_ASSERT(removeSpaces(gr->_code[0]._line).compare("}else{") == 0);
-		TS_ASSERT(removeSpaces(gr->_code[2]._line).substr(0, 2).compare("if") == 0);
+		TS_ASSERT(removeSpaces(gr->_code[1]._line).substr(0, 2).compare("if") == 0);
 
 		delete cg;
 		delete c;
 		delete engine;
+
+		engine = new Scumm::v6::Engine();
+		d = engine->getDisassembler();
+		d->open("decompiler/test/script-48.dmp");
+		insts = d->disassemble();
+		delete d;
+		c = new ControlFlow(insts, engine);
+		c->createGroups();
+		g = c->analyze();
+		cg = engine->getCodeGenerator(ns);
+		cg->generate(g);
+
+		v = boost::vertices(g).first;
+		gr = GET(*v);
+		// Find first node
+		while (gr->_prev != NULL)
+			gr = gr->_prev;
+		// Find vertex to test
+		while (gr->_start->_address != 0x191)
+			gr = gr->_next;
+
+		TS_ASSERT(gr->_code.size() == 1);
+		TS_ASSERT(removeSpaces(gr->_code[0]._line).substr(0, 7).compare("}elseif") == 0);
+
+		delete cg;
+		delete c;
+		delete engine;
 	}
 
 };


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