From b7f790a08e67fed6672d5685ee6bab8a1d3b8891 Mon Sep 17 00:00:00 2001
From: Sebastian Nickels <snickels@foxfire.consulting>
Date: Sun, 19 May 2019 21:59:35 +0200
Subject: [PATCH] Updated so that it works with the semicolon change to prepare
 for multiple streams

---
 src/main/resources/templates/gluon/CNNNet.ftl |  4 +-
 .../gluongenerator/GenerationTest.java        | 10 +++++
 src/test/resources/architectures/Alexnet.cnna |  2 +-
 .../resources/architectures/ResNeXt50.cnna    |  2 +-
 .../resources/architectures/ResNet152.cnna    |  2 +-
 .../resources/architectures/ResNet34.cnna     |  2 +-
 .../architectures/SequentialAlexnet.cnna      |  2 +-
 .../architectures/ThreeInputCNN_M14.cnna      |  2 +-
 src/test/resources/architectures/VGG16.cnna   |  2 +-
 .../ArgumentConstraintTest1.cnna              | 34 --------------
 .../ArgumentConstraintTest2.cnna              | 34 --------------
 .../ArgumentConstraintTest3.cnna              | 34 --------------
 .../ArgumentConstraintTest4.cnna              | 34 --------------
 .../ArgumentConstraintTest5.cnna              | 34 --------------
 .../ArgumentConstraintTest6.cnna              | 34 --------------
 .../invalid_tests/DuplicatedArgument.cnna     | 11 -----
 .../invalid_tests/DuplicatedIONames.cnna      | 16 -------
 .../invalid_tests/DuplicatedNames.cnna        | 20 ---------
 .../invalid_tests/IllegalIOName.cnna          | 11 -----
 .../resources/invalid_tests/IllegalName.cnna  | 15 -------
 .../InvalidArrayAccessValue.cnna              | 27 -----------
 .../invalid_tests/InvalidIOShape1.cnna        | 11 -----
 .../invalid_tests/InvalidIOShape2.cnna        | 11 -----
 .../invalid_tests/InvalidInputShape.cnna      | 11 -----
 .../invalid_tests/InvalidRecursion.cnna       | 40 -----------------
 .../invalid_tests/MissingArgument.cnna        | 34 --------------
 .../resources/invalid_tests/MissingIO2.cnna   | 11 -----
 .../invalid_tests/MissingLayerOperator.cnna   | 11 -----
 .../resources/invalid_tests/MissingMerge.cnna | 24 ----------
 .../MissingParallelBrackets.cnna              | 45 -------------------
 .../resources/invalid_tests/NotIOArray.cnna   | 11 -----
 .../invalid_tests/UnfinishedArchitecture.cnna | 15 -------
 .../resources/invalid_tests/UnknownIO.cnna    |  8 ----
 .../invalid_tests/UnknownMethod.cnna          | 11 -----
 .../invalid_tests/UnknownVariableName.cnna    | 11 -----
 .../invalid_tests/WrongArgument.cnna          | 11 -----
 .../resources/invalid_tests/WrongIOType.cnna  | 11 -----
 .../invalid_tests/WrongRangeOperator.cnna     | 11 -----
 .../resources/valid_tests/Alexnet_alt.cnna    |  2 +-
 .../resources/valid_tests/Alexnet_alt2.cnna   |  2 +-
 .../valid_tests/ArgumentSequenceTest.cnna     |  2 +-
 .../valid_tests/CifarClassifierNetwork.cnna   |  2 +-
 .../resources/valid_tests/Fixed_Alexnet.cnna  |  2 +-
 .../valid_tests/Fixed_ThreeInputCNN_M14.cnna  |  2 +-
 .../valid_tests/MultipleOutputs.cnna          |  2 +-
 .../valid_tests/MultipleStreams.cnna          | 14 ++++++
 .../valid_tests/ResNeXt50_InstanceTest.cnna   |  2 +-
 .../resources/valid_tests/ResNeXt50_alt.cnna  |  2 +-
 .../resources/valid_tests/ResNet152_alt.cnna  |  2 +-
 .../valid_tests/SimpleNetworkLinear.cnna      |  2 +-
 .../valid_tests/SimpleNetworkRelu.cnna        |  2 +-
 .../valid_tests/SimpleNetworkSigmoid.cnna     |  2 +-
 .../valid_tests/SimpleNetworkSoftmax.cnna     |  2 +-
 .../valid_tests/SimpleNetworkTanh.cnna        |  2 +-
 .../ThreeInputCNN_M14_alternative.cnna        |  2 +-
 src/test/resources/valid_tests/data_paths.txt |  3 +-
 56 files changed, 51 insertions(+), 617 deletions(-)
 delete mode 100644 src/test/resources/invalid_tests/ArgumentConstraintTest1.cnna
 delete mode 100644 src/test/resources/invalid_tests/ArgumentConstraintTest2.cnna
 delete mode 100644 src/test/resources/invalid_tests/ArgumentConstraintTest3.cnna
 delete mode 100644 src/test/resources/invalid_tests/ArgumentConstraintTest4.cnna
 delete mode 100644 src/test/resources/invalid_tests/ArgumentConstraintTest5.cnna
 delete mode 100644 src/test/resources/invalid_tests/ArgumentConstraintTest6.cnna
 delete mode 100644 src/test/resources/invalid_tests/DuplicatedArgument.cnna
 delete mode 100644 src/test/resources/invalid_tests/DuplicatedIONames.cnna
 delete mode 100644 src/test/resources/invalid_tests/DuplicatedNames.cnna
 delete mode 100644 src/test/resources/invalid_tests/IllegalIOName.cnna
 delete mode 100644 src/test/resources/invalid_tests/IllegalName.cnna
 delete mode 100644 src/test/resources/invalid_tests/InvalidArrayAccessValue.cnna
 delete mode 100644 src/test/resources/invalid_tests/InvalidIOShape1.cnna
 delete mode 100644 src/test/resources/invalid_tests/InvalidIOShape2.cnna
 delete mode 100644 src/test/resources/invalid_tests/InvalidInputShape.cnna
 delete mode 100644 src/test/resources/invalid_tests/InvalidRecursion.cnna
 delete mode 100644 src/test/resources/invalid_tests/MissingArgument.cnna
 delete mode 100644 src/test/resources/invalid_tests/MissingIO2.cnna
 delete mode 100644 src/test/resources/invalid_tests/MissingLayerOperator.cnna
 delete mode 100644 src/test/resources/invalid_tests/MissingMerge.cnna
 delete mode 100644 src/test/resources/invalid_tests/MissingParallelBrackets.cnna
 delete mode 100644 src/test/resources/invalid_tests/NotIOArray.cnna
 delete mode 100644 src/test/resources/invalid_tests/UnfinishedArchitecture.cnna
 delete mode 100644 src/test/resources/invalid_tests/UnknownIO.cnna
 delete mode 100644 src/test/resources/invalid_tests/UnknownMethod.cnna
 delete mode 100644 src/test/resources/invalid_tests/UnknownVariableName.cnna
 delete mode 100644 src/test/resources/invalid_tests/WrongArgument.cnna
 delete mode 100644 src/test/resources/invalid_tests/WrongIOType.cnna
 delete mode 100644 src/test/resources/invalid_tests/WrongRangeOperator.cnna
 create mode 100644 src/test/resources/valid_tests/MultipleStreams.cnna

