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