generator tests finished, library javadoc externalized
This commit is contained in:
		
							parent
							
								
									a845321785
								
							
						
					
					
						commit
						d1d97bc329
					
				
							
								
								
									
										12
									
								
								.classpath
								
								
								
								
							
							
						
						
									
										12
									
								
								.classpath
								
								
								
								
							|  | @ -2,20 +2,24 @@ | |||
| <classpath> | ||||
| 	<classpathentry kind="src" path="src"/> | ||||
| 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> | ||||
| 	<classpathentry kind="lib" path="lib/antlr-4.7-complete.jar" sourcepath="lib/antlr-4.7-source.zip"/> | ||||
| 	<classpathentry kind="lib" path="lib/antlr-4.7-complete.jar" sourcepath="lib/antlr-4.7-source.zip"> | ||||
| 		<attributes> | ||||
| 			<attribute name="javadoc_location" value="http://www.antlr.org/api/Java/"/> | ||||
| 		</attributes> | ||||
| 	</classpathentry> | ||||
| 	<classpathentry kind="lib" path="lib/hamcrest-all-1.3.jar"> | ||||
| 		<attributes> | ||||
| 			<attribute name="javadoc_location" value="jar:platform:/resource/Vertalerbouw/lib/hamcrest-all-1.3-javadoc.jar!/"/> | ||||
| 			<attribute name="javadoc_location" value="http://hamcrest.org/JavaHamcrest/javadoc/1.3/"/> | ||||
| 		</attributes> | ||||
| 	</classpathentry> | ||||
| 	<classpathentry kind="lib" path="lib/junit-4.12.jar"> | ||||
| 		<attributes> | ||||
| 			<attribute name="javadoc_location" value="jar:platform:/resource/Vertalerbouw/lib/junit-4.12-javadoc.jar!/"/> | ||||
| 			<attribute name="javadoc_location" value="http://junit.org/junit4/javadoc/4.12/"/> | ||||
| 		</attributes> | ||||
| 	</classpathentry> | ||||
| 	<classpathentry kind="lib" path="lib/commons-lang3-3.5.jar"> | ||||
| 		<attributes> | ||||
| 			<attribute name="javadoc_location" value="jar:platform:/resource/Vertalerbouw/lib/commons-lang3-3.5-javadoc.jar!/"/> | ||||
| 			<attribute name="javadoc_location" value="https://commons.apache.org/proper/commons-lang/javadocs/api-3.6/"/> | ||||
| 		</attributes> | ||||
| 	</classpathentry> | ||||
| 	<classpathentry kind="output" path="bin"/> | ||||
|  |  | |||
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								lib/junit.jar
								
								
								
								
							
							
						
						
									
										
											BIN
										
									
								
								lib/junit.jar
								
								
								
								
							
										
											Binary file not shown.
										
									
								
							|  | @ -156,7 +156,7 @@ public class BoppiBasicGenerator extends BasicBaseVisitor<Void> { | |||
| 
 | ||||
| 		switch (ctx.op.getType()) { | ||||
| 		case BasicLexer.MINUS: | ||||
| 			emit(OpCode.rsubI, new Num(0), getReg(ctx.singleExpr()), getReg(ctx)); | ||||
| 			emit(OpCode.rsubI, getReg(ctx.singleExpr()), new Num(0), getReg(ctx)); | ||||
| 		} | ||||
| 		return null; | ||||
| 	} | ||||
|  | @ -291,6 +291,7 @@ public class BoppiBasicGenerator extends BasicBaseVisitor<Void> { | |||
| 				emit(OpCode.out, new Str("Unknown type: "), getReg(expr)); | ||||
| 			} | ||||
| 		} | ||||
| 		copyReg(ctx.expr(0), ctx); | ||||
| 		return null; | ||||
| 	} | ||||
| } | ||||
|  |  | |||
|  | @ -1,25 +1,18 @@ | |||
| package pp.s1184725.boppi.test; | ||||
| 
 | ||||
| import static org.hamcrest.MatcherAssert.assertThat; | ||||
| import static org.hamcrest.Matchers.empty; | ||||
| import static org.hamcrest.Matchers.hasSize; | ||||
| import static org.hamcrest.Matchers.is; | ||||
| import static org.hamcrest.Matchers.*; | ||||
| 
 | ||||
| import java.io.IOException; | ||||
| import java.nio.file.Path; | ||||
| import java.nio.file.Paths; | ||||
| import java.util.List; | ||||
| import java.util.logging.Level; | ||||
| import java.util.logging.LogRecord; | ||||
| import java.util.logging.Logger; | ||||
| import java.util.logging.*; | ||||
| 
 | ||||