diff --git a/src/main/resources/templates/gluon/CNNNet.ftl b/src/main/resources/templates/gluon/CNNNet.ftl
index c02d1732..e2c102c8 100644
--- a/src/main/resources/templates/gluon/CNNNet.ftl
+++ b/src/main/resources/templates/gluon/CNNNet.ftl
@@ -72,7 +72,7 @@ class Net(gluon.HybridBlock):
     def __init__(self, data_mean=None, data_std=None, **kwargs):
         super(Net, self).__init__(**kwargs)
         with self.name_scope():
-${tc.include(tc.architecture.body, "ARCHITECTURE_DEFINITION")}
+${tc.include(tc.architecture.streams[0], "ARCHITECTURE_DEFINITION")}
 
     def hybrid_forward(self, F, x):
-${tc.include(tc.architecture.body, "FORWARD_FUNCTION")}
\ No newline at end of file
+${tc.include(tc.architecture.streams[0], "FORWARD_FUNCTION")}
\ No newline at end of file
diff --git a/src/test/java/de/monticore/lang/monticar/cnnarch/gluongenerator/GenerationTest.java b/src/test/java/de/monticore/lang/monticar/cnnarch/gluongenerator/GenerationTest.java
index abe45750..c8b5d6f7 100644
--- a/src/test/java/de/monticore/lang/monticar/cnnarch/gluongenerator/GenerationTest.java
+++ b/src/test/java/de/monticore/lang/monticar/cnnarch/gluongenerator/GenerationTest.java
@@ -128,6 +128,16 @@ public class GenerationTest extends AbstractSymtabTest {
         assertTrue(Log.getFindings().size() == 3);
     }
 
