From 7949cf16cf8ca7f7997446398437418911e374d0 Mon Sep 17 00:00:00 2001
From: Philip ABBET <philip.abbet@idiap.ch>
Date: Fri, 30 Jun 2017 12:26:24 +0200
Subject: [PATCH] [tests] Now test experiments with various combination of
 input sources

---
 .../algorithms/user/sum_over_channels/1.json  |  26 +++++
 .../algorithms/user/sum_over_channels/1.py    |  39 +++++++
 .../algorithms/user/sum_over_channels/2.json  |  29 +++++
 .../algorithms/user/sum_over_channels/2.py    |  41 +++++++
 .../algorithms/user/sum_over_channels/3.json  |  32 +++++
 .../algorithms/user/sum_over_channels/3.py    |  41 +++++++
 .../user/user/inputs_mix/1/test.json          |  51 ++++++++
 .../user/user/inputs_mix/2/test.json          |  56 +++++++++
 .../user/user/inputs_mix/3/test.json          |  57 +++++++++
 .../user/user/inputs_mix/3/test2.json         |  57 +++++++++
 .../user/user/inputs_mix/4/test.json          |  69 +++++++++++
 .../user/user/inputs_mix/4/test2.json         |  69 +++++++++++
 .../prefix/toolchains/user/inputs_mix/1.json  |  74 ++++++++++++
 .../prefix/toolchains/user/inputs_mix/2.json  |  83 +++++++++++++
 .../prefix/toolchains/user/inputs_mix/3.json  |  89 ++++++++++++++
 .../prefix/toolchains/user/inputs_mix/4.json  | 110 ++++++++++++++++++
 beat/core/test/test_execution.py              |  18 +++
 17 files changed, 941 insertions(+)
 create mode 100644 beat/core/test/prefix/algorithms/user/sum_over_channels/1.json
 create mode 100755 beat/core/test/prefix/algorithms/user/sum_over_channels/1.py
 create mode 100644 beat/core/test/prefix/algorithms/user/sum_over_channels/2.json
 create mode 100755 beat/core/test/prefix/algorithms/user/sum_over_channels/2.py
 create mode 100644 beat/core/test/prefix/algorithms/user/sum_over_channels/3.json
 create mode 100755 beat/core/test/prefix/algorithms/user/sum_over_channels/3.py
 create mode 100644 beat/core/test/prefix/experiments/user/user/inputs_mix/1/test.json
 create mode 100644 beat/core/test/prefix/experiments/user/user/inputs_mix/2/test.json
 create mode 100644 beat/core/test/prefix/experiments/user/user/inputs_mix/3/test.json
 create mode 100644 beat/core/test/prefix/experiments/user/user/inputs_mix/3/test2.json
 create mode 100644 beat/core/test/prefix/experiments/user/user/inputs_mix/4/test.json
 create mode 100644 beat/core/test/prefix/experiments/user/user/inputs_mix/4/test2.json
 create mode 100644 beat/core/test/prefix/toolchains/user/inputs_mix/1.json
 create mode 100644 beat/core/test/prefix/toolchains/user/inputs_mix/2.json
 create mode 100644 beat/core/test/prefix/toolchains/user/inputs_mix/3.json
 create mode 100644 beat/core/test/prefix/toolchains/user/inputs_mix/4.json

