diff --git a/src/main/dig/cmos/dec.dig b/src/main/dig/cmos/dec.dig new file mode 100644 index 000000000..04e264644 --- /dev/null +++ b/src/main/dig/cmos/dec.dig @@ -0,0 +1,138 @@ + + + 1 + + + Width + 2 + + + + + Decoder + + + Selector Bits + 2 + + + + + + Splitter + + + Input Splitting + 1,1 + + + Output Splitting + 2 + + + + + + In + + + Label + 0 + + + + + + In + + + Label + 1 + + + + + + Out + + + Label + a + + + + + + Out + + + Label + b + + + + + + Out + + + Label + c + + + + + + Out + + + Label + d + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/dig/cmos/eprom.dig b/src/main/dig/cmos/eprom.dig index 7885cb30d..178d93e16 100644 --- a/src/main/dig/cmos/eprom.dig +++ b/src/main/dig/cmos/eprom.dig @@ -3,30 +3,6 @@ 1 - - Decoder - - - Selector Bits - 2 - - - - - - Splitter - - - Input Splitting - 1,1 - - - Output Splitting - 2 - - - - In @@ -35,7 +11,7 @@ A_0 - + In @@ -45,7 +21,7 @@ A_1 - + PullUp @@ -67,30 +43,6 @@ - - Decoder - - - Selector Bits - 2 - - - - - - Splitter - - - Input Splitting - 1,1 - - - Output Splitting - 2 - - - - In @@ -99,7 +51,7 @@ A_2 - + In @@ -109,7 +61,7 @@ A_3 - + NFET @@ -262,7 +214,7 @@ 1 - + Ground @@ -364,6 +316,16 @@ + + dec.dig + + + + + dec.dig + + + @@ -394,18 +356,10 @@ - - - - - - - - @@ -446,6 +400,10 @@ + + + + @@ -467,12 +425,8 @@ - - - - - - + + @@ -495,17 +449,17 @@ - - - - - - + + + + + + @@ -522,6 +476,10 @@ + + + + @@ -543,12 +501,8 @@ - - - - - - + + @@ -583,12 +537,16 @@ - - + + - - + + + + + + @@ -642,10 +600,6 @@ - - - - @@ -654,14 +608,6 @@ - - - - - - - - @@ -830,14 +776,6 @@ - - - - - - - - @@ -888,7 +826,15 @@ - + + + + + + + + + diff --git a/src/main/dig/cmos/prom.dig b/src/main/dig/cmos/prom.dig index d30c603f2..e2ac477e3 100644 --- a/src/main/dig/cmos/prom.dig +++ b/src/main/dig/cmos/prom.dig @@ -3,30 +3,6 @@ 1 - - Decoder - - - Selector Bits - 2 - - - - - - Splitter - - - Input Splitting - 1,1 - - - Output Splitting - 2 - - - - In @@ -35,7 +11,7 @@ A_0 - + In @@ -45,7 +21,7 @@ A_1 - + PullUp @@ -137,30 +113,6 @@ - - Decoder - - - Selector Bits - 2 - - - - - - Splitter - - - Input Splitting - 1,1 - - - Output Splitting - 2 - - - - In @@ -169,7 +121,7 @@ A_2 - + In @@ -179,7 +131,7 @@ A_3 - + NFET @@ -304,11 +256,271 @@ 1 1 0 1 0 1 1 1 0 0 1 1 1 1 0 + + + + +# transitions +0 0 0 0 0 +0 0 0 1 0 +0 0 0 0 0 +0 0 1 0 0 +0 0 0 0 0 +0 0 1 1 0 +0 0 0 0 0 +0 1 0 0 0 +0 0 0 0 0 +0 1 0 1 0 +0 0 0 0 0 +0 1 1 0 1 +0 0 0 0 0 +0 1 1 1 0 +0 0 0 0 0 +1 0 0 0 0 +0 0 0 0 0 +1 0 0 1 1 +0 0 0 0 0 +1 0 1 0 0 +0 0 0 0 0 +1 0 1 1 0 +0 0 0 0 0 +1 1 0 0 0 +0 0 0 0 0 +1 1 0 1 0 +0 0 0 0 0 +1 1 1 0 0 +0 0 0 0 0 +1 1 1 1 0 +0 0 0 0 0 +0 0 0 1 0 +0 0 1 0 0 +0 0 0 1 0 +0 0 1 1 0 +0 0 0 1 0 +0 1 0 0 0 +0 0 0 1 0 +0 1 0 1 0 +0 0 0 1 0 +0 1 1 0 1 +0 0 0 1 0 +0 1 1 1 0 +0 0 0 1 0 +1 0 0 0 0 +0 0 0 1 0 +1 0 0 1 1 +0 0 0 1 0 +1 0 1 0 0 +0 0 0 1 0 +1 0 1 1 0 +0 0 0 1 0 +1 1 0 0 0 +0 0 0 1 0 +1 1 0 1 0 +0 0 0 1 0 +1 1 1 0 0 +0 0 0 1 0 +1 1 1 1 0 +0 0 0 1 0 +0 0 1 0 0 +0 0 1 1 0 +0 0 1 0 0 +0 1 0 0 0 +0 0 1 0 0 +0 1 0 1 0 +0 0 1 0 0 +0 1 1 0 1 +0 0 1 0 0 +0 1 1 1 0 +0 0 1 0 0 +1 0 0 0 0 +0 0 1 0 0 +1 0 0 1 1 +0 0 1 0 0 +1 0 1 0 0 +0 0 1 0 0 +1 0 1 1 0 +0 0 1 0 0 +1 1 0 0 0 +0 0 1 0 0 +1 1 0 1 0 +0 0 1 0 0 +1 1 1 0 0 +0 0 1 0 0 +1 1 1 1 0 +0 0 1 0 0 +0 0 1 1 0 +0 1 0 0 0 +0 0 1 1 0 +0 1 0 1 0 +0 0 1 1 0 +0 1 1 0 1 +0 0 1 1 0 +0 1 1 1 0 +0 0 1 1 0 +1 0 0 0 0 +0 0 1 1 0 +1 0 0 1 1 +0 0 1 1 0 +1 0 1 0 0 +0 0 1 1 0 +1 0 1 1 0 +0 0 1 1 0 +1 1 0 0 0 +0 0 1 1 0 +1 1 0 1 0 +0 0 1 1 0 +1 1 1 0 0 +0 0 1 1 0 +1 1 1 1 0 +0 0 1 1 0 +0 1 0 0 0 +0 1 0 1 0 +0 1 0 0 0 +0 1 1 0 1 +0 1 0 0 0 +0 1 1 1 0 +0 1 0 0 0 +1 0 0 0 0 +0 1 0 0 0 +1 0 0 1 1 +0 1 0 0 0 +1 0 1 0 0 +0 1 0 0 0 +1 0 1 1 0 +0 1 0 0 0 +1 1 0 0 0 +0 1 0 0 0 +1 1 0 1 0 +0 1 0 0 0 +1 1 1 0 0 +0 1 0 0 0 +1 1 1 1 0 +0 1 0 0 0 +0 1 0 1 0 +0 1 1 0 1 +0 1 0 1 0 +0 1 1 1 0 +0 1 0 1 0 +1 0 0 0 0 +0 1 0 1 0 +1 0 0 1 1 +0 1 0 1 0 +1 0 1 0 0 +0 1 0 1 0 +1 0 1 1 0 +0 1 0 1 0 +1 1 0 0 0 +0 1 0 1 0 +1 1 0 1 0 +0 1 0 1 0 +1 1 1 0 0 +0 1 0 1 0 +1 1 1 1 0 +0 1 0 1 0 +0 1 1 0 1 +0 1 1 1 0 +0 1 1 0 1 +1 0 0 0 0 +0 1 1 0 1 +1 0 0 1 1 +0 1 1 0 1 +1 0 1 0 0 +0 1 1 0 1 +1 0 1 1 0 +0 1 1 0 1 +1 1 0 0 0 +0 1 1 0 1 +1 1 0 1 0 +0 1 1 0 1 +1 1 1 0 0 +0 1 1 0 1 +1 1 1 1 0 +0 1 1 0 1 +0 1 1 1 0 +1 0 0 0 0 +0 1 1 1 0 +1 0 0 1 1 +0 1 1 1 0 +1 0 1 0 0 +0 1 1 1 0 +1 0 1 1 0 +0 1 1 1 0 +1 1 0 0 0 +0 1 1 1 0 +1 1 0 1 0 +0 1 1 1 0 +1 1 1 0 0 +0 1 1 1 0 +1 1 1 1 0 +0 1 1 1 0 +1 0 0 0 0 +1 0 0 1 1 +1 0 0 0 0 +1 0 1 0 0 +1 0 0 0 0 +1 0 1 1 0 +1 0 0 0 0 +1 1 0 0 0 +1 0 0 0 0 +1 1 0 1 0 +1 0 0 0 0 +1 1 1 0 0 +1 0 0 0 0 +1 1 1 1 0 +1 0 0 0 0 +1 0 0 1 1 +1 0 1 0 0 +1 0 0 1 1 +1 0 1 1 0 +1 0 0 1 1 +1 1 0 0 0 +1 0 0 1 1 +1 1 0 1 0 +1 0 0 1 1 +1 1 1 0 0 +1 0 0 1 1 +1 1 1 1 0 +1 0 0 1 1 +1 0 1 0 0 +1 0 1 1 0 +1 0 1 0 0 +1 1 0 0 0 +1 0 1 0 0 +1 1 0 1 0 +1 0 1 0 0 +1 1 1 0 0 +1 0 1 0 0 +1 1 1 1 0 +1 0 1 0 0 +1 0 1 1 0 +1 1 0 0 0 +1 0 1 1 0 +1 1 0 1 0 +1 0 1 1 0 +1 1 1 0 0 +1 0 1 1 0 +1 1 1 1 0 +1 0 1 1 0 +1 1 0 0 0 +1 1 0 1 0 +1 1 0 0 0 +1 1 1 0 0 +1 1 0 0 0 +1 1 1 1 0 +1 1 0 0 0 +1 1 0 1 0 +1 1 1 0 0 +1 1 0 1 0 +1 1 1 1 0 +1 1 0 1 0 +1 1 1 0 0 +1 1 1 1 0 +1 1 1 0 0 - + Driver @@ -332,7 +544,7 @@ 1 - + NFET @@ -355,72 +567,78 @@ - DiodeBackward - - - rotation - - - + Fuse + + + + + Fuse + + + + + Fuse + + + + + Fuse + - DiodeBackward - - - rotation - - - + Fuse + - DiodeBackward - - - rotation - - - + Fuse + - DiodeBackward - - - rotation - - - + Fuse + - DiodeBackward - - - rotation - - - + Fuse + - DiodeBackward - - - rotation - - - + Fuse + + + + + Fuse + + + + + Fuse + + + + + Fuse + - DiodeBackward + Fuse + + + + + Fuse + + + + + Fuse - - rotation - - Blown true @@ -429,42 +647,8 @@ - DiodeBackward + Fuse - - rotation - - - - - - - DiodeBackward - - - rotation - - - - - - - DiodeBackward - - - rotation - - - - - - - DiodeBackward - - - rotation - - Blown true @@ -473,65 +657,17 @@ - DiodeBackward - - - rotation - - - - + dec.dig + + - DiodeBackward - - - rotation - - - - - - - DiodeBackward - - - rotation - - - - - - - DiodeBackward - - - rotation - - - - - - - DiodeBackward - - - rotation - - - - + dec.dig + + - - - - - - - - @@ -604,6 +740,10 @@ + + + + @@ -625,8 +765,8 @@ - - + + @@ -692,10 +832,6 @@ - - - - @@ -716,10 +852,6 @@ - - - - @@ -752,6 +884,14 @@ + + + + + + + + @@ -772,10 +912,6 @@ - - - - @@ -792,6 +928,10 @@ + + + + @@ -812,6 +952,10 @@ + + + + @@ -828,14 +972,6 @@ - - - - - - - - @@ -853,21 +989,21 @@ - - - - - - - - - - + + + + + + + + + + @@ -892,14 +1028,6 @@ - - - - - - - - @@ -1076,17 +1204,9 @@ - - - - - - - - - + @@ -1112,6 +1232,14 @@ + + + + + + + + diff --git a/src/main/dig/cmos/rom.dig b/src/main/dig/cmos/rom.dig index 41cf1ce6b..0d5b34c88 100644 --- a/src/main/dig/cmos/rom.dig +++ b/src/main/dig/cmos/rom.dig @@ -3,30 +3,6 @@ 1 - - Decoder - - - Selector Bits - 2 - - - - - - Splitter - - - Input Splitting - 1,1 - - - Output Splitting - 2 - - - - In @@ -35,7 +11,7 @@ A_0 - + In @@ -45,7 +21,7 @@ A_1 - + PullUp @@ -137,30 +113,6 @@ - - Decoder - - - Selector Bits - 2 - - - - - - Splitter - - - Input Splitting - 1,1 - - - Output Splitting - 2 - - - - In @@ -169,7 +121,7 @@ A_2 - + In @@ -179,7 +131,7 @@ A_3 - + NFET @@ -332,7 +284,17 @@ 1 - + + + + dec.dig + + + + + dec.dig + + @@ -360,14 +322,6 @@ - - - - - - - - @@ -404,6 +358,10 @@ + + + + @@ -425,12 +383,8 @@ - - - - - - + + @@ -453,17 +407,17 @@ - - - - - - + + + + + + @@ -480,6 +434,10 @@ + + + + @@ -497,12 +455,8 @@ - - - - - - + + @@ -533,12 +487,16 @@ - - + + - - + + + + + + @@ -588,10 +546,6 @@ - - - - @@ -600,14 +554,6 @@ - - - - - - - - @@ -760,14 +706,6 @@ - - - - - - - - @@ -810,7 +748,15 @@ - + + + + + + + + + diff --git a/src/main/java/de/neemann/digital/core/switching/Fuse.java b/src/main/java/de/neemann/digital/core/switching/Fuse.java new file mode 100644 index 000000000..0b0551972 --- /dev/null +++ b/src/main/java/de/neemann/digital/core/switching/Fuse.java @@ -0,0 +1,28 @@ +package de.neemann.digital.core.switching; + +import de.neemann.digital.core.element.ElementAttributes; +import de.neemann.digital.core.element.ElementTypeDescription; +import de.neemann.digital.core.element.Keys; + +/** + * A simple fuse. + * Created by hneemann on 03.06.17. + */ +public class Fuse extends Switch { + + /** + * The fuse description + */ + public static final ElementTypeDescription DESCRIPTION = new ElementTypeDescription(Fuse.class) + .addAttribute(Keys.ROTATE) + .addAttribute(Keys.BLOWN); + + /** + * Create a new fuse + * + * @param attr the attributes + */ + public Fuse(ElementAttributes attr) { + super(attr, !attr.get(Keys.BLOWN), "out1", "out2"); + } +} diff --git a/src/main/java/de/neemann/digital/draw/library/ElementLibrary.java b/src/main/java/de/neemann/digital/draw/library/ElementLibrary.java index aa429b9b7..441a21eaf 100644 --- a/src/main/java/de/neemann/digital/draw/library/ElementLibrary.java +++ b/src/main/java/de/neemann/digital/draw/library/ElementLibrary.java @@ -127,6 +127,7 @@ public class ElementLibrary implements Iterable .add(DiodeForward.DESCRIPTION) .add(DiodeBackward.DESCRIPTION) .add(Switch.DESCRIPTION) + .add(Fuse.DESCRIPTION) .add(Relay.DESCRIPTION) .add(PFET.DESCRIPTION) .add(NFET.DESCRIPTION) diff --git a/src/main/java/de/neemann/digital/draw/shapes/DILShape.java b/src/main/java/de/neemann/digital/draw/shapes/DILShape.java index e36c51535..aa735502d 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/DILShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/DILShape.java @@ -22,7 +22,7 @@ import static de.neemann.digital.draw.shapes.GenericShape.SIZE2; * Created by hneemann on 12.05.17. */ public class DILShape implements Shape { - private static final float CIRC = (float) (4 * (Math.sqrt(2) - 1) / 3); + static final float CIRC = (float) (4 * (Math.sqrt(2) - 1) / 3); private static final int SPACING = 2; private static final int RAD = SPACING * SIZE / 4; private static final int BEZ = Math.round(RAD * CIRC); diff --git a/src/main/java/de/neemann/digital/draw/shapes/FuseShape.java b/src/main/java/de/neemann/digital/draw/shapes/FuseShape.java new file mode 100644 index 000000000..7ff050fab --- /dev/null +++ b/src/main/java/de/neemann/digital/draw/shapes/FuseShape.java @@ -0,0 +1,74 @@ +package de.neemann.digital.draw.shapes; + +import de.neemann.digital.core.Observer; +import de.neemann.digital.core.element.ElementAttributes; +import de.neemann.digital.core.element.Keys; +import de.neemann.digital.core.element.PinDescriptions; +import de.neemann.digital.draw.elements.IOState; +import de.neemann.digital.draw.elements.Pin; +import de.neemann.digital.draw.elements.Pins; +import de.neemann.digital.draw.graphics.Graphic; +import de.neemann.digital.draw.graphics.Polygon; +import de.neemann.digital.draw.graphics.Style; +import de.neemann.digital.draw.graphics.Vector; + +import static de.neemann.digital.draw.shapes.GenericShape.SIZE; +import static de.neemann.digital.draw.shapes.GenericShape.SIZE2; + +/** + * The light bulb shape + * Created by hneemann on 19.05.17. + */ +public class FuseShape implements Shape { + private static final int BEZ = Math.round(SIZE2 / 2 * DILShape.CIRC); + + private static final Polygon OK_POLY = new Polygon(false) + .add(0, 0) + .add(new Vector(0, -BEZ), new Vector(SIZE2 / 2 - BEZ, -SIZE2 / 2), new Vector(SIZE2 / 2, -SIZE2 / 2)) + .add(new Vector(SIZE2 / 2 + BEZ, -SIZE2 / 2), new Vector(SIZE2, -SIZE2 / 2 + BEZ), new Vector(SIZE2, 0)) + .add(new Vector(SIZE2, BEZ), new Vector(SIZE2 + SIZE2 / 2 - BEZ, SIZE2 / 2), new Vector(SIZE2 + SIZE2 / 2, SIZE2 / 2)) + .add(new Vector(SIZE2 + SIZE2 / 2 + BEZ, SIZE2 / 2), new Vector(SIZE, SIZE2 / 2 - BEZ), new Vector(SIZE, 0)); + private static final Polygon BLOWN_POLY1 = new Polygon(false) + .add(0, 0) + .add(new Vector(0, -BEZ), new Vector(SIZE2 / 2 - BEZ, -SIZE2 / 2), new Vector(SIZE2 / 2, -SIZE2 / 2)); + private static final Polygon BLOWN_POLY2 = new Polygon(false) + .add(SIZE2 + SIZE2 / 2, SIZE2 / 2) + .add(new Vector(SIZE2 + SIZE2 / 2 + BEZ, SIZE2 / 2), new Vector(SIZE, SIZE2 / 2 - BEZ), new Vector(SIZE, 0)); + + private final PinDescriptions outputs; + private final boolean blown; + + + /** + * Creates a new instance + * + * @param attr the attributes + * @param inputs the inputs + * @param outputs the outputs + */ + public FuseShape(ElementAttributes attr, PinDescriptions inputs, PinDescriptions outputs) { + this.outputs = outputs; + blown = attr.get(Keys.BLOWN); + } + + @Override + public Pins getPins() { + return new Pins() + .add(new Pin(new Vector(0, 0), outputs.get(0))) + .add(new Pin(new Vector(SIZE, 0), outputs.get(1))); + } + + @Override + public InteractorInterface applyStateMonitor(IOState ioState, Observer guiObserver) { + return null; + } + + @Override + public void drawTo(Graphic graphic, Style highLight) { + if (blown) { + graphic.drawPolygon(BLOWN_POLY1, Style.THIN); + graphic.drawPolygon(BLOWN_POLY2, Style.THIN); + } else + graphic.drawPolygon(OK_POLY, Style.THIN); + } +} diff --git a/src/main/java/de/neemann/digital/draw/shapes/ShapeFactory.java b/src/main/java/de/neemann/digital/draw/shapes/ShapeFactory.java index 6d945e3dd..ea8368179 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/ShapeFactory.java +++ b/src/main/java/de/neemann/digital/draw/shapes/ShapeFactory.java @@ -82,13 +82,6 @@ public final class ShapeFactory { map.put(Const.DESCRIPTION.getName(), ConstShape::new); map.put(Ground.DESCRIPTION.getName(), GroundShape::new); map.put(VDD.DESCRIPTION.getName(), VDDShape::new); - map.put(Switch.DESCRIPTION.getName(), SwitchShape::new); - map.put(Relay.DESCRIPTION.getName(), RelayShape::new); - map.put(NFET.DESCRIPTION.getName(), FETShapeN::new); - map.put(FGNFET.DESCRIPTION.getName(), FGFETShapeN::new); - map.put(FGPFET.DESCRIPTION.getName(), FGFETShapeP::new); - map.put(PFET.DESCRIPTION.getName(), FETShapeP::new); - map.put(TransGate.DESCRIPTION.getName(), TransGateShape::new); map.put(Out.DESCRIPTION.getName(), OutputShape::new); map.put(Out.LEDDESCRIPTION.getName(), LEDShape::new); map.put(LightBulb.DESCRIPTION.getName(), LightBulbShape::new); @@ -100,6 +93,15 @@ public final class ShapeFactory { map.put(DummyElement.DATADESCRIPTION.getName(), DataShape::new); map.put(RotEncoder.DESCRIPTION.getName(), RotEncoderShape::new); + map.put(Switch.DESCRIPTION.getName(), SwitchShape::new); + map.put(Fuse.DESCRIPTION.getName(), FuseShape::new); + map.put(Relay.DESCRIPTION.getName(), RelayShape::new); + map.put(NFET.DESCRIPTION.getName(), FETShapeN::new); + map.put(FGNFET.DESCRIPTION.getName(), FGFETShapeN::new); + map.put(FGPFET.DESCRIPTION.getName(), FGFETShapeP::new); + map.put(PFET.DESCRIPTION.getName(), FETShapeP::new); + map.put(TransGate.DESCRIPTION.getName(), TransGateShape::new); + map.put(Break.DESCRIPTION.getName(), BreakShape::new); map.put(Delay.DESCRIPTION.getName(), (attributes, inputs, outputs) -> new DelayShape()); diff --git a/src/main/resources/lang/lang_de.xml b/src/main/resources/lang/lang_de.xml index d411b0b2c..f6735d509 100644 --- a/src/main/resources/lang/lang_de.xml +++ b/src/main/resources/lang/lang_de.xml @@ -108,6 +108,12 @@ Es kann dann ein Programm bis zum nächsten BRK-Befehl ausgeführt werden.Einer der Ausgänge des Schalters. Einfacher Schalter. Der Schalter hat keine Gatterlaufzeit. Eine Signaländerung wird instantan von einem Ende des Schalters zum anderen propagiert. + + Fuse + Einer der Ausgänge der Sicherung. + Einer der Ausgänge der Sicherung. + Eine Sicherung die verwendet werden kann, um einen einmal programmierbaren Speicher aufzubauen. + Zähler Ein einfacher Zähler-Baustein. Zählt jede steigende Flanke am C Eingang und kann über den clr Eingang zurückgesetzt werden. Die Bitbreite des Zählers kann im Attributedialog festgelegt werden. diff --git a/src/main/resources/lang/lang_en.xml b/src/main/resources/lang/lang_en.xml index 229a723c8..ce83a7d09 100644 --- a/src/main/resources/lang/lang_en.xml +++ b/src/main/resources/lang/lang_en.xml @@ -107,6 +107,12 @@ There is no gate delay: A signal change is propagated immediately. One of the switch outputs. One of the switch outputs. + + Fuse + A fuse used to build a one time programmable memory. + One of the fuse outputs. + One of the fuse outputs. + Counter A simple counter component. The clock input increases the counter. Can be reset back to 0 with the clr pin. The number of bits can be set in the attribute dialog. diff --git a/src/test/java/de/neemann/digital/integration/TestExamples.java b/src/test/java/de/neemann/digital/integration/TestExamples.java index 24ea8f083..6c0f6ea00 100644 --- a/src/test/java/de/neemann/digital/integration/TestExamples.java +++ b/src/test/java/de/neemann/digital/integration/TestExamples.java @@ -28,7 +28,7 @@ public class TestExamples extends TestCase { */ public void testDistExamples() throws Exception { File examples = new File(Resources.getRoot().getParentFile().getParentFile(), "/main/dig"); - assertEquals(181, new FileScanner(this::check).scan(examples)); + assertEquals(182, new FileScanner(this::check).scan(examples)); assertEquals(82, testCasesInFiles); }