+    /* TODO: Uncomment when multiple streams are implemented
+    @Test
+    public void testMultipleStreams() throws IOException, TemplateException {
+        Log.getFindings().clear();
+        String[] args = {"-m", "src/test/resources/valid_tests", "-r", "MultipleStreams"};
+        CNNArch2GluonCli.main(args);
+        assertTrue(Log.getFindings().size() == 3);
+    }
+    */
+
     @Test
     public void testFullCfgGeneration() throws IOException, TemplateException {
         Log.getFindings().clear();
diff --git a/src/test/resources/architectures/Alexnet.cnna b/src/test/resources/architectures/Alexnet.cnna
index d42958dc..048d808e 100644
--- a/src/test/resources/architectures/Alexnet.cnna
+++ b/src/test/resources/architectures/Alexnet.cnna
@@ -39,5 +39,5 @@ architecture Alexnet(img_height=224, img_width=224, img_channels=3, classes=10){
     fc(->=2) ->
     FullyConnected(units=10) ->
     Softmax() ->
-    predictions
+    predictions;
 }
\ No newline at end of file
diff --git a/src/test/resources/architectures/ResNeXt50.cnna b/src/test/resources/architectures/ResNeXt50.cnna
index 78cf41ed..aed84f47 100644
--- a/src/test/resources/architectures/ResNeXt50.cnna
+++ b/src/test/resources/architectures/ResNeXt50.cnna
@@ -40,5 +40,5 @@ architecture ResNeXt50(img_height=224, img_width=224, img_channels=3, classes=10
     GlobalPooling(pool_type="avg") ->
     FullyConnected(units=classes) ->
     Softmax() ->
-    predictions
+    predictions;
 }
\ No newline at end of file
diff --git a/src/test/resources/architectures/ResNet152.cnna b/src/test/resources/architectures/ResNet152.cnna
index 60031f27..27d7f6ab 100644
--- a/src/test/resources/architectures/ResNet152.cnna
+++ b/src/test/resources/architectures/ResNet152.cnna
@@ -33,5 +33,5 @@ architecture ResNet152(img_height=224, img_width=224, img_channels=3, classes=10
     GlobalPooling(pool_type="avg") ->
     FullyConnected(units=classes) ->
     Softmax() ->
-    predictions
+    predictions;
 }
\ No newline at end of file
diff --git a/src/test/resources/architectures/ResNet34.cnna b/src/test/resources/architectures/ResNet34.cnna
index bf9173b0..7742f98c 100644
--- a/src/test/resources/architectures/ResNet34.cnna
+++ b/src/test/resources/architectures/ResNet34.cnna
@@ -31,5 +31,5 @@ architecture ResNet34(img_height=224, img_width=224, img_channels=3, classes=100
     GlobalPooling(pool_type="avg") ->
     FullyConnected(units=classes) ->
     Softmax() ->
-    predictions
+    predictions;
 }
diff --git a/src/test/resources/architectures/SequentialAlexnet.cnna b/src/test/resources/architectures/SequentialAlexnet.cnna
index 66ad2a7c..c02983af 100644
--- a/src/test/resources/architectures/SequentialAlexnet.cnna
+++ b/src/test/resources/architectures/SequentialAlexnet.cnna
@@ -25,5 +25,5 @@ architecture SequentialAlexnet(img_height=224, img_width=224, img_channels=3, cl
     fc() ->
     FullyConnected(units=classes) ->
     Softmax() ->
-    predictions
+    predictions;
 }
diff --git a/src/test/resources/architectures/ThreeInputCNN_M14.cnna b/src/test/resources/architectures/ThreeInputCNN_M14.cnna
index 95f50f4c..d23221a4 100644
--- a/src/test/resources/architectures/ThreeInputCNN_M14.cnna
+++ b/src/test/resources/architectures/ThreeInputCNN_M14.cnna
@@ -28,5 +28,5 @@ architecture ThreeInputCNN_M14(img_height=200, img_width=300, img_channels=3, cl
     Relu() ->
     FullyConnected(units=classes) ->
     Softmax() ->
-    predictions
+    predictions;
 }
\ No newline at end of file
diff --git a/src/test/resources/architectures/VGG16.cnna b/src/test/resources/architectures/VGG16.cnna
index 7e4ad84d..b6df512a 100644
--- a/src/test/resources/architectures/VGG16.cnna
+++ b/src/test/resources/architectures/VGG16.cnna
@@ -27,5 +27,5 @@ architecture VGG16(img_height=224, img_width=224, img_channels=3, classes=1000){
     fc() ->
     FullyConnected(units=classes) ->
     Softmax() ->
-    predictions
+    predictions;
 }
\ No newline at end of file
diff --git a/src/test/resources/invalid_tests/ArgumentConstraintTest1.cnna b/src/test/resources/invalid_tests/ArgumentConstraintTest1.cnna
deleted file mode 100644
index 8436e3ed..00000000
--- a/src/test/resources/invalid_tests/ArgumentConstraintTest1.cnna
+++ /dev/null
@@ -1,34 +0,0 @@
-architecture ArgumentConstraintTest1(img_height=224, img_width=224, img_channels=3, classes=1000){
-    def input Z(0:255)^{img_channels, img_height, img_width} image
-    def output Q(0:1)^{classes} predictions
-
-    def conv(kernel, channels, stride=1, act=true){
-        Convolution(kernel=(kernel,kernel), channels=channels, stride=(stride,stride)) ->
-        BatchNorm() ->
-        Relu(?=act)
-    }
-    def skip(channels, stride){
-        Convolution(kernel=(1,1), channels=75, stride=(stride,stride)) ->
-        BatchNorm()
-    }
-    def resLayer(channels, stride=1){
-        (
-            conv(kernel=3, channels=channels, stride=stride) ->
-            conv(kernel=3, channels=channels, stride=stride, act=false)
-        |
-            skip(channels=channels, stride=stride, ?=(stride!=1))
-        ) ->
-        Add() ->
-        Relu()
-    }
-
-    image ->
-    conv(kernel=7, channels=64, stride=2) ->
-    Pooling(pool_type="max", kernel=(3,3), stride=(2,2)) ->
-    resLayer(channels=64, ->=3) ->
-    resLayer(channels=128, stride=2) ->
-    GlobalPooling(pool_type="avg") ->
-    FullyConnected(units=classes, ->=true) ->
-    Softmax() ->
-    predictions
-}
diff --git a/src/test/resources/invalid_tests/ArgumentConstraintTest2.cnna b/src/test/resources/invalid_tests/ArgumentConstraintTest2.cnna
deleted file mode 100644
index 59b8611d..00000000
--- a/src/test/resources/invalid_tests/ArgumentConstraintTest2.cnna
+++ /dev/null
@@ -1,34 +0,0 @@
-architecture ArgumentConstraintTest2(img_height=224, img_width=224, img_channels=3, classes=1000){
-    def input Z(0:255)^{img_channels, img_height, img_width} image
-    def output Q(0:1)^{classes} predictions
-
-    def conv(kernel, channels, stride=1, act=true){
-        Convolution(kernel=(kernel,kernel), channels=channels, stride=(stride,stride)) ->
-        BatchNorm() ->
-        Relu(?=act)
-    }
-    def skip(channels, stride){
-        Convolution(kernel=(1,1), channels=96, stride=(stride,-stride)) ->
-        BatchNorm()
-    }
-    def resLayer(channels, stride=1){
-        (
-            conv(kernel=3, channels=channels, stride=stride) ->
-            conv(kernel=3, channels=channels, stride=stride, act=false)
-        |
-            skip(channels=channels, stride=stride, ?=(stride!=1))
-        ) ->
-        Add() ->
-        Relu()
-    }
-
-    image ->
-    conv(kernel=7, channels=64, stride=2) ->
-    Pooling(pool_type="max", kernel=(3,3), stride=(2,2)) ->
-    resLayer(channels=64, ->=3) ->
-    resLayer(channels=128, stride=2) ->
-    GlobalPooling(pool_type="avg") ->
-    FullyConnected(units=classes) ->
-    Softmax() ->
-    predictions
-}
diff --git a/src/test/resources/invalid_tests/ArgumentConstraintTest3.cnna b/src/test/resources/invalid_tests/ArgumentConstraintTest3.cnna
deleted file mode 100644
index ee333ab9..00000000
--- a/src/test/resources/invalid_tests/ArgumentConstraintTest3.cnna
+++ /dev/null
@@ -1,34 +0,0 @@
-architecture ArgumentConstraintTest3(img_height=224, img_width=224, img_channels=3, classes=1000){
-    def input Z(0:255)^{img_channels, img_height, img_width} image
-    def output Q(0:1)^{classes} predictions
-
-    def conv(kernel, channels, stride=1, act=true){
-        Convolution(kernel=(kernel,kernel), channels=channels, stride=(stride,stride)) ->
-        BatchNorm() ->
-        Relu(?=act)
-    }
-    def skip(channels, stride){
-        Convolution(kernel=(1,1), channels=64, stride=(stride,stride)) ->
-        BatchNorm()
-    }
-    def resLayer(channels, stride=1){
-        (
-            conv(kernel=3, channels=channels, stride=stride) ->
-            conv(kernel=3, channels=channels, stride=stride, act=false)
-        |
-            skip(channels=channels, stride=stride, ?=(stride!=1))
-        ) ->
-        Add() ->
-        Relu()
-    }
-
-    image ->
-    conv(kernel=7, channels=64, stride=2) ->
-    Pooling(pool_type="max", kernel=(3,3), stride=(2,2), padding="valid") ->
-    resLayer(channels=64, ->=3) ->
-    resLayer(channels=128, stride=2) ->
-    GlobalPooling(pool_type="avg", ?=1) ->
-    FullyConnected(units=classes) ->
-    Softmax() ->
-    predictions
-}
diff --git a/src/test/resources/invalid_tests/ArgumentConstraintTest4.cnna b/src/test/resources/invalid_tests/ArgumentConstraintTest4.cnna
deleted file mode 100644
index f06b6a8d..00000000
--- a/src/test/resources/invalid_tests/ArgumentConstraintTest4.cnna
+++ /dev/null
@@ -1,34 +0,0 @@
-architecture ArgumentConstraintTest4(img_height=224, img_width=224, img_channels=3, classes=1000){
-    def input Z(0:255)^{img_channels, img_height, img_width} image
-    def output Q(0:1)^{classes} predictions
-
-    def conv(kernel, channels, stride=1, act=true){
-        Convolution(kernel=(kernel,kernel), channels=channels, stride=(stride,stride)) ->
-        BatchNorm() ->
-        Relu(?=act)
-    }
-    def skip(channels, stride){
-        Convolution(kernel=(1,1), channels=96, stride=(stride,stride)) ->
-        BatchNorm()
-    }
-    def resLayer(channels, stride=1){
-        (
-            conv(kernel=3, channels=channels, stride=stride) ->
-            conv(kernel=3, channels=channels, stride=stride, act=false)
-        |
-            skip(channels=channels, stride=stride, ?=(stride!=1))
-        ) ->
-        Add() ->
-        Relu()
-    }
-
-    image ->
-    conv(kernel=7, channels=64, stride=2) ->
-    Pooling(pool_type="max", kernel=(3,3), stride=(2,2), padding=1) ->
-    resLayer(channels=64, ->=3) ->
-    resLayer(channels=128, stride=2) ->
-    GlobalPooling(pool_type="avg") ->
-    FullyConnected(units=classes) ->
-    Softmax() ->
-    predictions
-}
diff --git a/src/test/resources/invalid_tests/ArgumentConstraintTest5.cnna b/src/test/resources/invalid_tests/ArgumentConstraintTest5.cnna
deleted file mode 100644
index 42446f06..00000000
--- a/src/test/resources/invalid_tests/ArgumentConstraintTest5.cnna
+++ /dev/null
@@ -1,34 +0,0 @@
-architecture ArgumentConstraintTest5(img_height=224, img_width=224, img_channels=3, classes=1000){
-    def input Z(0:255)^{img_channels, img_height, img_width} image
-    def output Q(0:1)^{classes} predictions
-
-    def conv(kernel, channels, stride=1, act=true){
-        Convolution(kernel=(kernel,kernel), channels=channels, stride=(stride,stride)) ->
-        BatchNorm() ->
-        Relu(?=act)
-    }
-    def skip(channels, stride){
-        Convolution(kernel=(1,-1), channels=96, stride=(stride,stride)) ->
-        BatchNorm()
-    }
-    def resLayer(channels, stride=1){
-        (
-            conv(kernel=3, channels=channels, stride=stride) ->
-            conv(kernel=3, channels=channels, stride=stride, act=false)
-        |
-            skip(channels=channels, stride=stride, ?=(stride!=1))
-        ) ->
-        Add() ->
-        Relu()
-    }
-
-    image ->
-    conv(kernel=7, channels=64, stride=2) ->
-    Pooling(pool_type="max", kernel=(3,3), stride=(2,2), padding="same") ->
-    resLayer(channels=64, ->=3) ->
-    resLayer(channels=128, stride=2) ->
-    GlobalPooling(pool_type="avg") ->
-    FullyConnected(units=classes) ->
-    Softmax() ->
-    predictions
-}
diff --git a/src/test/resources/invalid_tests/ArgumentConstraintTest6.cnna b/src/test/resources/invalid_tests/ArgumentConstraintTest6.cnna
deleted file mode 100644
index e046ce45..00000000
--- a/src/test/resources/invalid_tests/ArgumentConstraintTest6.cnna
+++ /dev/null
@@ -1,34 +0,0 @@
-architecture ArgumentConstraintTest6(img_height=224, img_width=224, img_channels=3, classes=1000){
-    def input Z(0:255)^{img_channels, img_height, img_width} image
-    def output Q(0:1)^{classes} predictions
-
-    def conv(kernel, channels, stride=1, act=true){
-        Convolution(kernel=(kernel,kernel), channels=channels, stride=(stride,stride)) ->
-        BatchNorm() ->
-        Relu(?=act)
-    }
-    def skip(channels, stride){
-        Convolution(kernel=(1,1), channels=false, stride=(stride,stride)) ->
-        BatchNorm()
-    }
-    def resLayer(channels, stride=1){
-        (
-            conv(kernel=3, channels=channels, stride=stride) ->
-            conv(kernel=3, channels=channels, stride=stride, act=false)
-        |
-            skip(channels=channels, stride=stride, ?=(stride!=1))
-        ) ->
-        Add() ->
-        Relu()
-    }
-
-    image ->
-    conv(kernel=7, channels=64, stride=2) ->
-    Pooling(pool_type="max", kernel=(3,3), stride=(2,2), padding="valid") ->
-    resLayer(channels=64, ->=3) ->
-    resLayer(channels=128, stride=2) ->
-    GlobalPooling(pool_type="avg") ->
-    FullyConnected(units=classes) ->
-    Softmax() ->
-    predictions
-}
diff --git a/src/test/resources/invalid_tests/DuplicatedArgument.cnna b/src/test/resources/invalid_tests/DuplicatedArgument.cnna
deleted file mode 100644
index 6f885ac2..00000000
--- a/src/test/resources/invalid_tests/DuplicatedArgument.cnna
+++ /dev/null
@@ -1,11 +0,0 @@
-architecture DuplicatedArgument(){
-    def input Q(-oo:+oo)^{10} in1
-    def output Q(0:1)^{2} out1
-
-    in1 ->
-    FullyConnected(units=64, units=32) ->
-    Tanh() ->
-    FullyConnected(units=2) ->
-    Softmax() ->
-    out1
-}
\ No newline at end of file
diff --git a/src/test/resources/invalid_tests/DuplicatedIONames.cnna b/src/test/resources/invalid_tests/DuplicatedIONames.cnna
deleted file mode 100644
index 2940f406..00000000
--- a/src/test/resources/invalid_tests/DuplicatedIONames.cnna
+++ /dev/null
@@ -1,16 +0,0 @@
-architecture DuplicatedIONames(inputs=10, classes=2){
-    def input Q(-oo:+oo)^{inputs} in1
-    def input Q(-oo:+oo)^{inputs} in1
-    def output Q(0:1)^{classes} out1
-
-    def fc(){
-        FullyConnected(units=64) ->
-        Tanh()
-    }
-
-    in1 ->
-    fc() ->
-    FullyConnected(units=classes) ->
-    Softmax() ->
-    out1
-}
\ No newline at end of file
diff --git a/src/test/resources/invalid_tests/DuplicatedNames.cnna b/src/test/resources/invalid_tests/DuplicatedNames.cnna
deleted file mode 100644
index 1fbf822b..00000000
--- a/src/test/resources/invalid_tests/DuplicatedNames.cnna
+++ /dev/null
@@ -1,20 +0,0 @@
-architecture DuplicatedNames(inputs=10, inputs=10, classes=2){
-    def input Q(-oo:+oo)^{inputs} in1
-    def output Q(0:1)^{classes} out1
-
-    def fc(){
-        FullyConnected(units=64) ->
-        Tanh()
-    }
-
-    def fc(){
-        FullyConnected(units=64) ->
-        Tanh()
-    }
-
-    in1 ->
-    fc() ->
-    FullyConnected(units=classes) ->
-    Softmax() ->
-    out1
-}
\ No newline at end of file
diff --git a/src/test/resources/invalid_tests/IllegalIOName.cnna b/src/test/resources/invalid_tests/IllegalIOName.cnna
deleted file mode 100644
index cd2d66c6..00000000
--- a/src/test/resources/invalid_tests/IllegalIOName.cnna
+++ /dev/null
@@ -1,11 +0,0 @@
-architecture IllegalIOName{
-    def input Q(-oo:+oo)^{10} data_
-    def output Q(0:1)^{2} predictions_
-
-    data_ ->
-    FullyConnected(units=64, no_bias=true) ->
-    Tanh() ->
-    FullyConnected(units=2, no_bias=true) ->
-    Softmax() ->
-    predictions_
-}
\ No newline at end of file
diff --git a/src/test/resources/invalid_tests/IllegalName.cnna b/src/test/resources/invalid_tests/IllegalName.cnna
deleted file mode 100644
index ed807216..00000000
--- a/src/test/resources/invalid_tests/IllegalName.cnna
+++ /dev/null
@@ -1,15 +0,0 @@
-architecture IllegalName(inputs=10, classes=2, Tg = 1){
-    def input Q(-oo:+oo)^{inputs} in1
-    def output Q(0:1)^{classes} out1
-
-    def Fc(){
-        FullyConnected(units=10)
-    }
-
-    in1 ->
-    FullyConnected(units=64) ->
-    Tanh() ->
-    FullyConnected(units=classes) ->
-    Softmax() ->
-    out1
-}
\ No newline at end of file
diff --git a/src/test/resources/invalid_tests/InvalidArrayAccessValue.cnna b/src/test/resources/invalid_tests/InvalidArrayAccessValue.cnna
deleted file mode 100644
index 1901cd81..00000000
--- a/src/test/resources/invalid_tests/InvalidArrayAccessValue.cnna
+++ /dev/null
@@ -1,27 +0,0 @@
-architecture InvalidArrayAccessValue(img_height=200, img_width=300, img_channels=3, classes=3){
-    def input Z(0:255)^{img_channels, img_height, img_width} image[3]
-    def output Q(0:1)^{classes} predictions
-
-    def conv(kernel, channels){
-        Convolution(kernel=kernel, channels=channels) ->
-        Relu()
-    }
-
-    def inputGroup(index){
-        [index] ->
-        conv(kernel=(3,3), channels=32, ->=3) ->
-        Pooling(pool_type="max", kernel=(2,2), stride=(2,2))
-    }
-
-    (image[0] | image[1] | image[2] | image[3]) ->
-    inputGroup(index=[0|..|2]) ->
-    Concatenate() ->
-    conv(kernel=(3,3), channels=64) ->
-    Pooling(pool_type="max", kernel=(2,2), stride=(2,2)) ->
-
-    FullyConnected(units=32) ->
-    Relu() ->
-    FullyConnected(units=classes) ->
-    Softmax() ->
-    predictions
-}
diff --git a/src/test/resources/invalid_tests/InvalidIOShape1.cnna b/src/test/resources/invalid_tests/InvalidIOShape1.cnna
deleted file mode 100644
index 3f03ce09..00000000
--- a/src/test/resources/invalid_tests/InvalidIOShape1.cnna
+++ /dev/null
@@ -1,11 +0,0 @@
-architecture InvalidIOShape1(){
-    def input Q(-oo:+oo)^{10, 2} in1
-    def output Q(0:1)^{10, 2, 2, 2} out1
-
-    in1 ->
-    FullyConnected(units=64) ->
-    Tanh() ->
-    FullyConnected(units=10) ->
-    Softmax() ->
-    out1
-}
\ No newline at end of file
diff --git a/src/test/resources/invalid_tests/InvalidIOShape2.cnna b/src/test/resources/invalid_tests/InvalidIOShape2.cnna
deleted file mode 100644
index 3e746f60..00000000
--- a/src/test/resources/invalid_tests/InvalidIOShape2.cnna
+++ /dev/null
@@ -1,11 +0,0 @@
-architecture InvalidIOShape2(){
-    def input Q(-oo:+oo)^{10.5} in1
-    def output Q(0:1)^{-10} out1
-
-    in1 ->
-    FullyConnected(units=64) ->
-    Tanh() ->
-    FullyConnected(units=10) ->
-    Softmax() ->
-    out1
-}
\ No newline at end of file
diff --git a/src/test/resources/invalid_tests/InvalidInputShape.cnna b/src/test/resources/invalid_tests/InvalidInputShape.cnna
deleted file mode 100644
index 9fd7acb1..00000000
--- a/src/test/resources/invalid_tests/InvalidInputShape.cnna
+++ /dev/null
@@ -1,11 +0,0 @@
-architecture InvalidInputShape(inputs=10, classes=2){
-    def input Q(-oo:+oo)^{inputs} in1[2]
-    def output Q(0:1)^{classes} out1[2]
-
-    in1 ->
-    FullyConnected(units=64) ->
-    Tanh() ->
-    FullyConnected(units=classes) ->
-    Softmax() ->
-    out1
-}
\ No newline at end of file
diff --git a/src/test/resources/invalid_tests/InvalidRecursion.cnna b/src/test/resources/invalid_tests/InvalidRecursion.cnna
deleted file mode 100644
index 188eaa9b..00000000
--- a/src/test/resources/invalid_tests/InvalidRecursion.cnna
+++ /dev/null
@@ -1,40 +0,0 @@
-architecture InvalidRecursion(img_height=224, img_width=224, img_channels=3, classes=1000){
-    def input Z(0:255)^{img_channels, img_height, img_width} image
-    def output Q(0:1)^{classes} predictions
-
-    def conv(kernel, channels, stride=1, act=true){
-        Convolution(kernel=(kernel,kernel), channels=channels, stride=(stride,stride)) ->
-        BatchNorm() ->
-        resLayer(channels = 8) ->
-        Relu(?=act)
-    }
-    def skip(channels, stride){
-        Convolution(kernel=(1,1), channels=channels, stride=(stride,stride)) ->
-        BatchNorm()
-    }
-    def resLayer(channels, stride=1){
-        (
-            conv(kernel=3, channels=channels, stride=stride) ->
-            conv(kernel=3, channels=channels, stride=stride, act=false)
-        |
-            skip(channels=channels, stride=stride, ?=(stride!=1))
-        ) ->
-        Add() ->
-        Relu()
-    }
-
-    image ->
-    conv(kernel=7, channels=64, stride=2) ->
-    Pooling(pool_type="max", kernel=(3,3), stride=(2,2)) ->
-    resLayer(channels=64, ->=3) ->
-    resLayer(channels=128, stride=2) ->
-    resLayer(channels=128, ->=3) ->
-    resLayer(channels=256, stride=2) ->
-    resLayer(channels=256, ->=5) ->
-    resLayer(channels=512, stride=2) ->
-    resLayer(channels=512, ->=2) ->
-    GlobalPooling(pool_type="avg") ->
-    FullyConnected(units=classes) ->
-    Softmax() ->
-    predictions
-}
diff --git a/src/test/resources/invalid_tests/MissingArgument.cnna b/src/test/resources/invalid_tests/MissingArgument.cnna
deleted file mode 100644
index 88441c4e..00000000
--- a/src/test/resources/invalid_tests/MissingArgument.cnna
+++ /dev/null
@@ -1,34 +0,0 @@
-architecture MissingArgument(img_height=224, img_width=224, img_channels=3, classes=1000){
-    def input Z(0:255)^{img_channels, img_height, img_width} image
-    def output Q(0:1)^{classes} predictions
-
-    def conv(kernel, channels, stride=1, act=true){
-        Convolution(kernel=(kernel,kernel), channels=channels, stride=(stride,stride)) ->
-        BatchNorm() ->
-        Relu(?=act)
-    }
-    def skip(channels, stride){
-        Convolution(channels=96, stride=(stride,stride)) ->
-        BatchNorm()
-    }
-    def resLayer(channels, stride=1){
-        (
-            conv(kernel=3, channels=channels, stride=stride) ->
-            conv(kernel=3, channels=channels, stride=stride, act=false)
-        |
-            skip(channels=channels, stride=stride, ?=(stride!=1))
-        ) ->
-        Add() ->
-        Relu()
-    }
-
-    image ->
-    conv(kernel=7, stride=2) ->
-    Pooling(pool_type="max") ->
-    resLayer(channels=64, ->=3) ->
-    resLayer(channels=128, stride=2) ->
-    GlobalPooling(pool_type="avg") ->
-    FullyConnected(units=classes) ->
-    Softmax() ->
-    predictions
-}
\ No newline at end of file
diff --git a/src/test/resources/invalid_tests/MissingIO2.cnna b/src/test/resources/invalid_tests/MissingIO2.cnna
deleted file mode 100644
index c82202cf..00000000
--- a/src/test/resources/invalid_tests/MissingIO2.cnna
+++ /dev/null
@@ -1,11 +0,0 @@
-architecture MissingIO2(inputs=10, classes=2){
-    def input Q(-oo:+oo)^{inputs} in1[2]
-    def output Q(0:1)^{classes} out1[2]
-
-    in1[0] ->
-    FullyConnected(units=64, no_bias=true) ->
-    Tanh() ->
-    FullyConnected(units=classes, no_bias=true) ->
-    Softmax() ->
-    out1[0]
-}
\ No newline at end of file
diff --git a/src/test/resources/invalid_tests/MissingLayerOperator.cnna b/src/test/resources/invalid_tests/MissingLayerOperator.cnna
deleted file mode 100644
index 6cea4a6e..00000000
--- a/src/test/resources/invalid_tests/MissingLayerOperator.cnna
+++ /dev/null
@@ -1,11 +0,0 @@
-architecture MissingLayerOperator(){
-    def input Q(-oo:+oo)^{10} in1
-    def output Q(0:1)^{2} out1
-
-    in1 ->
-    FullyConnected(units=64, no_bias=true) ->
-    Tanh()
-    FullyConnected(units=2, no_bias=true)
-    Softmax() ->
-    out1
-}
\ No newline at end of file
diff --git a/src/test/resources/invalid_tests/MissingMerge.cnna b/src/test/resources/invalid_tests/MissingMerge.cnna
deleted file mode 100644
index d2fb2e20..00000000
--- a/src/test/resources/invalid_tests/MissingMerge.cnna
+++ /dev/null
@@ -1,24 +0,0 @@
-architecture MissingMerge(inputs=10, classes=2){
-    def input Q(-oo:+oo)^{inputs} in1
-    def output Q(0:1)^{classes} out1
-
-    in1 ->
-    (
-        (
-            FullyConnected(units=16)
-        |
-            FullyConnected(units=16)
-        )
-    |
-        (
-            FullyConnected(units=16)
-        |
-            FullyConnected(units=16)
-        )
-    ) ->
-    Add() ->
-    Tanh() ->
-    FullyConnected(units=classes) ->
-    Softmax() ->
-    out1
-}
\ No newline at end of file
diff --git a/src/test/resources/invalid_tests/MissingParallelBrackets.cnna b/src/test/resources/invalid_tests/MissingParallelBrackets.cnna
deleted file mode 100644
index e8cacb56..00000000
--- a/src/test/resources/invalid_tests/MissingParallelBrackets.cnna
+++ /dev/null
@@ -1,45 +0,0 @@
-architecture MissingParallelBrackets(img_height=224, img_width=224, img_channels=3, classes=10){
-    def input Z(0:255)^{img_channels, img_height, img_width} image
-    def output Q(0:1)^{classes} predictions
-
-    def conv(kernel, channels, hasPool=true, convStride=(1,1)){
-        Convolution(kernel=kernel, channels=channels, stride=convStride) ->
-        Relu() ->
-        Pooling(pool_type="max", kernel=(3,3), stride=(2,2), ?=hasPool)
-    }
-    def fc(){
-        FullyConnected(units=4096) ->
-        Relu() ->
-        Dropout()
-    }
-
-    image ->
-    conv(kernel=(11,11), channels=96, convStride=(4,4)) ->
-    Lrn(nsize=5, alpha=0.0001, beta=0.75) ->
-
-        SplitData(index=0, n=2) ->
-        conv(kernel=(5,5), channels=128) ->
-        Lrn(nsize=5, alpha=0.0001, beta=0.75)
-    |
-        SplitData(index=1, n=2) ->
-        conv(kernel=(5,5), channels=128) ->
-        Lrn(nsize=5, alpha=0.0001, beta=0.75)
-    ->
-
-    conv(kernel=(3,3), channels=384 ,hasPool=false) ->
-
-        SplitData(index=0, n=2) ->
-        conv(kernel=(3,3), channels=192, hasPool=false) ->
-        conv(kernel=(3,3), channels=128)
-    |
-        SplitData(index=1, n=2) ->
-        conv(kernel=(3,3), channels=192, hasPool=false) ->
-        conv(kernel=(3,3), channels=128)
-    ->
-
-    fc() ->
-    fc() ->
-    FullyConnected(units=classes) ->
-    Softmax() ->
-    predictions
-}
\ No newline at end of file
diff --git a/src/test/resources/invalid_tests/NotIOArray.cnna b/src/test/resources/invalid_tests/NotIOArray.cnna
deleted file mode 100644
index a1f16d82..00000000
--- a/src/test/resources/invalid_tests/NotIOArray.cnna
+++ /dev/null
@@ -1,11 +0,0 @@
-architecture NotIOArray(inputs=10, classes=2){
-    def input Q(-oo:+oo)^{inputs} in1
-    def output Q(0:1)^{classes} out1
-
-    in1[1] ->
-    FullyConnected(units=64, no_bias=true) ->
-    Tanh() ->
-    FullyConnected(units=classes, no_bias=true) ->
-    Softmax() ->
-    out1[0]
-}
\ No newline at end of file
diff --git a/src/test/resources/invalid_tests/UnfinishedArchitecture.cnna b/src/test/resources/invalid_tests/UnfinishedArchitecture.cnna
deleted file mode 100644
index 2f806bbd..00000000
--- a/src/test/resources/invalid_tests/UnfinishedArchitecture.cnna
+++ /dev/null
@@ -1,15 +0,0 @@
-architecture UnfinishedArchitecture(inputs=10, classes=2){
-    def input Q(-oo:+oo)^{inputs} in1
-    def output Q(0:1)^{classes} out1
-
-    in1 ->
-    FullyConnected(units=64, no_bias=true) ->
-    Tanh() ->
-    (
-        FullyConnected(units=classes, no_bias=true) ->
-        Softmax() ->
-        out1
-    |
-
-    )
-}
\ No newline at end of file
diff --git a/src/test/resources/invalid_tests/UnknownIO.cnna b/src/test/resources/invalid_tests/UnknownIO.cnna
deleted file mode 100644
index 40987086..00000000
--- a/src/test/resources/invalid_tests/UnknownIO.cnna
+++ /dev/null
@@ -1,8 +0,0 @@
-architecture UnknownIO(){
-    in1 ->
-    FullyConnected(units=64) ->
-    Tanh() ->
-    FullyConnected(units=10) ->
-    Softmax() ->
-    out1
-}
\ No newline at end of file
diff --git a/src/test/resources/invalid_tests/UnknownMethod.cnna b/src/test/resources/invalid_tests/UnknownMethod.cnna
deleted file mode 100644
index ec87f5e4..00000000
--- a/src/test/resources/invalid_tests/UnknownMethod.cnna
+++ /dev/null
@@ -1,11 +0,0 @@
-architecture UnknownMethod(inputs=10, classes=2){
-    def input Q(-oo:+oo)^{inputs} in1
-    def output Q(0:1)^{classes} out1
-
-    in1 ->
-    FllyConnected(units=64, no_bias=true) ->
-    Tanh() ->
-    FullyConnected(units=classes, no_bias=true) ->
-    Softmax() ->
-    out1
-}
\ No newline at end of file
diff --git a/src/test/resources/invalid_tests/UnknownVariableName.cnna b/src/test/resources/invalid_tests/UnknownVariableName.cnna
deleted file mode 100644
index 9f79070a..00000000
--- a/src/test/resources/invalid_tests/UnknownVariableName.cnna
+++ /dev/null
@@ -1,11 +0,0 @@
-architecture UnknownVariableName(inputs=10){
-    def input Q(-oo:+oo)^{inputs} in1
-    def output Q(0:1)^{2} out1
-
-    in1 ->
-    FullyConnected(units=64) ->
-    Tanh() ->
-    FullyConnected(units=classes) ->
-    Softmax() ->
-    out1
-}
\ No newline at end of file
diff --git a/src/test/resources/invalid_tests/WrongArgument.cnna b/src/test/resources/invalid_tests/WrongArgument.cnna
deleted file mode 100644
index 893b4ce5..00000000
--- a/src/test/resources/invalid_tests/WrongArgument.cnna
+++ /dev/null
@@ -1,11 +0,0 @@
-architecture WrongArgument(inputs=10, classes=2){
-    def input Q(-oo:+oo)^{inputs} in1
-    def output Q(0:1)^{classes} out1
-
-    in1 ->
-    FullyConnected(units=64, bias=true) ->
-    Tanh(asd=1) ->
-    FullyConnected(unit=classes) ->
-    Softmax() ->
-    out1
-}
\ No newline at end of file
diff --git a/src/test/resources/invalid_tests/WrongIOType.cnna b/src/test/resources/invalid_tests/WrongIOType.cnna
deleted file mode 100644
index 11dae442..00000000
--- a/src/test/resources/invalid_tests/WrongIOType.cnna
+++ /dev/null
@@ -1,11 +0,0 @@
-architecture WrongIOType(inputs=10, classes=2){
-    def input Q(-oo:+oo)^{inputs} in1
-    def output Q(0:1)^{classes} out1
-
-    in1 ->
-    FullyConnected(units=64, no_bias=true) ->
-    Tanh() ->
-    FullyConnected(units=classes, no_bias=true) ->
-    Relu() ->
-    out1
-}
\ No newline at end of file
diff --git a/src/test/resources/invalid_tests/WrongRangeOperator.cnna b/src/test/resources/invalid_tests/WrongRangeOperator.cnna
deleted file mode 100644
index d6ddac77..00000000
--- a/src/test/resources/invalid_tests/WrongRangeOperator.cnna
+++ /dev/null
@@ -1,11 +0,0 @@
-architecture WrongRangeOperator(inputs=10, classes=2){
-    def input Q(-oo:+oo)^{inputs} in1
-    def output Q(0:1)^{classes} out1
-
-    in1 ->
-    FullyConnected(units=[64->..|65]) ->
-    Tanh() ->
-    FullyConnected(units=[classes |..-> classes + 1] ) ->
-    Softmax() ->
-    out1
-}
\ No newline at end of file
diff --git a/src/test/resources/valid_tests/Alexnet_alt.cnna b/src/test/resources/valid_tests/Alexnet_alt.cnna
index 9a27ff06..edb3e404 100644
--- a/src/test/resources/valid_tests/Alexnet_alt.cnna
+++ b/src/test/resources/valid_tests/Alexnet_alt.cnna
@@ -49,5 +49,5 @@ architecture Alexnet_alt(img_height=224, img_width=224, img_channels=3, classes=
     Dropout() ->
     FullyConnected(units=classes) ->
     Softmax() ->
-    predictions
+    predictions;
 }
\ No newline at end of file
diff --git a/src/test/resources/valid_tests/Alexnet_alt2.cnna b/src/test/resources/valid_tests/Alexnet_alt2.cnna
index fab6f88f..66248a9a 100644
--- a/src/test/resources/valid_tests/Alexnet_alt2.cnna
+++ b/src/test/resources/valid_tests/Alexnet_alt2.cnna
@@ -35,5 +35,5 @@ architecture Alexnet_alt2(img_height=224, img_width=224, img_channels=3, classes
     fc(-> = 2) ->
     FullyConnected(units=classes) ->
     Softmax() ->
-    predictions
+    predictions;
 }
\ No newline at end of file
diff --git a/src/test/resources/valid_tests/ArgumentSequenceTest.cnna b/src/test/resources/valid_tests/ArgumentSequenceTest.cnna
index 28e95e1f..bf695c4a 100644
--- a/src/test/resources/valid_tests/ArgumentSequenceTest.cnna
+++ b/src/test/resources/valid_tests/ArgumentSequenceTest.cnna
@@ -9,5 +9,5 @@ architecture ArgumentSequenceTest {
     Concatenate() ->
     FullyConnected(units=10) ->
     Softmax() ->
-    predictions
+    predictions;
 }
\ No newline at end of file
diff --git a/src/test/resources/valid_tests/CifarClassifierNetwork.cnna b/src/test/resources/valid_tests/CifarClassifierNetwork.cnna
index 5eba0140..25f35115 100644
--- a/src/test/resources/valid_tests/CifarClassifierNetwork.cnna
+++ b/src/test/resources/valid_tests/CifarClassifierNetwork.cnna
@@ -31,5 +31,5 @@ architecture CifarClassifierNetwork(classes=10){
     Dropout()->
     FullyConnected(units=classes) ->
     Softmax() ->
-    softmax
+    softmax;
 }
\ No newline at end of file
diff --git a/src/test/resources/valid_tests/Fixed_Alexnet.cnna b/src/test/resources/valid_tests/Fixed_Alexnet.cnna
index 656e6186..992a3adb 100644
--- a/src/test/resources/valid_tests/Fixed_Alexnet.cnna
+++ b/src/test/resources/valid_tests/Fixed_Alexnet.cnna
@@ -39,5 +39,5 @@ architecture Fixed_Alexnet(){
     fc(->=2) ->
     FullyConnected(units=10) ->
     Softmax() ->
-    predictions
+    predictions;
 }
\ No newline at end of file
diff --git a/src/test/resources/valid_tests/Fixed_ThreeInputCNN_M14.cnna b/src/test/resources/valid_tests/Fixed_ThreeInputCNN_M14.cnna
index 8fe709e1..f65be374 100644
--- a/src/test/resources/valid_tests/Fixed_ThreeInputCNN_M14.cnna
+++ b/src/test/resources/valid_tests/Fixed_ThreeInputCNN_M14.cnna
@@ -23,5 +23,5 @@ architecture Fixed_ThreeInputCNN_M14(){
     Relu() ->
     FullyConnected(units=3) ->
     Softmax() ->
-    predictions
+    predictions;
 }
\ No newline at end of file
diff --git a/src/test/resources/valid_tests/MultipleOutputs.cnna b/src/test/resources/valid_tests/MultipleOutputs.cnna
index 2682693f..a7b7eff8 100644
--- a/src/test/resources/valid_tests/MultipleOutputs.cnna
+++ b/src/test/resources/valid_tests/MultipleOutputs.cnna
@@ -16,6 +16,6 @@ architecture MultipleOutputs{
         FullyConnected(units=4, no_bias=true) ->
         Softmax()
     ) ->
-    pred
+    pred;
 
 }
