From 3d6000abe6b9228ea5c8144102e7f64b49e2acf6 Mon Sep 17 00:00:00 2001 From: hneemann Date: Wed, 19 Apr 2017 15:55:17 +0200 Subject: [PATCH] better test data parser to allow multi row repeats --- src/main/dig/cmos/sram.dig | 4 ++-- .../java/de/neemann/digital/testing/parser/Parser.java | 5 ++++- .../neemann/digital/testing/parser/ParserLoopTest.java | 10 +++++----- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/main/dig/cmos/sram.dig b/src/main/dig/cmos/sram.dig index edf029e54..8979d5e22 100644 --- a/src/main/dig/cmos/sram.dig +++ b/src/main/dig/cmos/sram.dig @@ -1470,7 +1470,7 @@ loop(n,16) bits(4,n) 0 1 0 bits(4,n) 1 1 1 bits(4,n) 0 1 1 -endloop +end loop # check all cells are one repeat(16) bits(4,n) 0 x 1 @@ -1480,7 +1480,7 @@ loop(n,16) bits(4,n) 0 0 1 bits(4,n) 1 0 0 bits(4,n) 0 0 0 -endloop +end loop # check all cells are zero repeat(16) bits(4,n) 0 x 0 diff --git a/src/main/java/de/neemann/digital/testing/parser/Parser.java b/src/main/java/de/neemann/digital/testing/parser/Parser.java index fea0b99a9..7a9a1734f 100644 --- a/src/main/java/de/neemann/digital/testing/parser/Parser.java +++ b/src/main/java/de/neemann/digital/testing/parser/Parser.java @@ -84,8 +84,11 @@ public class Parser { list.add(parseLine()); break; case IDENT: - if (tok.getIdent().equals("endloop")) { + if (tok.getIdent().equals("end")) { tok.consume(); + expect(Tokenizer.Token.IDENT); + if (!tok.getIdent().equals("loop")) + throw newUnexpectedToken(t); if (!loop) throw newUnexpectedToken(t); return list.minimize(); diff --git a/src/test/java/de/neemann/digital/testing/parser/ParserLoopTest.java b/src/test/java/de/neemann/digital/testing/parser/ParserLoopTest.java index ac72cb52e..40a5856aa 100644 --- a/src/test/java/de/neemann/digital/testing/parser/ParserLoopTest.java +++ b/src/test/java/de/neemann/digital/testing/parser/ParserLoopTest.java @@ -11,7 +11,7 @@ import java.io.IOException; public class ParserLoopTest extends TestCase { public void testLoop() throws IOException, ParserException { - Parser parser = new Parser("A B\nloop(n,10)\n C (n*2)\nendloop").parse(); + Parser parser = new Parser("A B\nloop(n,10)\n C (n*2)\nend loop").parse(); LineCollector td = new LineCollector(parser); assertEquals(2, td.getNames().size()); @@ -24,7 +24,7 @@ public class ParserLoopTest extends TestCase { } public void testLoopVar() throws IOException, ParserException { - Parser parser = new Parser("A B\nloop(i,10)\n C (i*2)\nendloop").parse(); + Parser parser = new Parser("A B\nloop(i,10)\n C (i*2)\nend loop").parse(); LineCollector td = new LineCollector(parser); assertEquals(2, td.getNames().size()); @@ -37,7 +37,7 @@ public class ParserLoopTest extends TestCase { } public void testNested() throws IOException, ParserException { - Parser parser = new Parser("A B\nloop(i,10)\nloop(j,10)\n C ((i+j)*2)\nendloop\nendloop").parse(); + Parser parser = new Parser("A B\nloop(i,10)\nloop(j,10)\n C ((i+j)*2)\nend loop\nend loop").parse(); LineCollector td = new LineCollector(parser); assertEquals(2, td.getNames().size()); @@ -53,7 +53,7 @@ public class ParserLoopTest extends TestCase { } public void testLoopMultiLines() throws IOException, ParserException { - Parser parser = new Parser("A B\nloop(i,10)\n C (i*2)\n C (i*2+1)\nendloop").parse(); + Parser parser = new Parser("A B\nloop(i,10)\n C (i*2)\n C (i*2+1)\nend loop").parse(); LineCollector td = new LineCollector(parser); assertEquals(2, td.getNames().size()); @@ -77,7 +77,7 @@ public class ParserLoopTest extends TestCase { public void testUnexpectedEndloop() throws IOException, ParserException { try { - new Parser("A B\n C ((i+j)*2)\nendloop").parse(); + new Parser("A B\n C ((i+j)*2)\nend loop").parse(); fail(); } catch (ParserException e) { }