| import org.apache.commons.lang3.tuple.Pair; | ||||
| import org.junit.Test; | ||||
| 
 | ||||
| import pp.s1184725.boppi.Annotations; | ||||
| import pp.s1184725.boppi.BasicParser; | ||||
| import pp.s1184725.boppi.BasicParserHelper; | ||||
| import pp.s1184725.boppi.BoppiBasicChecker; | ||||
| import pp.s1184725.boppi.*; | ||||
| 
 | ||||
| public class CheckerTest { | ||||
| 	static final Path directory = Paths.get("src/pp/s1184725/boppi/test/parsing/"); | ||||
|  | @ -39,9 +32,6 @@ public class CheckerTest { | |||
| 		return pair.getRight(); | ||||
| 	} | ||||
| 
 | ||||
| 	protected void debug() { | ||||
| 		log.forEach(entry -> System.out.println(entry.getMessage())); | ||||
| 	} | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,9 +1,18 @@ | |||
| package pp.s1184725.boppi.test; | ||||
| 
 | ||||
| import static org.hamcrest.MatcherAssert.assertThat; | ||||
| import static org.hamcrest.Matchers.containsString; | ||||
| import static org.hamcrest.Matchers.empty; | ||||
| import static org.hamcrest.Matchers.hasSize; | ||||
| import static org.hamcrest.Matchers.is; | ||||
| 
 | ||||
| import java.io.ByteArrayInputStream; | ||||
| import java.io.ByteArrayOutputStream; | ||||
| import java.io.IOException; | ||||
| import java.io.InputStream; | ||||
| import java.nio.charset.StandardCharsets; | ||||
| import java.nio.file.Path; | ||||
| import java.nio.file.Paths; | ||||
| import java.util.List; | ||||
| import java.util.logging.LogRecord; | ||||
| import java.util.logging.Logger; | ||||
|  | @ -20,32 +29,83 @@ import pp.s1184725.boppi.BoppiBasicChecker; | |||
| import pp.s1184725.boppi.BoppiBasicGenerator; | ||||
| 
 | ||||
| public class GeneratorTest { | ||||
| 	static private List<LogRecord> generateAndGetLog(String code) { | ||||
| 	static final Path directory = Paths.get("src/pp/s1184725/boppi/test/parsing/"); | ||||
| 	private Pair<String, List<LogRecord>> result; | ||||
| 
 | ||||
| 	static private Pair<String, List<LogRecord>> generateAndGetLog(String code, String input) { | ||||
| 		Logger logger = Logger.getAnonymousLogger(); | ||||
| 		Pair<BasicParser, List<LogRecord>> pair = BasicParserHelper.getParserWithLog(code, logger); | ||||
| 		return derp(logger, pair, input); | ||||
| 	} | ||||
| 	 | ||||
| 	static private Pair<String, List<LogRecord>> generateAndGetLog(Path code, String input) throws IOException { | ||||
| 		Logger logger = Logger.getAnonymousLogger(); | ||||
| 		Pair<BasicParser, List<LogRecord>> pair = BasicParserHelper.getParserWithLog(code, logger); | ||||
| 		return derp(logger, pair, input); | ||||
| 	} | ||||
| 	 | ||||
| 	static private Pair<String, List<LogRecord>> derp(Logger logger, Pair<BasicParser, List<LogRecord>> pair, String input) { | ||||
| 		Annotations annotater = new Annotations(); | ||||
| 		ParserRuleContext tree = pair.getLeft().program(); | ||||
| 		new BoppiBasicChecker(logger, annotater).visit(tree); | ||||
| 		BoppiBasicGenerator generator = new BoppiBasicGenerator(annotater); | ||||
| 		generator.visit(tree); | ||||
| //		System.out.println(generator.prog.prettyPrint()); | ||||
| //		System.out.println(BasicParserHelper.getAnnotatedDOT(tree, annotater)); | ||||
| 		Simulator s = new Simulator(generator.prog); | ||||
| 		InputStream in = new ByteArrayInputStream("1\nq\n".getBytes(StandardCharsets.UTF_8)); | ||||
| 		InputStream in = new ByteArrayInputStream(input.getBytes(StandardCharsets.UTF_8)); | ||||
| 		ByteArrayOutputStream out = new ByteArrayOutputStream(); | ||||
| 		s.setIn(in); | ||||
| 		s.setOut(out); | ||||
| 		s.run(); | ||||
| 		System.out.println(out.toString()); | ||||
| 		return pair.getRight(); | ||||
| 		try { | ||||
| 			s.run(); | ||||
| 		} | ||||
| 		catch (Exception e) { | ||||
| 			logger.severe(e.getMessage()); | ||||
| 		} | ||||
| 		return Pair.of(out.toString().replaceAll("\r\n", "\n"), pair.getRight()); | ||||
| 	} | ||||
| 	 | ||||
| 	 | ||||
| 	 | ||||
| 	 | ||||
| 	@Test | ||||
| 	public void correctExpressionTest() throws IOException { | ||||
| 		result = generateAndGetLog(directory.resolve("simpleExpression.boppi"), ""); | ||||
| 		assertThat(result.getRight(), empty()); | ||||
| 	} | ||||
| 	 | ||||
| 	@Test | ||||
| 	public void basicTest() { | ||||
| //		generateAndGetLog("print(5*3)"); | ||||
| //		generateAndGetLog("var int x; var int y; x := 3*(y := 4); print(x,y)"); | ||||
| //		generateAndGetLog("print('T', 'e', 's', 't', '!')"); | ||||
| //		generateAndGetLog("var int i; if read(i) == 1 then var char c; read(c); print(c,c); else print(i) fi"); | ||||
| 		generateAndGetLog("var int i; i := 10; while i > 0 do print('A', i); i := i-1 od"); | ||||
| 	public void wrongExpressionTest() { | ||||
| 		result = generateAndGetLog("1/0", ""); | ||||
| 		assertThat(result.getRight(), hasSize(1)); | ||||
| 		assertThat(result.getRight().get(0).getMessage(), containsString("zero")); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void correctVariableTest() throws IOException { | ||||
| 		result = generateAndGetLog(directory.resolve("simpleVariable.boppi"), ""); | ||||
| 		assertThat(result.getRight(), empty()); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void basicPrograms() throws IOException { | ||||
| 		result = generateAndGetLog("print(5*3)", ""); | ||||
| 		assertThat(result.getRight(), empty()); | ||||
| 		assertThat(result.getLeft(), is("15\n")); | ||||
| 		 | ||||
| 		result = generateAndGetLog("print('T', 'e', 's', 't', '!')", ""); | ||||
| 		assertThat(result.getRight(), empty()); | ||||
| 		assertThat(result.getLeft(), is("T\ne\ns\nt\n!\n")); | ||||
| 		 | ||||
| 		result = generateAndGetLog("var int x; var int y; x := 3*(y := 4); print(x,y)", ""); | ||||
| 		assertThat(result.getRight(), empty()); | ||||
| 		assertThat(result.getLeft(), is("12\n4\n")); | ||||
| 		 | ||||
| 		result = generateAndGetLog(directory.resolve("basicProgram1.boppi"), "1\nT\n"); | ||||
| 		assertThat(result.getRight(), empty()); | ||||
| 		assertThat(result.getLeft(), is("T\nT\n")); | ||||
| 		 | ||||
| 		result = generateAndGetLog(directory.resolve("fibonacciIterative.boppi"), "6\n"); | ||||
| 		assertThat(result.getRight(), empty()); | ||||
| 		assertThat(result.getLeft(), is("13\n")); | ||||
| 	} | ||||
| } | ||||
|  |  | |||
|  | @ -0,0 +1,9 @@ | |||
| var int i; | ||||
| 
 | ||||
| if read(i) == 1 then | ||||
|     var char c; | ||||
|     read(c); | ||||
|     print(c,c); | ||||
| else | ||||
|     print(i) | ||||
| fi | ||||
|  | @ -0,0 +1,18 @@ | |||
| var int n; | ||||
| var int i; | ||||
| var int current; | ||||
| var int previous; | ||||
| current := 1; | ||||
| 
 | ||||
| read(n); | ||||
| i := 0; | ||||
| 
 | ||||
| while i < n do | ||||
|     var int next; | ||||
|     next := current + previous; | ||||
|     previous := current; | ||||
|     current := next; | ||||
|     i := i+1; | ||||
| od; | ||||
| 
 | ||||
| print(current); | ||||
|  | @ -26,3 +26,8 @@ true; | |||
| 3 == 2; | ||||
| 1 < 2 == false; | ||||
| !(true <> false) == ('c' == 'd'); | ||||
| 
 | ||||
| // printing | ||||
| print('1'); | ||||
| print(1)+4; | ||||
| print(3, 'A', false); | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 User
						User