\ No newline at end of file
diff --git a/src/test/resources/valid_tests/MultipleStreams.cnna b/src/test/resources/valid_tests/MultipleStreams.cnna
new file mode 100644
index 00000000..e0c5010a
--- /dev/null
+++ b/src/test/resources/valid_tests/MultipleStreams.cnna
@@ -0,0 +1,14 @@
+architecture MultipleStreams{
+    def input Q(-oo:+oo)^{10} data[2]
+    def output Q(0:1)^{4} pred[2]
+
+    data[0] ->
+    FullyConnected(units=4, no_bias=true) ->
+    Softmax() ->
+    pred[0];
+
+    data[1] ->
+    FullyConnected(units=4, no_bias=true) ->
+    Softmax() ->
+    pred[1];
+}
\ No newline at end of file
diff --git a/src/test/resources/valid_tests/ResNeXt50_InstanceTest.cnna b/src/test/resources/valid_tests/ResNeXt50_InstanceTest.cnna
index ad939bff..07b67e07 100644
--- a/src/test/resources/valid_tests/ResNeXt50_InstanceTest.cnna
+++ b/src/test/resources/valid_tests/ResNeXt50_InstanceTest.cnna
@@ -40,5 +40,5 @@ architecture ResNeXt50_InstanceTest(img_height=224, img_width=224, img_channels=
     GlobalPooling(pool_type="avg") ->
     FullyConnected(units=classes) ->
     Softmax() ->
-    predictions
+    predictions;
 }
