I am working on a compiler for a language presented in a class. Against my better judgement, I got ahead of myself and never wrote tests for any compiler tests. My professor wants to see tests.
The language is C-like. I am using Catch2 and CTest to write tests. Here is an example of a positive scanner test:
TEST_CASE("Scanner keyword tests", "[front-end]") {
antlr4::ANTLRInputStream input("int boolean str var func proc if then else while do select return length extern");
WPLLexer lexer(&input);
CHECK(lexer.nextToken()->getType() == lexer.INT);
CHECK(lexer.nextToken()->getType() == lexer.BOOLEAN);
CHECK(lexer.nextToken()->getType() == lexer.STR);
CHECK(lexer.nextToken()->getType() == lexer.VAR);
CHECK(lexer.nextToken()->getType() == lexer.FUNC);
CHECK(lexer.nextToken()->getType() == lexer.PROC);
CHECK(lexer.nextToken()->getType() == lexer.IF);
CHECK(lexer.nextToken()->getType() == lexer.THEN);
CHECK(lexer.nextToken()->getType() == lexer.ELSE);
CHECK(lexer.nextToken()->getType() == lexer.WHILE);
CHECK(lexer.nextToken()->getType() == lexer.DO);
CHECK(lexer.nextToken()->getType() == lexer.SELECT);
CHECK(lexer.nextToken()->getType() == lexer.RETURN);
CHECK(lexer.nextToken()->getType() == lexer.LENGTH);
CHECK(lexer.nextToken()->getType() == lexer.EXTERN);
}
I want to write some negative test cases, but have no idea where to start. What are some common negative test cases for compiler scanners and parsers?