diff --git a/beat/core/test/prefix/algorithms/user/sum_over_channels/1.json b/beat/core/test/prefix/algorithms/user/sum_over_channels/1.json
new file mode 100644
index 00000000..0d54fb94
--- /dev/null
+++ b/beat/core/test/prefix/algorithms/user/sum_over_channels/1.json
@@ -0,0 +1,26 @@
+{
+  "language": "python",
+  "splittable": false,
+  "groups": [
+    {
+      "inputs": {
+        "b": {
+          "type": "user/single_integer/1"
+        }
+      },
+      "outputs": {
+        "sum": {
+          "type": "user/single_integer/1"
+        }
+      }
+    },
+    {
+      "name": "other",
+      "inputs": {
+        "a": {
+          "type": "user/single_integer/1"
+        }
+      }
+    }
+  ]
+}
diff --git a/beat/core/test/prefix/algorithms/user/sum_over_channels/1.py b/beat/core/test/prefix/algorithms/user/sum_over_channels/1.py
new file mode 100755
index 00000000..906a3072
--- /dev/null
+++ b/beat/core/test/prefix/algorithms/user/sum_over_channels/1.py
@@ -0,0 +1,39 @@
+#!/usr/bin/env python
+# vim: set fileencoding=utf-8 :
+
+###############################################################################
+#                                                                             #
+# Copyright (c) 2017 Idiap Research Institute, http://www.idiap.ch/           #
+# Contact: beat.support@idiap.ch                                              #
+#                                                                             #
+# This file is part of the beat.core module of the BEAT platform.             #
+#                                                                             #
+# Commercial License Usage                                                    #
+# Licensees holding valid commercial BEAT licenses may use this file in       #
+# accordance with the terms contained in a written agreement between you      #
+# and Idiap. For further information contact tto@idiap.ch                     #
+#                                                                             #
+# Alternatively, this file may be used under the terms of the GNU Affero      #
+# Public License version 3 as published by the Free Software and appearing    #
+# in the file LICENSE.AGPL included in the packaging of this file.            #
+# The BEAT platform is distributed in the hope that it will be useful, but    #
+# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY  #
+# or FITNESS FOR A PARTICULAR PURPOSE.                                        #
+#                                                                             #
+# You should have received a copy of the GNU Affero Public License along      #
+# with the BEAT platform. If not, see http://www.gnu.org/licenses/.           #
+#                                                                             #
+###############################################################################
+
+class Algorithm:
+
+    def process(self, inputs, outputs):
+        a = 0
+        if inputs['a'].hasMoreData():
+            inputs['a'].next()
+            a = inputs['a'].data.value
+
+        outputs['sum'].write({
+            'value': a + inputs['b'].data.value
+            })
+        return True
diff --git a/beat/core/test/prefix/algorithms/user/sum_over_channels/2.json b/beat/core/test/prefix/algorithms/user/sum_over_channels/2.json
new file mode 100644
index 00000000..9016a895
--- /dev/null
+++ b/beat/core/test/prefix/algorithms/user/sum_over_channels/2.json
@@ -0,0 +1,29 @@
+{
+  "language": "python",
+  "splittable": false,
+  "groups": [
+    {
+      "inputs": {
+        "c": {
+          "type": "user/single_integer/1"
+        }
+      },
+      "outputs": {
+        "sum": {
+          "type": "user/single_integer/1"
+        }
+      }
+    },
+    {
+      "name": "others",
+      "inputs": {
+        "a": {
+          "type": "user/single_integer/1"
+        },
+        "b": {
+          "type": "user/single_integer/1"
+        }
+      }
+    }
+  ]
+}
diff --git a/beat/core/test/prefix/algorithms/user/sum_over_channels/2.py b/beat/core/test/prefix/algorithms/user/sum_over_channels/2.py
new file mode 100755
index 00000000..adf8a83d
--- /dev/null
+++ b/beat/core/test/prefix/algorithms/user/sum_over_channels/2.py
@@ -0,0 +1,41 @@
+#!/usr/bin/env python
+# vim: set fileencoding=utf-8 :
+
+###############################################################################
+#                                                                             #
+# Copyright (c) 2017 Idiap Research Institute, http://www.idiap.ch/           #
+# Contact: beat.support@idiap.ch                                              #
+#                                                                             #
+# This file is part of the beat.core module of the BEAT platform.             #
+#                                                                             #
+# Commercial License Usage                                                    #
+# Licensees holding valid commercial BEAT licenses may use this file in       #
+# accordance with the terms contained in a written agreement between you      #
+# and Idiap. For further information contact tto@idiap.ch                     #
+#                                                                             #
+# Alternatively, this file may be used under the terms of the GNU Affero      #
+# Public License version 3 as published by the Free Software and appearing    #
+# in the file LICENSE.AGPL included in the packaging of this file.            #
+# The BEAT platform is distributed in the hope that it will be useful, but    #
+# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY  #
+# or FITNESS FOR A PARTICULAR PURPOSE.                                        #
+#                                                                             #
+# You should have received a copy of the GNU Affero Public License along      #
+# with the BEAT platform. If not, see http://www.gnu.org/licenses/.           #
+#                                                                             #
+###############################################################################
+
+class Algorithm:
+
+    def process(self, inputs, outputs):
+        a = 0
+        b = 0
+        if inputs.groupOf('a').hasMoreData():
+            inputs.groupOf('a').next()
+            a = inputs['a'].data.value
+            b = inputs['b'].data.value
+
+        outputs['sum'].write({
+            'value': a + b + inputs['c'].data.value
+            })
+        return True
diff --git a/beat/core/test/prefix/algorithms/user/sum_over_channels/3.json b/beat/core/test/prefix/algorithms/user/sum_over_channels/3.json
new file mode 100644
index 00000000..283174a1
--- /dev/null
+++ b/beat/core/test/prefix/algorithms/user/sum_over_channels/3.json
@@ -0,0 +1,32 @@
+{
+  "language": "python",
+  "splittable": false,
+  "groups": [
+    {
+      "inputs": {
+        "c": {
+          "type": "user/single_integer/1"
+        },
+        "d": {
+          "type": "user/single_integer/1"
+        }
+      },
+      "outputs": {
+        "sum": {
+          "type": "user/single_integer/1"
+        }
+      }
+    },
+    {
+      "name": "others",
+      "inputs": {
+        "a": {
+          "type": "user/single_integer/1"
+        },
+        "b": {
+          "type": "user/single_integer/1"
+        }
+      }
+    }
+  ]
+}
diff --git a/beat/core/test/prefix/algorithms/user/sum_over_channels/3.py b/beat/core/test/prefix/algorithms/user/sum_over_channels/3.py
new file mode 100755
index 00000000..094980ae
--- /dev/null
+++ b/beat/core/test/prefix/algorithms/user/sum_over_channels/3.py
@@ -0,0 +1,41 @@
+#!/usr/bin/env python
+# vim: set fileencoding=utf-8 :
+
+###############################################################################
+#                                                                             #
+# Copyright (c) 2017 Idiap Research Institute, http://www.idiap.ch/           #
+# Contact: beat.support@idiap.ch                                              #
+#                                                                             #
+# This file is part of the beat.core module of the BEAT platform.             #
+#                                                                             #
+# Commercial License Usage                                                    #
+# Licensees holding valid commercial BEAT licenses may use this file in       #
+# accordance with the terms contained in a written agreement between you      #
+# and Idiap. For further information contact tto@idiap.ch                     #
+#                                                                             #
+# Alternatively, this file may be used under the terms of the GNU Affero      #
+# Public License version 3 as published by the Free Software and appearing    #
+# in the file LICENSE.AGPL included in the packaging of this file.            #
+# The BEAT platform is distributed in the hope that it will be useful, but    #
+# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY  #
+# or FITNESS FOR A PARTICULAR PURPOSE.                                        #
+#                                                                             #
+# You should have received a copy of the GNU Affero Public License along      #
+# with the BEAT platform. If not, see http://www.gnu.org/licenses/.           #
+#                                                                             #
+###############################################################################
+
+class Algorithm:
+
+    def process(self, inputs, outputs):
+        a = 0
+        b = 0
+        if inputs.groupOf('a').hasMoreData():
+            inputs.groupOf('a').next()
+            a = inputs['a'].data.value
+            b = inputs['b'].data.value
+
+        outputs['sum'].write({
+            'value': a + b + inputs['c'].data.value + inputs['d'].data.value
+            })
+        return True
diff --git a/beat/core/test/prefix/experiments/user/user/inputs_mix/1/test.json b/beat/core/test/prefix/experiments/user/user/inputs_mix/1/test.json
new file mode 100644
index 00000000..f4e4cb94
--- /dev/null
+++ b/beat/core/test/prefix/experiments/user/user/inputs_mix/1/test.json
@@ -0,0 +1,51 @@
+{
+    "datasets": {
+        "integers": {
+            "database": "integers_db/1",
+            "protocol": "two_sets",
+            "set": "double"
+        }
+    },
+    "blocks": {
+        "echo": {
+            "algorithm": "user/integers_echo/1",
+            "parameters": {
+            },
+            "inputs": {
+                "in_data": "in"
+            },
+            "outputs": {
+                "out_data": "out"
+            }
+        },
+        "operation": {
+            "algorithm": "user/sum/1",
+            "parameters": {
+            },
+            "inputs": {
+                "a": "a",
+                "b": "b"
+            },
+            "outputs": {
+                "sum": "result"
+            }
+        }
+    },
+    "analyzers": {
+        "analysis": {
+            "algorithm": "user/integers_analysis/1",
+            "parameters": {
+            },
+            "inputs": {
+                "input": "input"
+            }
+        }
+    },
+    "globals": {
+        "environment": {
+            "name": "environment",
+            "version": "1"
+        },
+        "queue": "queue"
+    }
+}
diff --git a/beat/core/test/prefix/experiments/user/user/inputs_mix/2/test.json b/beat/core/test/prefix/experiments/user/user/inputs_mix/2/test.json
new file mode 100644
index 00000000..9ef13ece
--- /dev/null
+++ b/beat/core/test/prefix/experiments/user/user/inputs_mix/2/test.json
@@ -0,0 +1,56 @@
+{
+    "datasets": {
+        "integers1": {
+            "database": "integers_db/1",
+            "protocol": "two_sets",
+            "set": "double"
+        },
+        "integers2": {
+            "database": "integers_db/1",
+            "protocol": "two_sets",
+            "set": "triple"
+        }
+    },
+    "blocks": {
+        "echo": {
+            "algorithm": "user/integers_echo/1",
+            "parameters": {
+            },
+            "inputs": {
+                "in_data": "in"
+            },
+            "outputs": {
+                "out_data": "out"
+            }
+        },
+        "operation": {
+            "algorithm": "user/sum_over_channels/1",
+            "parameters": {
+            },
+            "inputs": {
+                "a": "a",
+                "b": "b"
+            },
+            "outputs": {
+                "sum": "result"
+            }
+        }
+    },
+    "analyzers": {
+        "analysis": {
+            "algorithm": "user/integers_analysis/1",
+            "parameters": {
+            },
+            "inputs": {
+                "input": "input"
+            }
+        }
+    },
+    "globals": {
+        "environment": {
+            "name": "environment",
+            "version": "1"
+        },
+        "queue": "queue"
+    }
+}
diff --git a/beat/core/test/prefix/experiments/user/user/inputs_mix/3/test.json b/beat/core/test/prefix/experiments/user/user/inputs_mix/3/test.json
new file mode 100644
index 00000000..b7c0911d
--- /dev/null
+++ b/beat/core/test/prefix/experiments/user/user/inputs_mix/3/test.json
@@ -0,0 +1,57 @@
+{
+    "datasets": {
+        "integers1": {
+            "database": "integers_db/1",
+            "protocol": "two_sets",
+            "set": "double"
+        },
+        "integers2": {
+            "database": "integers_db/1",
+            "protocol": "two_sets",
+            "set": "triple"
+        }
+    },
+    "blocks": {
+        "echo": {
+            "algorithm": "user/integers_echo/1",
+            "parameters": {
+            },
+            "inputs": {
+                "in_data": "in"
+            },
+            "outputs": {
+                "out_data": "out"
+            }
+        },
+        "operation": {
+            "algorithm": "user/sum_over_channels/2",
+            "parameters": {
+            },
+            "inputs": {
+                "a": "a",
+                "b": "b",
+                "c": "c"
+            },
+            "outputs": {
+                "sum": "result"
+            }
+        }
+    },
+    "analyzers": {
+        "analysis": {
+            "algorithm": "user/integers_analysis/1",
+            "parameters": {
+            },
+            "inputs": {
+                "input": "input"
+            }
+        }
+    },
+    "globals": {
+        "environment": {
+            "name": "environment",
+            "version": "1"
+        },
+        "queue": "queue"
+    }
+}
diff --git a/beat/core/test/prefix/experiments/user/user/inputs_mix/3/test2.json b/beat/core/test/prefix/experiments/user/user/inputs_mix/3/test2.json
new file mode 100644
index 00000000..dca73d1b
--- /dev/null
+++ b/beat/core/test/prefix/experiments/user/user/inputs_mix/3/test2.json
@@ -0,0 +1,57 @@
+{
+    "datasets": {
+        "integers1": {
+            "database": "integers_db/1",
+            "protocol": "two_sets",
+            "set": "double"
+        },
+        "integers2": {
+            "database": "integers_db/1",
+            "protocol": "two_sets",
+            "set": "triple"
+        }
+    },
+    "blocks": {
+        "echo": {
+            "algorithm": "user/integers_add/1",
+            "parameters": {
+            },
+            "inputs": {
+                "in_data": "in"
+            },
+            "outputs": {
+                "out_data": "out"
+            }
+        },
+        "operation": {
+            "algorithm": "user/sum_over_channels/2",
+            "parameters": {
+            },
+            "inputs": {
+                "a": "a",
+                "b": "b",
+                "c": "c"
+            },
+            "outputs": {
+                "sum": "result"
+            }
+        }
+    },
+    "analyzers": {
+        "analysis": {
+            "algorithm": "user/integers_analysis/1",
+            "parameters": {
+            },
+            "inputs": {
+                "input": "input"
+            }
+        }
+    },
+    "globals": {
+        "environment": {
+            "name": "environment",
+            "version": "1"
+        },
+        "queue": "queue"
+    }
+}
diff --git a/beat/core/test/prefix/experiments/user/user/inputs_mix/4/test.json b/beat/core/test/prefix/experiments/user/user/inputs_mix/4/test.json
new file mode 100644
index 00000000..7ce490cf
--- /dev/null
+++ b/beat/core/test/prefix/experiments/user/user/inputs_mix/4/test.json
@@ -0,0 +1,69 @@
+{
+    "datasets": {
+        "integers1": {
+            "database": "integers_db/1",
+            "protocol": "two_sets",
+            "set": "double"
+        },
+        "integers2": {
+            "database": "integers_db/1",
+            "protocol": "two_sets",
+            "set": "triple"
+        }
+    },
+    "blocks": {
+        "echo": {
+            "algorithm": "user/integers_echo/1",
+            "parameters": {
+            },
+            "inputs": {
+                "in_data": "in"
+            },
+            "outputs": {
+                "out_data": "out"
+            }
+        },
+        "echo2": {
+            "algorithm": "user/integers_echo/1",
+            "parameters": {
+            },
+            "inputs": {
+                "in_data": "in"
+            },
+            "outputs": {
+                "out_data": "out"
+            }
+        },
+        "operation": {
+            "algorithm": "user/sum_over_channels/3",
+            "parameters": {
+            },
+            "inputs": {
+                "a": "a",
+                "b": "b",
+                "c": "c",
+                "d": "d"
+            },
+            "outputs": {
+                "sum": "result"
+            }
+        }
+    },
+    "analyzers": {
+        "analysis": {
+            "algorithm": "user/integers_analysis/1",
+            "parameters": {
+            },
+            "inputs": {
+                "input": "input"
+            }
+        }
+    },
+    "globals": {
+        "environment": {
+            "name": "environment",
+            "version": "1"
+        },
+        "queue": "queue"
+    }
+}
diff --git a/beat/core/test/prefix/experiments/user/user/inputs_mix/4/test2.json b/beat/core/test/prefix/experiments/user/user/inputs_mix/4/test2.json
new file mode 100644
index 00000000..acd6f69c
--- /dev/null
+++ b/beat/core/test/prefix/experiments/user/user/inputs_mix/4/test2.json
@@ -0,0 +1,69 @@
+{
+    "datasets": {
+        "integers1": {
+            "database": "integers_db/1",
+            "protocol": "two_sets",
+            "set": "double"
+        },
+        "integers2": {
+            "database": "integers_db/1",
+            "protocol": "two_sets",
+            "set": "triple"
+        }
+    },
+    "blocks": {
+        "echo": {
+            "algorithm": "user/integers_add/1",
+            "parameters": {
+            },
+            "inputs": {
+                "in_data": "in"
+            },
+            "outputs": {
+                "out_data": "out"
+            }
+        },
+        "echo2": {
+            "algorithm": "user/integers_add/1",
+            "parameters": {
+            },
+            "inputs": {
+                "in_data": "in"
+            },
+            "outputs": {
+                "out_data": "out"
+            }
+        },
+        "operation": {
+            "algorithm": "user/sum_over_channels/3",
+            "parameters": {
+            },
+            "inputs": {
+                "a": "a",
+                "b": "b",
+                "c": "c",
+                "d": "d"
+            },
+            "outputs": {
+                "sum": "result"
+            }
+        }
+    },
+    "analyzers": {
+        "analysis": {
+            "algorithm": "user/integers_analysis/1",
+            "parameters": {
+            },
+            "inputs": {
+                "input": "input"
+            }
+        }
+    },
+    "globals": {
+        "environment": {
+            "name": "environment",
+            "version": "1"
+        },
+        "queue": "queue"
+    }
+}
diff --git a/beat/core/test/prefix/toolchains/user/inputs_mix/1.json b/beat/core/test/prefix/toolchains/user/inputs_mix/1.json
new file mode 100644
index 00000000..23767176
--- /dev/null
+++ b/beat/core/test/prefix/toolchains/user/inputs_mix/1.json
@@ -0,0 +1,74 @@
+{
+    "datasets": [
+        {
+            "name": "integers",
+            "outputs": [
+                "a",
+                "b"
+            ]
+        }
+    ],
+    "blocks": [
+        {
+            "name": "echo",
+            "inputs": [
+                "in"
+            ],
+            "outputs": [
+                "out"
+            ],
+            "synchronized_channel": "integers"
+        },
+        {
+            "name": "operation",
+            "inputs": [
+                "a",
+                "b"
+            ],
+            "outputs": [
+                "result"
+            ],
+            "synchronized_channel": "integers"
+        }
+    ],
+    "analyzers": [
+        {
+            "name": "analysis",
+            "inputs": [
+                "input"
+            ],
+            "synchronized_channel": "integers"
+        }
+    ],
+    "connections": [
+        {
+            "from": "integers.a",
+            "to": "echo.in",
+            "channel": "integers"
+        },
+        {
+            "from": "echo.out",
+            "to": "operation.a",
+            "channel": "integers"
+        },
+        {
+            "from": "integers.b",
+            "to": "operation.b",
+            "channel": "integers"
+        },
+        {
+            "from": "operation.result",
+            "to": "analysis.input",
+            "channel": "integers"
+        }
+    ],
+    "representation": {
+        "connections": {
+        },
+        "blocks": {
+        },
+        "channel_colors": {
+            "integers": "#5555ff"
+        }
+    }
+}
diff --git a/beat/core/test/prefix/toolchains/user/inputs_mix/2.json b/beat/core/test/prefix/toolchains/user/inputs_mix/2.json
new file mode 100644
index 00000000..ef7285cd
--- /dev/null
+++ b/beat/core/test/prefix/toolchains/user/inputs_mix/2.json
@@ -0,0 +1,83 @@
+{
+    "datasets": [
+        {
+            "name": "integers1",
+            "outputs": [
+                "a",
+                "b"
+            ]
+        },
+        {
+            "name": "integers2",
+            "outputs": [
+                "a",
+                "b",
+                "c"
+            ]
+        }
+    ],
+    "blocks": [
+        {
+            "name": "echo",
+            "inputs": [
+                "in"
+            ],
+            "outputs": [
+                "out"
+            ],
+            "synchronized_channel": "integers1"
+        },
+        {
+            "name": "operation",
+            "inputs": [
+                "a",
+                "b"
+            ],
+            "outputs": [
+                "result"
+            ],
+            "synchronized_channel": "integers2"
+        }
+    ],
+    "analyzers": [
+        {
+            "name": "analysis",
+            "inputs": [
+                "input"
+            ],
+            "synchronized_channel": "integers2"
+        }
+    ],
+    "connections": [
+        {
+            "from": "integers1.a",
+            "to": "echo.in",
+            "channel": "integers1"
+        },
+        {
+            "from": "echo.out",
+            "to": "operation.a",
+            "channel": "integers1"
+        },
+        {
+            "from": "integers2.b",
+            "to": "operation.b",
+            "channel": "integers2"
+        },
+        {
+            "from": "operation.result",
+            "to": "analysis.input",
+            "channel": "integers2"
+        }
+    ],
+    "representation": {
+        "connections": {
+        },
+        "blocks": {
+        },
+        "channel_colors": {
+            "integers1": "#5555ff",
+            "integers2": "#ff5555"
+        }
+    }
+}
diff --git a/beat/core/test/prefix/toolchains/user/inputs_mix/3.json b/beat/core/test/prefix/toolchains/user/inputs_mix/3.json
new file mode 100644
index 00000000..c09d57ab
--- /dev/null
+++ b/beat/core/test/prefix/toolchains/user/inputs_mix/3.json
@@ -0,0 +1,89 @@
+{
+    "datasets": [
+        {
+            "name": "integers1",
+            "outputs": [
+                "a",
+                "b"
+            ]
+        },
+        {
+            "name": "integers2",
+            "outputs": [
+                "a",
+                "b",
+                "c"
+            ]
+        }
+    ],
+    "blocks": [
+        {
+            "name": "echo",
+            "inputs": [
+                "in"
+            ],
+            "outputs": [
+                "out"
+            ],
+            "synchronized_channel": "integers1"
+        },
+        {
+            "name": "operation",
+            "inputs": [
+                "a",
+                "b",
+                "c"
+            ],
+            "outputs": [
+                "result"
+            ],
+            "synchronized_channel": "integers2"
+        }
+    ],
+    "analyzers": [
+        {
+            "name": "analysis",
+            "inputs": [
+                "input"
+            ],
+            "synchronized_channel": "integers2"
+        }
+    ],
+    "connections": [
+        {
+            "from": "integers1.a",
+            "to": "echo.in",
+            "channel": "integers1"
+        },
+        {
+            "from": "echo.out",
+            "to": "operation.a",
+            "channel": "integers1"
+        },
+        {
+            "from": "integers1.b",
+            "to": "operation.b",
+            "channel": "integers1"
+        },
+        {
+            "from": "integers2.b",
+            "to": "operation.c",
+            "channel": "integers2"
+        },
+        {
+            "from": "operation.result",
+            "to": "analysis.input",
+            "channel": "integers2"
+        }
+    ],
+    "representation": {
+        "connections": {
+        },
+        "blocks": {
+        },
+        "channel_colors": {
+            "integers1": "#5555ff",
+            "integers2": "#ff5555"
+        }
+    }
+}
diff --git a/beat/core/test/prefix/toolchains/user/inputs_mix/4.json b/beat/core/test/prefix/toolchains/user/inputs_mix/4.json
new file mode 100644
index 00000000..e1c10447
--- /dev/null
+++ b/beat/core/test/prefix/toolchains/user/inputs_mix/4.json
@@ -0,0 +1,110 @@
+{
+    "datasets": [
+        {
+            "name": "integers1",
+            "outputs": [
+                "a",
+                "b"
+            ]
+        },
+        {
+            "name": "integers2",
+            "outputs": [
+                "a",
+                "b",
+                "c"
+            ]
+        }
+    ],
+    "blocks": [
+        {
+            "name": "echo",
+            "inputs": [
+                "in"
+            ],
+            "outputs": [
+                "out"
+            ],
+            "synchronized_channel": "integers1"
+        },
+        {
+            "name": "echo2",
+            "inputs": [
+                "in"
+            ],
+            "outputs": [
+                "out"
+            ],
+            "synchronized_channel": "integers2"
+        },
+        {
+            "name": "operation",
+            "inputs": [
+                "a",
+                "b",
+                "c",
+                "d"
+            ],
+            "outputs": [
+                "result"
+            ],
+            "synchronized_channel": "integers2"
+        }
+    ],
+    "analyzers": [
+        {
+            "name": "analysis",
+            "inputs": [
+                "input"
+            ],
+            "synchronized_channel": "integers2"
+        }
+    ],
+    "connections": [
+        {
+            "from": "integers1.a",
+            "to": "echo.in",
+            "channel": "integers1"
+        },
+        {
+            "from": "echo.out",
+            "to": "operation.a",
+            "channel": "integers1"
+        },
+        {
+            "from": "integers2.a",
+            "to": "echo2.in",
+            "channel": "integers2"
+        },
+        {
+            "from": "echo2.out",
+            "to": "operation.d",
+            "channel": "integers2"
+        },
+        {
+            "from": "integers1.b",
+            "to": "operation.b",
+            "channel": "integers1"
+        },
+        {
+            "from": "integers2.b",
+            "to": "operation.c",
+            "channel": "integers2"
+        },
+        {
+            "from": "operation.result",
+            "to": "analysis.input",
+            "channel": "integers2"
+        }
+    ],
+    "representation": {
+        "connections": {
+        },
+        "blocks": {
+        },
+        "channel_colors": {
+            "integers1": "#5555ff",
+            "integers2": "#ff5555"
+        }
+    }
+}
diff --git a/beat/core/test/test_execution.py b/beat/core/test/test_execution.py
index 4e3002c3..adc5be93 100644
--- a/beat/core/test/test_execution.py
+++ b/beat/core/test/test_execution.py
@@ -237,3 +237,21 @@ class TestExecution(unittest.TestCase):
 
   def test_cxx_double_1(self):
     assert self.execute('user/user/double/1/cxx_double', [{'out_data': 42}]) is None
+
+  def test_inputs_mix_1(self):
+    assert self.execute('user/user/inputs_mix/1/test', [{'sum': 12272, 'nb': 10}]) is None
+
+  def test_inputs_mix_2(self):
+    assert self.execute('user/user/inputs_mix/2/test', [{'sum': 13529, 'nb': 10}]) is None
+
+  def test_inputs_mix_3(self):
+    assert self.execute('user/user/inputs_mix/3/test', [{'sum': 19523, 'nb': 10}]) is None
+
+  def test_inputs_mix_3b(self):
+    assert self.execute('user/user/inputs_mix/3/test2', [{'sum': 19533, 'nb': 10}]) is None
+
+  def test_inputs_mix_4(self):
+    assert self.execute('user/user/inputs_mix/4/test', [{'sum': 25150, 'nb': 10}]) is None
+
+  def test_inputs_mix_4b(self):
+    assert self.execute('user/user/inputs_mix/4/test2', [{'sum': 25170, 'nb': 10}]) is None
-- 
GitLab