\ No newline at end of file
diff --git a/src/test/resources/valid_tests/ResNeXt50_alt.cnna b/src/test/resources/valid_tests/ResNeXt50_alt.cnna
index 6fa681bd..f3afac0e 100644
--- a/src/test/resources/valid_tests/ResNeXt50_alt.cnna
+++ b/src/test/resources/valid_tests/ResNeXt50_alt.cnna
@@ -42,5 +42,5 @@ architecture ResNeXt50_alt(img_height=224, img_width=224, img_channels=3, classe
     GlobalPooling(pool_type="avg") ->
     FullyConnected(units=classes) ->
     Softmax() ->
-    predictions
+    predictions;
 }
\ No newline at end of file
diff --git a/src/test/resources/valid_tests/ResNet152_alt.cnna b/src/test/resources/valid_tests/ResNet152_alt.cnna
index dfba32db..23c06015 100644
--- a/src/test/resources/valid_tests/ResNet152_alt.cnna
+++ b/src/test/resources/valid_tests/ResNet152_alt.cnna
@@ -36,5 +36,5 @@ architecture ResNet152_alt(img_height=224, img_width=224, img_channels=3, classe
     GlobalPooling(pool_type="avg") ->
     FullyConnected(units=classes) ->
     Softmax() ->
-    predictions
+    predictions;
 }
\ No newline at end of file
diff --git a/src/test/resources/valid_tests/SimpleNetworkLinear.cnna b/src/test/resources/valid_tests/SimpleNetworkLinear.cnna
index cbb8a38b..2eabd335 100644
--- a/src/test/resources/valid_tests/SimpleNetworkLinear.cnna
+++ b/src/test/resources/valid_tests/SimpleNetworkLinear.cnna
@@ -6,5 +6,5 @@ architecture SimpleNetworkLinear(inputs=10, classes=2){
     FullyConnected(units=64, no_bias=true) ->
     Tanh() ->
     FullyConnected(units=classes, no_bias=true) ->
-    out1
+    out1;
 }
\ No newline at end of file
diff --git a/src/test/resources/valid_tests/SimpleNetworkRelu.cnna b/src/test/resources/valid_tests/SimpleNetworkRelu.cnna
index 9d8354ce..459187c7 100644
--- a/src/test/resources/valid_tests/SimpleNetworkRelu.cnna
+++ b/src/test/resources/valid_tests/SimpleNetworkRelu.cnna
@@ -7,5 +7,5 @@ architecture SimpleNetworkRelu(inputs=10, classes=2){
     Tanh() ->
     FullyConnected(units=classes, no_bias=true) ->
     Relu() ->
-    out1
+    out1;
 }
\ No newline at end of file
diff --git a/src/test/resources/valid_tests/SimpleNetworkSigmoid.cnna b/src/test/resources/valid_tests/SimpleNetworkSigmoid.cnna
index 08098a6b..d938be2c 100644
--- a/src/test/resources/valid_tests/SimpleNetworkSigmoid.cnna
+++ b/src/test/resources/valid_tests/SimpleNetworkSigmoid.cnna
@@ -7,5 +7,5 @@ architecture SimpleNetworkSigmoid(inputs=10, classes=2){
     Tanh() ->
     FullyConnected(units=classes, no_bias=true) ->
     Sigmoid() ->
-    out1
+    out1;
 }
\ No newline at end of file
diff --git a/src/test/resources/valid_tests/SimpleNetworkSoftmax.cnna b/src/test/resources/valid_tests/SimpleNetworkSoftmax.cnna
index 5c0643c8..2feb4f72 100644
--- a/src/test/resources/valid_tests/SimpleNetworkSoftmax.cnna
+++ b/src/test/resources/valid_tests/SimpleNetworkSoftmax.cnna
@@ -7,5 +7,5 @@ architecture SimpleNetworkSoftmax(inputs=10, classes=2){
     Tanh() ->
     FullyConnected(units=classes, no_bias=true) ->
     Softmax() ->
-    out1
+    out1;
 }
\ No newline at end of file
diff --git a/src/test/resources/valid_tests/SimpleNetworkTanh.cnna b/src/test/resources/valid_tests/SimpleNetworkTanh.cnna
index bd1ffec3..f62e20e4 100644
--- a/src/test/resources/valid_tests/SimpleNetworkTanh.cnna
+++ b/src/test/resources/valid_tests/SimpleNetworkTanh.cnna
@@ -7,5 +7,5 @@ architecture SimpleNetworkTanh(inputs=10, classes=2){
     Tanh() ->
     FullyConnected(units=classes, no_bias=true) ->
     Tanh() ->
-    out1
+    out1;
 }
\ No newline at end of file
diff --git a/src/test/resources/valid_tests/ThreeInputCNN_M14_alternative.cnna b/src/test/resources/valid_tests/ThreeInputCNN_M14_alternative.cnna
index 5b73e1d1..054a53c0 100644
--- a/src/test/resources/valid_tests/ThreeInputCNN_M14_alternative.cnna
+++ b/src/test/resources/valid_tests/ThreeInputCNN_M14_alternative.cnna
@@ -28,5 +28,5 @@ architecture ThreeInputCNN_M14_alternative(img_height=200, img_width=300, img_ch
     Relu() ->
     FullyConnected(units=classes) ->
     Softmax() ->
-    predictions
+    predictions;
 }
diff --git a/src/test/resources/valid_tests/data_paths.txt b/src/test/resources/valid_tests/data_paths.txt
index 25531c98..877fea8a 100644
--- a/src/test/resources/valid_tests/data_paths.txt
+++ b/src/test/resources/valid_tests/data_paths.txt
@@ -3,4 +3,5 @@ CifarClassifierNetwork data/CifarClassifierNetwork
 ThreeInputCNN_M14 data/ThreeInputCNN_M14
 Alexnet data/Alexnet
 MultipleOutputs data/MultipleOutputs
-ResNeXt50 data/ResNeXt50
\ No newline at end of file
+ResNeXt50 data/ResNeXt50
+MultipleStreams data/MultipleStreams
\ No newline at end of file
-- 
GitLab