diff --git a/Regression_Test_java/.TITAN_properties b/Regression_Test_java/.TITAN_properties
new file mode 100644
index 0000000000000000000000000000000000000000..c9d30bd4ed8a14cef5df752a2a25da942b269085
--- /dev/null
+++ b/Regression_Test_java/.TITAN_properties
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<TITAN_Designer_Properties>
+  <ActiveConfiguration>Default</ActiveConfiguration>
+  <ProjectProperties>
+    <MakefileSettings>
+      <GNUMake>true</GNUMake>
+      <incrementalDependencyRefresh>true</incrementalDependencyRefresh>
+      <targetExecutable>bin/regressionTestSmall</targetExecutable>
+      <omitInValueList>true</omitInValueList>
+    </MakefileSettings>
+    <LocalBuildSettings>
+      <MakefileScript/>
+      <workingDirectory>java_src</workingDirectory>
+    </LocalBuildSettings>
+  </ProjectProperties>
+  <FileProperties>
+    <FileResource>
+      <FilePath>src/TverdictOper.ttcn</FilePath>
+      <FileProperties>
+        <ExcludeFromBuild>true</ExcludeFromBuild>
+      </FileProperties>
+    </FileResource>
+  </FileProperties>
+</TITAN_Designer_Properties>
\ No newline at end of file
diff --git a/Regression_Test_java/.classpath b/Regression_Test_java/.classpath
new file mode 100644
index 0000000000000000000000000000000000000000..0181d30e7bc812ccb40a28208717a6c9dc85f642
--- /dev/null
+++ b/Regression_Test_java/.classpath
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="java_src"/>
+	<classpathentry kind="src" path="src2"/>
+	<classpathentry kind="output" path="java_bin"/>
+</classpath>
diff --git a/Regression_Test_java/.gitignore b/Regression_Test_java/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..7ca7b4705e8c42094d21ae55a9f723941dcd5738
--- /dev/null
+++ b/Regression_Test_java/.gitignore
@@ -0,0 +1 @@
+/java_bin/
diff --git a/Regression_Test_java/.project b/Regression_Test_java/.project
new file mode 100644
index 0000000000000000000000000000000000000000..4cb796111764495b488974e781e58d8940c19620
--- /dev/null
+++ b/Regression_Test_java/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>Regression_Test_java</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.titan.designer.core.TITANJavaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.titan.designer.core.TITANNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/Regression_Test_java/META-INF/MANIFEST.MF b/Regression_Test_java/META-INF/MANIFEST.MF
new file mode 100644
index 0000000000000000000000000000000000000000..ce7d23bafc15f2fde39a20a2015194d535c47a9c
--- /dev/null
+++ b/Regression_Test_java/META-INF/MANIFEST.MF
@@ -0,0 +1,11 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Regression_Test_java
+Bundle-SymbolicName: Regression_Test_java;singleton:=true
+Bundle-Version: 1.0.0
+Require-Bundle: org.eclipse.titan.runtime;bundle-version="1.0.0",
+ org.antlr.runtime;bundle-version="4.3.0"
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Bundle-ActivationPolicy: lazy
+Export-Package: org.eclipse.titan.Regression_Test_java.generated,
+ org.eclipse.titan.Regression_Test_java.user_provided
diff --git a/Regression_Test_java/build.properties b/Regression_Test_java/build.properties
new file mode 100644
index 0000000000000000000000000000000000000000..a7527468adee7ee6d7b3e0a9419312a952711773
--- /dev/null
+++ b/Regression_Test_java/build.properties
@@ -0,0 +1,7 @@
+source.. = java_src/
+output.. = java_bin/
+bin.includes = META-INF/,\
+               .,\
+               java_src/,\
+               src2/,\
+               .classpath
diff --git a/Regression_Test_java/single_config.cfg b/Regression_Test_java/single_config.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..a807454aac9aa3bacf0d6972555eb8699ce5c080
--- /dev/null
+++ b/Regression_Test_java/single_config.cfg
@@ -0,0 +1,109 @@
+[MODULE_PARAMETERS]
+# This section shall contain the values of all parameters that are defined in your TTCN-3 modules.
+
+[LOGGING]
+# In this section you can specify the name of the log file and the classes of events
+# you want to log into the file or display on console (standard error).
+
+LogFile := "logs/%e.%h-%r.%s"
+FileMask := LOG_ALL #|TESTCASE | STATISTICS #|LOG_ALL #| DEBUG | MATCHING
+ConsoleMask := ERROR | WARNING | TESTCASE | STATISTICS #| PORTEVENT | USER
+LogSourceInfo := Yes
+AppendFile := No
+TimeStampFormat := Time
+LogEventTypes := No
+SourceInfoFormat := Single
+LogEntityName := Yes
+
+
+[EXECUTE]
+all_from_subrefs.control
+hex_to_OK.control
+#functions.control
+TtemplateAnytype.control
+TtemplateInt.control
+replacer_OK.control
+TintOper.control
+TtemplateFloat.control
+TbasicStatem.control
+hex_to_SW.control
+TtemplateChar.control
+#tryCatch_Functions.control
+TtemplateBool.control
+float_to_OK.control
+int_to_SW.control
+all_from_subtype.control
+all_from_with_functions.control
+TcharOper.control
+all_from_var.control
+float_to_SW.control
+TcontrolTimer.control
+TrecofOper.control
+int_to_OK.control
+SelectUnion.control
+TtemplateEnum.control
+TcharstrOper.control
+TtemplateRec.control
+rotter_SW.control
+TassignmentNotation.control
+IsTemplateKind.control
+rotter_OK.control
+ExclusiveRangeTemplate.control
+size_of_SW.control
+TtemplateBitstr.control
+all_from_subset.control
+size_of_OK.control
+TucharstrOper.control
+TsetofMatch.control
+ThexstrOper.control
+bit_to_SW.control
+TunionOper.control
+TrecordOper.control
+TenumOper.control
+tcname_SW.control
+TanytypeOper.control
+TfloatOper.control
+TbitstrOper.control
+all_from_superset.control
+bit_to_OK.control
+TobjidOper.control
+#imported_templates.control
+TsetOper.control
+tcname_OK.control
+char_to_OK.control
+TtemplateSetof.control
+TboolOper.control
+enum_to_OK.control
+shifty_SW.control
+ToctetstrOper.control
+TfloatOperSpecial.control
+char_to_SW.control
+FuncRef.control
+isprecho_OK.control
+shifty_OK.control
+TtemplateUnion.control
+TarrayOper.control
+#everything.control
+#types.control
+sub_str_SW.control
+TdefaultOper.control
+str_to_SW.control
+all_from_complement.control
+TlostTimer.control
+RAWCodingAttributes.control
+#TtemplateRecAsn.control
+enum_to_SW.control
+all_from_permutation.control
+TtemplateSet.control
+oct_to_SW.control
+sapc.control
+TtemplateRecof.control
+#ASN_Definitions.control
+oct_to_OK.control
+sub_str_OK.control
+TanytypeWrapOper.control
+#ImportedTemplates.control
+TsetofOper.control
+all_from.control
+str_to_OK.control
+replacer_SW.control
diff --git a/Regression_Test_java/src/ExclusiveRangeTemplate.ttcn b/Regression_Test_java/src/ExclusiveRangeTemplate.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..53a27890c8ce6dc41ea8f45af22620b35f11abf2
--- /dev/null
+++ b/Regression_Test_java/src/ExclusiveRangeTemplate.ttcn
@@ -0,0 +1,413 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Szabo, Bence Janos
+ *
+ ******************************************************************************/
+module ExclusiveRangeTemplate {
+
+type component EmptyCT {}
+
+
+testcase tc_integer() runs on EmptyCT {
+
+  template integer positive_templ:= (!1 .. !10);
+  var integer f := 10;
+  if (match(f, positive_templ)) {
+    setverdict(fail, match(f, positive_templ));
+  }
+  f := 1;
+  if (match(f, positive_templ)) {
+    setverdict(fail, match(f, positive_templ));
+  }
+  f := 0;
+  if (match(f, positive_templ)) {
+    setverdict(fail, match(f, positive_templ));
+  }
+  f := 2;
+  if (match(f, positive_templ) == false) {
+    setverdict(fail, match(f, positive_templ));
+  }
+  f := 9;
+  if (match(f, positive_templ) == false) {
+    setverdict(fail, match(f, positive_templ));
+  }
+
+  if ("(!1 .. !10)" != log2str(positive_templ)) {
+    setverdict(fail, match("(!1 .. !10)", log2str(positive_templ)));
+  }
+  template integer copy_positive_templ := positive_templ;
+  if (log2str(positive_templ) != log2str(copy_positive_templ)) {
+    setverdict(fail, match(log2str(positive_templ), log2str(copy_positive_templ)));
+  }
+
+  var template integer tmp;
+//  string2ttcn(ttcn2string(positive_templ), tmp);
+//  if (log2str(positive_templ) != log2str(tmp)) {
+//    setverdict(fail, "Expected: ", positive_templ, " Got: ", tmp);
+//  }
+
+  template integer negative_templ:= (!-10 .. !-1);
+  f := -10;
+  if (match(f, negative_templ)) {
+    setverdict(fail, match(f, negative_templ));
+  }
+  f := -1;
+  if (match(f, negative_templ)) {
+    setverdict(fail, match(f, negative_templ));
+  }
+  f := 0;
+  if (match(f, negative_templ)) {
+    setverdict(fail, match(f, negative_templ));
+  }
+  f := -1;
+  if (match(f, negative_templ)) {
+    setverdict(fail, match(f, negative_templ));
+  }
+  f := -2;
+  if (match(f, negative_templ) == false) {
+    setverdict(fail, match(f, negative_templ));
+  }
+  f := -9;
+  if (match(f, negative_templ) == false) {
+    setverdict(fail, match(f, negative_templ));
+  }
+
+  if ("(!-10 .. !-1)" != log2str(negative_templ)) {
+    setverdict(fail, match("(!-10 .. !-1)", log2str(negative_templ)));
+  }
+  template integer copy_negative_templ := negative_templ;
+  if (log2str(negative_templ) != log2str(copy_negative_templ)) {
+    setverdict(fail, match(log2str(negative_templ), log2str(copy_negative_templ)));
+  }
+
+  setverdict(pass);
+}
+
+testcase tc_float() runs on EmptyCT {
+
+  template float positive_templ:= (!1.0 .. !10.0);
+  var float f := 10.0;
+  if (match(f, positive_templ)) {
+    setverdict(fail, match(f, positive_templ));
+  }
+  f := 1.0;
+  if (match(f, positive_templ)) {
+    setverdict(fail, match(f, positive_templ));
+  }
+  f := 0.0;
+  if (match(f, positive_templ)) {
+    setverdict(fail, match(f, positive_templ));
+  }
+  f := 1.0;
+  if (match(f, 11.0)) {
+    setverdict(fail, match(f, positive_templ));
+  }
+  f := 2.0;
+  if (match(f, positive_templ) == false) {
+    setverdict(fail, match(f, positive_templ));
+  }
+  f := 9.0;
+  if (match(f, positive_templ) == false) {
+    setverdict(fail, match(f, positive_templ));
+  }
+
+  if ("(!1.000000 .. !10.000000)" != log2str(positive_templ)) {
+    setverdict(fail, match("(!1.000000 .. !10.000000)", log2str(positive_templ)));
+  }
+  template float copy_positive_templ := positive_templ;
+  if (log2str(positive_templ) != log2str(copy_positive_templ)) {
+    setverdict(fail, match(log2str(positive_templ), log2str(copy_positive_templ)));
+  }
+
+  var template float tmp;
+//  string2ttcn(ttcn2string(positive_templ), tmp);
+//  if (log2str(positive_templ) != log2str(tmp)) {
+//    setverdict(fail, "Expected: ", positive_templ, " Got: ", tmp);
+//  }
+
+  template float negative_templ := (!-10.0 .. !-1.0);
+  f := -10.0;
+  if (match(f, negative_templ)) {
+    setverdict(fail, match(f, negative_templ));
+  }
+  f := -1.0;
+  if (match(f, negative_templ)) {
+    setverdict(fail, match(f, negative_templ));
+  }
+  f := -0.0;
+  if (match(f, negative_templ)) {
+    setverdict(fail, match(f, negative_templ));
+  }
+  f := -11.0;
+  if (match(f, negative_templ)) {
+    setverdict(fail, match(f, negative_templ));
+  }
+  f := -2.0;
+  if (match(f, negative_templ) == false) {
+    setverdict(fail, match(f, negative_templ));
+  }
+  f := -9.0;
+  if (match(f, negative_templ) == false) {
+    setverdict(fail, match(f, negative_templ));
+  }
+  f := -5.0;
+  if (match(f, negative_templ) == false) {
+    setverdict(fail, match(f, negative_templ));
+  }
+
+  if ("(!-10.000000 .. !-1.000000)" != log2str(negative_templ)) {
+    setverdict(fail, match("(!-10.000000 .. !-1.000000)", log2str(negative_templ)));
+  }
+  template float copy_negative_templ := negative_templ;
+  if (log2str(negative_templ) != log2str(copy_negative_templ)) {
+    setverdict(fail, match(log2str(negative_templ), log2str(copy_negative_templ)));
+  }
+
+//  string2ttcn(ttcn2string(negative_templ), tmp);
+//  if (log2str(negative_templ) != log2str(tmp)) {
+//    setverdict(fail, "Expected: ", negative_templ, " Got: ", tmp);
+//  }
+
+  template float infinity_templ := (!-infinity .. !infinity);
+  if (match(f, infinity_templ) == false) {
+    setverdict(fail, match(f, infinity_templ));
+  }
+  f := -infinity;
+  if (match(f, infinity_templ)) {
+    setverdict(fail, match(f, infinity_templ));
+  }
+  f := infinity;
+  if (match(f, infinity_templ)) {
+    setverdict(fail, match(f, infinity_templ));
+  }
+
+  if ("(!-infinity .. !infinity)" != log2str(infinity_templ)) {
+    setverdict(fail, match("(!-infinity .. !infinity)", log2str(infinity_templ)));
+  }
+  template float copy_infinity_templ := infinity_templ;
+  if (log2str(infinity_templ) != log2str(copy_infinity_templ)) {
+    setverdict(fail, match(log2str(infinity_templ), log2str(copy_infinity_templ)));
+  }
+
+  setverdict(pass);
+}
+
+testcase tc_charstring() runs on EmptyCT {
+
+  template charstring templ:= (!"d" .. !"g");
+  var charstring f := "d";
+  if (match(f, templ)) {
+    setverdict(fail, match(f, templ));
+  }
+  f := "g";
+  if (match(f, templ)) {
+    setverdict(fail, match(f, templ));
+  }
+  f := "f";
+  if (match(f, templ) == false) {
+    setverdict(fail, match(f, templ));
+  }
+  f := "j";
+  if (match(f, templ)) {
+    setverdict(fail, match(f, templ));
+  }
+  f := "eeefff";
+  if (match(f, templ) == false) {
+    setverdict(fail, match(f, templ));
+  }
+
+  f := "dddeeefff";
+  if (match(f, templ)) {
+    setverdict(fail, match(f, templ));
+  }
+  f := "eeefffggg";
+  if (match(f, templ)) {
+    setverdict(fail, match(f, templ));
+  }
+
+  if ("(!\"d\" .. !\"g\")" != log2str(templ)) {
+    setverdict(fail, match("(!\"d\" .. !\"g\")", log2str(templ)));
+  }
+  template charstring copy_templ := templ;
+  if (log2str(templ) != log2str(copy_templ)) {
+    setverdict(fail, match(log2str(templ), log2str(copy_templ)));
+  }
+
+//  var template charstring tmp;
+//  string2ttcn(ttcn2string(templ), tmp);
+//  if (log2str(templ) != log2str(tmp)) {
+//    setverdict(fail, "Expected: ", templ, " Got: ", tmp);
+//  }
+
+  setverdict(pass);
+}
+
+
+testcase tc_universal_charstring() runs on EmptyCT {
+
+  template universal charstring charstr_templ:= (!"d" .. !"g");
+  var universal charstring f := "d";
+  if (match(f, charstr_templ)) {
+    setverdict(fail, match(f, charstr_templ));
+  }
+  f := "g";
+  if (match(f, charstr_templ)) {
+    setverdict(fail, match(f, charstr_templ));
+  }
+  f := "f";
+  if (match(f, charstr_templ) == false) {
+    setverdict(fail, match(f, charstr_templ));
+  }
+  f := "j";
+  if (match(f, charstr_templ)) {
+    setverdict(fail, match(f, charstr_templ));
+  }
+  f := "eeefff";
+  if (match(f, charstr_templ) == false) {
+    setverdict(fail, match(f, charstr_templ));
+  }
+
+  f := "dddeeefff";
+  if (match(f, charstr_templ)) {
+    setverdict(fail, match(f, charstr_templ));
+  }
+  f := "eeefffggg";
+  if (match(f, charstr_templ)) {
+    setverdict(fail, match(f, charstr_templ));
+  }
+
+  if ("(!\"d\" .. !\"g\")" != log2str(charstr_templ)) {
+    setverdict(fail, match("(!\"d\" .. !\"g\")", log2str(charstr_templ)));
+  }
+  template universal charstring copy_charstr_templ := charstr_templ;
+  if (log2str(charstr_templ) != log2str(copy_charstr_templ)) {
+    setverdict(fail, match(log2str(charstr_templ), log2str(copy_charstr_templ)));
+  }
+
+  var template universal charstring tmp;
+//  string2ttcn(ttcn2string(charstr_templ), tmp);
+//  if (log2str(charstr_templ) != log2str(tmp)) {
+//    setverdict(fail, "Expected: ", charstr_templ, " Got: ", tmp);
+//  }
+
+  template universal charstring unicharstr_templ:= (!char(1,2,3,4) .. !char(1,2,4,5));
+  f := char(1,2,3,4);
+  if (match(f, unicharstr_templ)) {
+    setverdict(fail, match(f, unicharstr_templ));
+  }
+  f := char(1,2,4,5);
+  if (match(f, unicharstr_templ)) {
+    setverdict(fail, match(f, unicharstr_templ));
+  }
+  f := char(1,2,3,5);
+  if (match(f, unicharstr_templ) == false) {
+    setverdict(fail, match(f, unicharstr_templ));
+  }
+  f := char(1,2,4,4);
+  if (match(f, unicharstr_templ) == false) {
+    setverdict(fail, match(f, unicharstr_templ));
+  }
+
+  if ("(!char(1, 2, 3, 4) .. !char(1, 2, 4, 5))" != log2str(unicharstr_templ)) {
+    setverdict(fail, match("(!char(1, 2, 3, 4) .. !char(1, 2, 4, 5))", log2str(unicharstr_templ)));
+  }
+  template universal charstring copy_unicharstr_templ := unicharstr_templ;
+  if (log2str(unicharstr_templ) != log2str(copy_unicharstr_templ)) {
+    setverdict(fail, match(log2str(unicharstr_templ), log2str(copy_unicharstr_templ)));
+  }
+
+//  string2ttcn(ttcn2string(unicharstr_templ), tmp);
+//  if (log2str(unicharstr_templ) != log2str(tmp)) {
+//    setverdict(fail, "Expected: ", unicharstr_templ, " Got: ", tmp);
+//  }
+
+  setverdict(pass);
+}
+
+
+template integer positive_templ_glob:= (!1 .. !10);
+// Test that is works with global const template
+testcase tc_global_template_integer() runs on EmptyCT {
+  var integer f := 10;
+    if (match(f, positive_templ_glob)) {
+    setverdict(fail, match(f, positive_templ_glob));
+  }
+  f := 1;
+  if (match(f, positive_templ_glob)) {
+    setverdict(fail, match(f, positive_templ_glob));
+  }
+  f := 0;
+  if (match(f, positive_templ_glob)) {
+    setverdict(fail, match(f, positive_templ_glob));
+  }
+  f := 2;
+  if (match(f, positive_templ_glob) == false) {
+    setverdict(fail, match(f, positive_templ_glob));
+  }
+  f := 9;
+  if (match(f, positive_templ_glob) == false) {
+    setverdict(fail, match(f, positive_templ_glob));
+  }
+
+  if ("(!1 .. !10)" != log2str(positive_templ_glob)) {
+    setverdict(fail, match("(!1 .. !10)", log2str(positive_templ_glob)));
+  }
+  template integer copy_positive_templ := positive_templ_glob;
+  if (log2str(positive_templ_glob) != log2str(copy_positive_templ)) {
+    setverdict(fail, match(log2str(positive_templ_glob), log2str(copy_positive_templ)));
+  }
+
+  setverdict(pass);
+}
+
+// Test that it works with testcase local var template
+testcase tc_testcase_var_template_integer() runs on EmptyCT {
+  var template integer positive_templ:= (!1 .. !10);
+  var integer f := 10;
+    if (match(f, positive_templ)) {
+    setverdict(fail, match(f, positive_templ));
+  }
+  f := 1;
+  if (match(f, positive_templ)) {
+    setverdict(fail, match(f, positive_templ));
+  }
+  f := 0;
+  if (match(f, positive_templ)) {
+    setverdict(fail, match(f, positive_templ));
+  }
+  f := 2;
+  if (match(f, positive_templ) == false) {
+    setverdict(fail, match(f, positive_templ));
+  }
+  f := 9;
+  if (match(f, positive_templ) == false) {
+    setverdict(fail, match(f, positive_templ));
+  }
+
+  if ("(!1 .. !10)" != log2str(positive_templ)) {
+    setverdict(fail, match("(!1 .. !10)", log2str(positive_templ)));
+  }
+  template integer copy_positive_templ := positive_templ;
+  if (log2str(positive_templ) != log2str(copy_positive_templ)) {
+    setverdict(fail, match(log2str(positive_templ), log2str(copy_positive_templ)));
+  }
+
+  setverdict(pass);
+}
+
+control {
+  execute(tc_integer());
+  execute(tc_float());
+  execute(tc_charstring());
+  execute(tc_universal_charstring());
+  execute(tc_global_template_integer());
+  execute(tc_testcase_var_template_integer());
+}
+
+}
\ No newline at end of file
diff --git a/Regression_Test_java/src/FuncRef.ttcn b/Regression_Test_java/src/FuncRef.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..c265b513bc988baad063ca8d713cb30d4f24c5d6
--- /dev/null
+++ b/Regression_Test_java/src/FuncRef.ttcn
@@ -0,0 +1,490 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Baranyi, Botond
+ *   Bartha, Norbert 
+ *   Delic, Adam
+ *   Kovacs, Ferenc
+ *   Raduly, Csaba
+ *   Szabados, Kristof
+ *   Szabo, Janos Zoltan – initial implementation
+ *   Pandi, Krisztian
+ *
+ ******************************************************************************/
+module FuncRef
+{
+
+type function un_oper(in integer a) return integer;
+type function bin_oper(in integer a, in integer b) return integer;
+
+function neg(in integer a) return integer { return -a; }
+
+function add(in integer a, in integer b) return integer { return a+b; }
+function sub(in integer a, in integer b) return integer { return a-b; }
+function mul(in integer a, in integer b) return integer { return a*b; }
+
+public function my_int2str(in integer a) return charstring {
+  var charstring f := int2str(a);
+  return f;
+}
+
+type function my_int2str_type(in integer a) return charstring;
+
+modulepar my_int2str_type modulepar_my_intstr := refers(my_int2str);
+
+
+type union operator_type
+{
+  un_oper  unary,
+  bin_oper binary
+}
+
+type record of operator_type operator_list;
+type record of integer         operand_list;
+
+function calculate_expr(in operand_list operands, in operator_list operators)
+return integer
+{
+  var integer operand_count  := sizeof(operands);
+  var integer operator_count := sizeof(operators);
+  var integer i;
+  var integer current_operand := 1;
+  var integer result := operands[0];
+  for (i:=0; i<operator_count; i:=i+1)
+  {
+    if (ischosen(operators[i].unary))
+    {
+      result := operators[i].unary.apply(result);
+    }
+    else
+    {
+      result := operators[i].binary.apply(result, operands[current_operand]);
+      current_operand := current_operand + 1;
+    }
+  }
+  return result;
+}
+
+type component FuncRef_comp {
+  port tcport TCP1, TCP2;
+};
+
+testcase calculationTest() runs on FuncRef_comp
+{
+  var operand_list operands_1 := { 1, 2, 3  }; // -1 + 2 - 3 = -2
+  var operand_list operands_2 := { 2, 2, -6 }; // 2 * 2 + -6 = -2
+  var operator_list operators_1 := { { unary := refers(neg) },
+    { binary := refers(add) },
+    { binary := refers(sub) } };
+  var operator_list operators_2 := { { binary := refers(mul) },
+    { binary  := refers(add) } };
+  var integer result_1 := calculate_expr(operands_1, operators_1);
+  var integer result_2 := calculate_expr(operands_2, operators_2);
+  if (result_1 == result_2) { setverdict(pass); }
+  else { setverdict(fail); }
+}
+
+template bin_oper bin_oper_tmpl  := (refers(add), refers(sub));
+template bin_oper bin_oper_tmpl2 := *;
+template bin_oper bin_oper_tmpl3 := omit;
+
+testcase funcTemplateTest() runs on FuncRef_comp
+{
+  var bin_oper a := refers(add);
+  var bin_oper s := refers(sub);
+  var bin_oper m := refers(mul);
+  if ( match(a, bin_oper_tmpl) != match(s, bin_oper_tmpl) )
+  { setverdict(fail); }
+  if ( match(a, bin_oper_tmpl) == match(m, bin_oper_tmpl) )
+  { setverdict(fail); }
+  if ( match(s, bin_oper_tmpl) == match(m, bin_oper_tmpl) )
+  { setverdict(fail); }
+  if ( match(a, bin_oper_tmpl) != match(a, bin_oper_tmpl) )
+  { setverdict(fail); }
+  if ( match(s, bin_oper_tmpl) != match(s, bin_oper_tmpl) )
+  { setverdict(fail); }
+  if ( match(m, bin_oper_tmpl) != match(m, bin_oper_tmpl) )
+  { setverdict(fail); }
+  if (not match(m, bin_oper_tmpl2))
+  { setverdict(fail); }
+  if (match(m, bin_oper_tmpl3))
+  { setverdict(fail); }
+  setverdict(pass);
+}
+
+type function fn_type();
+function fn1() { }
+function fn2() { }
+function fn_fn(in fn_type f) return fn_type { return f; }
+template fn_type fntmpl := refers(fn1);
+
+type function fn_temp_ret_type() return template integer;
+function fn_temp_ret_fn() return template integer { return 1; }
+
+testcase funcRefOperTest() runs on FuncRef_comp
+{
+  var fn_type f1 := refers(fn1);
+  var fn_type f2 := refers(fn2);
+  const fn_type f1c := refers(fn1);
+  var fn_temp_ret_type fn_temp_ret_var := refers(fn_temp_ret_fn);
+  if (not(f1==f1)) { setverdict(fail); }
+  if (f1==f2) { setverdict(fail); }
+  if (not(f1!=f2)) { setverdict(fail); }
+  if (f1!=f1) { setverdict(fail); }
+  if (not(f1c==f1)) { setverdict(fail); }
+  if (f1c!=f1) { setverdict(fail); }
+  if (valueof(fntmpl)!=f1) { setverdict(fail); }
+  if (fn_fn(f1)!=f1) { setverdict(fail); }
+  if (fn_fn(valueof(f2))!=f2) { setverdict(fail); }
+  if (fn_fn(valueof(f2))==f1) { setverdict(fail); }
+  if(not(1 == valueof(fn_temp_ret_var.apply()))) { setverdict(fail); }
+  if(not(match(valueof(fn_temp_ret_var.apply()),fn_temp_ret_var.apply()))) { setverdict(fail); }
+  setverdict(pass);
+}
+
+type record my_message
+{
+  fn_type f
+}
+
+type port TP message {
+  inout my_message;
+} with { extension "internal" }
+
+type component main {
+  port TP tp;
+  port TP tp2;
+}
+
+template my_message msg_tmpl := ?;
+
+//testcase transferTest() runs on main {
+//  connect(mtc:tp, mtc:tp2);
+//  const my_message sm1 := { refers(fn1) }
+//  const my_message sm2 := { refers(fn2) }
+//  var my_message rm1;
+//  var my_message rm2;
+//  tp.send(sm1);
+//  tp.send(sm2);
+//  tp2.receive(msg_tmpl) -> value rm1;
+//  tp2.receive(msg_tmpl) -> value rm2;
+//  if (rm1==rm2) { setverdict(fail); }
+//  setverdict(pass);
+//}
+
+type function fact_func_type(in integer num, inout integer steps,
+  in fact_func_type ff) return integer;
+
+function factorial1(in integer num, inout integer steps) return integer
+{
+  steps := steps + 1;
+  if (num<2) { return 1; }
+  else { return num*factorial1(num-1,steps); }
+}
+
+
+function factorial2(in integer num, inout integer steps, in fact_func_type ff)
+return integer
+{
+  steps := steps + 1;
+  if (num<2) { return 1; }
+  else { return num*ff.apply(num-1,steps,refers(factorial3)); }
+}
+
+function factorial3(in integer num, inout integer steps, in fact_func_type ff)
+return integer
+{
+  steps := steps + 1;
+  if (num<2) { return 1; }
+  else { return num*ff.apply(num-1,steps,refers(factorial2)); }
+}
+
+testcase recursiveCallTest() runs on FuncRef_comp
+{
+  var integer steps1 := 0;
+  var integer steps2 := 0;
+  if (factorial1(5,steps1) != factorial2(5,steps2,refers(factorial3)))
+  { setverdict(fail); }
+  if (steps1!=steps2) { setverdict(fail); }
+  setverdict(pass);
+}
+
+
+type function nested_rec_func(inout rec_list rl, in nested_rec_func nrf,
+  in integer depth);
+type record rec_list
+{
+  nested_rec_func nrf,
+  rec_list rl optional,
+  integer depth
+}
+function nrf_create_list_item(inout rec_list rl, in nested_rec_func nrf,
+  in integer depth)
+{
+  if (depth>0)
+  {
+    var rec_list rl2 := { rl.nrf, omit, depth-1 }
+    rl.nrf.apply(rl2, rl2.nrf, rl2.depth);
+    rl.rl := rl2;
+  }
+}
+
+testcase listRecursionTest() runs on FuncRef_comp
+{
+  var rec_list rl := { refers(nrf_create_list_item), omit, 5 }
+  rl.nrf.apply(rl, rl.nrf, rl.depth);
+  var integer expected_sum := 0+1+2+3+4+5;
+  var integer sum := rl.depth;
+  while (ispresent(rl.rl))
+  {
+    var rec_list rl2 := rl.rl;
+    rl := rl2;
+    sum := sum + rl.depth;
+  }
+  if (sum!=expected_sum) { setverdict(fail); }
+  setverdict(pass);
+}
+
+
+type function fv_type_1() return integer;
+function fv_1_1() return integer { return 11; }
+function fv_1_2() return integer { return 12; }
+type function fv_type_2() return integer;
+function fv_2_1() return integer { return 21; }
+function fv_2_2() return integer { return 22; }
+// test refers and apply operations
+testcase funcRefOperationsTest() runs on FuncRef_comp
+{
+  var fv_type_1 f11 := refers(fv_1_1);
+  var fv_type_1 f12 := refers(fv_1_2);
+  var fv_type_2 f21 := refers(fv_2_1);
+  var fv_type_2 f22 := refers(fv_2_2);
+  var template fv_type_1 tf11 := f11;
+  var template fv_type_2 tf21 := f21;
+  if (f11.apply()!=f11.apply()) { setverdict(fail); }
+  if (f11.apply()==f12.apply()) { setverdict(fail); }
+  var fv_type_1 f10 := valueof(tf11);
+  var fv_type_2 f20 := valueof(tf21);
+  if (f10.apply()!=f11.apply()) { setverdict(fail); }
+  if (f10.apply()==f12.apply()) { setverdict(fail); }
+  if (f10.apply()==f20.apply()) { setverdict(fail); }
+  if (not match(refers(fv_1_1), tf11)) { setverdict(fail); }
+  if (match(refers(fv_1_2), tf11)) { setverdict(fail); }
+  if (match(refers(fv_1_1), tf21)) { setverdict(fail); }
+  setverdict(pass);
+}
+
+
+type function fn_par() return fn_par;
+function fnp0() return fn_par { return refers(fnp0) }
+function fnp1() return fn_par { return refers(fnp1) }
+function fnp2() return fn_par { return refers(fnp2) }
+function fnp3() return fn_par { return refers(fnp3) }
+function fnp4() return fn_par { return refers(fnp4) }
+function fnpnull() return fn_par { return null; }
+function fn_params(fn_par p1, in fn_par p2, out fn_par p3, inout fn_par p4)
+{
+//  if ( p1.apply()!=refers(fnp0) or p2.apply()!=refers(fnp0) or
+//    p4.apply()!=refers(fnp0) ) { setverdict(fail); }
+  p1 := refers(fnp1);
+  p2 := refers(fnp2);
+  p3 := refers(fnp3);
+  p4 := refers(fnp4);
+  if (p1.apply()==null) { setverdict(fail); }
+  if (p1.apply()!=refers(fnp1)) { setverdict(fail); }
+  if (p2.apply()!=refers(fnp2)) { setverdict(fail); }
+  if (p3.apply()!=refers(fnp4)) { setverdict(fail); }
+  if (p4.apply()!=refers(fnp4)) { setverdict(fail); }
+}
+testcase funcRefParamsTest() runs on FuncRef_comp
+{
+  var fn_par fnp := refers(fnp0);
+  if (fnp0()!=refers(fnp0)) { setverdict(fail); }
+  if (fnp.apply()!=fnp0()) { setverdict(fail); }
+  if (fnp.apply()==null) { setverdict(fail); }
+  //fn_params(fnp,fnp,fnp,fnp);
+  //if (fnp.apply()!=refers(fnp4)) { setverdict(fail); }
+  
+  if (fnpnull()!=null) { setverdict(fail); }
+  fnp := refers(fnpnull);
+  if (fnp.apply()!=null) { setverdict(fail); }
+  if (fnp.apply()!=fnpnull()) { setverdict(fail); }
+  
+  fnp := refers(fnp0);
+  if (fnp.apply().apply().apply() != fnp.apply()) { setverdict(fail); }
+  if (fnp0().apply() != refers(fnp0)) { setverdict(fail); }
+  
+  setverdict(pass);
+}
+
+
+function fff() {  }
+type union UNION
+{
+  function () f1,
+  function () f2,
+  function () f3
+}
+type set SET
+{
+  function () f1 optional,
+  function () f2 optional,
+  function () f3 optional
+}
+type record REKORD
+{
+  function () f1 optional,
+  function () f2 optional,
+  function () f3 optional
+}
+// test predefined functions: sizeof(), ispresent(), ischosen()
+testcase predefFuncOnNestedCompoundTypesTest() runs on FuncRef_comp
+{
+  var REKORD v_r := { refers(fff), omit, refers(fff) }
+  var SET    v_s := { f1 := refers(fff), f2 := omit, f3 := refers(fff) }
+  var UNION  v_u := { f2 := refers(fff) }
+  var template REKORD t_r := v_r;
+  var template SET    t_s := v_s;
+  var template UNION  t_u := v_u;
+  if ( sizeof(v_r)!=2 or not ispresent(v_r.f1) or ispresent(v_r.f2) or
+    not ispresent(v_r.f3) )
+  { setverdict(fail); }
+  if ( sizeof(t_r)!=2 or not ispresent(t_r.f1) or ispresent(t_r.f2) or
+    not ispresent(t_r.f3) )
+  { setverdict(fail); }
+  if ( sizeof(v_s)!=2 or not ispresent(v_s.f1) or ispresent(v_s.f2) or
+    not ispresent(v_s.f3) )
+  { setverdict(fail); }
+  if ( sizeof(t_s)!=2 or not ispresent(t_s.f1) or ispresent(t_s.f2) or
+    not ispresent(t_s.f3) )
+  { setverdict(fail); }
+  if ( ischosen(v_u.f1) or not ischosen(v_u.f2) or ischosen(v_u.f3) )
+  { setverdict(fail); }
+  if ( ischosen(t_u.f1) or not ischosen(t_u.f2) or ischosen(t_u.f3) )
+  { setverdict(fail); }
+  setverdict(pass);
+}
+
+
+type testcase tc_type() runs on FuncRef_comp;
+type record of tc_type tc_recof;
+
+type function MyFunction_RunsOnParent() runs on Parent_CT;
+type function MyFunction_RunsOnChild() runs on Child_CT;
+type function MyFunction_RunsOnSelf() runs on self;
+
+type component Parent_CT
+{
+  var MyFunction_RunsOnParent fs_parent := null;
+  var MyFunction_RunsOnSelf fs_self := null;
+  var charstring parent := "parent";
+}
+
+type component Child_CT extends Parent_CT
+{
+  var MyFunction_RunsOnChild fs_child := null;
+  var charstring child := "child";
+}
+
+function f_parent(in MyFunction_RunsOnSelf p_self) runs on Parent_CT
+{
+  p_self.apply();
+}
+
+function f_child() runs on Child_CT
+{
+  child := "Running child function is done";
+}
+
+testcase tc_runsonself() runs on Child_CT
+{
+  fs_self := refers(f_child);
+  
+  f_parent(fs_self);
+  
+  if(child != "Running child function is done")
+  {
+    setverdict(fail);
+  }
+  else { setverdict(pass); }
+}
+
+type port tcport message {
+  inout tc_recof
+}
+with { extension "internal" }
+
+//testcase tc_send_tc() runs on FuncRef_comp
+//{
+//  var tc_recof sent_testcases := {
+//    refers(tc_send_tc)
+//  }, received_testcases;
+//  connect(mtc:TCP1, mtc:TCP2);
+//  TCP1.send(sent_testcases);
+//  TCP2.receive(tc_recof : ?) -> value received_testcases;
+//  if (received_testcases == sent_testcases) { setverdict(pass); }
+//  else { setverdict(fail, match(received_testcases, sent_testcases)); }
+//  disconnect(mtc:TCP1, mtc:TCP2);
+//}
+
+// For TR HL26179.
+type function f_myfunctype1(in charstring p1) runs on self
+function f_myfunc1(in charstring p1) runs on empty_ct {}
+type component empty_ct {var f_myfunctype1 v_myfuncvar1 := refers(f_myfunc1)}
+
+testcase tc_functionrefIsbound() runs on FuncRef_comp
+{
+  var fv_type_1 f0;
+  var fv_type_1 f1 := refers(fv_1_1);
+  if ( isvalue(f0) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(f1) ) { setverdict(pass); } else { setverdict(fail); };
+}
+
+// for TR H029700
+type function f_FT();
+
+function f_refers() {
+  var f_FT vf := valueof(f_FT:refers(f_refers));  
+}
+
+// for Bug 511976 
+testcase tc_modulepar_refer() runs on FuncRef_comp {
+  if (modulepar_my_intstr.apply(4) == "4") {
+    setverdict(pass);
+  } else {
+    setverdict(fail);
+  }
+}
+
+
+control
+{
+  var integer i;
+  var tc_recof testcases := {
+    refers(calculationTest),
+    refers(funcTemplateTest),
+    refers(funcRefOperTest),
+    refers(recursiveCallTest),
+    refers(listRecursionTest),
+    refers(funcRefOperationsTest),
+    refers(funcRefParamsTest),
+    refers(predefFuncOnNestedCompoundTypesTest)
+  }
+  for(i := 0; i < sizeof(testcases); i := i+1)
+  {
+    execute(derefers(testcases[i])());
+  }
+//  execute(transferTest());
+  execute(tc_runsonself());
+  execute(tc_functionrefIsbound());
+//  execute(tc_send_tc());
+  execute(tc_modulepar_refer());
+}
+}
+
diff --git a/Regression_Test_java/src/ImportedTemplates.ttcn b/Regression_Test_java/src/ImportedTemplates.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..da4a93229bfd47adb8c1d2d60f9e6988992368db
--- /dev/null
+++ b/Regression_Test_java/src/ImportedTemplates.ttcn
@@ -0,0 +1,17 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Baranyi, Botond
+ *
+ ******************************************************************************/
+module ImportedTemplates {
+
+template integer tImported(template integer pt) := pt;
+
+}
diff --git a/Regression_Test_java/src/IsTemplateKind.ttcn b/Regression_Test_java/src/IsTemplateKind.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..2c7b8f735623c7f1c6492f2ee70428275a8a02fe
--- /dev/null
+++ b/Regression_Test_java/src/IsTemplateKind.ttcn
@@ -0,0 +1,318 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Szabo, Bence Janos
+ *
+ ******************************************************************************/
+
+module IsTemplateKind
+{
+
+type component MTCType {}
+
+
+type record of integer RoI; 
+type set of integer SoI;
+type record of MyMessageType RoM;
+type set of MyMessageType SoM;
+type record of RoI RoRoI;
+type set of integer MySetOfType (0 .. 10);
+
+type record MyMessageType
+{
+    integer field1,
+    charstring field2,
+    boolean field3 optional,
+    integer field4[4]
+}
+
+type record MyBinaryMessage
+{
+    octetstring payload
+} 
+
+type record MyPayload
+{
+    integer field1,
+    integer field2
+} with {
+    encode "XML"
+}
+
+//template octetstring mw_t1 := decmatch MyPayload:{field1 := 1, field2 := ? };
+
+
+testcase tc_istemplatekind() runs on MTCType system MTCType
+{
+var template integer vt_1 := 3;
+
+template MyMessageType vt_2 :=
+{
+	field1 := 3+2, // specific value of integer type
+	field2 := "My string", // specific value of charstring type
+	field3 := true, // specific value of boolean type
+	field4 := {1,2,3,4} // specific value of integer array
+} 
+
+var template integer vt_3 := 3 ifpresent;
+var template integer vt_4 := ?;
+var template integer vt_5 := (1,2,3);
+var template RoI vt_5_5 := {1,2,3};
+var template integer vt_6 := (0, all from vt_5_5);
+var template integer vt_7 := complement(2,3,4);
+var template integer vt_8 := *;
+var template integer vt_9 := (1 .. 8);
+var template MySetOfType vt_10 := superset (1,2,3);
+var template MySetOfType vt_11 := subset (1,2,3);
+var template integer vt_12 := omit;
+
+template RoI vt_13 := {1,2,3,?};
+
+template RoI vt_14 := {1,2,3,*};
+
+template RoI vt_15 := { 3, 5, permutation(2,3,4) };
+
+template RoI vt_16 := omit;
+
+template RoI vt_17 := { 3, 5, permutation(2,3,4) } length(5..8);
+
+template RoI vt_18 := { 3, 5, permutation(2,3,4) } length(5..8) ifpresent;
+
+template charstring vt_19 := pattern "ab??xyz*0"; 
+
+template RoM vt_20 := { vt_2, ? }; 
+
+template RoRoI vt_21 := { {(3,4)}, {5,6}, ? };
+
+template MyMessageType vt_22 :=
+{
+	field1 := 3+2, // specific value of integer type
+	field2 := ?,
+	field3 := true, // specific value of boolean type
+	field4 := {1,2,3,4}
+} 
+
+var boolean v_res;
+
+v_res := istemplatekind(vt_1, "value"); // true
+if(v_res == true) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+v_res := istemplatekind(vt_2, "value"); // true
+if(v_res == true) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+v_res := istemplatekind(vt_3, "value"); // false
+if(v_res == false) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+v_res := istemplatekind(vt_4, "value"); // false
+if(v_res == false) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+v_res := istemplatekind(vt_5, "list"); // true
+if(v_res == true) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+v_res := istemplatekind(vt_1, "list"); // false
+if(v_res == false) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+v_res := istemplatekind(vt_6, "list"); // true
+if(v_res == true) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+v_res := istemplatekind(vt_7, "complement"); // true
+if(v_res == true) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+v_res := istemplatekind(vt_6, "complement"); // false
+if(v_res == false) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+v_res := istemplatekind(vt_4, "?"); // true
+if(v_res == true) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+v_res := istemplatekind(vt_4, "AnyValue"); // true
+if(v_res == true) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+v_res := istemplatekind(vt_3, "AnyValue"); // false
+if(v_res == false) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+v_res := istemplatekind(vt_8, "*"); // true
+if(v_res == true) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+v_res := istemplatekind(vt_8, "AnyValueOrNone"); // true
+if(v_res == true) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+v_res := istemplatekind(vt_2, "AnyValueOrNone"); // false
+if(v_res == false) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+v_res := istemplatekind(vt_9, "range"); // true
+if(v_res == true) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+v_res := istemplatekind(vt_1, "range"); // false
+if(v_res == false) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+v_res := istemplatekind(vt_10, "superset"); // true
+if(v_res == true) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+v_res := istemplatekind(vt_11, "superset"); // false
+if(v_res == false) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+v_res := istemplatekind(vt_11, "subset"); // true
+if(v_res == true) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+v_res := istemplatekind(vt_10, "subset"); // false
+if(v_res == false) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+v_res := istemplatekind(vt_12, "omit"); // true
+if(v_res == true) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+v_res := istemplatekind(vt_1, "omit"); // false
+if(v_res == false) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+v_res := istemplatekind(vt_8, "omit"); // false
+if(v_res == false) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+v_res := istemplatekind(vt_4, "omit"); // false
+if(v_res == false) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+v_res := istemplatekind(vt_22, "decmatch"); // false
+if(v_res == false) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+//v_res := istemplatekind(mw_t1, "decmatch"); // true
+//if(v_res == true) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+v_res := istemplatekind(vt_13, "AnyElement"); // true
+if(v_res == true) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+v_res := istemplatekind(vt_20, "AnyElement"); // true
+if(v_res == true) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+v_res := istemplatekind(vt_21, "AnyElement"); // true
+if(v_res == true) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+v_res := istemplatekind(vt_14, "AnyElement"); // false
+if(v_res == false) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+v_res := istemplatekind(vt_14, "AnyElementsOrNone"); // true
+if(v_res == true) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+v_res := istemplatekind(vt_13, "AnyElementsOrNone"); // false
+if(v_res == false) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+v_res := istemplatekind(vt_15, "permutation"); // true
+if(v_res == true) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+v_res := istemplatekind(vt_14, "permutation"); // false
+if(v_res == false) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+v_res := istemplatekind(vt_16, "omit"); // true
+if(v_res == true) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+v_res := istemplatekind(vt_15, "omit"); // false
+if(v_res == false) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+v_res := istemplatekind(vt_17, "length"); // true
+if(v_res == true) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+v_res := istemplatekind(vt_15, "length"); // false
+if(v_res == false) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+v_res := istemplatekind(vt_18, "ifpresent"); // true
+if(v_res == true) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+v_res := istemplatekind(vt_17, "ifpresent"); // false
+if(v_res == false) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+//v_res := istemplatekind(vt_19, "pattern"); // true
+//if(v_res == true) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+//v_res := istemplatekind(vt_17, "pattern"); // false
+//if(v_res == false) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+v_res := istemplatekind(vt_1, "AnyValue"); // false
+if(v_res == false) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+v_res := istemplatekind(vt_1, "AnyValueOrNone"); // false
+if(v_res == false) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+v_res := istemplatekind(vt_2, "complement"); // false
+if(v_res == false) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+v_res := istemplatekind(vt_2, "list"); // false
+if(v_res == false) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+v_res := istemplatekind(vt_2, "ifpresent"); // false
+if(v_res == false) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+v_res := istemplatekind(vt_3, "permutation"); // false
+if(v_res == false) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+v_res := istemplatekind(vt_22, "AnyElement"); // false
+if(v_res == false) { setverdict(pass); } else { setverdict(fail,__LINE__); }      
+
+}
+
+testcase tc_istemplatekind_set() runs on MTCType system MTCType {
+template SoI vt_1 := {1,2,3,?};
+
+template SoI vt_2 := {1,2,3,*};
+
+template SoI vt_3 := omit;
+
+template SoI vt_4 := { 3, 5, 4, 6, 8 } length(5..8);
+
+template SoI vt_5 := { 3, 5, 4,5,6 } length(5..8) ifpresent;
+
+template MyMessageType vt_6 :=
+ {
+ field1 := 3+2, // specific value of integer type
+ field2 := "My string", // specific value of charstring type
+ field3 := true, // specific value of boolean type
+ field4 := {1,2,3,4} // specific value of integer array
+ } 
+
+template SoM vt_7 := { vt_6, ? };
+
+var boolean v_res;
+
+
+v_res := istemplatekind(vt_1, "AnyElement"); // true
+if(v_res == true) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+v_res := istemplatekind(vt_7, "AnyElement"); // true
+if(v_res == true) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+v_res := istemplatekind(vt_2, "AnyElement"); // false
+if(v_res == false) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+v_res := istemplatekind(vt_2, "AnyElementsOrNone"); // true
+if(v_res == true) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+v_res := istemplatekind(vt_1, "AnyElementsOrNone"); // false
+if(v_res == false) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+v_res := istemplatekind(vt_3, "omit"); // true
+if(v_res == true) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+v_res := istemplatekind(vt_4, "omit"); // false
+if(v_res == false) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+v_res := istemplatekind(vt_4, "length"); // true
+if(v_res == true) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+v_res := istemplatekind(vt_2, "length"); // false
+if(v_res == false) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+v_res := istemplatekind(vt_5, "ifpresent"); // true
+if(v_res == true) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+
+v_res := istemplatekind(vt_4, "ifpresent"); // false
+if(v_res == false) { setverdict(pass); } else { setverdict(fail,__LINE__); }
+}
+   
+control
+{
+    execute(tc_istemplatekind());
+    execute(tc_istemplatekind_set());
+}
+
+}
diff --git a/Regression_Test_java/src/RAW/RAWCodingAttributes.ttcn b/Regression_Test_java/src/RAW/RAWCodingAttributes.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..ccff78950a81350abae5d720ba4788a251f9ee49
--- /dev/null
+++ b/Regression_Test_java/src/RAW/RAWCodingAttributes.ttcn
@@ -0,0 +1,7089 @@
+module RAWCodingAttributes {
+
+type component TempComp {}
+
+type integer RAW_PDU_1
+with { encode "RAW"; variant "FIELDLENGTH(16)"};
+external function enc_RAW_PDU_1(in RAW_PDU_1 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_1(in octetstring stream) return RAW_PDU_1 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_FIELDLENGTH_16_for_integer() runs on TempComp {
+  const RAW_PDU_1 	i := 255
+  const octetstring 	o := 'FF00'O
+
+  if ((enc_RAW_PDU_1(i) == o)and(dec_RAW_PDU_1(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_1(i)= ", enc_RAW_PDU_1(i), "; dec_RAW_PDU_1(o)= ", dec_RAW_PDU_1(o));}
+}
+
+type integer RAW_PDU_2
+with { encode "RAW"; variant "FIELDLENGTH(8)"};
+external function enc_RAW_PDU_2(in RAW_PDU_2 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_2(in octetstring stream) return RAW_PDU_2 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_FIELDLENGTH_8_for_integer() runs on TempComp {
+  const RAW_PDU_2 	i := 15
+  const octetstring 	o := '0F'O
+
+  if ((enc_RAW_PDU_2(i) == o)and(dec_RAW_PDU_2(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_2(i)= ", enc_RAW_PDU_2(i), "; dec_RAW_PDU_2(o)= ", dec_RAW_PDU_2(o));}
+}
+
+
+
+type integer RAW_PDU_3
+with { encode "RAW"; variant "FIELDLENGTH(4)"};
+external function enc_RAW_PDU_3(in RAW_PDU_3 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_3(in octetstring stream) return RAW_PDU_3 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_FIELDLENGTH_4_for_integer() runs on TempComp {
+  const RAW_PDU_3 	i := 15
+  const octetstring 	o := '0F'O
+
+  if ((enc_RAW_PDU_3(i) == o)and(dec_RAW_PDU_3(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_3(i)= ", enc_RAW_PDU_3(i), "; dec_RAW_PDU_3(o)= ", dec_RAW_PDU_3(o));}
+}
+
+
+
+testcase TC_FIELDLENGTH_16_for_integer_2() runs on TempComp {
+  const RAW_PDU_1 	i := 4660
+  const octetstring 	o := '3412'O
+
+  if ((enc_RAW_PDU_1(i) == o)and(dec_RAW_PDU_1(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_1(i)= ", enc_RAW_PDU_1(i), "; dec_RAW_PDU_1(o)= ", dec_RAW_PDU_1(o));}
+}
+
+
+
+type integer RAW_PDU_4
+with { encode "RAW"; variant "FIELDLENGTH(32)"};
+external function enc_RAW_PDU_4(in RAW_PDU_4 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_4(in octetstring stream) return RAW_PDU_4 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_FIELDLENGTH_32_for_integer_1_bit_long() runs on TempComp {
+  const RAW_PDU_4 	i := 1
+  const octetstring 	o := '01000000'O
+
+  if ((enc_RAW_PDU_4(i) == o)and(dec_RAW_PDU_4(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_4(i)= ", enc_RAW_PDU_4(i), "; dec_RAW_PDU_4(o)= ", dec_RAW_PDU_4(o));}
+}
+
+
+
+type integer RAW_PDU_5
+with { encode "RAW"; variant ""};
+external function enc_RAW_PDU_5(in RAW_PDU_5 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_5(in octetstring stream) return RAW_PDU_5 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_Default_FIELDLENGTH_for_integer() runs on TempComp {
+  const RAW_PDU_5 	i := 255
+  const octetstring 	o := 'FF'O
+
+  if ((enc_RAW_PDU_5(i) == o)and(dec_RAW_PDU_5(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_5(i)= ", enc_RAW_PDU_5(i), "; dec_RAW_PDU_5(o)= ", dec_RAW_PDU_5(o));}
+}
+
+
+
+type bitstring RAW_PDU_6
+with { encode "RAW"; variant "FIELDLENGTH(8)"};
+external function enc_RAW_PDU_6(in RAW_PDU_6 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_6(in octetstring stream) return RAW_PDU_6 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_FIELDLENGTH_8_for_bitstring() runs on TempComp {
+  const RAW_PDU_6 	i := '11110000'B
+  const octetstring 	o := 'F0'O
+
+  if ((enc_RAW_PDU_6(i) == o)and(dec_RAW_PDU_6(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_6(i)= ", enc_RAW_PDU_6(i), "; dec_RAW_PDU_6(o)= ", dec_RAW_PDU_6(o));}
+}
+
+
+
+type bitstring RAW_PDU_7
+with { encode "RAW"; variant "FIELDLENGTH(8)"};
+external function enc_RAW_PDU_7(in RAW_PDU_7 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_7(in octetstring stream) return RAW_PDU_7 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_FIELDLENGTH_8_for_bitstring_4_bits_long() runs on TempComp {
+  const RAW_PDU_7 	i := '1111'B
+  const octetstring 	o := '0F'O
+
+  if ((enc_RAW_PDU_7(i) == o)and(dec_RAW_PDU_7(o) == '0000'B & i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_7(i)= ", enc_RAW_PDU_7(i), "; dec_RAW_PDU_7(o)= ", dec_RAW_PDU_7(o));}
+}
+
+
+
+type bitstring RAW_PDU_8
+with { encode "RAW"; variant "FIELDLENGTH(4)"};
+external function enc_RAW_PDU_8(in RAW_PDU_8 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_8(in octetstring stream) return RAW_PDU_8 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_FIELDLENGTH_4_for_bitstring() runs on TempComp {
+  const RAW_PDU_8 	i := '1111'B
+  const octetstring 	o := '0F'O
+
+  if ((enc_RAW_PDU_8(i) == o)and(dec_RAW_PDU_8(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_8(i)= ", enc_RAW_PDU_8(i), "; dec_RAW_PDU_8(o)= ", dec_RAW_PDU_8(o));}
+}
+
+
+
+type bitstring RAW_PDU_9
+with { encode "RAW"; variant "FIELDLENGTH(16)"};
+external function enc_RAW_PDU_9(in RAW_PDU_9 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_9(in octetstring stream) return RAW_PDU_9 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_FIELDLENGTH_16_for_bitstring() runs on TempComp {
+  const RAW_PDU_9 	i := '1111000001110000'B
+  const octetstring 	o := '70F0'O
+
+  if ((enc_RAW_PDU_9(i) == o)and(dec_RAW_PDU_9(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_9(i)= ", enc_RAW_PDU_9(i), "; dec_RAW_PDU_9(o)= ", dec_RAW_PDU_9(o));}
+}
+
+type bitstring RAW_PDU_10
+with { encode "RAW"; variant "FIELDLENGTH(24)"};
+external function enc_RAW_PDU_10(in RAW_PDU_10 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_10(in octetstring stream) return RAW_PDU_10 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_FIELDLENGTH_24_for_bitstring() runs on TempComp {
+  const RAW_PDU_10 	i := '1111000001110000'B
+  const octetstring 	o := '70F000'O
+
+  if ((enc_RAW_PDU_10(i) == o)and(dec_RAW_PDU_10(o) =='00000000'B & i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_10(i)= ", enc_RAW_PDU_10(i), "; dec_RAW_PDU_10(o)= ", dec_RAW_PDU_10(o));}
+}
+
+type bitstring RAW_PDU_11
+with { encode "RAW"; variant "FIELDLENGTH(0)"};
+external function enc_RAW_PDU_11(in RAW_PDU_11 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_11(in octetstring stream) return RAW_PDU_11 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_FIELDLENGTH_0_for_bitstring() runs on TempComp {
+  const RAW_PDU_11 	i := '1111000001110000'B
+  const octetstring 	o := '70F0'O
+
+  if ((enc_RAW_PDU_11(i) == o)and(dec_RAW_PDU_11(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_11(i)= ", enc_RAW_PDU_11(i), "; dec_RAW_PDU_11(o)= ", dec_RAW_PDU_11(o));}
+}
+
+
+
+type bitstring RAW_PDU_12
+with { encode "RAW"; variant ""};
+external function enc_RAW_PDU_12(in RAW_PDU_12 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_12(in octetstring stream) return RAW_PDU_12 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_DEFAULT_FIELDLENGTH_for_bitstring() runs on TempComp {
+  const RAW_PDU_12 	i := '1111000001110000'B
+  const octetstring 	o := '70F0'O
+
+  if ((enc_RAW_PDU_12(i) == o)and(dec_RAW_PDU_12(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_12(i)= ", enc_RAW_PDU_12(i), "; dec_RAW_PDU_12(o)= ", dec_RAW_PDU_12(o));}
+}
+
+
+
+type bitstring RAW_PDU_13
+with { encode "RAW"; variant "FIELDLENGTH(32)"};
+external function enc_RAW_PDU_13(in RAW_PDU_13 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_13(in octetstring stream) return RAW_PDU_13 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_FIELDLENGTH_32_for_bitstring_4_bits_long() runs on TempComp {
+  const RAW_PDU_13 	i := '1111'B
+  const octetstring 	o := '0F000000'O
+
+  if ((enc_RAW_PDU_13(i) == o)and(dec_RAW_PDU_13(o) == '0000000000000000000000000000'B & i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_13(i)= ", enc_RAW_PDU_13(i), "; dec_RAW_PDU_13(o)= ", dec_RAW_PDU_13(o));}
+}
+
+
+
+type octetstring RAW_PDU_14
+with { encode "RAW"; variant "FIELDLENGTH(1)"};
+external function enc_RAW_PDU_14(in RAW_PDU_14 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_14(in octetstring stream) return RAW_PDU_14 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_FIELDLENGTH_1_for_octetstring() runs on TempComp {
+  const RAW_PDU_14 	i := '0F'O
+  const octetstring 	o := '0F'O
+
+  if ((enc_RAW_PDU_14(i) == o)and(dec_RAW_PDU_14(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_14(i)= ", enc_RAW_PDU_14(i), "; dec_RAW_PDU_14(o)= ", dec_RAW_PDU_14(o));}
+}
+
+
+
+type octetstring RAW_PDU_15
+with { encode "RAW"; variant "FIELDLENGTH(2)"};
+external function enc_RAW_PDU_15(in RAW_PDU_15 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_15(in octetstring stream) return RAW_PDU_15 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_FIELDLENGTH_2_for_octetstring() runs on TempComp {
+  const RAW_PDU_15 	i := '1234'O
+  const octetstring 	o := '1234'O
+
+  if ((enc_RAW_PDU_15(i) == o)and(dec_RAW_PDU_15(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_15(i)= ", enc_RAW_PDU_15(i), "; dec_RAW_PDU_15(o)= ", dec_RAW_PDU_15(o));}
+}
+
+
+
+type octetstring RAW_PDU_16
+with { variant "FIELDLENGTH(2)";
+       variant "BYTEORDER (first)";
+       encode "RAW"
+     };
+external function enc_RAW_PDU_16(in RAW_PDU_16 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_16(in octetstring stream) return RAW_PDU_16 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_FIELDLENGTH_2_and_BYTEORDER_first_for_octetstring() runs on TempComp {
+  const RAW_PDU_16 	i := '1234'O
+  const octetstring 	o := '1234'O
+
+  if ((enc_RAW_PDU_16(i) == o)and(dec_RAW_PDU_16(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_16(i)= ", enc_RAW_PDU_16(i), "; dec_RAW_PDU_16(o)= ", dec_RAW_PDU_16(o));}
+}
+
+
+
+type octetstring RAW_PDU_17
+with { variant "FIELDLENGTH(2)";
+       variant "BYTEORDER (last)";
+       encode "RAW"
+     };
+external function enc_RAW_PDU_17(in RAW_PDU_17 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_17(in octetstring stream) return RAW_PDU_17 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_FIELDLENGTH_2_and_BYTEORDER_last_for_octetstring() runs on TempComp {
+  const RAW_PDU_17 	i := '1234'O
+  const octetstring 	o := '3412'O
+
+  if ((enc_RAW_PDU_17(i) == o)and(dec_RAW_PDU_17(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_17(i)= ", enc_RAW_PDU_17(i), "; dec_RAW_PDU_17(o)= ", dec_RAW_PDU_17(o));}
+}
+
+
+
+type octetstring RAW_PDU_18
+with { variant "FIELDLENGTH(4)";
+       variant "BYTEORDER (first)";
+       encode "RAW"
+     };
+external function enc_RAW_PDU_18(in RAW_PDU_18 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_18(in octetstring stream) return RAW_PDU_18 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_FIELDLENGTH_4_and_BYTEORDER_first_for_octetstring() runs on TempComp {
+  const RAW_PDU_18 	i := '12345678'O
+  const octetstring 	o := '12345678'O
+
+  if ((enc_RAW_PDU_18(i) == o)and(dec_RAW_PDU_18(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_18(i)= ", enc_RAW_PDU_18(i), "; dec_RAW_PDU_18(o)= ", dec_RAW_PDU_18(o));}
+}
+
+
+
+testcase TC_FIELDLENGTH_4_for_octetstring_3_octets_long() runs on TempComp {
+  const RAW_PDU_18 	i := '123456'O
+  const octetstring 	o := '12345600'O
+
+  if ((enc_RAW_PDU_18(i) == o)and(dec_RAW_PDU_18(o) == i & '00'O )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_18(i)= ", enc_RAW_PDU_18(i), "; dec_RAW_PDU_18(o)= ", dec_RAW_PDU_18(o));}
+}
+
+
+
+type octetstring RAW_PDU_19
+with { variant "FIELDLENGTH(5)";
+       encode "RAW"
+     };
+external function enc_RAW_PDU_19(in RAW_PDU_19 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_19(in octetstring stream) return RAW_PDU_19 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_FIELDLENGTH_5_for_octetstring_2_octets_long() runs on TempComp {
+  const RAW_PDU_19 	i := '1234'O
+  const octetstring 	o := '1234000000'O
+
+  if ((enc_RAW_PDU_19(i) == o)and(dec_RAW_PDU_19(o) == i & '000000'O)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_19(i)= ", enc_RAW_PDU_19(i), "; dec_RAW_PDU_19(o)= ", dec_RAW_PDU_19(o));}
+}
+
+type octetstring RAW_PDU_20
+with { variant "FIELDLENGTH(4)";
+       variant "BYTEORDER (last)";
+       encode "RAW"
+     };
+external function enc_RAW_PDU_20(in RAW_PDU_20 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_20(in octetstring stream) return RAW_PDU_20 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_FIELDLENGTH_4_and_BYTEORDER_last_for_octetstring() runs on TempComp {
+  const RAW_PDU_20 	i := '12345678'O
+  const octetstring 	o := '78563412'O
+
+  if ((enc_RAW_PDU_20(i) == o)and(dec_RAW_PDU_20(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_20(i)= ", enc_RAW_PDU_20(i), "; dec_RAW_PDU_20(o)= ", dec_RAW_PDU_20(o));}
+}
+
+
+
+testcase TC_FIELDLENGTH_4_and_BYTEORDER_last_for_octetstring_3_octets_long() runs on TempComp {
+  const RAW_PDU_20 	i := '123456'O
+  const octetstring 	o := '00563412'O
+
+  if ((enc_RAW_PDU_20(i) == o)and(dec_RAW_PDU_20(o) == i & '00'O)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_20(i)= ", enc_RAW_PDU_20(i), "; dec_RAW_PDU_20(o)= ", dec_RAW_PDU_20(o));}
+}
+
+
+
+type octetstring RAW_PDU_21
+with { variant "";
+       encode "RAW"
+     };
+external function enc_RAW_PDU_21(in RAW_PDU_21 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_21(in octetstring stream) return RAW_PDU_21 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_Default_FIELDLENGTH_for_octetstring() runs on TempComp {
+  const RAW_PDU_21 	i := '123456'O
+  const octetstring 	o := '123456'O
+
+  if ((enc_RAW_PDU_21(i) == o)and(dec_RAW_PDU_21(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_21(i)= ", enc_RAW_PDU_21(i), "; dec_RAW_PDU_21(o)= ", dec_RAW_PDU_21(o));}
+}
+
+
+
+type octetstring RAW_PDU_22
+with { variant "FIELDLENGTH(0)";
+       encode "RAW"
+     };
+external function enc_RAW_PDU_22(in RAW_PDU_22 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_22(in octetstring stream) return RAW_PDU_22 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_FIELDLENGTH_0_for_octetstring() runs on TempComp {
+  const RAW_PDU_22 	i := '1234'O
+  const octetstring 	o := '1234'O
+
+  if ((enc_RAW_PDU_22(i) == o)and(dec_RAW_PDU_22(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_22(i)= ", enc_RAW_PDU_22(i), "; dec_RAW_PDU_22(o)= ", dec_RAW_PDU_22(o));}
+}
+
+
+
+type hexstring RAW_PDU_23
+with { variant "FIELDLENGTH(4)";
+       encode "RAW"
+     };
+external function enc_RAW_PDU_23(in RAW_PDU_23 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_23(in octetstring stream) return RAW_PDU_23 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_FIELDLENGTH_4_for_hexstring() runs on TempComp {
+  const RAW_PDU_23 	i := '1234'H
+  const octetstring 	o := '2143'O
+
+  if ((enc_RAW_PDU_23(i) == o)and(dec_RAW_PDU_23(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_23(i)= ", enc_RAW_PDU_23(i), "; dec_RAW_PDU_23(o)= ", dec_RAW_PDU_23(o));}
+}
+
+
+
+type hexstring RAW_PDU_24
+with { variant "FIELDLENGTH(8)";
+       encode "RAW"
+     };
+external function enc_RAW_PDU_24(in RAW_PDU_24 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_24(in octetstring stream) return RAW_PDU_24 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_FIELDLENGTH_8_for_hexstring() runs on TempComp {
+  const RAW_PDU_24 	i := '1234'H
+  const octetstring 	o := '21430000'O
+
+  if ((enc_RAW_PDU_24(i) == o)and(dec_RAW_PDU_24(o) == i & '0000'H)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_24(i)= ", enc_RAW_PDU_24(i), "; dec_RAW_PDU_24(o)= ", dec_RAW_PDU_24(o));}
+}
+
+
+
+
+type hexstring RAW_PDU_25
+with { variant "";
+       encode "RAW"
+     };
+external function enc_RAW_PDU_25(in RAW_PDU_25 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_25(in octetstring stream) return RAW_PDU_25 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_DEFAULT_FIELDLENGTH_for_hexstring() runs on TempComp {
+  const RAW_PDU_25 	i := '12345670'H
+  const octetstring 	o := '21436507'O
+
+  if ((enc_RAW_PDU_25(i) == o)and(dec_RAW_PDU_25(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_25(i)= ", enc_RAW_PDU_25(i), "; dec_RAW_PDU_25(o)= ", dec_RAW_PDU_25(o));}
+}
+
+
+
+type hexstring RAW_PDU_26
+with { variant "FIELDLENGTH(0)";
+       encode "RAW"
+     };
+external function enc_RAW_PDU_26(in RAW_PDU_26 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_26(in octetstring stream) return RAW_PDU_26 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_FIELDLENGTH_0_for_hexstring() runs on TempComp {
+  const RAW_PDU_26 	i := '123456'H
+  const octetstring 	o := '214365'O
+
+  if ((enc_RAW_PDU_26(i) == o)and(dec_RAW_PDU_26(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_26(i)= ", enc_RAW_PDU_26(i), "; dec_RAW_PDU_26(o)= ", dec_RAW_PDU_26(o));}
+}
+
+
+
+type hexstring RAW_PDU_27
+with { variant "FIELDLENGTH(12)";
+       encode "RAW"
+     };
+external function enc_RAW_PDU_27(in RAW_PDU_27 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_27(in octetstring stream) return RAW_PDU_27 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_FIELDLENGTH_12_for_hexstring_2_hex_long() runs on TempComp {
+  const RAW_PDU_27 	i := '12'H
+  const octetstring 	o := '210000000000'O
+
+  if ((enc_RAW_PDU_27(i) == o)and(dec_RAW_PDU_27(o) == i & '0000000000'H)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_27(i)= ", enc_RAW_PDU_27(i), "; dec_RAW_PDU_27(o)= ", dec_RAW_PDU_27(o));}
+}
+
+
+
+type enumerated RAW_PDU_28
+  { zero, first, second, third, fourth, fifth, sixth , seventh, eight, nineth,
+  tenth  }
+with { variant "FIELDLENGTH(4)" ;
+       encode "RAW"};
+external function enc_RAW_PDU_28(in RAW_PDU_28 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_28(in octetstring stream) return RAW_PDU_28 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_FIELDLENGTH_4_for_enumerated() runs on TempComp {
+  const RAW_PDU_28 	i := first
+  const octetstring 	o := '01'O
+
+  if ((enc_RAW_PDU_28(i) == o)and(dec_RAW_PDU_28(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_28(i)= ", enc_RAW_PDU_28(i), "; dec_RAW_PDU_28(o)= ", dec_RAW_PDU_28(o));}
+}
+
+
+
+type enumerated RAW_PDU_29
+  { zero, first, second, third, fourth, fifth, sixth , seventh, eight, nineth,
+  tenth  }
+with { variant "FIELDLENGTH(32)" ;
+       encode "RAW"};
+external function enc_RAW_PDU_29(in RAW_PDU_29 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_29(in octetstring stream) return RAW_PDU_29 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_FIELDLENGTH_32_for_enumerated() runs on TempComp {
+  const RAW_PDU_29 	i := first
+  const octetstring 	o := '01000000'O
+
+  if ((enc_RAW_PDU_29(i) == o)and(dec_RAW_PDU_29(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_29(i)= ", enc_RAW_PDU_29(i), "; dec_RAW_PDU_29(o)= ", dec_RAW_PDU_29(o));}
+}
+
+
+
+type enumerated RAW_PDU_30
+  { zero, first, second, third, fourth, fifth, sixth , seventh, eight, nineth,
+  tenth  }
+with { variant "" ;
+       encode "RAW"};
+external function enc_RAW_PDU_30(in RAW_PDU_30 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_30(in octetstring stream) return RAW_PDU_30 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_Default_FIELDLENGTH_for_enumerated() runs on TempComp {
+  const RAW_PDU_30 	i := tenth
+  const octetstring 	o := '0A'O
+
+  if ((enc_RAW_PDU_30(i) == o)and(dec_RAW_PDU_30(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_30(i)= ", enc_RAW_PDU_30(i), "; dec_RAW_PDU_30(o)= ", dec_RAW_PDU_30(o));}
+}
+
+
+
+type bitstring RAW_PDU_31 length (4);
+external function enc_RAW_PDU_31(in RAW_PDU_31 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_31(in octetstring stream) return RAW_PDU_31 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_FIELDLENGTH_with_length_restriction_bitstring() runs on TempComp {
+  const RAW_PDU_31 	i := '1111'B
+  const octetstring 	o := '0F'O
+
+  if ((enc_RAW_PDU_31(i) == o)and(dec_RAW_PDU_31(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_31(i)= ", enc_RAW_PDU_31(i), "; dec_RAW_PDU_31(o)= ", dec_RAW_PDU_31(o));}
+}
+
+
+
+type hexstring RAW_PDU_32 length (0);
+external function enc_RAW_PDU_32(in RAW_PDU_32 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_32(in octetstring stream) return RAW_PDU_32 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_FIELDLENGTH_with_length_restriction_hexstring() runs on TempComp {
+  const RAW_PDU_32 	i := ''H
+  const octetstring 	o := ''O
+
+  if ((enc_RAW_PDU_32(i) == o)and(dec_RAW_PDU_32(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_32(i)= ", enc_RAW_PDU_32(i), "; dec_RAW_PDU_32(o)= ", dec_RAW_PDU_32(o));}
+}
+
+
+
+type octetstring RAW_PDU_33 length (2 .. 2);
+external function enc_RAW_PDU_33(in RAW_PDU_33 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_33(in octetstring stream) return RAW_PDU_33 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_FIELDLENGTH_with_length_restriction_octetstring() runs on TempComp {
+  const RAW_PDU_33 	i := '1122'O
+  const octetstring 	o := '1122'O
+
+  if ((enc_RAW_PDU_33(i) == o)and(dec_RAW_PDU_33(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_33(i)= ", enc_RAW_PDU_33(i), "; dec_RAW_PDU_33(o)= ", dec_RAW_PDU_33(o));}
+}
+
+
+type record RAW_PDU_34 {bitstring b length(4), hexstring h length(5), octetstring o length(2 .. 2)}
+with {encode "RAW"; variant  ""};
+external function enc_RAW_PDU_34(in RAW_PDU_34 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_34(in octetstring stream) return RAW_PDU_34 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_FIELDLENGTH_with_length_restriction_record() runs on TempComp {
+  const RAW_PDU_34 	i := {'1001'B,'12345'H, '1122'O}
+  const octetstring 	o := '1932541122'O
+
+  if ((enc_RAW_PDU_34(i) == o)and(dec_RAW_PDU_34(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_34(i)= ", enc_RAW_PDU_34(i), "; dec_RAW_PDU_34(o)= ", dec_RAW_PDU_34(o));}
+}
+
+
+
+type bitstring btype_35 length (12 .. 12);
+type record length (2 .. 2) of btype_35 RAW_PDU_35
+with {encode "RAW"; variant  ""};
+external function enc_RAW_PDU_35(in RAW_PDU_35 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_35(in octetstring stream) return RAW_PDU_35 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_FIELDLENGTH_with_length_restriction_record_of() runs on TempComp {
+  const RAW_PDU_35 	i := {'000011111111'B, '111100001111'B}
+  const octetstring 	o := 'FFF0F0'O
+
+  if ((enc_RAW_PDU_35(i) == o)and(dec_RAW_PDU_35(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_35(i)= ", enc_RAW_PDU_35(i), "; dec_RAW_PDU_35(o)= ", dec_RAW_PDU_35(o));}
+}
+
+
+
+type bitstring btype length (1)
+type hexstring htype length (4)
+type octetstring otype length (2 .. 2)
+
+type set RAW_PDU_36 {hexstring h length(4), octetstring o length (2 .. 2), bitstring b length(1)}
+with {encode "RAW"; variant  ""};
+external function enc_RAW_PDU_36(in RAW_PDU_36 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_36(in octetstring stream) return RAW_PDU_36 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_FIELDLENGTH_with_length_restriction_set() runs on TempComp {
+  const RAW_PDU_36 	i := {h := '1234'H, o := '1122'O, b := '1'B}
+  const octetstring 	o := '2143112201'O
+
+  if ((enc_RAW_PDU_36(i) == o)and(dec_RAW_PDU_36(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_36(i)= ", enc_RAW_PDU_36(i), "; dec_RAW_PDU_36(o)= ", dec_RAW_PDU_36(o));}
+}
+
+
+
+type bitstring btype_37 length (12 .. 12);
+type record length (2 .. 2) of btype_37 RAW_PDU_37
+with {encode "RAW"; variant  ""};
+external function enc_RAW_PDU_37(in RAW_PDU_37 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_37(in octetstring stream) return RAW_PDU_37 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_FIELDLENGTH_with_length_restriction_set_of() runs on TempComp {
+  const RAW_PDU_37 	i := {'000011111111'B, '111100001111'B}
+  const octetstring 	o := 'FFF0F0'O
+
+  if ((enc_RAW_PDU_37(i) == o)and(dec_RAW_PDU_37(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_37(i)= ", enc_RAW_PDU_37(i), "; dec_RAW_PDU_37(o)= ", dec_RAW_PDU_37(o));}
+}
+
+
+
+type bitstring RAW_PDU_38 length (9 .. 9)
+with {encode "RAW"; variant "ALIGN(left)"};
+external function enc_RAW_PDU_38(in RAW_PDU_38 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_38(in octetstring stream) return RAW_PDU_38 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_FIELDLENGTH_with_length_restriction_and_align_bitstring() runs on TempComp {
+  const RAW_PDU_38 	i := '111100001'B
+  const octetstring 	o := 'E101'O
+
+  if ((enc_RAW_PDU_38(i) == o)and(dec_RAW_PDU_38(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_38(i)= ", enc_RAW_PDU_38(i), "; dec_RAW_PDU_38(o)= ", dec_RAW_PDU_38(o));}
+}
+
+
+
+type hexstring RAW_PDU_39 length (10 .. 10)
+with {encode "RAW"; variant "ALIGN(right), BITORDERINOCTET(lsb)"};
+external function enc_RAW_PDU_39(in RAW_PDU_39 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_39(in octetstring stream) return RAW_PDU_39 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_FIELDLENGTH_with_length_restriction_and_align_hexstring() runs on TempComp {
+  const RAW_PDU_39 	i := '0000012345'H
+  const octetstring 	o := '0000103254000000'O
+
+  if (dec_RAW_PDU_39(o) == i) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_39(i)= ", enc_RAW_PDU_39(i), "; dec_RAW_PDU_39(o)= ", dec_RAW_PDU_39(o));}
+}
+
+
+
+type octetstring RAW_PDU_40 length (8 .. 8)
+with {encode "RAW"; variant "ALIGN(left)"};
+external function enc_RAW_PDU_40(in RAW_PDU_40 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_40(in octetstring stream) return RAW_PDU_40 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_FIELDLENGTH_with_length_restriction_and_align_octetstring() runs on TempComp {
+  const RAW_PDU_40 	i := '0102030400000000'O
+  const octetstring 	o := '010203040000000000000000000000'O
+
+  if (dec_RAW_PDU_40(o) == i) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_40(i)= ", enc_RAW_PDU_40(i), "; dec_RAW_PDU_40(o)= ", dec_RAW_PDU_40(o));}
+}
+
+
+
+type integer RAW_PDU_41
+with {encode "RAW"; variant "BYTEORDER (first)"};
+external function enc_RAW_PDU_41(in RAW_PDU_41 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_41(in octetstring stream) return RAW_PDU_41 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_BYTEORDER_first_for_integer_0() runs on TempComp {
+  const RAW_PDU_41 	i := 0
+  const octetstring 	o := '00'O
+
+  if ((enc_RAW_PDU_41(i) == o)and(dec_RAW_PDU_41(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_41(i)= ", enc_RAW_PDU_41(i), "; dec_RAW_PDU_41(o)= ", dec_RAW_PDU_41(o));}
+}
+
+
+
+testcase TC_BYTEORDER_first_for_integer_1() runs on TempComp {
+  const RAW_PDU_41 	i := 1
+  const octetstring 	o := '01'O
+
+  if ((enc_RAW_PDU_41(i) == o)and(dec_RAW_PDU_41(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_41(i)= ", enc_RAW_PDU_41(i), "; dec_RAW_PDU_41(o)= ", dec_RAW_PDU_41(o));}
+}
+
+
+
+testcase TC_BYTEORDER_first_for_integer_18() runs on TempComp {
+  const RAW_PDU_41 	i := 18
+  const octetstring 	o := '12'O
+
+  if ((enc_RAW_PDU_41(i) == o)and(dec_RAW_PDU_41(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_41(i)= ", enc_RAW_PDU_41(i), "; dec_RAW_PDU_41(o)= ", dec_RAW_PDU_41(o));}
+}
+
+
+
+type integer RAW_PDU_42
+with {encode "RAW" ;
+       variant "FIELDLENGTH (8)" ;
+       variant "BYTEORDER (first)"};
+external function enc_RAW_PDU_42(in RAW_PDU_42 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_42(in octetstring stream) return RAW_PDU_42 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_BYTEORDER_first_and_fieldlength_8_for_integer() runs on TempComp {
+  const RAW_PDU_42 	i := 15
+  const octetstring 	o := '0F'O
+
+  if ((enc_RAW_PDU_42(i) == o)and(dec_RAW_PDU_42(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_42(i)= ", enc_RAW_PDU_42(i), "; dec_RAW_PDU_42(o)= ", dec_RAW_PDU_42(o));}
+}
+
+
+
+type integer RAW_PDU_43
+with {encode "RAW" ;
+       variant "FIELDLENGTH (16)" ;
+       variant "BYTEORDER (first)"};
+external function enc_RAW_PDU_43(in RAW_PDU_43 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_43(in octetstring stream) return RAW_PDU_43 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_BYTEORDER_first_and_fieldlength_16_for_integer() runs on TempComp {
+  const RAW_PDU_43 	i := 15
+  const octetstring 	o := '0F00'O
+
+  if ((enc_RAW_PDU_43(i) == o)and(dec_RAW_PDU_43(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_43(i)= ", enc_RAW_PDU_43(i), "; dec_RAW_PDU_43(o)= ", dec_RAW_PDU_43(o));}
+}
+
+
+
+type integer RAW_PDU_44
+with {encode "RAW" ;
+       variant "BYTEORDER (last)"};
+external function enc_RAW_PDU_44(in RAW_PDU_44 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_44(in octetstring stream) return RAW_PDU_44 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_BYTEORDER_last_for_integer_0() runs on TempComp {
+  const RAW_PDU_44 	i := 0
+  const octetstring 	o := '00'O
+
+  if ((enc_RAW_PDU_44(i) == o)and(dec_RAW_PDU_44(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_44(i)= ", enc_RAW_PDU_44(i), "; dec_RAW_PDU_44(o)= ", dec_RAW_PDU_44(o));}
+}
+
+
+
+testcase TC_BYTEORDER_last_for_integer_1() runs on TempComp {
+  const RAW_PDU_44 	i := 1
+  const octetstring 	o := '01'O
+
+  if ((enc_RAW_PDU_44(i) == o)and(dec_RAW_PDU_44(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_44(i)= ", enc_RAW_PDU_44(i), "; dec_RAW_PDU_44(o)= ", dec_RAW_PDU_44(o));}
+}
+
+
+
+testcase TC_BYTEORDER_last_for_integer_18() runs on TempComp {
+  const RAW_PDU_44 	i := 18
+  const octetstring 	o := '12'O
+
+  if ((enc_RAW_PDU_44(i) == o)and(dec_RAW_PDU_44(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_44(i)= ", enc_RAW_PDU_44(i), "; dec_RAW_PDU_44(o)= ", dec_RAW_PDU_44(o));}
+}
+
+
+
+type integer RAW_PDU_45
+with { encode "RAW";
+       variant "FIELDLENGTH (8)" ;
+       variant "BYTEORDER (last)" };
+external function enc_RAW_PDU_45(in RAW_PDU_45 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_45(in octetstring stream) return RAW_PDU_45 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_BYTEORDER_last_and_fieldlength_8_for_integer() runs on TempComp {
+  const RAW_PDU_45 	i := 15
+  const octetstring 	o := '0F'O
+
+  if ((enc_RAW_PDU_45(i) == o)and(dec_RAW_PDU_45(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_45(i)= ", enc_RAW_PDU_45(i), "; dec_RAW_PDU_45(o)= ", dec_RAW_PDU_45(o));}
+}
+
+
+
+type integer RAW_PDU_46
+with { encode "RAW";
+       variant "FIELDLENGTH (16)" ;
+       variant "BYTEORDER (last)" };
+external function enc_RAW_PDU_46(in RAW_PDU_46 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_46(in octetstring stream) return RAW_PDU_46 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_BYTEORDER_last_and_fieldlength_16_for_integer() runs on TempComp {
+  const RAW_PDU_46 	i := 15
+  const octetstring 	o := '000F'O
+
+  if ((enc_RAW_PDU_46(i) == o)and(dec_RAW_PDU_46(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_46(i)= ", enc_RAW_PDU_46(i), "; dec_RAW_PDU_46(o)= ", dec_RAW_PDU_46(o));}
+}
+
+
+
+type bitstring RAW_PDU_47
+with { encode "RAW";
+       variant "FIELDLENGTH(16)" ;
+       variant "BYTEORDER (first)" };
+external function enc_RAW_PDU_47(in RAW_PDU_47 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_47(in octetstring stream) return RAW_PDU_47 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_BYTEORDER_first_for_bitstring() runs on TempComp {
+  const RAW_PDU_47 	i := '0000000100000010'B
+  const octetstring 	o := '0201'O
+
+  if ((enc_RAW_PDU_47(i) == o)and(dec_RAW_PDU_47(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_47(i)= ", enc_RAW_PDU_47(i), "; dec_RAW_PDU_47(o)= ", dec_RAW_PDU_47(o));}
+}
+
+
+
+
+type bitstring RAW_PDU_48
+with { encode "RAW";
+       variant "FIELDLENGTH(16)" ;
+       variant "BYTEORDER (last)" };
+external function enc_RAW_PDU_48(in RAW_PDU_48 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_48(in octetstring stream) return RAW_PDU_48 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_BYTEORDER_last_for_bitstring() runs on TempComp {
+  const RAW_PDU_48 	i := '0000000100000010'B
+  const octetstring 	o := '0102'O
+
+  if ((enc_RAW_PDU_48(i) == o)and(dec_RAW_PDU_48(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_48(i)= ", enc_RAW_PDU_48(i), "; dec_RAW_PDU_48(o)= ", dec_RAW_PDU_48(o));}
+}
+
+
+
+type octetstring RAW_PDU_49
+with { encode "RAW";
+       variant "BYTEORDER (first)"};
+external function enc_RAW_PDU_49(in RAW_PDU_49 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_49(in octetstring stream) return RAW_PDU_49 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_BYTEORDER_first_for_octetstring() runs on TempComp {
+  const RAW_PDU_49 	i := '1234'O
+  const octetstring 	o := '1234'O
+
+  if ((enc_RAW_PDU_49(i) == o)and(dec_RAW_PDU_49(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_49(i)= ", enc_RAW_PDU_49(i), "; dec_RAW_PDU_49(o)= ", dec_RAW_PDU_49(o));}
+}
+
+
+
+type octetstring RAW_PDU_50
+with { encode "RAW";
+       variant "BYTEORDER (last)"};
+external function enc_RAW_PDU_50(in RAW_PDU_50 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_50(in octetstring stream) return RAW_PDU_50 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_BYTEORDER_last_for_octetstring() runs on TempComp {
+  const RAW_PDU_50 	i := '1234'O
+  const octetstring 	o := '3412'O
+
+  if ((enc_RAW_PDU_50(i) == o)and(dec_RAW_PDU_50(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_50(i)= ", enc_RAW_PDU_50(i), "; dec_RAW_PDU_50(o)= ", dec_RAW_PDU_50(o));}
+}
+
+
+
+type enumerated RAW_PDU_51
+  { zero, first, second, third, fourth, fifth, sixth , seventh, eight, nineth,
+  tenth  }
+with { encode "RAW";
+       variant "FIELDLENGTH(16)" ;
+       variant "BYTEORDER (first) "};
+external function enc_RAW_PDU_51(in RAW_PDU_51 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_51(in octetstring stream) return RAW_PDU_51 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_BYTEORDER_first_for_enumerated() runs on TempComp {
+  const RAW_PDU_51 	i := first
+  const octetstring 	o := '0100'O
+
+  if ((enc_RAW_PDU_51(i) == o)and(dec_RAW_PDU_51(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_51(i)= ", enc_RAW_PDU_51(i), "; dec_RAW_PDU_51(o)= ", dec_RAW_PDU_51(o));}
+}
+
+
+
+type enumerated RAW_PDU_52
+  { zero, first, second, third, fourth, fifth, sixth , seventh, eight, nineth,
+  tenth  }
+with { encode "RAW";
+       variant "FIELDLENGTH(16)" ;
+       variant "BYTEORDER (last) "};
+external function enc_RAW_PDU_52(in RAW_PDU_52 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_52(in octetstring stream) return RAW_PDU_52 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_BYTEORDER_last_for_enumerated() runs on TempComp {
+  const RAW_PDU_52 	i := first
+  const octetstring 	o := '0001'O
+
+  if ((enc_RAW_PDU_52(i) == o)and(dec_RAW_PDU_52(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_52(i)= ", enc_RAW_PDU_52(i), "; dec_RAW_PDU_52(o)= ", dec_RAW_PDU_52(o));}
+}
+
+
+
+type hexstring RAW_PDU_53
+with { encode "RAW"; variant "BYTEORDER(first)"};
+external function enc_RAW_PDU_53(in RAW_PDU_53 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_53(in octetstring stream) return RAW_PDU_53 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_BYTEORDER_first_for_hexstring() runs on TempComp {
+  const RAW_PDU_53 	i := '1234567890'H
+  const octetstring 	o := '2143658709'O
+
+  if ((enc_RAW_PDU_53(i) == o)and(dec_RAW_PDU_53(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_53(i)= ", enc_RAW_PDU_53(i), "; dec_RAW_PDU_53(o)= ", dec_RAW_PDU_53(o));}
+}
+
+
+
+type hexstring RAW_PDU_54
+with { encode "RAW"; variant "BYTEORDER(last)"};
+external function enc_RAW_PDU_54(in RAW_PDU_54 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_54(in octetstring stream) return RAW_PDU_54 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_BYTEORDER_last_for_hexstring() runs on TempComp {
+  const RAW_PDU_54 	i := '1234567890'H
+  const octetstring 	o := '0987654321'O
+
+  if ((enc_RAW_PDU_54(i) == o)and(dec_RAW_PDU_54(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_54(i)= ", enc_RAW_PDU_54(i), "; dec_RAW_PDU_54(o)= ", dec_RAW_PDU_54(o));}
+}
+
+
+type integer RAW_PDU_56
+with { encode "RAW"; 
+       variant "FIELDLENGTH(8)" ;
+       variant "BITORDERINFIELD(lsb)"};
+
+external function enc_RAW_PDU_56(in RAW_PDU_56 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_56(in octetstring stream) return RAW_PDU_56 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_BITORDERINFIELD_lsb_for_integer_8() runs on TempComp{
+  const RAW_PDU_56      i := 15
+  const octetstring 	o := '0F'O
+  if ((enc_RAW_PDU_56(i) == o)and(dec_RAW_PDU_56(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_56(i)= ", enc_RAW_PDU_56(i), "; dec_RAW_PDU_56(o)= ", dec_RAW_PDU_56(o));}
+}
+
+type integer RAW_PDU_57
+with { encode "RAW"; 
+       variant "FIELDLENGTH(8)" ;
+       variant "BITORDERINFIELD(msb)"};
+
+external function enc_RAW_PDU_57(in RAW_PDU_57 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_57(in octetstring stream) return RAW_PDU_57 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_BITORDERINFIELD_msb_for_integer_8() runs on TempComp{
+  const RAW_PDU_57         i := 15
+  const octetstring 	o := 'F0'O
+  if ((enc_RAW_PDU_57(i) == o)and(dec_RAW_PDU_57(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_57(i)= ", enc_RAW_PDU_57(i), "; dec_RAW_PDU_57(o)= ", dec_RAW_PDU_57(o));}
+}
+
+type integer RAW_PDU_58
+with { encode "RAW"; 
+       variant "FIELDLENGTH(16)" ;
+       variant "BITORDERINFIELD(lsb)"};
+
+external function enc_RAW_PDU_58(in RAW_PDU_58 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_58(in octetstring stream) return RAW_PDU_58 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_BITORDERINFIELD_lsb_for_integer_16() runs on TempComp{
+  const RAW_PDU_58      i := 4660
+  const octetstring 	o := '3412'O 
+  if ((enc_RAW_PDU_58(i) == o)and(dec_RAW_PDU_58(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_58(i)= ", enc_RAW_PDU_58(i), "; dec_RAW_PDU_58(o)= ", dec_RAW_PDU_58(o));}
+}
+
+type integer RAW_PDU_59
+with { encode "RAW"; 
+       variant "FIELDLENGTH(16)" ;
+       variant "BITORDERINFIELD(msb)"};
+
+external function enc_RAW_PDU_59(in RAW_PDU_59 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_59(in octetstring stream) return RAW_PDU_59 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_BITORDERINFIELD_msb_for_integer_16() runs on TempComp{
+  const RAW_PDU_59         i := 4660
+  const octetstring 	o := '482C'O 
+  if ((enc_RAW_PDU_59(i) == o)and(dec_RAW_PDU_59(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_59(i)= ", enc_RAW_PDU_59(i), "; dec_RAW_PDU_59(o)= ", dec_RAW_PDU_59(o));}
+}
+
+type octetstring RAW_PDU_60
+with { encode "RAW"; 
+       variant "FIELDLENGTH(1)" ;
+       variant "BITORDERINFIELD(lsb)"};
+
+external function enc_RAW_PDU_60(in RAW_PDU_60 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_60(in octetstring stream) return RAW_PDU_60 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_BITORDERINFIELD_lsb_for_octetstring_1() runs on TempComp{
+  const RAW_PDU_60      i := '0F'O
+  const octetstring 	o := '0F'O
+  if ((enc_RAW_PDU_60(i) == o)and(dec_RAW_PDU_60(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_60(i)= ", enc_RAW_PDU_60(i), "; dec_RAW_PDU_60(o)= ", dec_RAW_PDU_60(o));}
+}
+
+type octetstring RAW_PDU_61
+with { encode "RAW"; 
+       variant "FIELDLENGTH(1)" ;
+       variant "BITORDERINFIELD(msb)"};
+
+external function enc_RAW_PDU_61(in RAW_PDU_61 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_61(in octetstring stream) return RAW_PDU_61 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_BITORDERINFIELD_msb_for_octetstring_1() runs on TempComp{
+  const RAW_PDU_61      i := '0F'O
+  const octetstring 	o := 'F0'O
+  if ((enc_RAW_PDU_61(i) == o)and(dec_RAW_PDU_61(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_61(i)= ", enc_RAW_PDU_61(i), "; dec_RAW_PDU_61(o)= ", dec_RAW_PDU_61(o));}
+}
+
+type octetstring RAW_PDU_62
+with { encode "RAW"; 
+       variant "FIELDLENGTH(2)" ;
+       variant "BITORDERINFIELD(lsb)"};
+
+external function enc_RAW_PDU_62(in RAW_PDU_62 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_62(in octetstring stream) return RAW_PDU_62 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_BITORDERINFIELD_lsb_for_octetstring_2() runs on TempComp{
+  const RAW_PDU_62      i := '1234'O
+  const octetstring 	o := '1234'O
+  if ((enc_RAW_PDU_62(i) == o)and(dec_RAW_PDU_62(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_62(i)= ", enc_RAW_PDU_62(i), "; dec_RAW_PDU_62(o)= ", dec_RAW_PDU_62(o));}
+}
+
+type octetstring RAW_PDU_63
+with { encode "RAW"; 
+       variant "FIELDLENGTH(2)" ;
+       variant "BITORDERINFIELD(msb)"};
+
+external function enc_RAW_PDU_63(in RAW_PDU_63 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_63(in octetstring stream) return RAW_PDU_63 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_BITORDERINFIELD_msb_for_octetstring_2() runs on TempComp{
+  const RAW_PDU_63      i := '1234'O
+  const octetstring 	o := '2C48'O
+  if ((enc_RAW_PDU_63(i) == o)and(dec_RAW_PDU_63(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_63(i)= ", enc_RAW_PDU_63(i), "; dec_RAW_PDU_63(o)= ", dec_RAW_PDU_63(o));}
+}
+
+type bitstring RAW_PDU_64
+with { encode "RAW"; 
+       variant "FIELDLENGTH(8)" ;
+       variant "BITORDERINFIELD(lsb)"};
+
+external function enc_RAW_PDU_64(in RAW_PDU_64 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_64(in octetstring stream) return RAW_PDU_64 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_BITORDERINFIELD_lsb_for_bitstring_8() runs on TempComp{
+  const RAW_PDU_64      i := '00000011'B
+  const octetstring 	o := '03'O
+  if ((enc_RAW_PDU_64(i) == o)and(dec_RAW_PDU_64(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_64(i)= ", enc_RAW_PDU_64(i), "; dec_RAW_PDU_64(o)= ", dec_RAW_PDU_64(o));}
+}
+
+type bitstring RAW_PDU_65
+with { encode "RAW"; 
+       variant "FIELDLENGTH(8)" ;
+       variant "BITORDERINFIELD(msb)"};
+
+external function enc_RAW_PDU_65(in RAW_PDU_65 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_65(in octetstring stream) return RAW_PDU_65 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_BITORDERINFIELD_msb_for_bitstring_8() runs on TempComp{
+  const RAW_PDU_65      i := '00000011'B
+  const octetstring 	o := 'C0'O
+  if ((enc_RAW_PDU_65(i) == o)and(dec_RAW_PDU_65(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_65(i)= ", enc_RAW_PDU_65(i), "; dec_RAW_PDU_65(o)= ", dec_RAW_PDU_65(o));}
+}
+
+type bitstring RAW_PDU_66
+with { encode "RAW"; 
+       variant "FIELDLENGTH(16)" ;
+       variant "BITORDERINFIELD(lsb)"};
+
+external function enc_RAW_PDU_66(in RAW_PDU_66 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_66(in octetstring stream) return RAW_PDU_66 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_BITORDERINFIELD_lsb_for_bitstring_16() runs on TempComp {
+  const RAW_PDU_66      i :=  '0001111100110001'B
+  const octetstring 	o :=  '311F'O
+  if ((enc_RAW_PDU_66(i) == o)and(dec_RAW_PDU_66(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_66(i)= ", enc_RAW_PDU_66(i), "; dec_RAW_PDU_66(o)= ", dec_RAW_PDU_66(o));}
+}
+
+type bitstring RAW_PDU_67
+with { encode "RAW"; 
+       variant "FIELDLENGTH(16)" ;
+       variant "BITORDERINFIELD(msb)"};
+
+external function enc_RAW_PDU_67(in RAW_PDU_67 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_67(in octetstring stream) return RAW_PDU_67 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_BITORDERINFIELD_msb_for_bitstring_16() runs on TempComp{
+  const RAW_PDU_67      i :=  '0001111100110001'B
+  const octetstring 	o :=  'F88C'O
+  if ((enc_RAW_PDU_67(i) == o)and(dec_RAW_PDU_67(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_67(i)= ", enc_RAW_PDU_67(i), "; dec_RAW_PDU_67(o)= ", dec_RAW_PDU_67(o));}
+}
+
+
+
+type enumerated RAW_PDU_68
+  { zero, first, second, third, fourth, fifth, sixth , seventh, eight, nineth,
+  tenth  }
+with { encode "RAW";
+       variant "FIELDLENGTH(4)" ;
+       variant "BITORDERINFIELD (lsb) "};
+
+
+
+external function enc_RAW_PDU_68(in RAW_PDU_68 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_68(in octetstring stream) return RAW_PDU_68 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_BITORDERINFIELD_lsb_for_enumerated_4() runs on TempComp{
+  const RAW_PDU_68 	i := first
+  const octetstring 	o := '01'O
+  if ((enc_RAW_PDU_68(i) == o)and(dec_RAW_PDU_68(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_68(i)= ", enc_RAW_PDU_68(i), "; dec_RAW_PDU_68(o)= ", dec_RAW_PDU_68(o));}
+}
+
+type enumerated RAW_PDU_69
+  { zero, first, second, third, fourth, fifth, sixth , seventh, eight, nineth,
+  tenth  }
+with { encode "RAW";
+       variant "FIELDLENGTH(8)" ;
+       variant "BITORDERINFIELD (msb) "};
+
+external function enc_RAW_PDU_69(in RAW_PDU_69 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_69(in octetstring stream) return RAW_PDU_69 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_BITORDERINFIELD_msb_for_enumerated_8() runs on TempComp{
+  const RAW_PDU_69 	i := first;
+  const octetstring 	o := '80'O;
+  if ((enc_RAW_PDU_69(i) == o)and(dec_RAW_PDU_69(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_69(i)= ", enc_RAW_PDU_69(i), "; dec_RAW_PDU_69(o)= ", dec_RAW_PDU_69(o));}
+}
+
+
+type hexstring RAW_PDU_70
+with { encode "RAW"; variant "BITORDERINFIELD(lsb)"};
+
+
+external function enc_RAW_PDU_70(in RAW_PDU_70 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_70(in octetstring stream) return RAW_PDU_70 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_BITORDERINFIELD_lsb_for_hexstring() runs on TempComp{
+  const RAW_PDU_70 		i := '1234'H
+  const octetstring 	o := '2143'O
+  if ((enc_RAW_PDU_70(i) == o)and(dec_RAW_PDU_70(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_70(i)= ", enc_RAW_PDU_70(i), "; dec_RAW_PDU_70(o)= ", dec_RAW_PDU_70(o));}
+}
+
+type hexstring RAW_PDU_71
+with { encode "RAW"; variant "BITORDERINFIELD(msb)"};
+
+
+
+external function enc_RAW_PDU_71(in RAW_PDU_71 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_71(in octetstring stream) return RAW_PDU_71 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_BITORDERINFIELD_msb_for_hexstring() runs on TempComp {
+  const RAW_PDU_71        i := '1234'H
+  const octetstring 	o := 'C284'O
+  if ((enc_RAW_PDU_71(i) == o)and(dec_RAW_PDU_71(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_71(i)= ", enc_RAW_PDU_71(i), "; dec_RAW_PDU_71(o)= ", dec_RAW_PDU_71(o));}
+}
+
+//Testing BITORDERINOCTET Attribute:
+
+type integer RAW_PDU_72
+with { encode "RAW";
+       variant "FIELDLENGTH(8)" ;
+       variant "BITORDERINOCTET(lsb)"};
+
+external function enc_RAW_PDU_72(in RAW_PDU_72 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_72(in octetstring stream) return RAW_PDU_72 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_BITORDERINOCTET_lsb_for_integer_8() runs on TempComp{
+  const RAW_PDU_72	i := 15;
+  const octetstring 	o := '0F'O;
+  if ((enc_RAW_PDU_72(i) == o)and(dec_RAW_PDU_72(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_72(i)= ", enc_RAW_PDU_72(i), "; dec_RAW_PDU_72(o)= ", dec_RAW_PDU_72(o));}
+}
+
+type integer RAW_PDU_73
+with { encode "RAW";
+       variant "FIELDLENGTH(8)" ;
+       variant "BITORDERINOCTET(msb)"};
+
+external function enc_RAW_PDU_73(in RAW_PDU_73 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_73(in octetstring stream) return RAW_PDU_73 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_BITORDERINOCTET_msb_for_integer_8() runs on TempComp{
+  const RAW_PDU_73	i := 15
+  const octetstring 	o := 'F0'O
+  if ((enc_RAW_PDU_73(i) == o)and(dec_RAW_PDU_73(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_73(i)= ", enc_RAW_PDU_73(i), "; dec_RAW_PDU_73(o)= ", dec_RAW_PDU_73(o));}
+}
+
+type integer RAW_PDU_74
+with { encode "RAW";
+       variant "FIELDLENGTH(16)" ;
+  variant "BITORDERINOCTET(lsb)"};
+
+external function enc_RAW_PDU_74(in RAW_PDU_74 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_74(in octetstring stream) return RAW_PDU_74 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_BITORDERINOCTET_lsb_for_integer_16() runs on TempComp{
+  const RAW_PDU_74	i := 4660
+  const octetstring 	o := '3412'O
+  if ((enc_RAW_PDU_74(i) == o)and(dec_RAW_PDU_74(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_74(i)= ", enc_RAW_PDU_74(i), "; dec_RAW_PDU_74(o)= ", dec_RAW_PDU_74(o));}
+}
+
+type integer RAW_PDU_75
+with { encode "RAW";
+       variant "FIELDLENGTH(16)" ;
+  variant "BITORDERINOCTET(msb)"};
+
+external function enc_RAW_PDU_75(in RAW_PDU_75 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_75(in octetstring stream) return RAW_PDU_75 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_BITORDERINOCTET_msb_for_integer_16() runs on TempComp{
+  const RAW_PDU_75	i := 4660
+  const octetstring 	o := '2C48'O
+  if ((enc_RAW_PDU_75(i) == o)and(dec_RAW_PDU_75(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_75(i)= ", enc_RAW_PDU_75(i), "; dec_RAW_PDU_75(o)= ", dec_RAW_PDU_75(o));}
+}
+
+type octetstring RAW_PDU_76
+with { encode "RAW";
+       variant "FIELDLENGTH(1)" ;
+       variant "BITORDERINOCTET(lsb)"
+     }; 
+
+external function enc_RAW_PDU_76(in RAW_PDU_76 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_76(in octetstring stream) return RAW_PDU_76 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_BITORDERINOCTET_lsb_for_octetstring_1() runs on TempComp{
+  const RAW_PDU_76	i := '0F'O
+  const octetstring 	o := '0F'O
+  if ((enc_RAW_PDU_76(i) == o)and(dec_RAW_PDU_76(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_76(i)= ", enc_RAW_PDU_76(i), "; dec_RAW_PDU_76(o)= ", dec_RAW_PDU_76(o));}
+}
+
+type octetstring RAW_PDU_77
+with { encode "RAW";
+       variant "FIELDLENGTH(1)" ;
+       variant "BITORDERINOCTET(msb)"
+     }; 
+
+external function enc_RAW_PDU_77(in RAW_PDU_77 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_77(in octetstring stream) return RAW_PDU_77 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_BITORDERINOCTET_msb_for_octetstring_1() runs on TempComp{
+  const RAW_PDU_77	i := '0F'O
+  const octetstring 	o := 'F0'O
+  if ((enc_RAW_PDU_77(i) == o)and(dec_RAW_PDU_77(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_77(i)= ", enc_RAW_PDU_77(i), "; dec_RAW_PDU_77(o)= ", dec_RAW_PDU_77(o));}
+}
+
+type octetstring RAW_PDU_78
+with { encode "RAW";
+       variant "FIELDLENGTH(2)" ;
+       variant "BITORDERINOCTET(lsb)"
+     }; 
+
+external function enc_RAW_PDU_78(in RAW_PDU_78 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_78(in octetstring stream) return RAW_PDU_78 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_BITORDERINOCTET_lsb_for_octetstring_2() runs on TempComp{
+  const RAW_PDU_78	i := '1234'O
+  const octetstring 	o := '1234'O
+  if ((enc_RAW_PDU_78(i) == o)and(dec_RAW_PDU_78(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_78(i)= ", enc_RAW_PDU_78(i), "; dec_RAW_PDU_78(o)= ", dec_RAW_PDU_78(o));}
+}
+
+type octetstring RAW_PDU_79
+with { encode "RAW";
+       variant "FIELDLENGTH(2)" ;
+       variant "BITORDERINOCTET(msb)"
+     }; 
+
+external function enc_RAW_PDU_79(in RAW_PDU_79 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_79(in octetstring stream) return RAW_PDU_79 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_BITORDERINOCTET_msb_for_octetstring_2() runs on TempComp{
+  const RAW_PDU_79	i := '1234'O
+  const octetstring 	o := '482C'O
+  if ((enc_RAW_PDU_79(i) == o)and(dec_RAW_PDU_79(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_79(i)= ", enc_RAW_PDU_79(i), "; dec_RAW_PDU_79(o)= ", dec_RAW_PDU_79(o));}
+}
+
+type bitstring RAW_PDU_80
+with { encode "RAW";
+       variant "FIELDLENGTH(8)" ;
+       variant "BITORDERINOCTET(lsb)"
+};
+external function enc_RAW_PDU_80(in RAW_PDU_80 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_80(in octetstring stream) return RAW_PDU_80 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_BITORDERINOCTET_lsb_for_bitstring_8() runs on TempComp{
+  const RAW_PDU_80	i := '00000011'B
+  const octetstring 	o := '03'O
+  if ((enc_RAW_PDU_80(i) == o)and(dec_RAW_PDU_80(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_80(i)= ", enc_RAW_PDU_80(i), "; dec_RAW_PDU_80(o)= ", dec_RAW_PDU_80(o));}
+}
+
+type bitstring RAW_PDU_81
+with { encode "RAW";
+       variant "FIELDLENGTH(8)" ;
+       variant "BITORDERINOCTET(msb)"
+};
+external function enc_RAW_PDU_81(in RAW_PDU_81 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_81(in octetstring stream) return RAW_PDU_81 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_BITORDERINOCTET_msb_for_bitstring_8() runs on TempComp{
+  const RAW_PDU_81	i := '00000011'B
+  const octetstring 	o := 'C0'O
+  if ((enc_RAW_PDU_81(i) == o)and(dec_RAW_PDU_81(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_81(i)= ", enc_RAW_PDU_81(i), "; dec_RAW_PDU_81(o)= ", dec_RAW_PDU_81(o));}
+}
+
+type bitstring RAW_PDU_82
+with { encode "RAW";
+       variant "FIELDLENGTH(16)" ;
+       variant "BITORDERINOCTET(lsb)"
+};
+external function enc_RAW_PDU_82(in RAW_PDU_82 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_82(in octetstring stream) return RAW_PDU_82 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_BITORDERINOCTET_lsb_for_bitstring_16() runs on TempComp{
+  const RAW_PDU_82	i := '0001111100110001'B
+  const octetstring 	o := '311F'O
+  if ((enc_RAW_PDU_82(i) == o)and(dec_RAW_PDU_82(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_82(i)= ", enc_RAW_PDU_82(i), "; dec_RAW_PDU_82(o)= ", dec_RAW_PDU_82(o));}
+}
+
+type bitstring RAW_PDU_83
+with { encode "RAW";
+       variant "FIELDLENGTH(16)" ;
+       variant "BITORDERINOCTET(msb)"
+};
+external function enc_RAW_PDU_83(in RAW_PDU_83 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_83(in octetstring stream) return RAW_PDU_83 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_BITORDERINOCTET_msb_for_bitstring_16() runs on TempComp{
+  const RAW_PDU_83	i := '0001111100110001'B
+  const octetstring 	o := '8CF8'O
+  if ((enc_RAW_PDU_83(i) == o)and(dec_RAW_PDU_83(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_83(i)= ", enc_RAW_PDU_83(i), "; dec_RAW_PDU_83(o)= ", dec_RAW_PDU_83(o));}
+}
+
+type enumerated RAW_PDU_84
+  { zero, first, second, third, fourth, fifth, sixth , seventh, eight, nineth,
+  tenth  }
+with { encode "RAW";
+       variant "FIELDLENGTH(4)" ;
+       variant "BITORDERINOCTET (lsb) "
+     };
+
+external function enc_RAW_PDU_84(in RAW_PDU_84 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_84(in octetstring stream) return RAW_PDU_84 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_BITORDERINOCTET_lsb_for_enumerated() runs on TempComp{
+  const RAW_PDU_84	i := first
+  const octetstring 	o := '01'O
+  if ((enc_RAW_PDU_84(i) == o)and(dec_RAW_PDU_84(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_84(i)= ", enc_RAW_PDU_84(i), "; dec_RAW_PDU_84(o)= ", dec_RAW_PDU_84(o));}
+}
+
+type enumerated RAW_PDU_85
+  { zero, first, second, third, fourth, fifth, sixth , seventh, eight, nineth,
+  tenth  }
+with { encode "RAW";
+       variant "FIELDLENGTH(8)" ;
+       variant "BITORDERINOCTET (msb) "
+     };
+
+external function enc_RAW_PDU_85(in RAW_PDU_85 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_85(in octetstring stream) return RAW_PDU_85 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_BITORDERINOCTET_msb_for_enumerated() runs on TempComp{
+  const RAW_PDU_85	i := first
+  const octetstring 	o := '80'O
+  
+  if ((enc_RAW_PDU_85(i) == o)and(dec_RAW_PDU_85(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_85(i)= ", enc_RAW_PDU_85(i), "; dec_RAW_PDU_85(o)= ", dec_RAW_PDU_85(o));}
+}
+
+type hexstring RAW_PDU_86
+with { encode "RAW"; variant "BITORDERINOCTET(lsb)"};
+
+external function enc_RAW_PDU_86(in RAW_PDU_86 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_86(in octetstring stream) return RAW_PDU_86 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_BITORDERINOCTET_lsb_for_hexstring() runs on TempComp{
+  const RAW_PDU_86	i := '1234'H
+  const octetstring 	o := '2143'O
+  if ((enc_RAW_PDU_86(i) == o)and(dec_RAW_PDU_86(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_86(i)= ", enc_RAW_PDU_86(i), "; dec_RAW_PDU_86(o)= ", dec_RAW_PDU_86(o));}
+}
+
+type hexstring RAW_PDU_87
+with { encode "RAW"; variant "BITORDERINOCTET(msb)"};
+
+external function enc_RAW_PDU_87(in RAW_PDU_87 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_87(in octetstring stream) return RAW_PDU_87 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_BITORDERINOCTET_msb_for_hexstring() runs on TempComp{
+  const RAW_PDU_87	i := '1234'H
+  const octetstring 	o := '84C2'O
+  if ((enc_RAW_PDU_87(i) == o)and(dec_RAW_PDU_87(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_87(i)= ", enc_RAW_PDU_87(i), "; dec_RAW_PDU_87(o)= ", dec_RAW_PDU_87(o));}
+}
+
+type integer RAW_PDU_88
+with { encode "RAW";
+       variant "FIELDLENGTH(8)" ;
+       variant "COMP( nosign ) "
+     };
+external function enc_RAW_PDU_88(in RAW_PDU_88 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_88(in octetstring stream) return RAW_PDU_88 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_COMP_nosign_for_positive_integer_8() runs on TempComp{
+  const RAW_PDU_88	i := 2
+  const octetstring 	o := '02'O
+  if ((enc_RAW_PDU_88(i) == o)and(dec_RAW_PDU_88(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_88(i)= ", enc_RAW_PDU_88(i), "; dec_RAW_PDU_88(o)= ", dec_RAW_PDU_88(o));}
+}
+
+type integer RAW_PDU_89
+with { encode "RAW";
+       variant "FIELDLENGTH(8)" ;
+       variant "COMP( signbit ) "
+     };
+external function enc_RAW_PDU_89(in RAW_PDU_89 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_89(in octetstring stream) return RAW_PDU_89 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_COMP_signbit_for_positive_integer_8() runs on TempComp{
+  const RAW_PDU_89	i := 2
+  const octetstring 	o := '02'O
+  if ((enc_RAW_PDU_89(i) == o)and(dec_RAW_PDU_89(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_89(i)= ", enc_RAW_PDU_89(i), "; dec_RAW_PDU_89(o)= ", dec_RAW_PDU_89(o));}
+}
+
+testcase TC_COMP_signbit_for_negative_integer_8() runs on TempComp{
+  const RAW_PDU_89	i := -2
+  const octetstring 	o := '82'O
+  if ((enc_RAW_PDU_89(i) == o)and(dec_RAW_PDU_89(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_89(i)= ", enc_RAW_PDU_89(i), "; dec_RAW_PDU_89(o)= ", dec_RAW_PDU_89(o));}
+}
+
+type integer RAW_PDU_90
+with { encode "RAW";
+       variant "FIELDLENGTH(8)" ;
+       variant "COMP( 2scompl ) "
+};
+
+external function enc_RAW_PDU_90(in RAW_PDU_90 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_90(in octetstring stream) return RAW_PDU_90 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_COMP_2scompl_for_positive_integer_8() runs on TempComp{
+  const RAW_PDU_90	i := 2
+  const octetstring 	o := '02'O
+  if ((enc_RAW_PDU_90(i) == o)and(dec_RAW_PDU_90(o) == i )) {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+testcase TC_COMP_2scompl_for_negative_integer_8() runs on TempComp{
+  const RAW_PDU_90	i := -2
+  const octetstring 	o := 'FE'O
+  if ((enc_RAW_PDU_90(i) == o)and(dec_RAW_PDU_90(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_90(i)= ", enc_RAW_PDU_90(i), "; dec_RAW_PDU_90(o)= ", dec_RAW_PDU_90(o));}
+} 
+
+//   PADDING  for integer
+
+group RAW_group1{
+
+type record RAW_PDU_91
+{ integer   int1 ,
+  integer   int2 ,
+  integer   int3 ,
+  integer   int4   }
+ with { variant (int3) "FIELDLENGTH (4)" ;
+        variant (int1) "PADDING( yes ) " ;
+        variant (int2) "FIELDLENGTH (4)" ;
+        variant (int2) "PADDING( yes ) " ;
+        variant (int3) "FIELDLENGTH (4)" ;
+        variant (int3) "PADDING( no ) " ;
+        variant (int4) "FIELDLENGTH (4)" ;
+        variant (int4) "PADDING( no ) " ; }
+} with {encode "RAW" };
+
+external function enc_RAW_PDU_91(in RAW_PDU_91 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_91(in octetstring stream) return RAW_PDU_91 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_PADDING_for_integer() runs on TempComp{
+
+  const RAW_PDU_91
+  i := {  
+    int1 :=    1  ,
+    int2 :=    2  ,
+    int3 :=    3  ,
+    int4 :=    4  }
+
+  const octetstring 	o := '010243'O
+
+  if ((enc_RAW_PDU_91(i) == o)and(dec_RAW_PDU_91(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_91(i)= ", enc_RAW_PDU_91(i), "; dec_RAW_PDU_91(o)= ", dec_RAW_PDU_91(o));}
+}
+
+//   PADDING  for bitstring
+group RAW_group2{
+
+type record RAW_PDU_92
+{ bitstring   bit1 ,
+  bitstring   bit2 ,
+  bitstring   bit3 ,
+  bitstring   bit4   }
+ with { variant (bit1) "FIELDLENGTH(4)" ;
+        variant (bit1) "PADDING( yes ) " ;
+	variant (bit2) "FIELDLENGTH(4)" ;
+        variant (bit2) "PADDING( yes ) " ;
+	variant (bit3) "FIELDLENGTH(4)" ;
+        variant (bit3) "PADDING( no ) " ;
+	variant (bit4) "FIELDLENGTH(4)" ;
+        variant (bit4) "PADDING( no ) " ;
+      };
+} with {encode "RAW"}
+
+
+external function enc_RAW_PDU_92(in RAW_PDU_92 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_92(in octetstring stream) return RAW_PDU_92 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_PADDING_for_bitstring() runs on TempComp{
+
+  const RAW_PDU_92
+  i := {  bit1 :=  '0001'B  ,
+    bit2 :=  '0010'B  ,
+    bit3 :=  '0011'B  ,
+    bit4 :=  '0100'B       }
+  const octetstring 	o := '010243'O;
+
+  if ((enc_RAW_PDU_92(i) == o)and(dec_RAW_PDU_92(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_92(i)= ", enc_RAW_PDU_92(i), "; dec_RAW_PDU_92(o)= ", dec_RAW_PDU_92(o));}
+}
+
+// PADDING  for enumerated
+
+group RAW_group3{
+
+type enumerated enumerated1
+{ zero, first, second, third, fourth, fifth }
+
+type enumerated enumerated2
+{ tenth, eleventh, twelfth, thirteenth, fourthteenth, fifteenth }
+
+type enumerated enumerated3
+{ twenty, twentyfirst, twentysecond, twentythird, twentyfourth, twentyfifth }
+
+type enumerated enumerated4
+{ thirty, thirtyfirst, thirtysecond, thirtythird, thirtyfourth, thirtyfifth }
+
+
+type record RAW_PDU_93
+{ enumerated1   enum1 ,
+  enumerated2   enum2 ,
+  enumerated3   enum3 ,
+  enumerated4   enum4   }
+ with { variant (enum1) "FIELDLENGTH(4)" ;
+        variant (enum1) "PADDING( yes ) " ;
+	variant (enum2) "FIELDLENGTH(4)" ;
+        variant (enum2) "PADDING( yes ) " ;
+	variant (enum3) "FIELDLENGTH(4)" ;
+        variant (enum3) "PADDING( no ) " ;
+	variant (enum4) "FIELDLENGTH(4)" ;
+        variant (enum4) "PADDING( no ) " ;
+      };
+} with {encode "RAW" };
+
+external function enc_RAW_PDU_93(in RAW_PDU_93 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_93(in octetstring stream) return RAW_PDU_93 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_PADDING_for_enumerated() runs on TempComp{
+  const RAW_PDU_93
+	i := {  enum1 :=  first  ,
+	        enum2 :=  twelfth  ,
+		enum3 :=  twentythird  ,
+		enum4 :=  thirtyfourth       }
+
+  const octetstring 	o := '010243'O
+ 
+  if ((enc_RAW_PDU_93(i) == o)and(dec_RAW_PDU_93(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_93(i)= ", enc_RAW_PDU_93(i), "; dec_RAW_PDU_93(o)= ", dec_RAW_PDU_93(o));}
+}
+
+//   PADDING  for hexstring
+
+group RAW_group4{
+
+type record RAW_PDU_94
+{ hexstring   hex1 ,
+  hexstring   hex2 ,
+  hexstring   hex3 ,
+  hexstring   hex4   }
+ with { encode "RAW";
+        variant (hex1) "FIELDLENGTH(1)" ;
+        variant (hex1) "PADDING( yes ) " ;
+	variant (hex2) "FIELDLENGTH(1)" ;
+        variant (hex2) "PADDING( yes ) " ;
+	variant (hex3) "FIELDLENGTH(1)" ;
+        variant (hex3) "PADDING( no ) " ;
+	variant (hex4) "FIELDLENGTH(1)" ;
+        variant (hex4) "PADDING( no ) " ;
+      };
+} with {encode "RAW" }
+
+external function enc_RAW_PDU_94(in RAW_PDU_94 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_94(in octetstring stream) return RAW_PDU_94 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_PADDING_for_hexstring() runs on TempComp{
+  const RAW_PDU_94
+	i := {  hex1 :=  '1'H  ,
+	        hex2 :=  '2'H  ,
+		hex3 :=  '3'H  ,
+		hex4 :=  '4'H       }
+
+  const octetstring 	o := '010243'O 
+ 
+  if ((enc_RAW_PDU_94(i) == o)and(dec_RAW_PDU_94(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_94(i)= ", enc_RAW_PDU_94(i), "; dec_RAW_PDU_94(o)= ", dec_RAW_PDU_94(o));}
+}
+
+//  PREPADDING(yes)  for bitstring
+
+type bitstring RAW_PDU_95 length (3)
+with {encode "RAW"; variant "PREPADDING(yes)"}
+
+external function enc_RAW_PDU_95(in RAW_PDU_95 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_95(in octetstring stream) return RAW_PDU_95 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_PREPADDING_yes_for_bitstring() runs on TempComp{
+  const RAW_PDU_95 i := '101'B
+  const octetstring 	o := '05'O
+ 
+  if ((enc_RAW_PDU_95(i) == o)and(dec_RAW_PDU_95(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_95(i)= ", enc_RAW_PDU_95(i), "; dec_RAW_PDU_95(o)= ", dec_RAW_PDU_95(o));}
+}
+
+//  PREPADDING(yes)  for hexstring
+
+type hexstring RAW_PDU_96 length (1)
+with {encode "RAW"; variant "PREPADDING(yes)"}
+
+external function enc_RAW_PDU_96(in RAW_PDU_96 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_96(in octetstring stream) return RAW_PDU_96 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_PREPADDING_yes_for_hexstring() runs on TempComp{
+  const RAW_PDU_96     i := 'F'H
+  const octetstring    o := '0F'O
+ 
+  if ((enc_RAW_PDU_96(i) == o)and(dec_RAW_PDU_96(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_96(i)= ", enc_RAW_PDU_96(i), "; dec_RAW_PDU_96(o)= ", dec_RAW_PDU_96(o));}
+}
+
+//  PREPADDING(word16)  for octetstring
+
+type octetstring otype1
+with {encode "RAW"; variant "PREPADDING(word16)"}
+type hexstring   htype1 length (3)
+type record RAW_PDU_97 { htype1 h, otype1 o}
+with {encode "RAW"; variant ""}
+
+external function enc_RAW_PDU_97(in RAW_PDU_97 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_97(in octetstring stream) return RAW_PDU_97 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_PREPADDING_word16_for_octetstring() runs on TempComp{
+  const RAW_PDU_97     i :=  {'AAA'H,'FF'O}
+  const octetstring    o :=  'AA0AFF'O
+ 
+  if ((enc_RAW_PDU_97(i) == o)and(dec_RAW_PDU_97(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_97(i)= ", enc_RAW_PDU_97(i), "; dec_RAW_PDU_97(o)= ", dec_RAW_PDU_97(o));}
+}
+
+//  PREPADDING(word16)  for record of
+
+type integer itype1
+with {encode "RAW"; variant "FIELDLENGTH(3)"}
+type record length (1) of itype1 rtype1
+with {encode "RAW"; variant "PREPADDING(word16)"}
+
+type record RAW_PDU_98 {itype1 r1, rtype1 r2}
+with {encode "RAW"; variant ""}
+
+external function enc_RAW_PDU_98(in RAW_PDU_98 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_98(in octetstring stream) return RAW_PDU_98 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_PREPADDING_word16_for_record_of() runs on TempComp{
+  const RAW_PDU_98     i :=  {4,{7}} 
+  const octetstring    o :=  '040007'O 
+ 
+  if ((enc_RAW_PDU_98(i) == o)and(dec_RAW_PDU_98(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_98(i)= ", enc_RAW_PDU_98(i), "; dec_RAW_PDU_98(o)= ", dec_RAW_PDU_98(o));}
+}
+
+//  PREPADDING(dword32)  for set of
+type bitstring BIT3 length (3)
+type record length (2) of BIT3 rtype2
+with {encode "RAW"; variant "PREPADDING(dword32)"}
+
+type record RAW_PDU_99 {BIT3 r1, rtype2 r2}
+with {encode "RAW"; variant ""}
+
+external function enc_RAW_PDU_99(in RAW_PDU_99 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_99(in octetstring stream) return RAW_PDU_99 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_PREPADDING_dword32_for_set_of() runs on TempComp{
+  const RAW_PDU_99     i :=  {'100'B,{'111'B, '101'B}}
+  const octetstring    o :=  '040000002F'O 
+ 
+  if ((enc_RAW_PDU_99(i) == o)and(dec_RAW_PDU_99(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_99(i)= ", enc_RAW_PDU_99(i), "; dec_RAW_PDU_99(o)= ", dec_RAW_PDU_99(o));}
+}
+
+// PREPADDING(dword32)  for record
+
+//type bitstring BIT3 length (3)
+
+type record stype1 {BIT3 s1, BIT3 s2}
+with {encode "RAW"; variant "PREPADDING(dword32)"}
+
+type record RAW_PDU_100 {stype1 r1, stype1 r2, stype1 r3}
+with {encode "RAW"; variant ""}
+
+external function enc_RAW_PDU_100(in RAW_PDU_100 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_100(in octetstring stream) return RAW_PDU_100 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_PREPADDING_dword32_for_record() runs on TempComp{
+  const RAW_PDU_100    i :=   {{'111'B,'111'B},{'110'B,'000'B},{'111'B,'111'B}}
+  const octetstring    o :=   '3F000000060000003F'O
+ 
+  if ((enc_RAW_PDU_100(i) == o)and(dec_RAW_PDU_100(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_100(i)= ", enc_RAW_PDU_100(i), "; dec_RAW_PDU_100(o)= ", dec_RAW_PDU_100(o));}
+}
+
+//  PREPADDING(word16)  for set
+
+//type bitstring BIT3 length (3)
+
+type set stype2 {BIT3 s1}
+with {encode "RAW"; variant "PREPADDING(word16)"}
+
+type record RAW_PDU_101 {stype2 r1, stype2 r2, stype2 r3}
+with {encode "RAW"; variant ""}
+
+external function enc_RAW_PDU_101(in RAW_PDU_101 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_101(in octetstring stream) return RAW_PDU_101 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_PREPADDING_word16_for_set() runs on TempComp{
+  const RAW_PDU_101    i :=  {{s1:='111'B},{s1:='110'B},{s1:='111'B}} 
+  const octetstring    o :=  '0700060007'O
+ 
+  if ((enc_RAW_PDU_101(i) == o)and(dec_RAW_PDU_101(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_101(i)= ", enc_RAW_PDU_101(i), "; dec_RAW_PDU_101(o)= ", dec_RAW_PDU_101(o));}
+}
+
+// PREPADDING(word16)  for union
+
+type hexstring HEX1 length (1)
+
+type union utype1 {BIT3 u1, HEX1 u2}
+with {encode "RAW"; variant "PREPADDING(word16)"}
+
+type record RAW_PDU_102 {utype1 r1, utype1 r2, utype1 r3}
+with {encode "RAW"; variant ""}
+
+external function enc_RAW_PDU_102(in RAW_PDU_102 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_102(in octetstring stream) return RAW_PDU_102 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_PREPADDING_word16_for_union() runs on TempComp{
+  const RAW_PDU_102    i :=   {{u1:='111'B},{u1:='010'B},{u1:='111'B}} 
+  const octetstring    o :=   '0700020007'O
+ 
+  if ((enc_RAW_PDU_102(i) == o)and(dec_RAW_PDU_102(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_102(i)= ", enc_RAW_PDU_102(i), "; dec_RAW_PDU_102(o)= ", dec_RAW_PDU_102(o));}
+}
+
+// PADDING_PATTERN  for record of
+
+type integer itype2
+with {encode "RAW"; variant "FIELDLENGTH(3)"}
+type record length (1) of itype2 rtype
+with {encode "RAW"; variant "PREPADDING(yes), PADDING_PATTERN('1'B)"}
+
+type record RAW_PDU_103 {itype2 r1, rtype r2}
+with {encode "RAW"; variant ""}
+
+external function enc_RAW_PDU_103(in RAW_PDU_103 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_103(in octetstring stream) return RAW_PDU_103 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_PADDING_PATTERN_for_record_of() runs on TempComp{
+  const RAW_PDU_103    i := {4,{7}};
+  const octetstring    o := 'FC07'O;
+ 
+  if ((enc_RAW_PDU_103(i) == o)and(dec_RAW_PDU_103(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_103(i)= ", enc_RAW_PDU_103(i), "; dec_RAW_PDU_103(o)= ", dec_RAW_PDU_103(o));}
+}
+
+// PADDING_PATTERN  for set of:
+type set length (2) of BIT3 rtype3
+with {encode "RAW"; variant "PREPADDING(yes), PADDING_PATTERN('10000'B)"}
+
+type record RAW_PDU_104 {BIT3 r1, rtype3 r2}
+with {encode "RAW"; variant ""}
+
+external function enc_RAW_PDU_104(in RAW_PDU_104 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_104(in octetstring stream) return RAW_PDU_104 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_PADDING_PATTERN_for_set_of() runs on TempComp{
+  const RAW_PDU_104    i :=  {'100'B,{'111'B, '101'B}}
+  const octetstring    o :=  '842F'O
+ 
+  if ((enc_RAW_PDU_104(i) == o)and(dec_RAW_PDU_104(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_104(i)= ", enc_RAW_PDU_104(i), "; dec_RAW_PDU_104(o)= ", dec_RAW_PDU_104(o));}
+}
+
+// PADDING_PATTERN  for record:
+
+type bitstring BIT9 length (9)
+
+type record stype3 {BIT9 s1, BIT9 s2}
+with {encode "RAW"; variant "PREPADDING(40), PADDING_PATTERN('100000'B)"}
+
+type record RAW_PDU_105 {stype3 r1, stype3 r2, stype3 r3}
+with {encode "RAW"; variant ""}
+
+external function enc_RAW_PDU_105(in RAW_PDU_105 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_105(in octetstring stream) return RAW_PDU_105 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_PADDING_PATTERN_for_record() runs on TempComp{
+  const RAW_PDU_105    i :=  {{'111000111'B,'111000111'B},{'111111111'B,'111111111'B},{'111000111'B,'111000111'B}};
+  const octetstring    o :=  'C78F832008FFFF832008C78F03'O ;
+ 
+  if ((enc_RAW_PDU_105(i) == o)and(dec_RAW_PDU_105(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_105(i)= ", enc_RAW_PDU_105(i), "; dec_RAW_PDU_105(o)= ", dec_RAW_PDU_105(o));}
+}
+
+//PADDING_PATTERN  for set
+type hexstring HEX3 length (3)
+type set stype4 {HEX3 s1}
+with {encode "RAW"; variant "PREPADDING(15), PADDING_PATTERN('10001'B)"}
+
+type record RAW_PDU_106 {stype4 r1, stype4 r2, stype4 r3}
+with {encode "RAW"; variant ""}
+
+external function enc_RAW_PDU_106(in RAW_PDU_106 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_106(in octetstring stream) return RAW_PDU_106 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_PADDING_PATTERN_for_set() runs on TempComp{
+  const RAW_PDU_106    i := {{s1:='FFF'H},{s1:='FFF'H},{s1:='FFF'H}}
+  const octetstring    o := 'FF9FFFCFFF03'O
+ 
+  if ((enc_RAW_PDU_106(i) == o)and(dec_RAW_PDU_106(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_106(i)= ", enc_RAW_PDU_106(i), "; dec_RAW_PDU_106(o)= ", dec_RAW_PDU_106(o));}
+}
+
+// PADDING_PATTERN  for union:
+type octetstring OCT2 length (2)
+
+type union utype2 {OCT2 u1, hexstring u2}
+with {encode "RAW"; variant "PREPADDING(256),PADDING_PATTERN('11001'B)"}
+
+type record RAW_PDU_107 {utype2 r1, utype2 r2, utype2 r3}
+with {encode "RAW"; variant ""}
+
+external function enc_RAW_PDU_107(in RAW_PDU_107 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_107(in octetstring stream) return RAW_PDU_107 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_PADDING_PATTERN_for_union() runs on TempComp{
+  const RAW_PDU_107    i :=  {{u1:='AABB'O},{u1:='CCDD'O},{u1:='EEFF'O}}
+  const octetstring    o :=  'AABB39E79C73CE39E79C73CE39E79C73CE39E79C73CE39E79C73CE39E79C73CECCDD39E79C73CE39E79C73CE39E79C73CE39E79C73CE39E79C73CE39E79C73CEEEFF'O
+ 
+  if ((enc_RAW_PDU_107(i) == o)and(dec_RAW_PDU_107(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_107(i)= ", enc_RAW_PDU_107(i), "; dec_RAW_PDU_107(o)= ", dec_RAW_PDU_107(o));}
+}
+
+// PADDALL with PADDING Attribute - record
+type bitstring BIT1 length (1)
+
+type record stype5 {BIT1 s1, BIT1 s2}
+with {encode "RAW"; variant "PADDING(yes), PADDALL"}
+
+type record RAW_PDU_108 {stype5 r1, stype5 r2, stype5 r3}
+with {encode "RAW"; variant ""}
+
+external function enc_RAW_PDU_108(in RAW_PDU_108 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_108(in octetstring stream) return RAW_PDU_108 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_PADDALL_with_PADDING_Attribute_record() runs on TempComp{
+  const RAW_PDU_108    i :=  {{'1'B,'1'B},{'1'B,'1'B},{'1'B,'1'B}};
+  const octetstring    o := '010101010101'O;
+ 
+  if ((enc_RAW_PDU_108(i) == o)and(dec_RAW_PDU_108(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_108(i)= ", enc_RAW_PDU_108(i), "; dec_RAW_PDU_108(o)= ", dec_RAW_PDU_108(o));}
+}
+
+//PADDALL with PADDING Attribute - set
+
+//type bitstring BIT3 length (3)
+
+type set stype6 {BIT3 s1, BIT3 s2}
+with {encode "RAW"; variant "PADDING(4), PADDALL"}
+
+type set RAW_PDU_109 {stype6 r1, stype6 r2}
+with {encode "RAW"; variant "PADDING(dword32), PADDALL"}
+
+external function enc_RAW_PDU_109(in RAW_PDU_109 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_109(in octetstring stream) return RAW_PDU_109 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_PADDALL_with_PADDING_Attribute_set() runs on TempComp{
+  const RAW_PDU_109    i :=  {r1:={s1:='111'B,s2:='101'B},r2:={s1:='111'B,s2:='101'B}}
+  const octetstring    o := '57570000'O;
+ 
+  if ((enc_RAW_PDU_109(i) == o)and(dec_RAW_PDU_109(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_109(i)= ", enc_RAW_PDU_109(i), "; dec_RAW_PDU_109(o)= ", dec_RAW_PDU_109(o));}
+}
+
+ // PADDALL with PREPADDING Attribute - record
+
+//type hexstring HEX1 length (1)
+
+type record stype7 {HEX1 s1, HEX1 s2}
+
+type record RAW_PDU_110 {stype7 r1, stype7 r2, stype7 r3}
+with {encode "RAW"; variant "PREPADDING(12), PADDALL"}
+
+external function enc_RAW_PDU_110(in RAW_PDU_110 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_110(in octetstring stream) return RAW_PDU_110 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_PADDALL_with_PREPADDING_Attribute_record() runs on TempComp{
+  const RAW_PDU_110    i :=  {{'A'H,'B'H},{'A'H,'B'H},{'A'H,'B'H}} 
+  const octetstring    o :=  'BAA00BBA'O
+ 
+  if ((enc_RAW_PDU_110(i) == o)and(dec_RAW_PDU_110(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_110(i)= ", enc_RAW_PDU_110(i), "; dec_RAW_PDU_110(o)= ", dec_RAW_PDU_110(o));}
+}
+
+// PADDALL with PREPADDING Attribute - set
+//type hexstring HEX1 length (1)
+
+type set stype8 {HEX1 s1, HEX1 s2, HEX1 s3}
+with {encode "RAW"; variant "PREPADDING(12), PADDALL"}
+
+type set RAW_PDU_111 {stype8 r1, stype8 r2}
+with {encode "RAW"; variant "PREPADDING(36), PADDALL, PADDING_PATTERN('1111'B)"}
+
+external function enc_RAW_PDU_111(in RAW_PDU_111 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_111(in octetstring stream) return RAW_PDU_111 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_PADDALL_with_PREPADDING_Attribute_set() runs on TempComp{
+  const RAW_PDU_111    i :=  {	r1:={s1:='A'H,s2:='B'H,s3:='C'H},
+				r2:={s1:='A'H,s2:='B'H,s3:='C'H}}
+  const octetstring    o :=  '0AB000FCAF000BC0'O
+ 
+  if ((enc_RAW_PDU_111(i) == o)and(dec_RAW_PDU_111(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_111(i)= ", enc_RAW_PDU_111(i), "; dec_RAW_PDU_111(o)= ", dec_RAW_PDU_111(o));}
+}
+
+//==== Testing PTROFFSET  Attribute ===
+
+// PTROFFSET is set to default base
+type bitstring BIT4 length (4)
+//type hexstring HEX1 length (1)
+type octetstring OCT3 length (3)
+
+group RAW_group5{
+
+type integer INT1
+with {variant "FIELDLENGTH(8)" };
+
+type record RAW_PDU_112 {
+			INT1 ptr1,
+			INT1 ptr2,
+			BIT4 field1,
+			BIT4 field2 }
+
+with { variant (ptr1) "POINTERTO(field1)";
+       variant (ptr1) "UNIT(1)";
+       variant (ptr1) "PTROFFSET(ptr1)";
+       variant (ptr2) "POINTERTO(field2)";
+       variant (ptr2) "UNIT(1)"
+       variant (ptr2) "PTROFFSET(ptr2)"}
+
+} with {encode "RAW" };
+
+external function enc_RAW_PDU_112(in RAW_PDU_112 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_112(in octetstring stream) return RAW_PDU_112 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_PTROFFSET_is_set_to_default_base() runs on TempComp{
+  const RAW_PDU_112    i :=  {16,12,'0110'B,'1001'B} 
+  const octetstring    o :=  '100C96'O
+ 
+  if ((enc_RAW_PDU_112(i) == o)and(dec_RAW_PDU_112(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_112(i)= ", enc_RAW_PDU_112(i), "; dec_RAW_PDU_112(o)= ", dec_RAW_PDU_112(o));}
+}
+
+// PTROFFSET is set to the beginning of record
+
+//type bitstring BIT3 length (3)
+//type hexstring HEX1 length (1)
+//type octetstring OCT3 length (3)
+
+group RAW_group6{
+
+//type integer INT1
+//with { encode "RAW"; variant "FIELDLENGTH(8)" };
+
+
+type record RAW_PDU_113 {
+			INT1 ptr1,
+			INT1 ptr2,
+			INT1 ptr3,
+
+			BIT3 field1,
+			HEX1 field2,
+			OCT3 field3 }
+
+with { variant (ptr1) "POINTERTO(field1)";
+       variant (ptr1) "UNIT(1)";
+       variant (ptr1) "PTROFFSET(ptr1)";
+       variant (ptr2) "POINTERTO(field2)";
+       variant (ptr2) "UNIT(1)";
+       variant (ptr2) "PTROFFSET(ptr1)";
+       variant (ptr3) "POINTERTO(field3)";
+       variant (ptr3) "UNIT(1)";
+       variant (ptr3) "PTROFFSET(ptr1)"}
+
+} with {encode "RAW" };
+
+external function enc_RAW_PDU_113(in RAW_PDU_113 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_113(in octetstring stream) return RAW_PDU_113 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_PTROFFSET_is_set_to_the_beginning_of_record() runs on TempComp{
+  const RAW_PDU_113    i :=  {24,27,31,'111'B,'A'H,'010203'O}
+  const octetstring    o :=  '181B1FD7008101'O
+ 
+  if ((enc_RAW_PDU_113(i) == o)and(dec_RAW_PDU_113(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_113(i)= ", enc_RAW_PDU_113(i), "; dec_RAW_PDU_113(o)= ", dec_RAW_PDU_113(o));}
+}
+
+// PTROFFSET is set to data field
+
+//type bitstring BIT3 length (3)
+//type hexstring HEX1 length (1)
+//type octetstring OCT3 length (3)
+
+group RAW_group7{
+
+//type integer INT1
+//with { variant "FIELDLENGTH(8)" };
+
+
+type record RAW_PDU_114 {
+			INT1 ptr1,
+			INT1 ptr2,
+			INT1 ptr3,
+
+			BIT3 field1,
+			HEX1 field2,
+			OCT3 field3 }
+
+with {  variant (ptr1) "POINTERTO(field1)";
+        variant (ptr1) "UNIT(1)";
+        variant (ptr1) "PTROFFSET(field1)";
+        variant (ptr2) "POINTERTO(field2)";
+        variant (ptr2) "UNIT(1)";
+        variant (ptr2) "PTROFFSET(field1)";
+        variant (ptr3) "POINTERTO(field3)";
+        variant (ptr3) "UNIT(1)";
+        variant (ptr3) "PTROFFSET(field1)"}
+
+} with {encode "RAW" };
+
+external function enc_RAW_PDU_114(in RAW_PDU_114 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_114(in octetstring stream) return RAW_PDU_114 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_PTROFFSET_is_set_to_data_field() runs on TempComp{
+  const RAW_PDU_114    i := {0,3,7,'111'B,'A'H,'010203'O}
+  const octetstring    o := '000307D7008101'O
+ 
+  if ((enc_RAW_PDU_114(i) == o)and(dec_RAW_PDU_114(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_114(i)= ", enc_RAW_PDU_114(i), "; dec_RAW_PDU_114(o)= ", dec_RAW_PDU_114(o));}
+}
+
+// ==== Testing HEXORDER Attribute ===
+
+//HEXORDER(low)  for hexstring
+type hexstring RAW_PDU_115
+with { encode "RAW"; variant "HEXORDER(low)"};
+
+external function enc_RAW_PDU_115(in RAW_PDU_115 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_115(in octetstring stream) return RAW_PDU_115 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_HEXORDER_low_for_hexstring() runs on TempComp{
+  const RAW_PDU_115    i := '1234567890'H
+  const octetstring    o := '2143658709'O
+
+  if ((enc_RAW_PDU_115(i) == o)and(dec_RAW_PDU_115(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_115(i)= ", enc_RAW_PDU_115(i), "; dec_RAW_PDU_115(o)= ", dec_RAW_PDU_115(o));}
+}
+
+//HEXORDER(high)  for hexstring
+
+type hexstring RAW_PDU_116
+with { encode "RAW"; variant "HEXORDER(high)"};
+
+external function enc_RAW_PDU_116(in RAW_PDU_116 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_116(in octetstring stream) return RAW_PDU_116 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_HEXORDER_high_for_hexstring() runs on TempComp{
+  const RAW_PDU_116    i := '1234567890'H
+  const octetstring    o := '1234567890'O
+
+  if ((enc_RAW_PDU_116(i) == o)and(dec_RAW_PDU_116(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_116(i)= ", enc_RAW_PDU_116(i), "; dec_RAW_PDU_116(o)= ", dec_RAW_PDU_116(o));}
+}
+
+// EXTENSION_BIT(no)  for octetstring
+
+type octetstring RAW_PDU_117n
+with { encode "RAW"; variant "EXTENSION_BIT(no)"};
+
+external function enc_RAW_PDU_117n(in RAW_PDU_117n pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_117n(in octetstring stream) return RAW_PDU_117n with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_EXTENSION_BIT_no_for_octetstring() runs on TempComp{
+  const RAW_PDU_117n    i :=  '1234567890'O
+  const octetstring    o :=  '1234567890'O
+
+  if ((enc_RAW_PDU_117n(i) == o)and(dec_RAW_PDU_117n(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_117n(i)= ", enc_RAW_PDU_117n(i), "; dec_RAW_PDU_117n(o)= ", dec_RAW_PDU_117n(o));}
+}
+
+// EXTENSION_BIT(yes)  for octetstring
+
+type octetstring RAW_PDU_117
+with { encode "RAW"; variant "EXTENSION_BIT(yes)"};
+
+external function enc_RAW_PDU_117(in RAW_PDU_117 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_117(in octetstring stream) return RAW_PDU_117 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_EXTENSION_BIT_yes_for_octetstring() runs on TempComp{
+  const RAW_PDU_117    i := '010203040500'O
+  const octetstring    o := '010203040580'O
+
+  if ((enc_RAW_PDU_117(i) == o)and(dec_RAW_PDU_117(o) == '010203040580'O )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_117(i)= ", enc_RAW_PDU_117(i), "; dec_RAW_PDU_117(o)= ", dec_RAW_PDU_117(o));}
+}
+
+// EXTENSION_BIT(reverse)  for octetstring
+
+type octetstring RAW_PDU_118
+with { encode "RAW"; variant "EXTENSION_BIT(reverse)"};
+
+external function enc_RAW_PDU_118(in RAW_PDU_118 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_118(in octetstring stream) return RAW_PDU_118 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_EXTENSION_BIT_reverse_for_octetstring() runs on TempComp{
+  const RAW_PDU_118    i := '010203040500'O
+  const octetstring    o := '818283848500'O
+
+  if ((enc_RAW_PDU_118(i) == o)and(dec_RAW_PDU_118(o) == '818283848500'O )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_118(i)= ", enc_RAW_PDU_118(i), "; dec_RAW_PDU_118(o)= ", dec_RAW_PDU_118(o));}
+}
+
+// EXTENSION_BIT(yes)  for record of octetstring
+
+type octetstring OCT1
+with { encode "RAW"; variant "FIELDLENGTH(1)"};
+
+type record of OCT1 RAW_PDU_119
+with { encode "RAW"; variant "EXTENSION_BIT(yes)"};
+
+external function enc_RAW_PDU_119(in RAW_PDU_119 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_119(in octetstring stream) return RAW_PDU_119 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_EXTENSION_BIT_yes_for_record_of_octetstring() runs on TempComp{
+  const RAW_PDU_119    i :=  {'84'O, '00'O}
+  const octetstring    o :=  '0480'O
+
+  if ((enc_RAW_PDU_119(i) == o)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_119(i)= ", enc_RAW_PDU_119(i), "; dec_RAW_PDU_119(o)= ", dec_RAW_PDU_119(o));}
+}
+
+// EXTENSION_BIT(reverse)  for record of octetstring
+//type octetstring OCT1
+//with { encode "RAW"; variant "FIELDLENGTH(1)"};
+
+type record of OCT1 RAW_PDU_119r
+with { encode "RAW"; variant "EXTENSION_BIT(reverse)"};
+
+external function enc_RAW_PDU_119r(in RAW_PDU_119r pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_119r(in octetstring stream) return RAW_PDU_119r with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_EXTENSION_BIT_reverse_for_record_of_octetstring() runs on TempComp{
+  const RAW_PDU_119r    i :=   {'80'O}
+  const octetstring    o :=   '00'O
+
+  if ((enc_RAW_PDU_119r(i) == o)and(dec_RAW_PDU_119r(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_119r(i)= ", enc_RAW_PDU_119r(i), "; dec_RAW_PDU_119r(o)= ", dec_RAW_PDU_119r(o));}
+}
+
+// EXTENSION_BIT(no)  for record of octetstring
+//type octetstring OCT1
+//with { encode "RAW"; variant "FIELDLENGTH(1)"};
+
+type record of OCT1 RAW_PDU_120
+with { encode "RAW"; variant "EXTENSION_BIT(no)"};
+
+external function enc_RAW_PDU_120(in RAW_PDU_120 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_120(in octetstring stream) return RAW_PDU_120 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_EXTENSION_BIT_no_for_record_of_octetstring() runs on TempComp{
+  const RAW_PDU_120    i :=    {'84'O, '05'O}
+  const octetstring    o :=    '8405'O
+
+  if ((enc_RAW_PDU_120(i) == o)and(dec_RAW_PDU_120(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_120(i)= ", enc_RAW_PDU_120(i), "; dec_RAW_PDU_120(o)= ", dec_RAW_PDU_120(o));}
+}
+
+// EXTENSION_BIT(yes)  for record of bitstring
+
+type bitstring BIT3_
+with { encode "RAW"; variant "FIELDLENGTH(3)"};
+
+type record of BIT3_ RAW_PDU_121
+with { encode "RAW"; variant "EXTENSION_BIT(yes)"};
+
+external function enc_RAW_PDU_121(in RAW_PDU_121 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_121(in octetstring stream) return RAW_PDU_121 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_EXTENSION_BIT_yes_for_record_of_bitstring() runs on TempComp{
+  const RAW_PDU_121    i := {'111'B, '000'B, '111'B}
+  const octetstring    o := 'C301'O
+
+  if ((enc_RAW_PDU_121(i) == o)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_121(i)= ", enc_RAW_PDU_121(i), "; dec_RAW_PDU_121(o)= ", dec_RAW_PDU_121(o));}
+}
+
+//EXTENSION_BIT(reverse)  for record of bitstring
+
+//type bitstring BIT3
+//with { encode "RAW"; variant "FIELDLENGTH(3)"};
+
+type record of BIT3_ RAW_PDU_122
+with { encode "RAW"; variant "EXTENSION_BIT(reverse)"};
+
+external function enc_RAW_PDU_122(in RAW_PDU_122 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_122(in octetstring stream) return RAW_PDU_122 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_EXTENSION_BIT_reverse_for_record_of_bitstring() runs on TempComp{
+  const RAW_PDU_122    i := {'111'B, '000'B, '111'B}
+  const octetstring    o := 'E700'O
+
+  if ((enc_RAW_PDU_122(i) == o)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_122(i)= ", enc_RAW_PDU_122(i), "; dec_RAW_PDU_122(o)= ", dec_RAW_PDU_122(o));}
+}
+
+// EXTENSION_BIT(yes)  for set of bitstring
+
+type set of BIT3 RAW_PDU_123
+with { encode "RAW"; variant "EXTENSION_BIT(yes)"};
+ 
+external function enc_RAW_PDU_123(in RAW_PDU_123 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_123(in octetstring stream) return RAW_PDU_123 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_EXTENSION_BIT_yes_for_set_of_bitstring() runs on TempComp{
+  const RAW_PDU_123    i := {'111'B, '000'B, '111'B}
+  const octetstring    o := 'C301'O
+
+  if ((enc_RAW_PDU_123(i) == o)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_123(i)= ", enc_RAW_PDU_123(i), "; dec_RAW_PDU_123(o)= ", dec_RAW_PDU_123(o));}
+}
+
+// EXTENSION_BIT(reverse)  for set of bitstring
+
+type set of BIT3 RAW_PDU_124
+with { encode "RAW"; variant "EXTENSION_BIT(reverse)"};
+ 
+external function enc_RAW_PDU_124(in RAW_PDU_124 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_124(in octetstring stream) return RAW_PDU_124 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_EXTENSION_BIT_reverse_for_set_of_bitstring() runs on TempComp{
+  const RAW_PDU_124    i := {'111'B, '000'B, '111'B}
+  const octetstring    o := 'E700'O
+
+  if ((enc_RAW_PDU_124(i) == o)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_124(i)= ", enc_RAW_PDU_124(i), "; dec_RAW_PDU_124(o)= ", dec_RAW_PDU_124(o));}
+}
+
+ 
+
+// EXTENSION_BIT(yes)  for set of hexstring
+
+type set of hexstring RAW_PDU_125
+with { encode "RAW"; variant "EXTENSION_BIT(yes)"};
+ 
+external function enc_RAW_PDU_125(in RAW_PDU_125 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_125(in octetstring stream) return RAW_PDU_125 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_EXTENSION_BIT_yes_for_set_of_hexstring() runs on TempComp{
+  const RAW_PDU_125    i := {'F'H, '0'H, 'F'H}
+  const octetstring    o := '070F'O
+log("kamu");
+  if ((enc_RAW_PDU_125(i) == o)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_125(i)= ", enc_RAW_PDU_125(i), "; dec_RAW_PDU_125(o)= ", dec_RAW_PDU_125(o));}
+  log("end");
+}
+
+// EXTENSION_BIT(reverse)  for set of hexstring
+
+type set of hexstring RAW_PDU_126
+with { encode "RAW"; variant "EXTENSION_BIT(reverse)"};
+ 
+external function enc_RAW_PDU_126(in RAW_PDU_126 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_126(in octetstring stream) return RAW_PDU_126 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_EXTENSION_BIT_reverse_for_set_of_hexstring() runs on TempComp{
+  const RAW_PDU_126    i :=  {'F'H, '00'H, 'FFF'H}
+  const octetstring    o :=  '0FF87F'O;
+
+  if ((enc_RAW_PDU_126(i) == o)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_126(i)= ", enc_RAW_PDU_126(i), "; dec_RAW_PDU_126(o)= ", dec_RAW_PDU_126(o));}
+}
+
+// Test of  record with EXTENSION_BIT 1
+
+group RAW_group8{
+
+type bitstring BIT1_
+with { variant "FIELDLENGTH(1)" } ;
+
+type bitstring BIT7_
+with { variant "FIELDLENGTH(7)" } ;
+
+type octetstring OCT3_
+with { variant "FIELDLENGTH(3)" } ;
+
+
+type record Rec1
+{ BIT7_          data ,
+  BIT1_          extensionbit   }
+ with { variant "EXTENSION_BIT (yes)"};
+
+
+type record Rec2
+{ BIT7_          data ,
+  BIT1_          extensionbit   }
+ with { variant "EXTENSION_BIT (yes)"};
+
+
+type record Rec3
+{ BIT7_          data ,
+  BIT1_          extensionbit   }
+ with { variant "EXTENSION_BIT (yes)"};
+
+
+type record Octet1
+{ BIT7_          data ,
+  BIT1_          extensionbit ,
+  Rec1          rec1 ,
+  octetstring   more_extension  optional  }
+ with { variant "EXTENSION_BIT (yes)";
+        variant (more_extension) "EXTENSION_BIT (yes)"};
+
+
+type record Octet2
+{ BIT7_          data ,
+  BIT1_          extensionbit ,
+  Rec2          rec2 ,
+  octetstring   more_extension  optional  }
+ with { variant "EXTENSION_BIT (yes)";
+        variant (more_extension) "EXTENSION_BIT (yes)"};
+
+
+type record Octet3
+{ BIT7_          data ,
+  BIT1_          extensionbit ,
+  Rec3          rec3 ,
+  octetstring   more_extension  optional  }
+ with { variant "EXTENSION_BIT (yes)";
+        variant (more_extension) "EXTENSION_BIT (yes)"};
+
+
+type record RAW_PDU_127
+{ OCT3_               octstr ,
+  integer             length1 ,
+  Octet1              oct1 ,
+  Octet2              oct2 optional ,
+  Octet3              oct3 optional }
+   with { variant  (length1) "LENGTHTO(oct1 , oct2 , oct3   )" }
+
+} with {encode "RAW"}
+
+external function enc_RAW_PDU_127(in RAW_PDU_127 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_127(in octetstring stream) return RAW_PDU_127 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_record_with_EXTENSION_BIT_1() runs on TempComp{
+  
+const RAW_PDU_127    
+  i := { octstr :=  '123456'O ,
+    length1 :=      15 ,
+    oct1 :=
+    { data :=           '0000001'B ,
+      extensionbit :=   '0'B ,
+      rec1 :=
+      { data :=           '0000001'B ,
+        extensionbit :=   '0'B   } ,
+      more_extension :=  '000080'O      } ,
+    oct2 :=
+    { data :=           '0000010'B ,
+      extensionbit :=   '0'B ,
+      rec2 :=
+      { data :=           '0000010'B ,
+        extensionbit :=   '0'B   } ,
+      more_extension :=  '000080'O      } ,
+    oct3 :=
+    { data :=           '0000011'B ,
+      extensionbit :=   '0'B ,
+      rec3 :=
+      { data :=           '0000011'B ,
+        extensionbit :=   '0'B   } ,
+      more_extension :=  '000080'O      } 	 }
+
+  const octetstring   o :='1234560F010100008002020000800303000080'O
+
+  if ((enc_RAW_PDU_127(i) == o)and(dec_RAW_PDU_127(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_127(i)= ", enc_RAW_PDU_127(i), "; dec_RAW_PDU_127(o)= ", dec_RAW_PDU_127(o));}
+}
+
+// Test of  record with EXTENSION_BIT 2
+
+//external function enc_RAW_PDU_127(in RAW_PDU_127 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+//external function dec_RAW_PDU_127(in octetstring stream) return RAW_PDU_128 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_record_with_EXTENSION_BIT_2() runs on TempComp{
+  const RAW_PDU_127    
+    i := { octstr :=  '123456'O ,
+           length1 :=      12 ,
+	   oct1 :=
+	       { data :=           '0000001'B ,
+	         extensionbit :=   '0'B ,
+		 rec1 :=
+	           { data :=           '0000001'B ,
+	             extensionbit :=   '0'B   } ,
+		 more_extension :=  '000080'O      } ,
+	   oct2 :=
+	       { data :=           '0000010'B ,
+	         extensionbit :=   '0'B ,
+		 rec2 :=
+	           { data :=           '0000010'B ,
+	             extensionbit :=   '1'B   } ,
+		 more_extension :=  omit      } ,
+	   oct3 :=
+	       { data :=           '0000011'B ,
+	         extensionbit :=   '0'B ,
+		 rec3 :=
+	           { data :=           '0000011'B ,
+	             extensionbit :=   '0'B   } ,
+		 more_extension :=  '000080'O      } 	 }
+
+
+  const octetstring o :='1234560C010100008002820303000080'O
+
+  if ((enc_RAW_PDU_127(i) == o)and(dec_RAW_PDU_127(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_127(i)= ", enc_RAW_PDU_127(i), "; dec_RAW_PDU_127(o)= ", dec_RAW_PDU_127(o));}
+}
+
+// Test of  record with EXTENSION_BIT 3
+
+testcase TC_record_with_EXTENSION_BIT_3() runs on TempComp{
+  const RAW_PDU_127    
+     i := { octstr :=  '123456'O ,
+           length1 :=      9 ,
+	   oct1 :=
+	       { data :=           '0000001'B ,
+	         extensionbit :=   '0'B ,
+		 rec1 :=
+	           { data :=           '0000001'B ,
+	             extensionbit :=   '0'B   } ,
+		 more_extension :=  '000080'O      } ,
+	   oct2 :=
+	       { data :=           '0000010'B ,
+	         extensionbit :=   '0'B ,
+		 rec2 :=
+	           { data :=           '0000010'B ,
+	             extensionbit :=   '1'B   } ,
+		 more_extension :=  omit      } ,
+	   oct3 :=
+	       { data :=           '0000011'B ,
+	         extensionbit :=   '0'B ,
+		 rec3 :=
+	           { data :=           '0000011'B ,
+	             extensionbit :=   '1'B   } ,
+		 more_extension :=  omit      } 	 }
+
+  const octetstring   o :='12345609010100008002820383'O
+
+  if ((enc_RAW_PDU_127(i) == o)and(dec_RAW_PDU_127(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_127(i)= ", enc_RAW_PDU_127(i), "; dec_RAW_PDU_127(o)= ", dec_RAW_PDU_127(o));}
+}
+
+//  Test of  record with EXTENSION_BIT 4
+
+testcase TC_record_with_EXTENSION_BIT_4() runs on TempComp{
+  const RAW_PDU_127    
+     i := { octstr :=  '123456'O ,
+           length1 :=      6 ,
+	   oct1 :=
+	       { data :=           '0000001'B ,
+	         extensionbit :=   '0'B ,
+		 rec1 :=
+	           { data :=           '0000001'B ,
+	             extensionbit :=   '1'B   } ,
+		 more_extension :=  omit     } ,
+	   oct2 :=
+	       { data :=           '0000010'B ,
+	         extensionbit :=   '0'B ,
+		 rec2 :=
+	           { data :=           '0000010'B ,
+	             extensionbit :=   '1'B   } ,
+		 more_extension :=  omit      } ,
+	   oct3 :=
+	       { data :=           '0000011'B ,
+	         extensionbit :=   '0'B ,
+		 rec3 :=
+	           { data :=           '0000011'B ,
+	             extensionbit :=   '1'B   } ,
+		 more_extension :=  omit      } 	 }
+
+  const octetstring   o :='12345606018102820383'O
+
+  if ((enc_RAW_PDU_127(i) == o)and(dec_RAW_PDU_127(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_127(i)= ", enc_RAW_PDU_127(i), "; dec_RAW_PDU_127(o)= ", dec_RAW_PDU_127(o));}
+}
+
+// Test of  record with EXTENSION_BIT 5
+
+testcase TC_record_with_EXTENSION_BIT_5() runs on TempComp{
+  const RAW_PDU_127    
+     i := { octstr :=  '123456'O ,
+           length1 :=      4 ,
+	   oct1 :=
+	       { data :=           '0000001'B ,
+	         extensionbit :=   '0'B ,
+		 rec1 :=
+	           { data :=           '0000001'B ,
+	             extensionbit :=   '1'B   } ,
+		 more_extension :=  omit     } ,
+	   oct2 :=
+	       { data :=           '0000010'B ,
+	         extensionbit :=   '0'B ,
+		 rec2 :=
+	           { data :=           '0000010'B ,
+	             extensionbit :=   '1'B   } ,
+		 more_extension :=  omit      } ,
+	   oct3 :=  omit     	 }
+
+  const octetstring   o :='1234560401810282'O
+
+
+  if ((enc_RAW_PDU_127(i) == o)and(dec_RAW_PDU_127(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_127(i)= ", enc_RAW_PDU_127(i), "; dec_RAW_PDU_127(o)= ", dec_RAW_PDU_127(o));}
+}
+
+// Test of  record with EXTENSION_BIT 6
+testcase TC_record_with_EXTENSION_BIT_6() runs on TempComp{
+  const RAW_PDU_127    
+    i := { octstr :=  '123456'O ,
+           length1 :=      2 ,
+	   oct1 :=
+	       { data :=           '0000001'B ,
+	         extensionbit :=   '0'B ,
+		 rec1 :=
+	           { data :=           '0000001'B ,
+	             extensionbit :=   '1'B   } ,
+		 more_extension :=  omit     } ,
+	   oct2 :=  omit ,
+	   oct3 :=  omit     	 }
+
+  const octetstring   o :='123456020181'O
+
+  if ((enc_RAW_PDU_127(i) == o)and(dec_RAW_PDU_127(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_127(i)= ", enc_RAW_PDU_127(i), "; dec_RAW_PDU_127(o)= ", dec_RAW_PDU_127(o));}
+}
+
+// Test of  record with EXTENSION_BIT 7
+testcase TC_record_with_EXTENSION_BIT_7() runs on TempComp{
+  const RAW_PDU_127    
+    i := { octstr :=  '123456'O ,
+           length1 :=      15 ,
+	   oct1 :=
+	       { data :=           '0000001'B ,
+	         extensionbit :=   '0'B ,
+		 rec1 :=
+	           { data :=           '0000001'B ,
+	             extensionbit :=   '0'B   } ,
+		 more_extension :=  '000080'O      } ,
+	   oct2 :=
+	       { data :=           '0000010'B ,
+	         extensionbit :=   '0'B ,
+		 rec2 :=
+	           { data :=           '0000010'B ,
+	             extensionbit :=   '0'B   } ,
+		 more_extension :=  '000080'O      } ,
+	   oct3 :=
+	       { data :=           '0000011'B ,
+	         extensionbit :=   '0'B ,
+		 rec3 :=
+	           { data :=           '0000011'B ,
+	             extensionbit :=   '0'B   } ,
+		 more_extension :=  '000080'O      } 	 }
+
+  const octetstring   o :='1234560F010100008002020000800303000080'O
+
+  if ((enc_RAW_PDU_127(i) == o)and(dec_RAW_PDU_127(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_127(i)= ", enc_RAW_PDU_127(i), "; dec_RAW_PDU_127(o)= ", dec_RAW_PDU_127(o));}
+}
+
+// Test of  record with EXTENSION_BIT 8
+testcase TC_record_with_EXTENSION_BIT_8() runs on TempComp{
+  const RAW_PDU_127    
+     i := { octstr :=  '123456'O ,
+           length1 :=      5 ,
+	   oct1 :=
+	       { data :=           '0000001'B ,
+	         extensionbit :=   '0'B ,
+		 rec1 :=
+	           { data :=           '0000001'B ,
+	             extensionbit :=   '0'B   } ,
+		 more_extension :=  '000080'O      } ,
+	   oct2 :=  omit ,
+	   oct3 :=  omit      }
+
+  const octetstring   o :='123456050101000080'O
+
+  if ((enc_RAW_PDU_127(i) == o)and(dec_RAW_PDU_127(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_127(i)= ", enc_RAW_PDU_127(i), "; dec_RAW_PDU_127(o)= ", dec_RAW_PDU_127(o));}
+}
+
+// Test of  record with EXTENSION_BIT 9
+testcase TC_record_with_EXTENSION_BIT_9() runs on TempComp{
+  const RAW_PDU_127    
+     i := { octstr :=  '123456'O ,
+           length1 :=      10 ,
+	   oct1 :=
+	       { data :=           '0000001'B ,
+	         extensionbit :=   '0'B ,
+		 rec1 :=
+	           { data :=           '0000001'B ,
+	             extensionbit :=   '0'B   } ,
+		 more_extension :=  '000080'O      } ,
+	   oct2 :=
+	       { data :=           '0000010'B ,
+	         extensionbit :=   '0'B ,
+		 rec2 :=
+	           { data :=           '0000010'B ,
+	             extensionbit :=   '0'B   } ,
+		 more_extension :=  '000080'O      } ,
+	   oct3 :=  omit      }
+
+  const octetstring   o :='1234560A01010000800202000080'O
+  
+  if ((enc_RAW_PDU_127(i) == o)and(dec_RAW_PDU_127(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_127(i)= ", enc_RAW_PDU_127(i), "; dec_RAW_PDU_127(o)= ", dec_RAW_PDU_127(o));}
+}
+
+// EXTENSION_BIT_GROUP(no)
+
+group RAW_group9{
+
+//type bitstring BIT1 length(1);
+//type bitstring BIT7 length(7);
+
+type record RAW_PDU_128 {
+	BIT7_	field1,
+	BIT1_	ext1,
+	BIT7_	field2,
+	BIT1_	ext2,
+	BIT7_	field3,
+	BIT1_	ext3
+}with { variant "EXTENSION_BIT_GROUP(no, field1, ext3)"};
+
+}with {encode "RAW"}
+
+external function enc_RAW_PDU_128(in RAW_PDU_128 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_128(in octetstring stream) return RAW_PDU_128 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_EXTENSION_BIT_GROUP_no() runs on TempComp{
+  const RAW_PDU_128    
+    i := {'1111111'B, '0'B, '1110000'B, '0'B,'0001111'B,'0'B}
+  const octetstring o := '7F700F'O
+  
+  if ((enc_RAW_PDU_128(i) == o)and(dec_RAW_PDU_128(o) == i )) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_128(i)= ", enc_RAW_PDU_128(i), "; dec_RAW_PDU_128(o)= ", dec_RAW_PDU_128(o));}
+}
+
+// EXTENSION_BIT_GROUP(yes)
+
+
+group RAW_group10{
+
+//type bitstring BIT1 length(1);
+//type bitstring BIT7 length(7);
+
+type record RAW_PDU_129 {
+	BIT7_	field1,
+	BIT1_	ext1,
+	BIT7_	field2,
+	BIT1_	ext2,
+	BIT7_	field3,
+	BIT1_	ext3
+}with { variant "EXTENSION_BIT_GROUP(yes, field1, ext2)"};
+
+}with {encode "RAW"}
+
+external function enc_RAW_PDU_129(in RAW_PDU_129 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_129(in octetstring stream) return RAW_PDU_129 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_EXTENSION_BIT_GROUP_yes() runs on TempComp{
+  const RAW_PDU_129 i := {'1111111'B, '0'B, '1110000'B, '0'B,'0001111'B,'0'B};
+  const octetstring o := '7FF00F'O;
+  
+  if ((enc_RAW_PDU_129(i) == o)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_129(i)= ", enc_RAW_PDU_129(i), "; dec_RAW_PDU_129(o)= ", dec_RAW_PDU_129(o));}
+}
+
+// EXTENSION_BIT_GROUP(yes) - two groups
+
+group RAW_group11{
+
+//type bitstring BIT1 length(1);
+//type bitstring BIT7 length(7);
+
+type record RAW_PDU_130 {
+	BIT7_	field1,
+	BIT1_	ext1,
+	BIT7_	field2,
+	BIT1_	ext2,
+	BIT7_	field3,
+	BIT1_	ext3,
+	BIT7_	field4,
+	BIT1_	ext4
+
+}with { variant "EXTENSION_BIT_GROUP(yes, field1, ext2)"
+        variant "EXTENSION_BIT_GROUP(yes, field3, ext4)"};
+
+}with{encode "RAW"}
+
+external function enc_RAW_PDU_130(in RAW_PDU_130 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_130(in octetstring stream) return RAW_PDU_130 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_EXTENSION_BIT_GROUP_yes_2_groups() runs on TempComp{
+  const RAW_PDU_130 i :=  {'1111111'B, '0'B, '1110000'B, '0'B,'0001111'B,'0'B, '1111111'B, '0'B}
+  const octetstring o := '7FF00FFF'O
+  
+  if ((enc_RAW_PDU_130(i) == o)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_130(i)= ", enc_RAW_PDU_130(i), "; dec_RAW_PDU_130(o)= ", dec_RAW_PDU_130(o));}
+}
+
+// EXTENSION_BIT_GROUP(yes, reverse) - two groups
+
+group RAW_group12{
+
+//type bitstring BIT1 length(1);
+//type bitstring BIT7 length(7);
+
+type record RAW_PDU_131 {
+	BIT7_	field1,
+	BIT1_	ext1,
+	BIT7_	field2,
+	BIT1_	ext2,
+	BIT7_	field3,
+	BIT1_	ext3,
+	BIT7_	field4,
+	BIT1_	ext4
+
+}with { variant "EXTENSION_BIT_GROUP(yes, field1, ext2)"
+        variant "EXTENSION_BIT_GROUP(reverse, field3, ext4)"};
+
+}with{encode "RAW"}
+
+external function enc_RAW_PDU_131(in RAW_PDU_131 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_131(in octetstring stream) return RAW_PDU_131 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_EXTENSION_BIT_GROUP_yes_reverse_2_groups() runs on TempComp{
+  const RAW_PDU_131 i :=  {'1111111'B, '0'B, '1110000'B, '0'B,'0001111'B,'0'B, '1111111'B, '0'B}
+  const octetstring o := '7FF08F7F'O 
+  
+  if ((enc_RAW_PDU_131(i) == o)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_131(i)= ", enc_RAW_PDU_131(i), "; dec_RAW_PDU_131(o)= ", dec_RAW_PDU_131(o));}
+}
+
+//==== Testing ALIGN Attribute ====
+
+//ALIGN(right) for octetstring
+
+type octetstring RAW_PDU_132
+with { encode "RAW";
+       variant "FIELDLENGTH(4)";
+       variant "ALIGN (right)"
+     };
+external function enc_RAW_PDU_132(in RAW_PDU_132 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_132(in octetstring stream) return RAW_PDU_132 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_ALIGN_right_for_octetstring() runs on TempComp{
+  const RAW_PDU_132 i := '123456'O
+  const octetstring o := '00123456'O 
+  
+  if ((enc_RAW_PDU_132(i) == o)and((dec_RAW_PDU_132(o) == '00'O & i))) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_132(i)= ", enc_RAW_PDU_132(i), "; dec_RAW_PDU_132(o)= ", dec_RAW_PDU_132(o));}
+}
+
+//ALIGN(left) for octetstring
+
+type octetstring RAW_PDU_133
+with { encode "RAW";
+       variant "FIELDLENGTH(4)";
+       variant "ALIGN (left)"
+     };
+external function enc_RAW_PDU_133(in RAW_PDU_133 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_133(in octetstring stream) return RAW_PDU_133 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_ALIGN_left_for_octetstring() runs on TempComp{
+  const RAW_PDU_133 i := '123456'O
+  const octetstring o := '12345600'O 
+  
+  if ((enc_RAW_PDU_133(i) == o)and((dec_RAW_PDU_133(o) == i & '00'O))) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_133(i)= ", enc_RAW_PDU_133(i), "; dec_RAW_PDU_133(o)= ", dec_RAW_PDU_133(o));}
+}
+
+// ALIGN(right) for bitstring
+
+type bitstring RAW_PDU_134
+with { encode "RAW";
+       variant "FIELDLENGTH(16)";
+       variant "ALIGN (right)"
+     };
+
+external function enc_RAW_PDU_134(in RAW_PDU_134 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_134(in octetstring stream) return RAW_PDU_134 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_ALIGN_right_for_bitstring() runs on TempComp{
+  const RAW_PDU_134 i := '11111111'B
+  const octetstring o := 'FF00'O
+  
+  if ((enc_RAW_PDU_134(i) == o)and((dec_RAW_PDU_134(o) == '00000000'B & i ))) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_134(i)= ", enc_RAW_PDU_134(i), "; dec_RAW_PDU_134(o)= ", dec_RAW_PDU_134(o));}
+}
+
+// ALIGN(left) for bitstring
+
+type bitstring RAW_PDU_135
+with { encode "RAW";
+       variant "FIELDLENGTH(16)";
+       variant "ALIGN (left)"
+     };
+
+external function enc_RAW_PDU_135(in RAW_PDU_135 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_135(in octetstring stream) return RAW_PDU_135 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_ALIGN_left_for_bitstring() runs on TempComp{
+  const RAW_PDU_135 i := '11111111'B
+  const octetstring o := '00FF'O
+
+  if ((enc_RAW_PDU_135(i) == o)and((dec_RAW_PDU_135(o) == i & '00000000'B ))) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_135(i)= ", enc_RAW_PDU_135(i), "; dec_RAW_PDU_135(o)= ", dec_RAW_PDU_135(o));}
+}
+
+//======= Testing Compound types ======
+
+// Test of  record with integer and octetstring
+
+group RAW_group13{
+
+type record RAW_PDU_136
+{  integer       int ,
+   octetstring   octstr }
+with { variant (int) "FIELDLENGTH(8)" ;
+       variant (octstr) "FIELDLENGTH(2)" } ;
+
+}with{encode "RAW"}
+
+external function enc_RAW_PDU_136(in RAW_PDU_136 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_136(in octetstring stream) return RAW_PDU_136 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_record_with_integer_and_octetstring() runs on TempComp{
+  const RAW_PDU_136 
+    i := { int :=              20 ,
+    octstr :=      '1234'O   }
+
+  const octetstring 	o := '141234'O
+
+  if ((enc_RAW_PDU_136(i) == o)and((dec_RAW_PDU_136(o) == i))) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_136(i)= ", enc_RAW_PDU_136(i), "; dec_RAW_PDU_136(o)= ", dec_RAW_PDU_136(o));}
+}
+
+// Test of  record with default values in field
+group RAW_group14{
+
+type record RAW_PDU_137
+{  integer       int ,
+   octetstring   octstr }
+with { variant (int) "" ;
+       variant (octstr) "FIELDLENGTH(2)" } ;
+
+}with{encode "RAW"}
+
+external function enc_RAW_PDU_137(in RAW_PDU_137 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_137(in octetstring stream) return RAW_PDU_137 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_record_with_default_values_in_field() runs on TempComp{
+  const RAW_PDU_137 
+    i := { int :=              20 ,
+           octstr :=      '1234'O   }
+
+  const octetstring 	o := '141234'O
+
+  if ((enc_RAW_PDU_137(i) == o)and((dec_RAW_PDU_137(o) == i))) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_137(i)= ", enc_RAW_PDU_137(i), "; dec_RAW_PDU_137(o)= ", dec_RAW_PDU_137(o));}
+}
+
+// Test of  record with bitstring
+
+group RAW_group15{
+
+type record RAW_PDU_138
+{  integer       int ,
+   octetstring   octstr ,
+   bitstring     bit6 ,
+   bitstring     bit2 }
+
+with { variant (int) "" ;
+       variant (octstr) "FIELDLENGTH(2)" ;
+       variant (bit6) "FIELDLENGTH(6)" ;
+       variant (bit2) "FIELDLENGTH(2)"
+     } ;
+
+}with{encode "RAW"}
+
+external function enc_RAW_PDU_138(in RAW_PDU_138 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_138(in octetstring stream) return RAW_PDU_138 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_record_with_bitstring() runs on TempComp{
+  const RAW_PDU_138 
+    i := { int :=              20 ,
+      octstr :=      '1234'O ,
+      bit6 :=      '111111'B ,
+      bit2 :=          '00'B
+    }
+
+  const octetstring 	o := '1412343F'O
+
+  if ((enc_RAW_PDU_138(i) == o)and((dec_RAW_PDU_138(o) == i))) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_138(i)= ", enc_RAW_PDU_138(i), "; dec_RAW_PDU_138(o)= ", dec_RAW_PDU_138(o));}
+}
+
+//Test of  record with enumerated and fieldlength calculation
+
+group RAW_group16{
+
+type enumerated enum
+{ zero, first, second, third, fourth, fifth, sixth, seventh, eighth, nineth,
+tenth }
+with { variant ""};
+
+type record RAW_PDU_139
+ { integer       int ,
+   octetstring   octstr ,
+   bitstring     bit6 ,
+   bitstring     bit2 ,
+   enum          enum1 ,
+   integer       length1 ,
+   octetstring   octN    }
+
+with {variant (int) "" ;
+      variant (octstr) "FIELDLENGTH(2)" ;
+      variant (bit6) "FIELDLENGTH(6)" ;
+      variant (bit2) "FIELDLENGTH(2)" ;
+      variant (enum1) "FIELDLENGTH(8)" ;
+      variant (length1) "LENGTHTO(octN)" ;
+      variant (octN) ""
+     } ;
+
+}with{encode "RAW"}
+
+external function enc_RAW_PDU_139(in RAW_PDU_139 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_139(in octetstring stream) return RAW_PDU_139 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_record_with_enumerated_and_fieldlength_calculation() runs on TempComp{
+  const RAW_PDU_139 
+     i := { int :=              20 ,
+           octstr :=      '1234'O ,
+	   bit6 :=      '111111'B ,
+	   bit2 :=          '00'B ,
+	   enum1 :=         tenth ,
+           length1:=            3 ,
+           octN :=      '123456'O
+
+         }
+
+
+
+const octetstring 	o := '1412343F0A03123456'O
+
+
+  if ((enc_RAW_PDU_139(i) == o)and((dec_RAW_PDU_139(o) == i))) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_139(i)= ", enc_RAW_PDU_139(i), "; dec_RAW_PDU_139(o)= ", dec_RAW_PDU_139(o));}
+}
+
+// Test of record called from record
+
+group RAW_encode1{
+
+//type enumerated Enum2
+//{ zero, first, second, third, fourth, fifth, sixth, seventh, eighth, nineth,
+//tenth }
+//with { variant ""} ;
+
+
+type record record1
+ { bitstring       bit1 ,
+   bitstring       bit3 ,
+   bitstring       bit4 ,
+   integer         int  ,
+   integer         length1 ,
+   octetstring     octN  }
+with { variant (bit1) "FIELDLENGTH(1)" ;
+       variant (bit3) "FIELDLENGTH(3)" ;
+       variant (bit4) "FIELDLENGTH(4)" ;
+       variant (int) "FIELDLENGTH(16)" ;
+       variant (length1) "LENGTHTO(octN)" ;
+       variant (octN) ""
+     }
+
+
+type record RAW_PDU_140
+ { integer       int ,
+   octetstring   octstr ,
+   bitstring     bit6 ,
+   bitstring     bit2 ,
+   enum          enum1 ,
+   integer       length1 ,
+   octetstring   octN ,
+   integer       length2 ,
+   record1       rec1    }
+
+with { variant (int) "" ;
+       variant (octstr) "FIELDLENGTH(2)" ;
+       variant (bit6) "FIELDLENGTH(6)" ;
+       variant (bit2) "FIELDLENGTH(2)" ;
+       variant (enum1) "FIELDLENGTH(8)" ;
+       variant (length1) "LENGTHTO(octN)" ;
+       variant (octN) ""  ;
+       variant (length2) "LENGTHTO(rec1)" ;
+       variant (rec1) ""
+     } ;
+
+}with{encode "RAW"}
+
+external function enc_RAW_PDU_140(in RAW_PDU_140 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_140(in octetstring stream) return RAW_PDU_140 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_record_called_from_record() runs on TempComp{
+  const RAW_PDU_140 
+     i := { int :=              20 ,
+           octstr :=      '1234'O ,
+	   bit6 :=      '111111'B ,
+	   bit2 :=          '00'B ,
+	   enum1 :=         tenth ,
+           length1:=            3 ,
+           octN :=      '123456'O  ,
+           length2:=            7 ,
+	   rec1 :=    {   bit1 :=      '1'B ,
+	                  bit3 :=    '000'B ,
+			  bit4 :=   '1111'B ,
+			  int :=       4660 ,
+			  length1 :=      3 ,
+			  octN :=  'FFFFFF'O     }
+
+         }
+
+  const octetstring 	o := '1412343F0A0312345607F1341203FFFFFF'O
+
+  if ((enc_RAW_PDU_140(i) == o)and((dec_RAW_PDU_140(o) == i))) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_140(i)= ", enc_RAW_PDU_140(i), "; dec_RAW_PDU_140(o)= ", dec_RAW_PDU_140(o));}
+}
+
+//  Test of union called from record with CROSSTAG
+
+group RAW_group17{
+
+//type enumerated enum
+//{ zero, first, second, third, fourth, fifth, sixth, seventh, eighth, nineth,
+//tenth }
+//with { variant ""} ;
+
+
+//type record record1
+// { bitstring       bit1 ,
+//   bitstring       bit3 ,
+//   bitstring       bit4 ,
+//   integer         int  ,
+//   integer         length1 ,
+//   octetstring     octN  }
+//with { variant (bit1) "FIELDLENGTH(1)" ;
+//       variant (bit3) "FIELDLENGTH(3)" ;
+//       variant (bit4) "FIELDLENGTH(4)" ;
+//       variant (int) "FIELDLENGTH(16)" ;
+//       variant (length1) "LENGTHTO(octN)" ;
+//       variant (octN) ""
+//     }
+
+type union optionalpart
+{ integer  one ,
+ integer  two ,
+ integer  three ,
+ integer  four ,
+ integer  five }
+with { variant (one) "" ;
+       variant (two) "" ;
+       variant (three) "" ;
+       variant (four) "" ;
+       variant (five) "" ;
+     }
+
+type record RAW_PDU_141
+ { integer       int ,
+   octetstring   octstr ,
+   bitstring     bit6 ,
+   bitstring     bit2 ,
+   enum          enum1 ,
+   integer       length1 ,
+   octetstring   octN ,
+   integer       length2 ,
+   record1       rec1 ,
+   integer       id ,
+   integer       opt_part_ptr ,
+   optionalpart  opt_part ,
+   octetstring   eop        }
+
+with { variant (int) "" ;
+       variant (octstr) "FIELDLENGTH(2)" ;
+       variant (bit6) "FIELDLENGTH(6)" ;
+       variant (bit2) "FIELDLENGTH(2)" ;
+       variant (enum1) "FIELDLENGTH(8)" ;
+       variant (length1) "LENGTHTO(octN)" ;
+       variant (octN) ""  ;
+       variant (length2) "LENGTHTO(rec1)" ;
+       variant (rec1) "" ;
+       variant (id) "" ;
+       variant (opt_part_ptr) "POINTERTO ( opt_part)";
+       variant (opt_part) "CROSSTAG  (
+                                        one ,    id = 1 ;
+                                        two ,    id = 2 ;
+                                        three ,  id = 3 ;
+                                        four ,   id = 4 ;
+                                        five ,   id = 5       ) ";
+
+       variant (eop) "FIELDLENGTH(1)" ;
+     } ;
+
+}with{encode "RAW"}
+
+external function enc_RAW_PDU_141(in RAW_PDU_141 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_141(in octetstring stream) return RAW_PDU_141 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_union_called_from_record_with_CROSSTAG() runs on TempComp{
+  const RAW_PDU_141 
+     i := { int :=              20 ,
+           octstr :=      '1234'O ,
+	   bit6 :=      '111111'B ,
+	   bit2 :=          '00'B ,
+	   enum1 :=         tenth ,
+           length1:=            3 ,
+           octN :=      '123456'O ,
+           length2:=            7 ,
+	   rec1 :=    {   bit1 :=      '1'B ,
+	                  bit3 :=    '000'B ,
+			  bit4 :=   '1111'B ,
+			  int :=       4660 ,
+			  length1 :=      3 ,
+			  octN :=  'FFFFFF'O     } ,
+	   id :=                5 ,
+           opt_part_ptr:=            1 ,
+           opt_part :=  { five :=  5  } ,
+	   eop :=             '00'O
+         }
+
+  const octetstring 	o := '1412343F0A0312345607F1341203FFFFFF05010500'O
+  
+	if ((enc_RAW_PDU_141(i) == o)and((dec_RAW_PDU_141(o) == i))) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_141(i)= ", enc_RAW_PDU_141(i), "; dec_RAW_PDU_141(o)= ", dec_RAW_PDU_141(o));}
+}
+
+// Test of union called from record with CROSSTAG, OTHERWISE
+
+group RAW_group18{
+
+//type enumerated enum
+//{ zero, first, second, third, fourth, fifth, sixth, seventh, eighth, nineth,
+//tenth }
+//with { variant ""} ;
+
+
+//type record record1
+// { bitstring       bit1 ,
+//   bitstring       bit3 ,
+//   bitstring       bit4 ,
+//   integer         int  ,
+//   integer         length1 ,
+//   octetstring     octN  }
+//with { variant (bit1) "FIELDLENGTH(1)" ;
+//       variant (bit3) "FIELDLENGTH(3)" ;
+//       variant (bit4) "FIELDLENGTH(4)" ;
+//       variant (int) "FIELDLENGTH(16)" ;
+//       variant (length1) "LENGTHTO(octN)" ;
+//       variant (octN) ""
+//     }
+
+
+
+//type union optionalpart
+//{ integer  one ,
+// integer  two ,
+// integer  three ,
+// integer  four ,
+// integer  five }
+//with { variant (one) "" ;
+//       variant (two) "" ;
+//       variant (three) "" ;
+//       variant (four) "" ;
+//       variant (five) "" ;
+//     }
+
+
+
+
+
+type record RAW_PDU_142
+ { integer       int ,
+   octetstring   octstr ,
+   bitstring     bit6 ,
+   bitstring     bit2 ,
+   enum          enum1 ,
+   integer       length1 ,
+   octetstring   octN ,
+   integer       length2 ,
+   record1       rec1 ,
+   integer       id ,
+   integer       opt_part_ptr ,
+   optionalpart  opt_part ,
+   octetstring   eop        }
+
+with { variant (int) "" ;
+       variant (octstr) "FIELDLENGTH(2)" ;
+       variant (bit6) "FIELDLENGTH(6)" ;
+       variant (bit2) "FIELDLENGTH(2)" ;
+       variant (enum1) "FIELDLENGTH(8)" ;
+       variant (length1) "LENGTHTO(octN)" ;
+       variant (octN) ""  ;
+       variant (length2) "LENGTHTO(rec1)" ;
+       variant (rec1) "" ;
+       variant (id) "" ;
+       variant (opt_part_ptr) "POINTERTO ( opt_part)";
+       variant (opt_part) "CROSSTAG  (
+                                        one ,    id = 1 ;
+                                        two ,    id = 2 ;
+                                        three ,  id = 3 ;
+                                        four ,   id = 4 ;
+                                        five ,   OTHERWISE      ) ";
+
+       variant (eop) "FIELDLENGTH(1)" ;
+     } ;
+
+}with{encode "RAW"}
+
+external function enc_RAW_PDU_142(in RAW_PDU_142 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_142(in octetstring stream) return RAW_PDU_142 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_union_called_from_record_with_CROSSTAG_OTHERWISE() runs on TempComp{
+  const RAW_PDU_142 
+      i := { int :=              20 ,
+           octstr :=      '1234'O ,
+	   bit6 :=      '111111'B ,
+	   bit2 :=          '00'B ,
+	   enum1 :=         tenth ,
+           length1:=            3 ,
+           octN :=      '123456'O ,
+           length2:=            7 ,
+	   rec1 :=    {   bit1 :=      '1'B ,
+	                  bit3 :=    '000'B ,
+			  bit4 :=   '1111'B ,
+			  int :=       4660 ,
+			  length1 :=      3 ,
+			  octN :=  'FFFFFF'O     } ,
+	   id :=                5 ,
+           opt_part_ptr:=            1 ,
+           opt_part :=  { five :=  5  } ,
+	   eop :=             '00'O
+         }
+
+  const octetstring 	o := '1412343F0A0312345607F1341203FFFFFF05010500'O
+
+  if ((enc_RAW_PDU_142(i) == o)and((dec_RAW_PDU_142(o) == i))) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_142(i)= ", enc_RAW_PDU_142(i), "; dec_RAW_PDU_142(o)= ", dec_RAW_PDU_142(o));}
+}
+
+
+// Test of record without specifying the default attributes for fields
+
+group RAW_group19 {
+
+//type enumerated enum
+//{ zero, first, second, third, fourth, fifth, sixth, seventh, eighth, nineth,
+//tenth }
+//with { variant ""} ;
+
+
+type record record1_2
+ { bitstring       bit1 ,
+   bitstring       bit3 ,
+   bitstring       bit4 ,
+   integer         int  ,
+   integer         length1 ,
+   octetstring     octN  }
+with { variant (bit1) "FIELDLENGTH(1)" ;
+       variant (bit3) "FIELDLENGTH(3)" ;
+       variant (bit4) "FIELDLENGTH(4)" ;
+       variant (int) "FIELDLENGTH(16)" ;
+       variant (length1) "LENGTHTO(octN)"
+     }
+
+
+
+type union optionalpart1
+{ integer  one ,
+ integer  two ,
+ integer  three ,
+ integer  four ,
+ integer  five }
+with { variant "" }
+
+
+type record RAW_PDU_143
+ { integer       int ,
+   octetstring   octstr ,
+   bitstring     bit6 ,
+   bitstring     bit2 ,
+   enum          enum1 ,
+   integer       length1 ,
+   octetstring   octN ,
+   integer       length2 ,
+   record1_2       rec1 ,
+   integer       id ,
+   integer       opt_part_ptr ,
+   optionalpart1  opt_part ,
+   octetstring   eop        }
+
+with { variant (octstr) "FIELDLENGTH(2)" ;
+       variant (bit6) "FIELDLENGTH(6)" ;
+       variant (bit2) "FIELDLENGTH(2)" ;
+       variant (enum1) "FIELDLENGTH(8)" ;
+       variant (length1) "LENGTHTO(octN)" ;
+       variant (length2) "LENGTHTO(rec1)" ;
+       variant (opt_part_ptr) "POINTERTO ( opt_part)";
+       variant (opt_part) "CROSSTAG  (
+                                        one ,    id = 1 ;
+                                        two ,    id = 2 ;
+                                        three ,  id = 3 ;
+                                        four ,   id = 4 ;
+                                        five ,   id = 5      ) ";
+
+       variant (eop) "FIELDLENGTH(1)" ;
+     } ;
+
+}with{encode "RAW"}
+
+external function enc_RAW_PDU_143(in RAW_PDU_143 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_143(in octetstring stream) return RAW_PDU_143 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_record_without_specifying_the_default_attributes_for_fields() runs on TempComp{
+
+  const RAW_PDU_143
+    i := { int :=              20 ,
+           octstr :=      '1234'O ,
+	   bit6 :=      '111111'B ,
+	   bit2 :=          '00'B ,
+	   enum1 :=         tenth ,
+           length1:=            3 ,
+           octN :=      '123456'O ,
+           length2:=            7 ,
+	   rec1 :=    {   bit1 :=      '1'B ,
+	                  bit3 :=    '000'B ,
+			  bit4 :=   '1111'B ,
+			  int :=       4660 ,
+			  length1 :=      3 ,
+			  octN :=  'FFFFFF'O     } ,
+	   id :=                5 ,
+           opt_part_ptr:=            1 ,
+           opt_part :=  { five :=  5  } ,
+	   eop :=             '00'O
+         }
+
+
+
+	const octetstring 	o := '1412343F0A0312345607F1341203FFFFFF05010500'O
+
+	if ((enc_RAW_PDU_143(i) == o)and(dec_RAW_PDU_143(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_143(i)= ", enc_RAW_PDU_143(i), "; dec_RAW_PDU_143(o)= ", dec_RAW_PDU_143(o));}
+
+}
+
+
+// Test of record of called from record
+
+
+group RAW_group20{
+
+type record record2
+ { octetstring       oct1 ,
+   integer         length2 ,
+   octetstring       octN  }
+with { variant (oct1) "FIELDLENGTH(1)";
+       variant (length2) "LENGTHTO(octN)"
+     }
+
+type record of record2 Rec2list
+with { variant "" };
+
+type record RAW_PDU_144
+ { integer       length1 ,
+   Rec2list      rec2list   }
+
+with { variant (length1) "LENGTHTO(rec2list)"   } ;
+
+}with{encode "RAW"}
+
+external function enc_RAW_PDU_144(in RAW_PDU_144 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_144(in octetstring stream) return RAW_PDU_144 with { extension "prototype(convert) decode(RAW)" }
+
+
+testcase TC_record_of_called_from_record() runs on TempComp{
+  const RAW_PDU_144
+    i := { length1:=            8 ,
+	   rec2list :=  {  {  oct1 :=     '12'O ,
+		  	      length2 :=      2 ,
+			      octN :=   '3456'O     } ,
+                           {  oct1 :=     '12'O ,
+		  	      length2 :=      2 ,
+			      octN :=   '7890'O     }    }
+         }
+
+  const octetstring 	o := '081202345612027890'O
+ 
+
+  if ((enc_RAW_PDU_144(i) == o)and(dec_RAW_PDU_144(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_144(i)= ", enc_RAW_PDU_144(i), "; dec_RAW_PDU_144(o)= ", dec_RAW_PDU_144(o));}
+}
+
+
+// Test of set with TAG
+
+group RAW_group21{
+
+type record intrec
+ { integer  tag ,
+   integer  intfield }
+with { variant ""} ;
+
+
+type record octrec
+ { integer  tag ,
+   octetstring  octfield }
+with { variant (octfield) "FIELDLENGTH(2)"} ;
+
+
+type record bitrec
+ { integer  tag ,
+   bitstring  bit8field }
+with { variant (bit8field) "FIELDLENGTH(8)"} ;
+
+
+
+type set RAW_PDU_145
+ { intrec       int ,
+   octrec   octstr ,
+   bitrec     bit8  }
+
+with { variant "TAG (
+                      int ,      tag=1 ;
+                      octstr ,   tag=2 ;
+		      bit8 ,     tag=3     )"
+     } ;
+
+}with{encode "RAW"}
+
+external function enc_RAW_PDU_145(in RAW_PDU_145 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_145(in octetstring stream) return RAW_PDU_145 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_set_with_TAG () runs on TempComp{
+
+  const RAW_PDU_145
+    i := {  octstr :=  { tag := 2 ,
+	                octfield := '1234'O } ,
+	    int :=   {  tag := 1 ,
+                       intfield :=  15  } ,
+	    bit8 :=   {  tag := 3 ,
+	                bit8field :=   '11111111'B }
+         }
+
+
+
+  const octetstring 	o := '010F02123403FF'O
+
+
+  if ((enc_RAW_PDU_145(i) == o)and(dec_RAW_PDU_145(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_145(i)= ", enc_RAW_PDU_145(i), "; dec_RAW_PDU_145(o)= ", dec_RAW_PDU_145(o));}
+}
+
+// Test of union with TAG , first element called
+
+group RAW_group22{
+
+//type record intrec
+// { integer  tag ,
+//   integer  intfield }
+//with { variant ""} ;
+
+
+// type record octrec
+//  { integer  tag ,
+//    octetstring  octfield }
+// with { variant (octfield) "FIELDLENGTH(2)"} ;
+
+
+// type record bitrec
+//  { integer  tag ,
+//    bitstring  bit8field }
+// with { variant (bit8field) "FIELDLENGTH(8)"} ;
+
+
+
+type union RAW_PDU_146
+ { intrec      int ,
+   octrec   octstr ,
+   bitrec     bit8  }
+
+with { variant "TAG (
+                      int ,      tag=1 ;
+                      octstr ,   tag=2 ;
+		      bit8 ,     tag=3     )"
+     } ;
+
+}with{encode "RAW"}
+
+external function enc_RAW_PDU_146(in RAW_PDU_146 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_146(in octetstring stream) return RAW_PDU_146 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_union_with_TAG_first_element_called() runs on TempComp {
+  const RAW_PDU_146
+    i := { int :=   {  tag := 1 ,
+                       intfield :=  15  }
+         }
+
+  const octetstring 	o := '010F'O
+
+  if ((enc_RAW_PDU_146(i) == o)and(dec_RAW_PDU_146(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_146(i)= ", enc_RAW_PDU_146(i), "; dec_RAW_PDU_146(o)= ", dec_RAW_PDU_146(o));}
+
+}
+
+// Test of union with TAG , second element called
+
+//external function enc_RAW_PDU(in RAW_PDU pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+//external function dec_RAW_PDU(in octetstring stream) return RAW_PDU with { extension "prototype(convert) decode(RAW)" }
+
+// group RAW_group{
+// 
+// type record intrec
+//  { integer  tag ,
+//    integer  intfield }
+// with { variant ""} ;
+// 
+// 
+// type record octrec
+//  { integer  tag ,
+//    octetstring  octfield }
+// with { variant (octfield) "FIELDLENGTH(2)"} ;
+// 
+// 
+// type record bitrec
+//  { integer  tag ,
+//    bitstring  bit8field }
+// with { variant (bit8field) "FIELDLENGTH(8)"} ;
+// 
+// 
+// 
+// type union RAW_PDU
+//  { intrec      int ,
+//    octrec   octstr ,
+//    bitrec     bit8  }
+// 
+// with { variant "TAG (
+//                       int ,      tag=1 ;
+//                       octstr ,   tag=2 ;
+// 		      bit8 ,     tag=3)"
+//      } ;
+// 
+// }with{encode "RAW"}
+
+testcase TC_union_with_TAG_second_element_called() runs on TempComp {
+  const RAW_PDU_146
+    i := {  octstr :=  { tag := 2 ,
+	                octfield := '1234'O }
+         }
+
+
+
+  const octetstring 	o := '021234'O
+
+  if ((enc_RAW_PDU_146(i) == o)and(dec_RAW_PDU_146(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_146(i)= ", enc_RAW_PDU_146(i), "; dec_RAW_PDU_146(o)= ", dec_RAW_PDU_146(o));}
+
+}
+
+// Test of union with TAG , third element called
+
+testcase TC_union_with_TAG_third_element_called() runs on TempComp {
+  const RAW_PDU_146
+    i := { bit8 :=   {  tag := 3 ,
+	                bit8field :=   '11111111'B }
+         }
+
+
+
+  const octetstring 	o := '03FF'O
+
+
+  if ((enc_RAW_PDU_146(i) == o)and(dec_RAW_PDU_146(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_146(i)= ", enc_RAW_PDU_146(i), "; dec_RAW_PDU_146(o)= ", dec_RAW_PDU_146(o));}
+
+}
+
+// Test of union with TAG , third element called with OTHERWISE
+
+group RAW_group23{
+
+type union RAW_PDU_147
+ { intrec      field1 ,
+   octrec      field2 ,
+   bitrec      field3}
+
+with { variant "TAG (
+                      field1,      tag=1 ;
+                      field2,      tag=2 ;
+		      field3,      OTHERWISE)"};
+
+}with{encode "RAW"}
+
+external function enc_RAW_PDU_147(in RAW_PDU_147 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_147(in octetstring stream) return RAW_PDU_147 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_union_with_TAG_third_element_called_with_OTHERWISE() runs on TempComp {
+  const RAW_PDU_147
+    i := { field3 :=   {  tag := 3 ,
+	                bit8field :=   '11111111'B }
+         }
+
+  const octetstring 	o := '03FF'O
+
+
+  if ((enc_RAW_PDU_147(i) == o)and(dec_RAW_PDU_147(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_147(i)= ", enc_RAW_PDU_147(i), "; dec_RAW_PDU_147(o)= ", dec_RAW_PDU_147(o));}
+
+}
+
+//  Test of set of called from record
+
+group RAW_group24{
+
+// type record record2
+//  { octetstring       oct1 ,
+//    integer         length2 ,
+//    octetstring       octN  }
+// with { variant (oct1) "FIELDLENGTH(1)";
+//        variant (length2) "LENGTHTO(octN)"
+// 
+//      }
+
+type set of record2 Rec2list_1
+with { variant "" };
+
+type record RAW_PDU_148
+ { integer       length1 ,
+   Rec2list_1      rec2list   }
+
+with { variant (length1) "LENGTHTO(rec2list)"   } ;
+
+}with{encode "RAW"}
+
+external function enc_RAW_PDU_148(in RAW_PDU_148 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_148(in octetstring stream) return RAW_PDU_148 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_set_of_called_from_record() runs on TempComp{
+
+  const RAW_PDU_148
+    i := { length1:=            8 ,
+	   rec2list :=  {  {  oct1 :=     '12'O ,
+		  	      length2 :=      2 ,
+			      octN :=   '3456'O     } ,
+                           {  oct1 :=     '12'O ,
+		  	      length2 :=      2 ,
+			      octN :=   '7890'O     }    }
+         }
+
+
+  const octetstring 	o := '081202345612027890'O
+ 
+  if ((enc_RAW_PDU_148(i) == o)and(dec_RAW_PDU_148(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_148(i)= ", enc_RAW_PDU_148(i), "; dec_RAW_PDU_148(o)= ", dec_RAW_PDU_148(o));}
+
+}
+
+// Test of record with optional field with PRESENCE
+
+group RAW_group25{
+
+// type enumerated enum
+// { zero, first, second, third, fourth, fifth, sixth, seventh, eighth, nineth,
+// tenth }
+// with { variant ""} ;
+
+
+// type record record1_2
+//  { bitstring       bit1 ,
+//    bitstring       bit3 ,
+//    bitstring       bit4 ,
+//    integer         int  ,
+//    integer         length1 ,
+//    octetstring     octN  }
+// with { variant (bit1) "FIELDLENGTH(1)" ;
+//        variant (bit3) "FIELDLENGTH(3)" ;
+//        variant (bit4) "FIELDLENGTH(4)" ;
+//        variant (int) "FIELDLENGTH(16)" ;
+//        variant (length1) "LENGTHTO(octN)"
+//      }
+
+
+// type union optionalpart1
+// { integer  one ,
+//  integer  two ,
+//  integer  three ,
+//  integer  four ,
+//  integer  five }
+// with { variant "" }
+
+
+// type record record2
+//  { octetstring       oct1 ,
+//    integer         length2 ,
+//    octetstring       octN  }
+// with { variant (oct1) "FIELDLENGTH(1)";
+//        variant (length2) "LENGTHTO(octN)"
+//      }
+// 
+// 
+// type record of record2 Rec2list
+// with { variant "" };
+
+type record RAW_PDU_149
+ { integer       int ,
+   octetstring   octstr ,
+   bitstring     bit6 ,
+   bitstring     bit2 ,
+   enum          enum1 ,
+   integer       length1 ,
+   octetstring   octN ,
+   integer       length2 ,
+   record1_2       rec1 ,
+   integer       length3 ,
+   Rec2list      rec2list ,
+   integer       id ,
+   integer       opt_part_ptr ,
+   integer       presenceid ,
+   optionalpart1  opt_part optional ,
+   octetstring   eop   optional     }
+
+with { variant (octstr) "FIELDLENGTH(2)" ;
+       variant (bit6) "FIELDLENGTH(6)" ;
+       variant (bit2) "FIELDLENGTH(2)" ;
+       variant (enum1) "FIELDLENGTH(8)" ;
+       variant (length1) "LENGTHTO(octN)" ;
+       variant (length2) "LENGTHTO(rec1)" ;
+       variant (length3) "LENGTHTO(rec2list)"
+       variant (opt_part_ptr) "POINTERTO ( opt_part)";
+       variant (opt_part) "PRESENCE (presenceid= 1)" ;
+       variant (opt_part) "CROSSTAG  (
+                                        one ,    id = 1 ;
+                                        two ,    id = 2 ;
+                                        three ,  id = 3 ;
+                                        four ,   id = 4 ;
+                                        five ,   id = 5      ) ";
+
+       variant (eop) "FIELDLENGTH(1)" ;
+     } ;
+
+}with{encode "RAW"}
+
+external function enc_RAW_PDU_149(in RAW_PDU_149 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_149(in octetstring stream) return RAW_PDU_149 with { extension "prototype(convert) decode(RAW)" }
+
+
+testcase TC_record_with_optional_field_with_PRESENCE() runs on TempComp{
+
+ const RAW_PDU_149
+    i := { int :=              20 ,
+           octstr :=      '1234'O ,
+	   bit6 :=      '111111'B ,
+	   bit2 :=          '00'B ,
+	   enum1 :=         tenth ,
+           length1:=            3 ,
+           octN :=      '123456'O ,
+           length2:=            7 ,
+	   rec1 :=    {   bit1 :=      '1'B ,
+	                  bit3 :=    '000'B ,
+			  bit4 :=   '1111'B ,
+			  int :=       4660 ,
+			  length1 :=      3 ,
+			  octN :=  'FFFFFF'O     } ,
+	   length3:=            8 ,
+	   rec2list :=  {  {  oct1 :=     '12'O ,
+		  	      length2 :=      2 ,
+			      octN :=   '3456'O     } ,
+                           {  oct1 :=     '12'O ,
+		  	      length2 :=      2 ,
+			      octN :=   '7890'O     } }  ,
+	   id :=                5 ,
+           opt_part_ptr:=            2 ,
+           presenceid := 1 ,
+           opt_part :=  { five :=  5  } ,
+	   eop :=             '00'O
+         }
+
+  const octetstring 	o := '1412343F0A0312345607F1341203FFFFFF0812023456120278900502010500'O
+
+  if ((enc_RAW_PDU_149(i) == o)and(dec_RAW_PDU_149(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_149(i)= ", enc_RAW_PDU_149(i), "; dec_RAW_PDU_149(o)= ", dec_RAW_PDU_149(o));}
+
+}
+
+// Test of  record with UNIT
+
+
+group RAW_group26{
+
+type integer INT1_1
+with { variant "" } ;
+
+
+
+type record RAW_PDU_150
+{ INT1_1      length1 ,
+  octetstring   octstr }
+with { variant (length1) "LENGTHTO(octstr)" ;
+       variant (length1) "UNIT(8)" } ;
+
+}with{encode "RAW"}
+
+
+external function enc_RAW_PDU_150(in RAW_PDU_150 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_150(in octetstring stream) return RAW_PDU_150 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_record_with_UNIT() runs on TempComp{
+  const RAW_PDU_150
+    i := { length1 :=           4   ,
+           octstr :=      '12345678'O   }
+
+  const octetstring 	o := '0412345678'O
+
+
+  if ((enc_RAW_PDU_150(i) == o)and(dec_RAW_PDU_150(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_150(i)= ", enc_RAW_PDU_150(i), "; dec_RAW_PDU_150(o)= ", dec_RAW_PDU_150(o));}
+}
+
+// Test of  record with PTRUNIT
+
+group RAW_group27{
+
+type record RAW_PDU_151
+{ integer      pointer1 ,
+  integer      pointer2 ,
+  integer      pointer3 ,
+  octetstring   octstr1 ,
+  octetstring   octstr2 ,
+  octetstring   octstr3 }
+with { variant (pointer1) "POINTERTO(octstr1)" ;
+       variant (pointer1) "PTRUNIT(1)" ;
+       variant (pointer2) "POINTERTO(octstr2)" ;
+       variant (pointer3) "POINTERTO(octstr3)" ;
+       variant (octstr1) "FIELDLENGTH(3)" ;
+       variant (octstr2) "FIELDLENGTH(3)" ;
+       variant (octstr3) "FIELDLENGTH(3)" ;
+     } ;
+
+}with{encode "RAW"}
+
+external function enc_RAW_PDU_151(in RAW_PDU_151 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_151(in octetstring stream) return RAW_PDU_151 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_record_with_PTRUNIT() runs on TempComp{
+  const RAW_PDU_151
+    i := { pointer1 :=         24 ,
+           pointer2 :=         5 ,
+           pointer3 :=         7 ,
+           octstr1 :=      '010203'O  ,
+           octstr2 :=      '040506'O  ,
+           octstr3 :=      '070809'O   }
+
+  const octetstring 	o := '180507010203040506070809'O
+
+  if ((enc_RAW_PDU_151(i) == o)and(dec_RAW_PDU_151(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_151(i)= ", enc_RAW_PDU_151(i), "; dec_RAW_PDU_151(o)= ", dec_RAW_PDU_151(o));}
+}
+
+// Test of  record with PTROFFSET
+
+
+
+group RAW_group28{
+
+type record RAW_PDU_152
+{ integer      pointer1 ,
+  integer      pointer2 ,
+  integer      pointer3 ,
+  octetstring   octstr1 ,
+  octetstring   octstr2 ,
+  octetstring   octstr3 }
+with { variant (pointer1) "POINTERTO(octstr1)" ;
+       variant (pointer1) "PTROFFSET(0)" ;
+       variant (pointer2) "POINTERTO(octstr2)" ;
+       variant (pointer3) "POINTERTO(octstr3)" ;
+       variant (octstr1) "FIELDLENGTH(3)" ;
+       variant (octstr2) "FIELDLENGTH(3)" ;
+       variant (octstr3) "FIELDLENGTH(3)" ;
+     } ;
+
+}with{encode "RAW"}
+
+external function enc_RAW_PDU_152(in RAW_PDU_152 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_152(in octetstring stream) return RAW_PDU_152 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_record_with_PTROFFSET() runs on TempComp{
+  const RAW_PDU_152
+    i := { pointer1 :=         3 ,
+           pointer2 :=         5 ,
+           pointer3 :=         7 ,
+           octstr1 :=      '010203'O  ,
+           octstr2 :=      '040506'O  ,
+           octstr3 :=      '070809'O   }
+
+
+
+  const octetstring 	o := '030507010203040506070809'O
+
+
+  if ((enc_RAW_PDU_152(i) == o)and(dec_RAW_PDU_152(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_152(i)= ", enc_RAW_PDU_152(i), "; dec_RAW_PDU_152(o)= ", dec_RAW_PDU_152(o));}
+}
+
+// Test of  structured types - 1
+
+
+
+group RAW_group29{
+
+type record Rec1field
+{ bitstring  bit7 ,
+  bitstring  bit1 ,
+  octetstring oct1 }
+with { variant (bit7) "FIELDLENGTH (7)" ;
+       variant (bit1) "FIELDLENGTH (1)" ;
+       variant (oct1) "FIELDLENGTH (1)" ;
+     };
+
+type enumerated Enum1
+{zero, first, second, third, fourth, fifth }
+with { variant "FIELDLENGTH (8)" };
+
+
+type record Rec3_1
+{ integer  int ,
+  octetstring octstr ,
+  bitstring  bitstr   }
+with { variant (octstr) "FIELDLENGTH (1)" ;
+       variant (bitstr) "FIELDLENGTH (8)" ;
+     };
+
+
+type record of Rec3_1  Recof
+with { variant "" };
+
+type record Rec5
+{ integer length1 ,
+  octetstring octN  }
+with { variant (length1) "LENGTHTO (octN)" };
+
+type union Rec2content
+{ Enum1   enum1 ,
+  Recof   recof ,
+  Rec5   rec5    }
+with { variant "" };
+
+type record Rec2data
+{  octetstring     id ,
+   integer       length1 ,
+   octetstring    octN ,
+   integer       length2 ,
+   Rec2content   content  }
+with { variant (id) "FIELDLENGTH (1)" ;
+       variant (length1) "LENGTHTO (octN)" ;
+       variant (length2) "LENGTHTO (content)" ;
+       variant (content) "CROSSTAG (
+                                    enum1 ,    id='01'O ;
+                                    recof ,    id='02'O ;
+                                    rec5 ,     id='03'O   ) "
+      };
+
+type set of Rec2data Rec2datas
+      with { variant "" };
+
+
+
+type record RAW_PDU_153
+{ integer      length1 ,
+  Rec1field    rec1field1 ,
+  integer      length2 ,
+  Rec1field    rec1field2 ,
+  Rec2datas      datas  }
+with { variant (length1) "LENGTHTO(rec1field1)" ;
+       variant (length2) "LENGTHTO(rec1field2)"
+     } ;
+
+}with{encode "RAW"}
+
+external function enc_RAW_PDU_153(in RAW_PDU_153 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_153(in octetstring stream) return RAW_PDU_153 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_structured_types_1() runs on TempComp{
+  const RAW_PDU_153
+    i := {  length1 :=    2 ,
+	    rec1field1 :=   { bit7 := '0000001'B ,
+	                      bit1 := '1'B ,
+	                      oct1:=  'FF'O } ,
+	    length2 :=    2 ,
+	    rec1field2 :=   { bit7 := '0000010'B ,
+	                      bit1 := '1'B ,
+	                      oct1:=  'FF'O } ,
+            datas :={  { id := '01'O ,
+	                 length1 :=   2 ,
+			 octN :=  '1234'O ,
+			 length2 :=   1 ,
+			 content := { enum1 := fifth }    },
+                       { id := '02'O ,
+	                 length1 :=   2 ,
+			 octN :=  '5678'O,
+			 length2 :=   6 ,
+			 content := { recof := { { int :=  1 ,
+			                           octstr := 'FF'O ,
+						   bitstr := '00000000'B  } ,
+                                                 { int :=  2 ,
+			                           octstr := 'FF'O ,
+						   bitstr := '00000000'B    } } } } ,
+                       { id := '03'O ,
+	                 length1 :=   2 ,
+			 octN :=  '9012'O,
+			 length2 :=   6 ,
+			 content := { rec5 := { length1 :=  5 ,
+			                         octN := '1234567890'O  } } } } }
+
+
+
+  const octetstring 	o := '0281FF0282FF010212340105020256780601FF0002FF000302901206051234567890'O
+
+  
+
+  if ((enc_RAW_PDU_153(i) == o)and(dec_RAW_PDU_153(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_153(i)= ", enc_RAW_PDU_153(i), "; dec_RAW_PDU_153(o)= ", dec_RAW_PDU_153(o));}
+}
+
+// Test of  structured types - 2
+
+external function enc_RAW_PDU_154(in RAW_PDU_154 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_154(in octetstring stream) return RAW_PDU_154 with { extension "prototype(convert) decode(RAW)" }
+
+group RAW_group30{
+
+type octetstring end_of_optional_parameters_indicator
+with { variant "FIELDLENGTH(1)"};
+
+type integer pointer
+with { variant "" };
+
+// type integer INT1_1
+// with { variant "" };
+
+type record Rec1_1
+{  bitstring   bit4 ,
+   bitstring   bit1 ,
+   bitstring   bit3 ,
+   INT1_1       length1 ,
+   octetstring octN optional    }
+with { variant (bit4) "FIELDLENGTH(4)" ;
+       variant (bit1) "FIELDLENGTH(1)" ;
+       variant (bit3) "FIELDLENGTH(3)" ;
+       variant (length1) "LENGTHTO(octN)" ;
+     };
+
+
+
+type record Rec2_1
+{  bitstring   bit8 ,
+   INT1_1     length1 ,
+   octetstring octN optional    }
+with { variant (bit8) "FIELDLENGTH(8)" ;
+       variant (length1) "LENGTHTO(octN)" ;
+     };
+
+
+type record Rec3_2
+{  bitstring   bit4 ,
+   bitstring   bit1 ,
+   bitstring   bit3 ,
+   integer     int ,
+   octetstring oct2 optional    }
+with { variant (bit4) "FIELDLENGTH(4)" ;
+       variant (bit1) "FIELDLENGTH(1)" ;
+       variant (bit3) "FIELDLENGTH(3)" ;
+       variant (oct2) "FIELDLENGTH(2)" ;
+     };
+
+
+
+type record Rec4
+{  integer     int ,
+   octetstring oct5 optional    }
+with { variant (oct5) "FIELDLENGTH(5)"};
+
+
+
+
+type union opt_par_union
+{ octetstring  octstr ,
+  Rec2_1         rec2 ,
+  Rec3_2         rec3 ,
+  Rec4         rec4       }
+ with { variant (octstr) "FIELDLENGTH(2)" };
+
+
+type record opt_par
+{  integer   id ,
+   integer   length1 ,
+   opt_par_union  par  }
+with { variant (length1) "LENGTHTO(par)" ;
+       variant (par) "CROSSTAG(
+                                octstr ,  id=1 ;
+				rec2  ,   id=2 ;
+				rec3  ,   id=3 ;
+                                rec4  ,   id=4 ;  )"
+     } ;
+
+
+type set of opt_par optional_part
+    with { variant "" };
+
+
+type record RAW_PDU_154
+{  pointer var_part_ptr,
+   pointer opt_part_ptr,
+   INT1_1 length1,
+   Rec1_1 rec1 optional,
+   optional_part opt_part optional,
+   end_of_optional_parameters_indicator EndOP optional
+} with { variant (var_part_ptr) "POINTERTO (length1)";
+         variant (opt_part_ptr) "POINTERTO (opt_part)";
+         variant (length1) "LENGTHTO (rec1)" };
+
+}with{encode "RAW"}
+
+testcase TC_structured_types_2() runs on TempComp{
+  const RAW_PDU_154
+	i := { var_part_ptr :=      2 ,
+	       opt_part_ptr :=      2 ,
+	       length1 :=        0 ,
+	       rec1 :=   omit ,
+	       opt_part :=   {   { id :=   1 ,      // opt_part := omit
+	                           length1 :=   2 ,
+	                           par := { octstr := 'FFFF'O }  }   } ,
+	       EndOP := '00'O     }  // EndOP = omit
+
+
+  const octetstring 	o := '0202000102FFFF00'O
+
+  if ((enc_RAW_PDU_154(i) == o)and(dec_RAW_PDU_154(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_154(i)= ", enc_RAW_PDU_154(i), "; dec_RAW_PDU_154(o)= ", dec_RAW_PDU_154(o));}
+}
+//=====================================
+//Test of  structured types - 3
+//=====================================
+
+//group RAW_group31{
+
+// type octetstring end_of_optional_parameters_indicator
+// with { variant "FIELDLENGTH(1)"};
+// 
+// type integer pointer
+// with { variant "" };
+
+// type integer INT1_1
+// with { variant "" };
+
+// type record Rec1_1
+// {  bitstring   bit4 ,
+//    bitstring   bit1 ,
+//    bitstring   bit3 ,
+//    INT1     length1 ,
+//    octetstring octN optional    }
+// with { variant (bit4) "FIELDLENGTH(4)" ;
+//        variant (bit1) "FIELDLENGTH(1)" ;
+//        variant (bit3) "FIELDLENGTH(3)" ;
+//        variant (length1) "LENGTHTO(octN)" ;
+//      };
+
+// type record Rec2_1
+// {  bitstring   bit8 ,
+//    INT1_1     length1 ,
+//    octetstring octN optional    }
+// with { variant (bit8) "FIELDLENGTH(8)" ;
+//        variant (length1) "LENGTHTO(octN)" ;
+//      };
+
+
+// type record Rec3_2
+// {  bitstring   bit4 ,
+//    bitstring   bit1 ,
+//    bitstring   bit3 ,
+//    integer     int ,
+//    octetstring oct2 optional    }
+// with { variant (bit4) "FIELDLENGTH(4)" ;
+//        variant (bit1) "FIELDLENGTH(1)" ;
+//        variant (bit3) "FIELDLENGTH(3)" ;
+//        variant (oct2) "FIELDLENGTH(2)" ;
+//      };
+
+// type record Rec4
+// {  integer     int ,
+//    octetstring oct5 optional    }
+// with { variant (oct5) "FIELDLENGTH(5)"};
+
+
+
+
+// type union opt_par_union
+// { octetstring  octstr ,
+//   Rec2_1         rec2 ,
+//   Rec3_2         rec3 ,
+//   Rec4         rec4       }
+//  with { variant (octstr) "FIELDLENGTH(2)" };
+
+
+// type record opt_par
+// {  integer   id ,
+//    integer   length1 ,
+//    opt_par_union  par  }
+// with { variant (length1) "LENGTHTO(par)" ;
+//        variant (par) "CROSSTAG(
+//                                 octstr ,  id=1 ;
+// 				rec2  ,   id=2 ;
+// 				rec3  ,   id=3 ;
+//                                 rec4  ,   id=4 ;  )"
+//      } ;
+
+
+// type set of opt_par optional_part
+//     with { variant "" };
+
+
+// type record RAW_PDU_155
+// {  pointer var_part_ptr,
+//    pointer opt_part_ptr,
+//    INT1_1 length1,
+//    Rec1_1 rec1 optional,
+//    optional_part opt_part optional,
+//    end_of_optional_parameters_indicator EndOP optional
+// } with { variant (var_part_ptr) "POINTERTO (length1)";
+//          variant (opt_part_ptr) "POINTERTO (opt_part)";
+//          variant (length1) "LENGTHTO (rec1)" };
+
+//}with{encode "RAW"}
+
+//external function enc_RAW_PDU_155(in RAW_PDU_155 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+//external function dec_RAW_PDU_155(in octetstring stream) return RAW_PDU_155 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_structured_types_3() runs on TempComp{
+  const RAW_PDU_154
+	i := { var_part_ptr :=      2 ,
+	       opt_part_ptr :=      7 ,
+	       length1 :=        5 ,
+	       rec1 :=   {  bit4 := '1111'B ,      // rec1 := omit
+	                    bit1 := '1'B ,
+			    bit3 := '000'B ,
+			    length1 := 3 ,
+			    octN :=  '123456'O   } , // octN := omit
+	       opt_part :=   {   { id :=   1 ,      // opt_part := omit
+	                           length1 :=   2 ,
+	                           par := { octstr := 'FFFF'O }  }   } ,
+	       EndOP := '00'O     }  // EndOP = omit
+
+
+
+  const octetstring 	o := '0207051F031234560102FFFF00'O
+
+  if ((enc_RAW_PDU_154(i) == o)and(dec_RAW_PDU_154(o) == i)) {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+//=====================================
+// Test of  structured types - 4
+//=====================================
+
+//group RAW_group32{
+
+// type octetstring end_of_optional_parameters_indicator
+// with { variant "FIELDLENGTH(1)"};
+
+// type integer pointer
+// with { variant "" };
+
+// type integer INT1_1
+// with { variant "" };
+
+// type record Rec1_1
+// {  bitstring   bit4 ,
+//    bitstring   bit1 ,
+//    bitstring   bit3 ,
+//    INT1_1       length1 ,
+//    octetstring octN optional    }
+// with { variant (bit4) "FIELDLENGTH(4)" ;
+//        variant (bit1) "FIELDLENGTH(1)" ;
+//        variant (bit3) "FIELDLENGTH(3)" ;
+//        variant (length1) "LENGTHTO(octN)" ;
+//      };
+
+
+
+// type record Rec2_1
+// {  bitstring   bit8 ,
+//    INT1_1     length1 ,
+//    octetstring octN optional    }
+// with { variant (bit8) "FIELDLENGTH(8)" ;
+//        variant (length1) "LENGTHTO(octN)" ;
+//      };
+
+
+// type record Rec3_2
+// {  bitstring   bit4 ,
+//    bitstring   bit1 ,
+//    bitstring   bit3 ,
+//    integer     int ,
+//    octetstring oct2 optional    }
+// with { variant (bit4) "FIELDLENGTH(4)" ;
+//        variant (bit1) "FIELDLENGTH(1)" ;
+//        variant (bit3) "FIELDLENGTH(3)" ;
+//        variant (oct2) "FIELDLENGTH(2)" ;
+//      };
+
+// type record Rec4
+// {  integer     int ,
+//    octetstring oct5 optional    }
+// with { variant (oct5) "FIELDLENGTH(5)"};
+
+
+
+
+// type union opt_par_union
+// { octetstring  octstr ,
+//   Rec2_1         rec2 ,
+//   Rec3_2         rec3 ,
+//   Rec4         rec4       }
+//  with { variant (octstr) "FIELDLENGTH(2)" };
+
+
+// type record opt_par
+// {  integer   id ,
+//    integer   length1 ,
+//    opt_par_union  par  }
+// with { variant (length1) "LENGTHTO(par)" ;
+//        variant (par) "CROSSTAG(
+//                                 octstr ,  id=1 ;
+// 				rec2  ,   id=2 ;
+// 				rec3  ,   id=3 ;
+//                                 rec4  ,   id=4 ;  )"
+//      } ;
+
+
+// type set of opt_par optional_part
+//     with { variant "" };
+
+
+// type record RAW_PDU_156
+// {  pointer var_part_ptr,
+//    pointer opt_part_ptr,
+//    INT1_1 length1,
+//    Rec1_1 rec1 optional,
+//    optional_part opt_part optional,
+//    end_of_optional_parameters_indicator EndOP optional
+// } with { variant (var_part_ptr) "POINTERTO (length1)";
+//          variant (opt_part_ptr) "POINTERTO (opt_part)";
+//          variant (length1) "LENGTHTO (rec1)" };
+// 
+// }with{encode "RAW"}
+
+//external function enc_RAW_PDU_156(in RAW_PDU_156 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+//external function dec_RAW_PDU_156(in octetstring stream) return RAW_PDU_156 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_structured_types_4() runs on TempComp{
+  const RAW_PDU_154
+	i := { var_part_ptr :=      2 ,
+	       opt_part_ptr :=      7 ,
+	       length1 :=        5 ,
+	       rec1 :=   {  bit4 := '1111'B ,      // rec1 := omit
+	                    bit1 := '1'B ,
+			    bit3 := '000'B ,
+			    length1 := 3 ,
+			    octN :=  '123456'O   } , // octN := omit
+	       opt_part :=   {   { id :=   1 ,      // opt_part := omit
+	                           length1 :=   2 ,
+	                           par := { octstr := 'FFFF'O }  } ,
+			         { id :=   2 ,
+	                           length1 :=   7 ,
+	                           par := { rec2:=  { bit8 := '00000000'B ,
+				                      length1 :=   5 ,
+					              octN := '1234567890'O } } } ,  //  octN := omit
+			         { id :=   3 ,
+	                           length1 :=   4 ,
+	                           par :=  { rec3 := { bit4 := '1111'B ,
+				                       bit1 := '0'B ,
+					               bit3 := '100'B ,
+					               int :=   15 ,
+					               oct2 := '1234'O } } } ,  //  oct2 := omit
+			         { id :=   4 ,
+	                           length1 :=   6 ,
+	                           par := { rec4:=  { int :=   15 ,
+					              oct5 := '1234567890'O } } } } ,  //  oct5 := omit
+	       EndOP := '00'O     }  // EndOP = omit
+
+
+
+  const octetstring 	o := '0207051F031234560102FFFF02070005123456789003048F0F123404060F123456789000'O
+
+  if ((enc_RAW_PDU_154(i) == o)and(dec_RAW_PDU_154(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_154(i)= ", enc_RAW_PDU_154(i), "; dec_RAW_PDU_154(o)= ", dec_RAW_PDU_154(o));}
+}
+
+// Test of  structured types - 5
+
+//external function enc_RAW_PDU(in RAW_PDU pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+//external function dec_RAW_PDU(in octetstring stream) return RAW_PDU with { extension "prototype(convert) decode(RAW)" }
+
+//group RAW_group{
+
+// type octetstring end_of_optional_parameters_indicator
+// with { variant "FIELDLENGTH(1)"};
+
+// type integer pointer
+// with { variant "" };
+
+// type integer INT1
+// with { variant "" };
+
+// type record Rec1_1
+// {  bitstring   bit4 ,
+//    bitstring   bit1 ,
+//    bitstring   bit3 ,
+//    INT1_1       length1 ,
+//    octetstring octN optional    }
+// with { variant (bit4) "FIELDLENGTH(4)" ;
+//        variant (bit1) "FIELDLENGTH(1)" ;
+//        variant (bit3) "FIELDLENGTH(3)" ;
+//        variant (length1) "LENGTHTO(octN)" ;
+//      };
+
+
+// type record Rec2_1
+// {  bitstring   bit8 ,
+//    INT1_1     length1 ,
+//    octetstring octN optional    }
+// with { variant (bit8) "FIELDLENGTH(8)" ;
+//        variant (length1) "LENGTHTO(octN)" ;
+//      };
+
+
+// type record Rec3_2
+// {  bitstring   bit4 ,
+//    bitstring   bit1 ,
+//    bitstring   bit3 ,
+//    integer     int ,
+//    octetstring oct2 optional    }
+// with { variant (bit4) "FIELDLENGTH(4)" ;
+//        variant (bit1) "FIELDLENGTH(1)" ;
+//        variant (bit3) "FIELDLENGTH(3)" ;
+//        variant (oct2) "FIELDLENGTH(2)" ;
+//      };
+
+
+
+// type record Rec4
+// {  integer     int ,
+//    octetstring oct5 optional    }
+// with { variant (oct5) "FIELDLENGTH(5)" };
+
+
+// type union opt_par_union
+// { octetstring  octstr ,
+//   Rec2_1         rec2 ,
+//   Rec3_2         rec3 ,
+//   Rec4         rec4       }
+//  with { variant (octstr) "FIELDLENGTH(2)" };
+
+
+// type record opt_par
+// {  integer   id ,
+//    integer   length1 ,
+//    opt_par_union  par  }
+// with { variant (length1) "LENGTHTO(par)" ;
+//        variant (par) "CROSSTAG(
+//                                 octstr ,  id=1 ;
+// 				rec2  ,   id=2 ;
+// 				rec3  ,   id=3 ;
+//                                 rec4  ,   id=4 ;  )"
+//      } ;
+
+
+
+
+// type set of opt_par optional_part
+//     with { variant "" };
+
+
+// type record RAW_PDU
+// {  pointer var_part_ptr,
+//    pointer opt_part_ptr,
+//    INT1_1 length1,
+//    Rec1_1 rec1 optional,
+//    optional_part opt_part optional,
+//    end_of_optional_parameters_indicator EndOP optional
+// } with { variant (var_part_ptr) "POINTERTO (length1)";
+//          variant (opt_part_ptr) "POINTERTO (opt_part)";
+//          variant (length1) "LENGTHTO (rec1)" };
+// 
+// }with{encode "RAW"}
+
+testcase TC_structured_types_5() runs on TempComp{
+	const RAW_PDU_154
+	i := { var_part_ptr :=      2 ,
+	       opt_part_ptr :=      4 ,
+	       length1 :=        2 ,
+	       rec1 :=   {  bit4 := '1111'B ,      // rec1 := omit
+	                    bit1 := '1'B ,
+			    bit3 := '000'B ,
+			    length1 := 0 ,
+			    octN :=  omit   } ,
+	       opt_part :=   {   { id :=   1 ,      // opt_part := omit
+	                           length1 :=   2 ,
+	                           par := { octstr := 'FFFF'O }  } ,
+			         { id :=   2 ,
+	                           length1 :=   7 ,
+	                           par := { rec2:=  { bit8 := '00000000'B ,
+				                      length1 :=   5 ,
+					              octN := '1234567890'O } } } ,  //  octN := omit
+			         { id :=   3 ,
+	                           length1 :=   4 ,
+	                           par :=  { rec3 := { bit4 := '1111'B ,
+				                       bit1 := '0'B ,
+					               bit3 := '100'B ,
+					               int :=   15 ,
+					               oct2 := '1234'O } } } ,  //  oct2 := omit
+			         { id :=   4 ,
+	                           length1 :=   6 ,
+	                           par := { rec4:=  { int :=   15 ,
+					              oct5 := '1234567890'O } } } } ,  //  oct5 := omit
+	       EndOP := '00'O     }  // EndOP = omit
+
+
+
+	const octetstring 	o := '0204021F000102FFFF02070005123456789003048F0F123404060F123456789000'O
+
+
+	if ((enc_RAW_PDU_154(i) == o)and(dec_RAW_PDU_154(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_154(i)= ", enc_RAW_PDU_154(i), "; dec_RAW_PDU_154(o)= ", dec_RAW_PDU_154(o));}
+}
+
+//==================================
+// Test of  structured types - 6
+//==================================
+
+testcase TC_structured_types_6() runs on TempComp{
+ 
+	const RAW_PDU_154
+	i := { var_part_ptr :=      2 ,
+	       opt_part_ptr :=      2 ,
+	       length1 :=        0 ,
+	       rec1 :=  omit ,
+	       opt_part :=   {   { id :=   1 ,      // opt_part := omit
+	                           length1 :=   2 ,
+	                           par := { octstr := 'FFFF'O }  } ,
+			         { id :=   2 ,
+	                           length1 :=   7 ,
+	                           par := { rec2:=  { bit8 := '00000000'B ,
+				                      length1 :=   5 ,
+					              octN := '1234567890'O } } } ,  //  octN := omit
+			         { id :=   3 ,
+	                           length1 :=   4 ,
+	                           par :=  { rec3 := { bit4 := '1111'B ,
+				                       bit1 := '0'B ,
+					               bit3 := '100'B ,
+					               int :=   15 ,
+					               oct2 := '1234'O } } } ,  //  oct2 := omit
+			         { id :=   4 ,
+	                           length1 :=   6 ,
+	                           par := { rec4:=  { int :=   15 ,
+					              oct5 := '1234567890'O } } } } ,  //  oct5 := omit
+	       EndOP := '00'O     }  // EndOP = omit
+
+
+
+	const octetstring 	o := '0202000102FFFF02070005123456789003048F0F123404060F123456789000'O
+
+	if ((enc_RAW_PDU_154(i) == o)and(dec_RAW_PDU_154(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_154(i)= ", enc_RAW_PDU_154(i), "; dec_RAW_PDU_154(o)= ", dec_RAW_PDU_154(o));}
+}
+//==================================
+// Test of  structured types - 7
+//==================================
+
+testcase TC_structured_types_7() runs on TempComp{
+ 
+  const RAW_PDU_154
+      i := { var_part_ptr :=      2 ,
+	       opt_part_ptr :=      2 ,
+	       length1 :=        0 ,
+	       rec1 :=  omit ,
+	       opt_part :=   {   { id :=   1 ,      // opt_part := omit
+	                           length1 :=   2 ,
+	                           par := { octstr := 'FFFF'O }  } ,
+			         { id :=   2 ,
+	                           length1 :=   2 ,
+	                           par := { rec2:=  { bit8 := '00000000'B ,
+				                      length1 :=   0 ,
+					              octN := omit } } } ,
+			         { id :=   3 ,
+	                           length1 :=   2 ,
+	                           par :=  { rec3 := { bit4 := '1111'B ,
+				                       bit1 := '0'B ,
+					               bit3 := '100'B ,
+					               int :=   15 ,
+					               oct2 := omit } } } ,
+			         { id :=   4 ,
+	                           length1 :=   1 ,
+	                           par := { rec4:=  { int :=   15 ,
+					              oct5 := omit } } } } ,
+	       EndOP := '00'O     }  // EndOP = omit
+
+
+
+  const octetstring 	o := '0202000102FFFF0202000003028F0F04010F00'O
+
+  if ((enc_RAW_PDU_154(i) == o)and(dec_RAW_PDU_154(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_154(i)= ", enc_RAW_PDU_154(i), "; dec_RAW_PDU_154(o)= ", dec_RAW_PDU_154(o));}
+
+}
+//==================================
+// Test of  structured types - 8
+//==================================
+
+testcase TC_structured_types_8() runs on TempComp{
+ 
+  const RAW_PDU_154
+ 	i := { var_part_ptr :=      2 ,
+	       opt_part_ptr :=      0 ,
+	       length1 :=        0 ,
+	       rec1 :=  omit ,
+	       opt_part :=   omit ,
+	       EndOP := '00'O     }  // EndOP = omit
+
+  const octetstring 	o := '02000000'O
+  if ((enc_RAW_PDU_154(i) == o)and(dec_RAW_PDU_154(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_154(i)= ", enc_RAW_PDU_154(i), "; dec_RAW_PDU_154(o)= ", dec_RAW_PDU_154(o));}
+
+}
+
+//==================================
+// Test of  structured types - 9
+//==================================
+
+testcase TC_structured_types_9() runs on TempComp{
+ 
+  const RAW_PDU_154
+ 	i := { var_part_ptr :=      2 ,
+	       opt_part_ptr :=      0 ,
+	       length1 :=        0 ,
+	       rec1 :=  omit ,
+	       opt_part :=   omit ,
+	       EndOP := omit     }
+
+
+
+	const octetstring 	o := '020000'O
+  if ((enc_RAW_PDU_154(i) == o)and(dec_RAW_PDU_154(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_154(i)= ", enc_RAW_PDU_154(i), "; dec_RAW_PDU_154(o)= ", dec_RAW_PDU_154(o));}
+
+}
+
+
+//==================================
+// Test of  structured types - 10
+//==================================
+
+
+group RAW_group32{
+
+type integer Pointer2
+with { variant "" } ;
+
+type octetstring EndOfOptionalPart
+with { variant "FIELDLENGTH(1)" } ;
+
+// type integer INT1_1
+// with { variant "" } ;
+
+// type bitstring BIT1_
+// with { variant "FIELDLENGTH(1)" } ;
+// 
+// type bitstring BIT7_
+// with { variant "FIELDLENGTH(7)" } ;
+// 
+// type octetstring OCT3_
+// with { variant "FIELDLENGTH(3)" } ;
+
+type hexstring HEX2
+with { variant "FIELDLENGTH(2)" } ;
+
+type enumerated  MessageType
+  { e1(1),      e2(2),      e3(3),    e4(4),    e5(5) }
+   with { variant "FIELDLENGTH(8)" }
+
+
+type enumerated  ParamName
+  { name1(1),      name2(2),      name3(3),    name4(4) }
+   with { variant "FIELDLENGTH(8)" }
+
+type record Param1
+{ ParamName           paramName  ,
+  integer             paramLength ,
+  OCT3_                octstr ,
+  BIT7_                bit7 ,
+  BIT1_                bit1 ,
+  HEX2                hexstr ,
+  INT1_1                int }
+with {variant (paramLength) "LENGTHTO(octstr , bit7 , bit1 , hexstr , int )" }
+
+type record Param2
+{ ParamName           paramName ,
+  integer             paramLength ,
+  OCT3_                octstr ,
+  BIT7_                bit7 ,
+  BIT1_                bit1 ,
+  HEX2                hexstr ,
+  INT1_1                int }
+with {variant (paramLength) "LENGTHTO(octstr , bit7 , bit1 , hexstr , int )" }
+
+type record Param3
+{ ParamName           paramName  ,
+  integer             paramLength ,
+  OCT3_                octstr ,
+  BIT7_                bit7 ,
+  BIT1_                bit1 ,
+  HEX2                hexstr ,
+  INT1_1                int }
+with {variant (paramLength) "LENGTHTO(octstr , bit7 , bit1 , hexstr , int )" }
+
+type record Param4
+{ ParamName           paramName  ,
+  integer             paramLength ,
+  OCT3_                octstr ,
+  BIT7_                bit7 ,
+  BIT1_                bit1 ,
+  HEX2                hexstr ,
+  INT1_1                int }
+with {variant (paramLength) "LENGTHTO(octstr , bit7 , bit1 , hexstr , int )" }
+
+type set Optional_part2
+{ Param1    param1 optional ,
+  Param2    param2 optional ,
+  Param3    param3 optional ,
+  Param4    param4 optional   }
+   with { variant "TAG (
+                         param1 ,           paramName= name1;
+                         param2 ,           paramName= name2;
+                         param3 ,           paramName= name3;
+                         param4 ,           paramName= name4  )"   }
+
+
+
+type record Elem1
+{ MessageType        messageType ,
+  OCT3_               octstr ,
+  BIT7_               bit7 ,
+  BIT1_               bit1 ,
+  HEX2               hexstr ,
+  INT1_1               int ,
+  Pointer2            pointer1 ,
+  Pointer2            pointer2 ,
+  integer            length1 ,
+  octetstring        octN ,
+  Optional_part2      opt_part   ,
+  EndOfOptionalPart  eop   optional    }
+   with { variant (pointer1) "POINTERTO(length1)";
+          variant (pointer2) "POINTERTO(opt_part)" ;
+	  variant (length1) "LENGTHTO(octN)"
+
+            //Note, that optional part itself is mandatory but it may be empty!
+        }
+
+
+type record Elem2
+{ MessageType        messageType ,
+  OCT3_               octstr ,
+  BIT7_               bit7 ,
+  BIT1_               bit1 ,
+  HEX2               hexstr ,
+  INT1_1               int ,
+  Pointer2            pointer1 ,
+  Pointer2            pointer2 ,
+  integer            length1 ,
+  octetstring        octN ,
+  Optional_part2      opt_part   ,
+  EndOfOptionalPart  eop   optional    }
+   with { variant (pointer1) "POINTERTO(length1)";
+          variant (pointer2) "POINTERTO(opt_part)" ;
+	  variant (length1) "LENGTHTO(octN)"
+
+            //Note, that optional part itself is mandatory but it may be empty!
+        }
+
+
+type record Elem3
+{ MessageType        messageType ,
+  OCT3_               octstr ,
+  BIT7_               bit7 ,
+  BIT1_               bit1 ,
+  HEX2               hexstr ,
+  INT1_1               int ,
+  Pointer2            pointer1 ,
+  Pointer2            pointer2 ,
+  integer            length1 ,
+  octetstring        octN ,
+  Optional_part2      opt_part   ,
+  EndOfOptionalPart  eop   optional    }
+   with { variant (pointer1) "POINTERTO(length1)";
+          variant (pointer2) "POINTERTO(opt_part)" ;
+	  variant (length1) "LENGTHTO(octN)"
+
+            //Note, that optional part itself is mandatory but it may be empty!
+        }
+
+
+type record Elem4
+{ MessageType        messageType ,
+  OCT3_               octstr ,
+  BIT7_               bit7 ,
+  BIT1_               bit1 ,
+  HEX2               hexstr ,
+  INT1_1               int ,
+  Pointer2            pointer1 ,
+  Pointer2            pointer2 ,
+  integer            length1 ,
+  octetstring        octN ,
+  Optional_part2      opt_part   ,
+  EndOfOptionalPart  eop   optional    }
+   with { variant (pointer1) "POINTERTO(length1)";
+          variant (pointer2) "POINTERTO(opt_part)" ;
+	  variant (length1) "LENGTHTO(octN)"
+
+            //Note, that optional part itself is mandatory but it may be empty!
+        }
+
+
+type record Elem5
+{ MessageType        messageType ,
+  OCT3_               octstr ,
+  BIT7_               bit7 ,
+  BIT1_               bit1 ,
+  HEX2               hexstr ,
+  INT1_1               int ,
+  Pointer2            pointer1 ,
+  Pointer2            pointer2 ,
+  integer            length1 ,
+  octetstring        octN ,
+  Optional_part2      opt_part   ,
+  EndOfOptionalPart  eop   optional    }
+   with { variant (pointer1) "POINTERTO(length1)";
+          variant (pointer2) "POINTERTO(opt_part)" ;
+	  variant (length1) "LENGTHTO(octN)"
+
+            //Note, that optional part itself is mandatory but it may be empty!
+        }
+
+
+type union RAW_PDU_155
+{ Elem1      elem1 ,
+  Elem2      elem2 ,
+  Elem3      elem3 ,
+  Elem4      elem4 ,
+  Elem5      elem5  }
+with { variant "TAG (
+                      elem1 ,       messageType = e1 ;
+		      elem2 ,       messageType = e2 ;
+		      elem3 ,       messageType = e3 ;
+		      elem4 ,       messageType = e4 ;
+		      elem5 ,       messageType = e5   ) "
+     } ;
+
+}with{encode "RAW"}
+
+
+external function enc_RAW_PDU_155(in RAW_PDU_155 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_155(in octetstring stream) return RAW_PDU_155 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_structured_types_10() runs on TempComp{
+  const RAW_PDU_155
+    i := { elem1 :=
+             {  messageType :=       e1 ,
+	        octstr :=            '123456'O ,
+		bit7 :=              '0000000'B ,
+		bit1 :=              '1'B ,
+		hexstr :=            'FF'H ,
+		int :=               1 ,
+		pointer1 :=          2 ,
+	        pointer2 :=          7 ,
+	        length1 :=           5 ,
+	        octN :=              '1234567890'O ,
+	        opt_part :=
+		     { param1 :=
+		           { paramName :=         name1 ,
+			     paramLength :=       6 ,
+	        	     octstr :=            '123456'O ,
+			     bit7 :=              '0000000'B ,
+			     bit1 :=              '1'B ,
+			     hexstr :=            'FF'H ,
+			     int :=               1 }  ,
+		       param4 :=
+		           { paramName :=         name4 ,
+			     paramLength :=       6 ,
+	        	     octstr :=            '123456'O ,
+			     bit7 :=              '0000000'B ,
+			     bit1 :=              '1'B ,
+			     hexstr :=            'FF'H ,
+			     int :=               1 }  ,
+		       param3 :=
+		           { paramName :=         name3 ,
+			     paramLength :=       6 ,
+	        	     octstr :=            '123456'O ,
+			     bit7 :=              '0000000'B ,
+			     bit1 :=              '1'B ,
+			     hexstr :=            'FF'H ,
+			     int :=               1 }  ,
+		       param2 :=
+		           { paramName :=         name2 ,
+			     paramLength :=       6 ,
+	        	     octstr :=            '123456'O ,
+			     bit7 :=              '0000000'B ,
+			     bit1 :=              '1'B ,
+			     hexstr :=            'FF'H ,
+			     int :=               1 }     },
+	        eop :=               '00'O            } }
+
+
+
+  const octetstring 	o := '0112345680FF010207051234567890010612345680FF01020612345680FF01030612345680FF01040612345680FF0100'O
+
+  if ((enc_RAW_PDU_155(i) == o)and(dec_RAW_PDU_155(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_155(i)= ", enc_RAW_PDU_155(i), "; dec_RAW_PDU_155(o)= ", dec_RAW_PDU_155(o));}
+}
+
+//=======================================
+// Test of  structured types - 11
+//=======================================
+testcase TC_structured_types_11() runs on TempComp{
+  const RAW_PDU_155
+    i := { elem1 :=
+             {  messageType :=       e1 ,
+	        octstr :=            '123456'O ,
+		bit7 :=              '0000000'B ,
+		bit1 :=              '1'B ,
+		hexstr :=            'FF'H ,
+		int :=               1 ,
+		pointer1 :=          2 ,
+	        pointer2 :=          7 ,
+	        length1 :=           5 ,
+	        octN :=              '1234567890'O ,
+	        opt_part :=
+		     { param1 := omit ,
+		       param4 := omit ,
+		       param3 := omit ,
+		       param2 := omit       },
+	        eop :=   omit         } }
+
+  const octetstring 	o := '0112345680FF010207051234567890'O
+
+  if ((enc_RAW_PDU_155(i) == o)and(dec_RAW_PDU_155(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_155(i)= ", enc_RAW_PDU_155(i), "; dec_RAW_PDU_155(o)= ", dec_RAW_PDU_155(o));}
+}
+
+//=======================================
+// Test of  structured types - 12
+//=======================================
+testcase TC_structured_types_12() runs on TempComp{
+  const RAW_PDU_155
+     i := { elem1 :=
+             {  messageType :=       e1 ,
+	        octstr :=            '123456'O ,
+		bit7 :=              '0000000'B ,
+		bit1 :=              '1'B ,
+		hexstr :=            'FF'H ,
+		int :=               1 ,
+		pointer1 :=          2 ,
+	        pointer2 :=          7 ,
+	        length1 :=           5 ,
+	        octN :=              '1234567890'O ,
+	        opt_part :=
+		     { param1 :=
+		           { paramName :=         name1 ,
+			     paramLength :=       6 ,
+	        	     octstr :=            '123456'O ,
+			     bit7 :=              '0000000'B ,
+			     bit1 :=              '1'B ,
+			     hexstr :=            'FF'H ,
+			     int :=               1 }  ,
+		       param4 :=
+		           { paramName :=         name4 ,
+			     paramLength :=       6 ,
+	        	     octstr :=            '123456'O ,
+			     bit7 :=              '0000000'B ,
+			     bit1 :=              '1'B ,
+			     hexstr :=            'FF'H ,
+			     int :=               1 }  ,
+		       param3 :=
+		           { paramName :=         name3 ,
+			     paramLength :=       6 ,
+	        	     octstr :=            '123456'O ,
+			     bit7 :=              '0000000'B ,
+			     bit1 :=              '1'B ,
+			     hexstr :=            'FF'H ,
+			     int :=               1 }  ,
+		       param2 := omit       },
+	        eop :=               '00'O            } }
+
+
+
+  const octetstring 	o := '0112345680FF010207051234567890010612345680FF01030612345680FF01040612345680FF0100'O
+
+
+  if ((enc_RAW_PDU_155(i) == o)and(dec_RAW_PDU_155(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_155(i)= ", enc_RAW_PDU_155(i), "; dec_RAW_PDU_155(o)= ", dec_RAW_PDU_155(o));}
+}
+
+//=======================================
+// Test of  structured types - 13
+//=======================================
+testcase TC_structured_types_13() runs on TempComp{
+  const RAW_PDU_155
+    i := { elem2 :=
+             {  messageType :=       e2 ,
+	        octstr :=            '123456'O ,
+		bit7 :=              '0000000'B ,
+		bit1 :=              '1'B ,
+		hexstr :=            'FF'H ,
+		int :=               1 ,
+		pointer1 :=          2 ,
+	        pointer2 :=          7 ,
+	        length1 :=           5 ,
+	        octN :=              '1234567890'O ,
+	        opt_part :=
+		     { param1 :=
+		           { paramName :=         name1 ,
+			     paramLength :=       6 ,
+	        	     octstr :=            '123456'O ,
+			     bit7 :=              '0000000'B ,
+			     bit1 :=              '1'B ,
+			     hexstr :=            'FF'H ,
+			     int :=               1 }  ,
+		       param4 := omit ,
+		       param3 :=
+		           { paramName :=         name3 ,
+			     paramLength :=       6 ,
+	        	     octstr :=            '123456'O ,
+			     bit7 :=              '0000000'B ,
+			     bit1 :=              '1'B ,
+			     hexstr :=            'FF'H ,
+			     int :=               1 }  ,
+		       param2 := omit       },
+	        eop :=    omit          } }
+
+
+
+  const octetstring 	o := '0212345680FF010207051234567890010612345680FF01030612345680FF01'O
+  
+  if ((enc_RAW_PDU_155(i) == o)and(dec_RAW_PDU_155(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_155(i)= ", enc_RAW_PDU_155(i), "; dec_RAW_PDU_155(o)= ", dec_RAW_PDU_155(o));}
+}
+
+//=======================================
+// Test of  structured types - 14
+//=======================================
+
+
+group RAW_group33{
+
+// type integer Pointer
+// with { variant "" } ;
+// 
+// type octetstring EndOfOptionalPart
+// with { variant "FIELDLENGTH(1)" } ;
+// 
+// type integer INT1
+// with { variant "" } ;
+// 
+// type bitstring BIT1
+// with { variant "FIELDLENGTH(1)" } ;
+// 
+// type bitstring BIT7
+// with { variant "FIELDLENGTH(7)" } ;
+// 
+// type octetstring OCT3
+// with { variant "FIELDLENGTH(3)" } ;
+// 
+// type hexstring HEX2
+// with { variant "FIELDLENGTH(2)" } ;
+
+// type enumerated  MessageType
+//   { e1(1),      e2(2),      e3(3),    e4(4),    e5(5) }
+//    with { variant "FIELDLENGTH(8)" }
+
+
+// type enumerated  ParamName
+//   { name1(1),      name2(2),      name3(3),    name4(4) }
+//    with { variant "FIELDLENGTH(8)" }
+
+// type record Param1
+// { ParamName           paramName  ,
+//   integer             paramLength ,
+//   OCT3_                octstr ,
+//   BIT7_                bit7 ,
+//   BIT1_                bit1 ,
+//   HEX2                hexstr ,
+//   INT1_1                int }
+// with {variant (paramLength) "LENGTHTO(octstr , bit7 , bit1 , hexstr , int )" }
+// 
+// type record Param2
+// { ParamName           paramName ,
+//   integer             paramLength ,
+//   OCT3                octstr ,
+//   BIT7                bit7 ,
+//   BIT1                bit1 ,
+//   HEX2                hexstr ,
+//   INT1                int }
+// with {variant (paramLength) "LENGTHTO(octstr , bit7 , bit1 , hexstr , int )" }
+// 
+// type record Param3
+// { ParamName           paramName  ,
+//   integer             paramLength ,
+//   OCT3                octstr ,
+//   BIT7                bit7 ,
+//   BIT1                bit1 ,
+//   HEX2                hexstr ,
+//   INT1                int }
+// with {variant (paramLength) "LENGTHTO(octstr , bit7 , bit1 , hexstr , int )" }
+
+
+type record Field1
+{ BIT1_    field2indic ,
+  BIT7_    field2par   }
+with { variant "" }
+
+
+
+type union Field2
+{ OCT3       present_ ,
+  OCT3       absent   }
+with { variant "" }
+
+
+
+type record Param4_1
+{ ParamName           paramName  ,
+  integer             paramLength ,
+  Field1                field1 ,
+  Field2                field2 ,
+  HEX2                hexstr ,
+  INT1_1                int }
+   with { variant (field2) "CROSSTAG(
+                                      present_ ,       field1.field2indic = '1'B ;
+				      absent ,        field1.field2indic = '0'B ; )" ;
+          variant  (paramLength) "LENGTHTO(field1 , field2 , hexstr , int   )" }
+
+type set Optional_part_1
+{ Param1    param1 optional ,
+  Param2    param2 optional ,
+  Param3    param3 optional ,
+  Param4_1    param4 optional   }
+   with { variant "TAG (
+                         param1 ,           paramName= name1;
+                         param2 ,           paramName= name2;
+                         param3 ,           paramName= name3;
+                         param4 ,           paramName= name4  )"   }
+
+
+type record Elem1_1
+{ MessageType        messageType ,
+  OCT3_               octstr ,
+  BIT7_               bit7 ,
+  BIT1_               bit1 ,
+  HEX2               hexstr ,
+  INT1_1               int ,
+  Pointer2            pointer1 ,
+  Pointer2            pointer2 ,
+  integer            length1 ,
+  octetstring        octN ,
+  Optional_part_1      opt_part   ,
+  EndOfOptionalPart  eop   optional    }
+   with { variant (pointer1) "POINTERTO(length1)";
+          variant (pointer2) "POINTERTO(opt_part)" ;
+	  variant (length1) "LENGTHTO(octN)"
+
+            //Note, that optional part itself is mandatory but it may be empty!
+        }
+
+
+type record Elem2_1
+{ MessageType        messageType ,
+  OCT3_               octstr ,
+  BIT7_               bit7 ,
+  BIT1_               bit1 ,
+  HEX2               hexstr ,
+  INT1_1               int ,
+  Pointer2            pointer1 ,
+  Pointer2            pointer2 ,
+  integer            length1 ,
+  octetstring        octN ,
+  Optional_part_1      opt_part   ,
+  EndOfOptionalPart  eop   optional    }
+   with { variant (pointer1) "POINTERTO(length1)";
+          variant (pointer2) "POINTERTO(opt_part)" ;
+	  variant (length1) "LENGTHTO(octN)"
+
+            //Note, that optional part itself is mandatory but it may be empty!
+        }
+
+
+type record Elem3_1
+{ MessageType        messageType ,
+  OCT3_               octstr ,
+  BIT7_               bit7 ,
+  BIT1_               bit1 ,
+  HEX2               hexstr ,
+  INT1_1               int ,
+  Pointer2            pointer1 ,
+  Pointer2            pointer2 ,
+  integer            length1 ,
+  octetstring        octN ,
+  Optional_part_1      opt_part   ,
+  EndOfOptionalPart  eop   optional    }
+   with { variant (pointer1) "POINTERTO(length1)";
+          variant (pointer2) "POINTERTO(opt_part)" ;
+	  variant (length1) "LENGTHTO(octN)"
+
+            //Note, that optional part itself is mandatory but it may be empty!
+        }
+
+
+type record Elem4_1
+{ MessageType        messageType ,
+  OCT3_               octstr ,
+  BIT7_               bit7 ,
+  BIT1_               bit1 ,
+  HEX2               hexstr ,
+  INT1_1               int ,
+  Pointer2            pointer1 ,
+  Pointer2            pointer2 ,
+  integer            length1 ,
+  octetstring        octN ,
+  Optional_part2      opt_part   ,
+  EndOfOptionalPart  eop   optional    }
+   with { variant (pointer1) "POINTERTO(length1)";
+          variant (pointer2) "POINTERTO(opt_part)" ;
+	  variant (length1) "LENGTHTO(octN)"
+
+            //Note, that optional part itself is mandatory but it may be empty!
+        }
+
+
+type record Elem5_1
+{ MessageType        messageType ,
+  OCT3_               octstr ,
+  BIT7_               bit7 ,
+  BIT1_               bit1 ,
+  HEX2               hexstr ,
+  INT1_1               int ,
+  Pointer2            pointer1 ,
+  Pointer2            pointer2 ,
+  integer            length1 ,
+  octetstring        octN ,
+  Optional_part2      opt_part   ,
+  EndOfOptionalPart  eop   optional    }
+   with { variant (pointer1) "POINTERTO(length1)";
+          variant (pointer2) "POINTERTO(opt_part)" ;
+	  variant (length1) "LENGTHTO(octN)"
+
+            //Note, that optional part itself is mandatory but it may be empty!
+        }
+
+
+type union RAW_PDU_156
+{ Elem1_1      elem1 ,
+  Elem2_1      elem2 ,
+  Elem3_1      elem3 ,
+  Elem4_1      elem4 ,
+  Elem5_1      elem5  }
+with { variant "TAG (
+                      elem1 ,       messageType = e1 ;
+		      elem2 ,       messageType = e2 ;
+		      elem3 ,       messageType = e3 ;
+		      elem4 ,       messageType = e4 ;
+		      elem5 ,       messageType = e5   ) "
+     } ;
+
+} with{encode "RAW"}
+
+external function enc_RAW_PDU_156(in RAW_PDU_156 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_156(in octetstring stream) return RAW_PDU_156 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_structured_types_14() runs on TempComp{
+  const RAW_PDU_156
+      i := { elem2 :=
+             {  messageType :=       e2 ,
+	        octstr :=            '123456'O ,
+		bit7 :=              '0000000'B ,
+		bit1 :=              '1'B ,
+		hexstr :=            'FF'H ,
+		int :=               1 ,
+		pointer1 :=          2 ,
+	        pointer2 :=          7 ,
+	        length1 :=           5 ,
+	        octN :=              '1234567890'O ,
+	        opt_part :=
+		     { param1 :=
+		           { paramName :=         name1 ,
+			     paramLength :=       6 ,
+	        	     octstr :=            '123456'O ,
+			     bit7 :=              '0000000'B ,
+			     bit1 :=              '1'B ,
+			     hexstr :=            'FF'H ,
+			     int :=               1 }  ,
+		       param4 :=
+		           { paramName :=         name4 ,
+			     paramLength :=       6 ,
+	        	     field1 :=
+			          { field2indic :=  '1'B ,
+				    field2par :=  '0000000'B  } ,
+			     field2 :=
+			          { present_ :=  'FFFFFF'O   } ,
+			     hexstr :=            '12'H ,
+			     int :=               1 }  ,
+		       param3 :=
+		           { paramName :=         name3 ,
+			     paramLength :=       6 ,
+	        	     octstr :=            '123456'O ,
+			     bit7 :=              '0000000'B ,
+			     bit1 :=              '1'B ,
+			     hexstr :=            'FF'H ,
+			     int :=               1 }  ,
+		       param2 := omit       },
+	        eop :=   '00'O        } }
+
+  const octetstring    o :='0212345680FF010207051234567890010612345680FF01030612345680FF01040601FFFFFF210100'O
+  if ((enc_RAW_PDU_156(i) == o)and(dec_RAW_PDU_156(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_156(i)= ", enc_RAW_PDU_156(i), "; dec_RAW_PDU_156(o)= ", dec_RAW_PDU_156(o));}
+}
+
+// Test of  structured types - 15
+
+testcase TC_structured_types_15() runs on TempComp{
+  const RAW_PDU_156
+       i := { elem2 :=
+             {  messageType :=       e2 ,
+	        octstr :=            '123456'O ,
+		bit7 :=              '0000000'B ,
+		bit1 :=              '1'B ,
+		hexstr :=            'FF'H ,
+		int :=               1 ,
+		pointer1 :=          2 ,
+	        pointer2 :=          7 ,
+	        length1 :=           5 ,
+	        octN :=              '1234567890'O ,
+	        opt_part :=
+		     { param1 :=
+		           { paramName :=         name1 ,
+			     paramLength :=       6 ,
+	        	     octstr :=            '123456'O ,
+			     bit7 :=              '0000000'B ,
+			     bit1 :=              '1'B ,
+			     hexstr :=            'FF'H ,
+			     int :=               1 }  ,
+		       param4 :=
+		           { paramName :=         name4 ,
+			     paramLength :=       6 ,
+	        	     field1 :=
+			          { field2indic :=  '0'B ,
+				    field2par :=  '0000000'B  } ,
+			     field2 :=
+			          { absent :=  '000000'O   } ,
+			     hexstr :=            '12'H ,
+			     int :=               1 }  ,
+		       param3 :=
+		           { paramName :=         name3 ,
+			     paramLength :=       6 ,
+	        	     octstr :=            '123456'O ,
+			     bit7 :=              '0000000'B ,
+			     bit1 :=              '1'B ,
+			     hexstr :=            'FF'H ,
+			     int :=               1 }  ,
+		       param2 := omit       },
+	        eop :=   '00'O        } }
+
+
+
+	const octetstring   o :='0212345680FF010207051234567890010612345680FF01030612345680FF01040600000000210100'O
+
+
+  if ((enc_RAW_PDU_156(i) == o)and(dec_RAW_PDU_156(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_156(i)= ", enc_RAW_PDU_156(i), "; dec_RAW_PDU_156(o)= ", dec_RAW_PDU_156(o));}
+}
+
+//=================================
+// Test of  structured types - 16
+//=================================
+
+group RAW_group34{
+
+type bitstring BIT4_
+with { variant "FIELDLENGTH(4)" } ;
+
+type octetstring OCT2_
+with { variant "FIELDLENGTH(2)" } ;
+
+// type octetstring OCT3_
+// with { variant "FIELDLENGTH(3)" } ;
+
+type union Union2
+{ OCT3_          field1 ,
+  OCT2_          field2 ,
+  OCT3_          field3 ,
+  OCT2_          field4  }
+ with { variant ""};
+
+
+type union Union1
+{ BIT4_          field1 ,
+  BIT4_          field2  }
+ with { variant ""};
+
+
+type record RAW_PDU_157
+{ BIT4_                id ,
+  Union1             union1 ,
+  Union2             union2  } 
+   with { variant  (union2) "CROSSTAG(
+                                       field1 ,       id = '0001'B ;
+				       field2 ,       id = '0010'B ;
+				       field3 ,       id = '0011'B ;
+				       field4 ,    {  id = '0100'B ,
+				                      id = '0101'B ,
+				                      id = '0111'B   }    )"  ;
+           variant  (union1) "CROSSTAG(
+                                       field1 ,   {   id = '0001'B ,
+				                      id = '0010'B ,
+				                      id = '0011'B     } ;
+				       field2 ,    {  id = '0100'B ,
+				                      id = '0101'B ,
+				                      id = '0111'B   }    )" } ;
+
+}with{encode "RAW"}
+
+external function enc_RAW_PDU_157(in RAW_PDU_157 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_157(in octetstring stream) return RAW_PDU_157 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_structured_types_16() runs on TempComp{
+  const RAW_PDU_157
+    i := { id :=   '0001'B ,
+           union1 := { field1 := '0000'B } ,
+	   union2 := { field1 := '123456'O } 	 }
+
+
+
+  const octetstring   o :='01123456'O
+
+  if ((enc_RAW_PDU_157(i) == o)and(dec_RAW_PDU_157(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_157(i)= ", enc_RAW_PDU_157(i), "; dec_RAW_PDU_157(o)= ", dec_RAW_PDU_157(o));}
+}
+
+//=================================
+// Test of  structured types - 17
+//=================================
+testcase TC_structured_types_17() runs on TempComp{
+  const RAW_PDU_157
+     i := { id :=   '0111'B ,
+           union1 := { field2 := '1111'B } ,
+	   union2 := { field4 := '1234'O } 	 }
+
+
+
+  const octetstring   o :='F71234'O
+
+  if ((enc_RAW_PDU_157(i) == o)and(dec_RAW_PDU_157(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_157(i)= ", enc_RAW_PDU_157(i), "; dec_RAW_PDU_157(o)= ", dec_RAW_PDU_157(o));}
+}
+
+//===========================================================
+//  Testing RAW update
+//===========================================================
+
+//=================================
+//   Raw update test 1
+//=================================
+
+
+group RAW_group35{
+
+// type bitstring BIT4
+// with { variant "FIELDLENGTH(4)" } ;
+// 
+// type octetstring OCT2
+// with { variant "FIELDLENGTH(2)" } ;
+
+type union Union2_1
+{ OCT2_          field1 ,
+  OCT2_          field2 ,
+  OCT2_          field3 ,
+  OCT2_          field4  }
+ with { variant ""};
+
+
+// type union Union1
+// { BIT4_          field1 ,
+//   BIT4_          field2  }
+//  with { variant ""};
+
+
+type record RAW_PDU_158
+{ Union2_1 union2 ,
+  Union1 union1,
+  BIT4_ id }
+   with { variant  (union2) "CROSSTAG(
+                                       field1 ,       id = '0001'B ;
+				       field2 ,       id = '0010'B ;
+				       field3 ,       id = '0011'B ;
+				       field4 ,    {  id = '0100'B ,
+				                      id = '0101'B ,
+				                      id = '0111'B   }    )"  ;
+           variant  (union1) "CROSSTAG(
+                                       field1 ,   {   id = '0001'B ,
+				                      id = '0010'B ,
+				                      id = '0011'B     } ;
+				       field2 ,    {  id = '0100'B ,
+				                      id = '0101'B ,
+				                      id = '0111'B   }    )" } ;
+
+}with{encode "RAW"}
+
+external function enc_RAW_PDU_158(in RAW_PDU_158 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_158(in octetstring stream) return RAW_PDU_158 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_Raw_update_test_1() runs on TempComp{
+  const RAW_PDU_158
+    i := {  union2 := { field4 := '1234'O } ,
+            union1 := { field2 := '1111'B },
+            id := '0111'B }
+
+  const octetstring   o :='12347F'O
+ 
+  if ((enc_RAW_PDU_158(i) == o )and(dec_RAW_PDU_158(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_158(i)= ", enc_RAW_PDU_158(i), "; dec_RAW_PDU_158(o)= ", dec_RAW_PDU_158(o));}
+}
+
+//=================================
+//   Raw update test 2
+//=================================
+testcase TC_Raw_update_test_2() runs on TempComp{
+  const RAW_PDU_158
+    i := {  union2 := { field1 := '1234'O } ,
+            union1 := { field1 := '1111'B },
+            id := '0001'B }
+
+  const octetstring   o :='12341F'O
+
+  if ((enc_RAW_PDU_158(i) == o )and(dec_RAW_PDU_158(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_158(i)= ", enc_RAW_PDU_158(i), "; dec_RAW_PDU_158(o)= ", dec_RAW_PDU_158(o));}
+}
+
+//=================================
+//   Raw update test 3
+//=================================
+group RAW_group36{
+
+type bitstring BIT8
+with { variant "FIELDLENGTH(8)"};
+
+type record RAW_PDU_159
+{ Union2_1             union2 ,
+  Union1 union1,
+  BIT8 outfiller,
+  BIT4_ id }
+   with { variant  (union2) "CROSSTAG(
+                                       field1 ,       id = '0001'B ;
+				       field2 ,       id = '0010'B ;
+				       field3 ,       id = '0011'B ;
+				       field4 ,    {  id = '0100'B ,
+				                      id = '0101'B ,
+				                      id = '0111'B   }    )"  ;
+           variant  (union1) "CROSSTAG(
+                                       field1 ,   {   id = '0001'B ,
+				                      id = '0010'B ,
+				                      id = '0011'B     } ;
+				       field2 ,    {  id = '0100'B ,
+				                      id = '0101'B ,
+				                      id = '0111'B   }    )" } ;
+
+}with{encode "RAW"}
+
+external function enc_RAW_PDU_159(in RAW_PDU_159 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_159(in octetstring stream) return RAW_PDU_159 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_Raw_update_test_3() runs on TempComp{
+
+  const RAW_PDU_159
+    i := {  union2 := { field1 := '1234'O } ,
+            union1 := { field1 := '1111'B },
+            outfiller := '00001000'B,
+            id := '0001'B }
+
+  const octetstring   o :='12348F10'O
+
+  if ((enc_RAW_PDU_159(i) == o )and(dec_RAW_PDU_159(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_159(i)= ", enc_RAW_PDU_159(i), "; dec_RAW_PDU_159(o)= ", dec_RAW_PDU_159(o));}
+}
+//=================================
+//   Raw update test 4
+//=================================
+group RAW_group37{
+
+type record RAW_PDU_160
+{ Union2_1  union2 ,
+  BIT8    outfiller,
+  Union1  union1,
+  BIT4_ id }
+   with { variant  (union2) "CROSSTAG(
+                                       field1 ,       id = '0001'B ;
+				       field2 ,       id = '0010'B ;
+				       field3 ,       id = '0011'B ;
+				       field4 ,    {  id = '0100'B ,
+				                      id = '0101'B ,
+				                      id = '0111'B   }    )"  ;
+           variant  (union1) "CROSSTAG(
+                                       field1 ,   {   id = '0001'B ,
+				                      id = '0010'B ,
+				                      id = '0011'B     } ;
+				       field2 ,    {  id = '0100'B ,
+				                      id = '0101'B ,
+				                      id = '0111'B   }    )" } ;
+
+}with{encode "RAW"}
+ 
+
+external function enc_RAW_PDU_160(in RAW_PDU_160 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_160(in octetstring stream) return RAW_PDU_160 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_Raw_update_test_4() runs on TempComp{
+
+  const RAW_PDU_160
+     i := {  union2 := { field1 := '1234'O } ,
+            outfiller := '00001000'B,
+            union1 := { field1 := '1111'B },
+            id := '0001'B }
+
+
+  const octetstring   o :='1234081F'O
+
+  if ((enc_RAW_PDU_160(i) == o )and(dec_RAW_PDU_160(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_160(i)= ", enc_RAW_PDU_160(i), "; dec_RAW_PDU_160(o)= ", dec_RAW_PDU_160(o));}
+}
+//=================================
+//   Raw update test 5
+//=================================
+group RAW_group38{
+
+type record RAW_PDU_161
+{ BIT8    outfiller,
+  Union2_1  union2 ,
+  Union1  union1,
+  BIT4_ id }
+   with { variant  (union2) "CROSSTAG(
+                                       field1 ,       id = '0001'B ;
+				       field2 ,       id = '0010'B ;
+				       field3 ,       id = '0011'B ;
+				       field4 ,    {  id = '0100'B ,
+				                      id = '0101'B ,
+				                      id = '0111'B   }    )"  ;
+           variant  (union1) "CROSSTAG(
+                                       field1 ,   {   id = '0001'B ,
+				                      id = '0010'B ,
+				                      id = '0011'B     } ;
+				       field2 ,    {  id = '0100'B ,
+				                      id = '0101'B ,
+				                      id = '0111'B   }    )" } ;
+
+}with{encode "RAW"}
+
+ 
+external function enc_RAW_PDU_161(in RAW_PDU_161 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_161(in octetstring stream) return RAW_PDU_161 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_Raw_update_test_5() runs on TempComp{
+
+  const RAW_PDU_161
+     i := {  outfiller := '00001000'B,
+            union2 := { field1 := '1234'O } ,
+            union1 := { field1 := '1111'B },
+            id := '0001'B }
+
+
+  const octetstring   o :='0812341F'O
+
+
+  if ((enc_RAW_PDU_161(i) == o )and(dec_RAW_PDU_161(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_161(i)= ", enc_RAW_PDU_161(i), "; dec_RAW_PDU_161(o)= ", dec_RAW_PDU_161(o));}
+}
+
+//=================================
+//   Raw update test 6
+//=================================
+group RAW_group39{
+
+type record RAW_PDU_162
+{ Union2_1  union2 ,
+  BIT4_    id,
+  Union1  union1}
+   with { variant  (union2) "CROSSTAG(
+                                       field1 ,       id = '0001'B ;
+				       field2 ,       id = '0010'B ;
+				       field3 ,       id = '0011'B ;
+				       field4 ,    {  id = '0100'B ,
+				                      id = '0101'B ,
+				                      id = '0111'B   }    )"  ;
+           variant  (union1) "CROSSTAG(
+                                       field1 ,   {   id = '0001'B ,
+				                      id = '0010'B ,
+				                      id = '0011'B     } ;
+				       field2 ,    {  id = '0100'B ,
+				                      id = '0101'B ,
+				                      id = '0111'B   }    )" } ;
+
+}with{encode "RAW"}
+
+ 
+external function enc_RAW_PDU_162(in RAW_PDU_162 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_162(in octetstring stream) return RAW_PDU_162 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_Raw_update_test_6() runs on TempComp{
+
+  const RAW_PDU_162
+        i := {  union2 := { field1 := '1234'O },
+            id := '0001'B,
+            union1 := { field1 := '1111'B }
+        }
+
+  const octetstring   o :='1234F1'O
+
+
+  if ((enc_RAW_PDU_162(i) == o )and(dec_RAW_PDU_162(o) == i)) {setverdict(pass);}
+	else {setverdict(fail,"enc_RAW_PDU_162(i)= ", enc_RAW_PDU_162(i), "; dec_RAW_PDU_162(o)= ", dec_RAW_PDU_162(o));}
+}
+
+//=================================
+//   Raw update test 7
+//=================================
+testcase TC_Raw_update_test_7() runs on TempComp{
+
+  const RAW_PDU_162
+     i := {  union2 := { field4 := '1234'O },
+            id := '0101'B,
+            union1 := { field2 := '1111'B }
+             }
+
+
+  const octetstring   o :='1234F5'O
+
+
+  if ((enc_RAW_PDU_162(i) == o )and(dec_RAW_PDU_162(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_162(i)= ", enc_RAW_PDU_162(i), "; dec_RAW_PDU_162(o)= ", dec_RAW_PDU_162(o));}
+}
+
+//=================================
+//   Raw update test 8
+//=================================
+
+
+group RAW_group40{
+
+ 
+type record RAW_PDU_163
+{ Union2_1  union2_1,
+  Union2_1  union2_2,
+  Union1  union1_1,
+  BIT4_    id,
+  Union1  union1_2,
+  BIT4_    id2}
+  with { variant  (union2_1) "CROSSTAG(
+                                       field1 ,       id = '0001'B ;
+				       field2 ,       id = '0010'B ;
+				       field3 ,       id = '0011'B ;
+				       field4 ,    {  id = '0100'B ,
+				                      id = '0101'B ,
+				                      id = '0111'B   }    )"  ;
+           variant  (union1_1) "CROSSTAG(
+                                       field1 ,   {   id = '0001'B ,
+				                      id = '0010'B ,
+				                      id = '0011'B     } ;
+				       field2 ,    {  id = '0100'B ,
+				                      id = '0101'B ,
+				                      id = '0111'B   })" ;
+          variant (union2_2) "CROSSTAG(field1 , id2 = '0001'B ;
+                                      field2 , OTHERWISE)";
+          variant (union1_2) "CROSSTAG(field1 , id2 = '0001'B ;
+                                      field2 , OTHERWISE)" ;
+          } ;
+
+}with{encode "RAW"}
+
+external function enc_RAW_PDU_163(in RAW_PDU_163 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_163(in octetstring stream) return RAW_PDU_163 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_Raw_update_test_8() runs on TempComp{
+
+  const RAW_PDU_163
+    i := {  union2_1 := {field1 := '1234'O },
+            union2_2 := { field1 := '1234'O},
+            union1_1 := { field1 := '1111'B },
+            id := '0001'B,
+            union1_2 := { field1 := '1111'B},
+            id2 := '0001'B
+             }
+
+
+  const octetstring   o :='123412341F1F'O
+
+
+  if ((enc_RAW_PDU_163(i) == o )and(dec_RAW_PDU_163(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_163(i)= ", enc_RAW_PDU_163(i), "; dec_RAW_PDU_163(o)= ", dec_RAW_PDU_163(o));}
+}
+//=================================
+//   Raw update test 9 (OTHERWISE)
+//=================================
+group RAW_group41{
+
+type union Union3
+{ BIT4_ field1,
+  OCT2_ field2
+} with { variant ""};
+
+
+type record RAW_PDU_164
+{ BIT4_    id,
+  Union3  union3,
+  Union1  union1,
+  BIT4_    id2}
+   with { variant (union1) "CROSSTAG(field1 , id2 = '0001'B ;
+                                      field2 , OTHERWISE)" ;
+          variant (union3) "CROSSTAG( field1, id = '0001'B;
+                                      field2, OTHERWISE)"
+          } ;
+
+}with{encode "RAW"}
+
+external function enc_RAW_PDU_164(in RAW_PDU_164 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_164(in octetstring stream) return RAW_PDU_164 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_Raw_update_test_9() runs on TempComp{
+
+  const RAW_PDU_164
+      i := {  id := '0001'B,
+            union3 := {field1 := '1110'B},
+            union1 := { field1 := '1111'B},
+            id2 := '0001'B
+             }
+
+  const octetstring   o :='E11F'O
+
+  if ((enc_RAW_PDU_164(i) == o )and(dec_RAW_PDU_164(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_164(i)= ", enc_RAW_PDU_164(i), "; dec_RAW_PDU_164(o)= ", dec_RAW_PDU_164(o));}
+}
+//=================================
+//   Raw update test 10
+//=================================
+group RAW_group42{
+
+group shortening{
+
+type union Union2_2
+{ OCT2          field1 ,
+  OCT2          field2 };
+
+
+} with {variant ""}
+
+type record RAW_PDU_165
+{ Union2_2  union2,
+  BIT4_    id,
+  Union3  union3,
+  Union1  union1,
+  BIT4_    id2}
+   with { variant (union1) "CROSSTAG(field1 , id2 = '0001'B ;
+                                      field2 , OTHERWISE)" ;
+          variant (union3) "CROSSTAG( field1, id = '0001'B;
+                                      field2, OTHERWISE)";
+          variant (union2) "CROSSTAG(field1 , id2 = '0001'B ;
+                                      field2 , OTHERWISE)"} ;
+
+}with{encode "RAW"}
+
+external function enc_RAW_PDU_165(in RAW_PDU_165 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_165(in octetstring stream) return RAW_PDU_165 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_Raw_update_test_10() runs on TempComp{
+
+  const RAW_PDU_165
+     i := {  union2 := {field1 := '1234'O},
+            id := '0001'B,
+            union3 := {field1 := '1110'B},
+            union1 := { field1 := '1111'B},
+            id2 := '0001'B
+             }
+
+
+  const octetstring   o :='1234E11F'O
+
+  if ((enc_RAW_PDU_165(i) == o )and(dec_RAW_PDU_165(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_165(i)= ", enc_RAW_PDU_165(i), "; dec_RAW_PDU_165(o)= ", dec_RAW_PDU_165(o));}
+}
+//=================================
+//   Raw update test 11
+//=================================
+
+group RAW_group43{
+
+type record RAW_PDU_166
+{ union {
+   octetstring field1,
+   octetstring field2
+  }       union2,
+  BIT4_    id,
+  Union3  union3,
+  Union1  union1,
+  BIT4_    id2}
+   with { variant (union1) "CROSSTAG(field1 , id2 = '0001'B ;
+                                      field2 , OTHERWISE)" ;
+          variant (union3) "CROSSTAG( field1, id = '0001'B;
+                                      field2, OTHERWISE)";
+          variant (union2) "CROSSTAG(field1 , id2 = '0001'B ;
+                                      field2 , OTHERWISE)";
+          variant (union2.field1, union2.field2) "FIELDLENGTH(2)"
+          } ;
+
+}with{encode "RAW"}
+
+external function enc_RAW_PDU_166(in RAW_PDU_166 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_166(in octetstring stream) return RAW_PDU_166 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_Raw_update_test_11() runs on TempComp{
+  const RAW_PDU_166
+  i := {  union2 := {field1 := '1234'O},
+    id := '0001'B,
+    union3 := {field1 := '1110'B},
+    union1 := { field1 := '1111'B},
+    id2 := '0001'B
+  }
+
+
+  const octetstring   o :='1234E11F'O
+
+  if ((enc_RAW_PDU_166(i) == o )and(dec_RAW_PDU_166(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_166(i)= ", enc_RAW_PDU_166(i), "; dec_RAW_PDU_166(o)= ", dec_RAW_PDU_166(o));}
+}
+
+//=================================
+//   Raw update test 12
+//=================================
+
+group RAW_group44{
+
+type union Code {
+  integer field1,
+  integer field2,
+  integer field3
+} with { variant "FIELDLENGTH(8)"};
+
+type record RAW_PDU_167{
+  Code code,
+  bitstring ABCxxxxx,
+  integer PDU_length,
+  octetstring id optional
+} with { variant (PDU_length) "FIELDLENGTH(16)";
+  variant (ABCxxxxx) "FIELDLENGTH(8)";
+  variant (id) "PRESENCE( {
+       ABCxxxxx = '10000000'B,
+       ABCxxxxx = '10100000'B} )";
+  variant (code) "CROSSTAG(
+      field1, id = omit;
+      field2, id = '02'O;
+      field3, id = '03'O; )"};
+
+}with{encode "RAW"}
+
+external function enc_RAW_PDU_167(in RAW_PDU_167 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_167(in octetstring stream) return RAW_PDU_167 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_Raw_update_test_12() runs on TempComp{
+	const RAW_PDU_167
+    i := {  code := { field1 := 16},
+            ABCxxxxx := '00000000'B,
+            PDU_length := 16,
+            id := omit }
+
+	const octetstring   o :='10001000'O
+
+	if ((enc_RAW_PDU_167(i) == o )and(dec_RAW_PDU_167(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_167(i)= ", enc_RAW_PDU_167(i), "; dec_RAW_PDU_167(o)= ", dec_RAW_PDU_167(o));}
+}
+
+//=================================
+//   Raw update test 13
+//=================================
+
+testcase TC_Raw_update_test_13() runs on TempComp{
+	const RAW_PDU_167
+    i := {  code := { field2 := 16},
+            ABCxxxxx := '10000000'B,
+            PDU_length := 16,
+            id := '02'O }
+
+
+	const octetstring   o :='1080100002'O
+
+	if ((enc_RAW_PDU_167(i) == o )and(dec_RAW_PDU_167(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_167(i)= ", enc_RAW_PDU_167(i), "; dec_RAW_PDU_167(o)= ", dec_RAW_PDU_167(o));}
+}
+
+//=================================
+//   Raw update test 14
+//=================================
+
+group RAW_group45{
+
+type union Code_1 {
+  enumerated {e1a (0), e1b (1), e1c (2)} E1,
+  enumerated {e2a (1), e2b (2), e2c (3)} E2,
+  enumerated {e3a (2), e3b (3), e3c (4), e3d (5)} E3
+} with { variant (E1,E2,E3) "FIELDLENGTH(32)";
+         variant (E1,E2,E3) "BYTEORDER(last)";
+         variant (E1,E2,E3) "COMP(2scompl)"};
+
+type integer UINT24 (0..16777215)
+with {variant "FIELDLENGTH(24)";
+      variant "BYTEORDER(last)"};
+
+type enumerated Identifier {
+  id_E1 (0),
+  id_E2 (1),
+  id_E3 (2)
+} with {variant "FIELDLENGTH(32)";
+        variant "BYTEORDER(last)";
+        variant "COMP(2scompl)"};
+
+type record RAW_PDU_168{
+  Code_1 code,
+  bitstring ABCxxxxx,
+  UINT24 PDU_length,
+  Identifier id optional,
+  octetstring payload optional
+  } with { variant (ABCxxxxx) "FIELDLENGTH(8)";
+           variant (id) "PRESENCE( {
+              ABCxxxxx = '10000000'B,
+              ABCxxxxx = '10100000'B} )";
+           variant (code) "CROSSTAG(
+             E1, id = omit;
+             E2, id = id_E2;
+             E3, id = id_E3; )";
+            variant (PDU_length) "LENGTHTO(code,ABCxxxxx,PDU_length,id,payload)"};
+
+}with{encode "RAW"}
+
+external function enc_RAW_PDU_168(in RAW_PDU_168 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_168(in octetstring stream) return RAW_PDU_168 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_Raw_update_test_14() runs on TempComp{
+	const RAW_PDU_168
+    i := {  code := {E1 := e1c},
+            ABCxxxxx := '00000000'B,
+            PDU_length := 8,
+            id := omit,
+            payload := omit}
+
+
+	const octetstring   o :='0000000200000008'O ;
+
+	if ((enc_RAW_PDU_168(i) == o )and(dec_RAW_PDU_168(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_168(i)= ", enc_RAW_PDU_168(i), "; dec_RAW_PDU_168(o)= ", dec_RAW_PDU_168(o));}
+
+}
+
+//=================================
+//   Raw update test 15
+//=================================
+
+testcase TC_Raw_update_test_15() runs on TempComp{
+	const RAW_PDU_168
+    i := {  code := {E2 := e2b},
+            ABCxxxxx := '10000000'B,
+            PDU_length := 14,
+            id := id_E2,
+            payload := 'ABCD'O}
+
+	const octetstring   o :='000000028000000E00000001ABCD'O ;
+ 
+	if ((enc_RAW_PDU_168(i) == o )and(dec_RAW_PDU_168(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_168(i)= ", enc_RAW_PDU_168(i), "; dec_RAW_PDU_168(o)= ", dec_RAW_PDU_168(o));}
+}
+
+//=================================
+//   Raw update test 16
+//=================================
+
+testcase TC_Raw_update_test_16() runs on TempComp{
+	const RAW_PDU_168
+    i := {  code := {E3 := e3b},
+            ABCxxxxx := '10100000'B,
+            PDU_length := 14,
+            id := id_E3,
+            payload := 'ABCD'O}
+
+	const octetstring   o :='00000003A000000E00000002ABCD'O ;
+
+	if ((enc_RAW_PDU_168(i) == o )and(dec_RAW_PDU_168(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_168(i)= ", enc_RAW_PDU_168(i), "; dec_RAW_PDU_168(o)= ", dec_RAW_PDU_168(o));}
+
+}
+
+
+//=================================
+//   group raw attribute test 1
+//=================================
+
+group RAW_group46 {
+  type integer RAW_PDU_169
+} with { encode "RAW";
+       variant "FIELDLENGTH(8)" ;
+       variant "COMP( 2scompl ) "
+     };
+
+external function enc_RAW_PDU_169(in RAW_PDU_169 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_169(in octetstring stream) return RAW_PDU_169 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_group_raw_attribute_test_1() runs on TempComp{
+  const RAW_PDU_169 		i := -2
+  const octetstring 	o := 'FE'O
+
+
+  if ((enc_RAW_PDU_169(i) == o)and(dec_RAW_PDU_169(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_169(i)= ", enc_RAW_PDU_169(i), "; dec_RAW_PDU_169(o)= ", dec_RAW_PDU_169(o));}
+}
+
+//=================================
+//   group raw attribute test 2
+//=================================
+
+type integer RAW_PDU_170
+with {  encode "RAW";
+        variant  "BITORDERINOCTET(msb)";
+        variant  "BYTEORDER(last)";
+        variant  "ALIGN(left)";
+        variant  "BITORDERINFIELD(msb)";
+        variant  "COMP(signbit)";
+        variant  "FIELDLENGTH(20)" };
+external function enc_RAW_PDU_170(in RAW_PDU_170 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_170(in octetstring stream) return RAW_PDU_170 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_group_raw_attribute_test_2() runs on TempComp{
+	const RAW_PDU_170 		i := -234
+	const octetstring 	o := 'EA0008'O
+
+	if ((enc_RAW_PDU_170(i) == o)and(dec_RAW_PDU_170(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_170(i)= ", enc_RAW_PDU_170(i), "; dec_RAW_PDU_170(o)= ", dec_RAW_PDU_170(o));}
+}
+
+//=================================
+//   group raw attribute test 3
+//=================================
+
+group RAW_group47 {
+  group grp_v1 {
+    group grp_v2 {
+      group grp_v3 {
+        group grp_v4 {
+          group grp_v5 {
+            group grp_v6 {
+              type integer RAW_PDU_171
+            } with { variant "BITORDERINOCTET(msb)" }
+          } with { variant "BYTEORDER(last)" }
+        } with { variant "ALIGN(left)" }
+      } with { variant "BITORDERINFIELD(msb)" }
+    } with { variant "COMP(signbit)" }
+  } with { variant "FIELDLENGTH(20)" }
+} with { encode "RAW" }
+
+external function enc_RAW_PDU_171(in RAW_PDU_171 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_171(in octetstring stream) return RAW_PDU_171 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_group_raw_attribute_test_3() runs on TempComp{
+  const RAW_PDU_171 		i := -234
+  const octetstring 	o := 'EA0008'O
+
+
+  if ((enc_RAW_PDU_171(i) == o)and(dec_RAW_PDU_171(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_171(i)= ", enc_RAW_PDU_171(i), "; dec_RAW_PDU_171(o)= ", dec_RAW_PDU_171(o));}
+}
+
+//=================================
+//   group raw attribute test 4
+//=================================
+
+
+group RAW_group48 {
+  group grp_v1 {
+    group grp_v2 {
+      group grp_v3 {
+        group grp_v4 {
+          group grp_v5 {
+            group grp_v6 {
+              type integer RAW_PDU_172
+              with { variant "" }
+            } with { variant "FIELDLENGTH(20)"; variant "COMP(signbit)" }
+          } with { variant "BITORDERINFIELD(msb)"; variant "ALIGN(left)" }
+        } with { variant "BITORDERINOCTET(msb)"; variant "BYTEORDER(last)" }
+      } with { variant "BITORDERINOCTET(lsb)"; variant "BYTEORDER(first)" }
+    } with { variant "FIELDLENGTH(10)"; variant "COMP(2scompl)" }
+  } with { variant "BITORDERINFIELD(lsb)"; variant "ALIGN(right)" }
+
+} with { encode "RAW" }
+
+external function enc_RAW_PDU_172(in RAW_PDU_172 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_172(in octetstring stream) return RAW_PDU_172 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_group_raw_attribute_test_4() runs on TempComp{
+ 
+  const RAW_PDU_172 		i := -234
+  const octetstring 	o := 'EA0008'O
+
+  if ((enc_RAW_PDU_172(i) == o)and(dec_RAW_PDU_172(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_172(i)= ", enc_RAW_PDU_172(i), "; dec_RAW_PDU_172(o)= ", dec_RAW_PDU_172(o));}
+}
+
+//=================================
+//   group raw attribute test 5
+//=================================
+
+group RAW_group49 {
+  group grp_v1 {
+    group grp_v2 {
+      group grp_v3 {
+        type integer RAW_PDU_173
+        with { encode "RAW"; variant "" }
+      } with { encode "RAW"; variant "FIELDLENGTH(20)"; variant "COMP(signbit)" }
+    } with { encode "RAW"; variant "BITORDERINFIELD(msb)"; variant "ALIGN(left)" }
+  } with { encode "RAW"; variant "BITORDERINOCTET(msb)"; variant "BYTEORDER(last)" }
+} with { encode "RAW" }
+
+external function enc_RAW_PDU_173(in RAW_PDU_173 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_173(in octetstring stream) return RAW_PDU_173 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_group_raw_attribute_test_5() runs on TempComp{
+  const RAW_PDU_173 		i := -234
+  const octetstring 	o := 'EA0008'O
+
+  if ((enc_RAW_PDU_173(i) == o)and(dec_RAW_PDU_173(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_173(i)= ", enc_RAW_PDU_173(i), "; dec_RAW_PDU_173(o)= ", dec_RAW_PDU_173(o));}
+
+}
+
+//=================================
+//   group raw attribute test 6
+//=================================
+
+
+group RAW_group50 {
+  group grp_v1 {
+    group grp_v2 {
+      group grp_v3 {
+        type integer RAW_PDU_174
+        with { variant "" }
+      } with { variant override "FIELDLENGTH(32)"  }
+    } with { variant "FIELDLENGTH(10)" }
+  } with { variant override "FIELDLENGTH(8)"; variant "FIELDLENGTH(2)" }
+} with { encode "RAW" }
+
+external function enc_RAW_PDU_174(in RAW_PDU_174 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_174(in octetstring stream) return RAW_PDU_174 with { extension "prototype(convert) decode(RAW)" }
+
+testcase TC_group_raw_attribute_test_6() runs on TempComp{
+  const RAW_PDU_174 		i := 255
+  const octetstring 	o := 'FF'O
+
+  if ((enc_RAW_PDU_174(i) == o)and(dec_RAW_PDU_174(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_174(i)= ", enc_RAW_PDU_174(i), "; dec_RAW_PDU_174(o)= ", dec_RAW_PDU_174(o));}
+}
+//=================================
+//   group raw attribute test 7
+//=================================
+external function enc_RAW_PDU_175(in RAW_PDU_175 pdu) return octetstring with { extension "prototype(convert) encode(RAW)" }
+external function dec_RAW_PDU_175(in octetstring stream) return RAW_PDU_175 with { extension "prototype(convert) decode(RAW)" }
+
+group RAW_group51{
+  group grp1 {
+    type record RAW_PDU_175
+    { integer   int1 ,
+      integer   int2 ,
+      integer   int3 ,
+      integer   int4   }
+     with { variant (int1,int2,int3,int4) "FIELDLENGTH(4)";
+            variant (int1,int2) "PADDING(yes)";
+            variant (int3,int4) "PADDING(no)"; }
+  } with { variant "FIELDLENGTH(3)" }
+} with {encode "RAW" };
+
+testcase TC_group_raw_attribute_test_7() runs on TempComp{
+	const RAW_PDU_175
+		i := {  int1 :=    1  ,
+						int2 :=    2  ,
+						int3 :=    3  ,
+						int4 :=    4       }
+
+	const octetstring 	o := '010243'O
+
+	if ((enc_RAW_PDU_175(i) == o)and(dec_RAW_PDU_175(o) == i)) {setverdict(pass);}
+  else {setverdict(fail,"enc_RAW_PDU_175(i)= ", enc_RAW_PDU_175(i), "; dec_RAW_PDU_175(o)= ", dec_RAW_PDU_175(o));}
+
+}
+
+//=============================================================
+//   Testing Enc/Dec functions of implicit message encoding 
+//=============================================================
+//=================================
+//   Fast enc/dec function
+//=================================
+
+
+type integer RAW_PDU_176 with { encode "RAW"; variant "FIELDLENGTH(16)" };
+
+external function enc_RAW_PDU_176(in RAW_PDU_176 pdu, out octetstring stream) with { extension "prototype(fast) encode(RAW)" }
+external function dec_RAW_PDU_176(in octetstring stream, out RAW_PDU_176 pdu) with { extension "prototype(fast) decode(RAW)" }
+
+testcase TC_Fast_enc_dec_function() runs on TempComp{
+  const RAW_PDU_176 		i := 255
+  const octetstring 	o := 'FF00'O
+
+  var octetstring encoded_pdu;
+  var RAW_PDU_176 decoded_pdu;
+
+  enc_RAW_PDU_176(i, encoded_pdu);
+  dec_RAW_PDU_176(o, decoded_pdu);
+
+  if ( encoded_pdu == o and decoded_pdu == i ) {setverdict(pass);}
+  else {setverdict(fail,"encoded_pdu= ", encoded_pdu, "; decoded_pdu= ", decoded_pdu);}
+}
+//=================================================
+//  Implicit message encoding: prototype backtrack
+//=================================================
+
+external function dec_RAW_PDU_177(in octetstring stream, out RAW_PDU_177 pdu) return integer
+  with { extension "prototype(backtrack) decode(RAW) errorbehavior(ALL:WARNING)" }
+
+type integer RAW_PDU_177 with { encode "RAW"; variant "FIELDLENGTH(16)" };
+
+
+testcase TC_Backtrack_decode_function() runs on TempComp{
+  const RAW_PDU_177 		i := 255
+  const octetstring o1 := 'FF00'O
+  const octetstring o2 := '12'O
+
+  var RAW_PDU_177 decoded_pdu;
+  var integer ret_val;
+
+  ret_val := dec_RAW_PDU_177(o1, decoded_pdu);
+  if (ret_val==0 and decoded_pdu==i) {setverdict(pass);}
+  else {setverdict(fail,"dec_RAW_PDU_177(o1, decoded_pdu)=",ret_val,";decoded_pdu=", decoded_pdu );}
+
+  ret_val := dec_RAW_PDU_177(o2, decoded_pdu);
+  if (ret_val==1) {setverdict(pass);} 
+	else {setverdict(fail,"ret_val=",ret_val,";decoded_pdu=", decoded_pdu );}
+}
+
+//=================================================
+//   Sliding decode function
+//=================================================
+
+
+type integer RAW_PDU_178 with { encode "RAW"; variant "FIELDLENGTH(16)" };
+
+external function dec_RAW_PDU_178(inout octetstring stream, out RAW_PDU_178 pdu) return integer
+  with { extension "prototype(sliding) decode(RAW) errorbehavior(ALL:WARNING)" }
+
+testcase TC_Sliding_decode_function() runs on TempComp{
+  const RAW_PDU_178 		i := 255
+  var octetstring o1 := 'FF00'O;
+  var octetstring o2 := '12'O;
+  var RAW_PDU_178 decoded_pdu;
+  var integer ret_val;
+
+  ret_val := dec_RAW_PDU_178(o1, decoded_pdu);
+  if (ret_val==0 and decoded_pdu==i) {setverdict(pass);}
+  else {setverdict(fail,"ret_val=",ret_val,";decoded_pdu=", decoded_pdu );}
+
+  ret_val := dec_RAW_PDU_178(o2, decoded_pdu);
+  if (ret_val>0) {setverdict(pass);} 
+	else {setverdict(fail,"ret_val=",ret_val,";decoded_pdu=", decoded_pdu );}
+}
+
+//---------------------------------------------------------------------*
+// Testing limits of codec
+//---------------------------------------------------------------------*
+
+//=================================================
+//    Decoding empty octetstring to PDU
+//=================================================
+
+type record RAW_PDU_179 {
+  integer f1,
+  octetstring f2,
+  boolean f3
+} with { encode "RAW" variant "" }
+
+external function decodePDU(inout octetstring os, out RAW_PDU_179 pdu) return integer
+with { extension "prototype(sliding) decode(RAW) errorbehavior(ALL:WARNING)" }
+
+testcase TC_Decoding_empty_octetstring() runs on TempComp{
+  var octetstring os := ''O;
+  var RAW_PDU_179 pdu;
+  var integer ret_val := decodePDU(os, pdu);
+  if (ret_val>0) {setverdict(pass);} 
+	else {setverdict(fail,"ret_val=",ret_val,";decoded pdu=", pdu );}
+}
+
+//---------------------------------------------------------------------*
+// Testing encoding/decoding of big integers
+//---------------------------------------------------------------------*
+//=================================================
+//   encoding/decoding of big integer variables  
+//=================================================
+
+type integer myint2
+with {
+  variant "FIELDLENGTH(128)"
+  variant "COMP(nosign)"
+  variant "BITORDERINFIELD(lsb)"
+  variant "PADDING(dword32)"
+  encode "RAW" }
+
+type integer myint3
+with {
+  variant "FIELDLENGTH(96)"
+  variant "COMP(signbit)"
+  variant "BITORDERINFIELD(lsb)"
+  variant "PADDING(dword32)"
+  encode "RAW" }
+
+external function enc_raw3(in myint3 r) return octetstring
+  with { extension "encode(RAW) prototype(convert) errorbehavior(ALL:WARNING)" }
+external function dec_raw3(in octetstring r) return myint3
+  with { extension "decode(RAW) prototype(convert) errorbehavior(ALL:WARNING)" }
+external function enc_raw2(in myint2 r) return octetstring
+  with { extension "encode(RAW) prototype(convert) errorbehavior(ALL:WARNING)" }
+external function dec_raw2(in octetstring r) return myint2
+  with { extension "decode(RAW) prototype(convert) errorbehavior(ALL:WARNING)" }
+
+testcase TC_encoding_decoding_of_big_integers() runs on TempComp{
+  var myint3 v1 := -4294967296
+  var myint3 v2 := -2147483647
+  var myint3 v3 := 34359738368
+  var myint3 v4 := 4398046511104
+  var myint3 v5 := -140737488355328
+  var myint3 v6 := 4294967296
+  var myint3 v7 := 4294967295
+  var myint3 v8 := -4294967295
+  var myint3 v9 := 4294967297
+  var myint3 v10 := -4294967297
+  var myint3 v11 := 2147483647
+  var myint3 v12 := -2147483648
+  var myint3 v13 := 2147483648
+  var myint3 v14 := -2147483649
+  var myint3 v15 := 2147483649
+  var myint2 v16 := -4294967296
+  var myint2 v17 := 2147483647
+  var myint2 v18 := 34359738368
+  var myint2 v19 := 4398046511104
+  var octetstring o
+  
+  var octetstring expected1  := '000000000100000000000080'O  //fact: '00000000FF00000000000080'O
+  var octetstring expected2  := 'FFFF FF7F 0000 0000 0000 0080'O;
+  var octetstring expected3  := '0000 0000 0800 0000 0000 0000'O;
+  var octetstring expected4  := '0000 0000 0004 0000 0000 0000'O //dummy
+  var octetstring expected5  := '0000 0000 0080 0000 0000 0080'O //dummy
+  var octetstring expected6  := '0000 0000 0100 0000 0000 0000'O //dummy
+  var octetstring expected7  := 'FFFF FFFF 0000 0000 0000 0000'O //dummy
+  var octetstring expected8  := 'FFFF FFFF 0000 0000 0000 0080'O //dummy
+  
+  var octetstring expected9  := '0100 0000 0100 0000 0000 0000'O //dummy
+  var octetstring expected10 := '0100 0000 0100 0000 0000 0080'O 
+  
+  var octetstring expected11 := 'FFFF FF7F 0000 0000 0000 0000'O 
+  
+  var octetstring expected12 := '0000 0080 0000 0000 0000 0080'O;
+  var octetstring expected13 := '0000 0080 0000 0000 0000 0000'O;
+  
+  var octetstring expected14 := '0100 0080 0000 0000 0000 0080'O;
+//  var octetstring expected15 := '0100 0080 0000 0000 0000 0000'O;
+//  var octetstring expected16 := '0000 0000 0000 0000 0000 0000'O;
+//  var octetstring expected17 := '0000 0000 0000 0000 0000 0000'O;
+//  var octetstring expected18 := '0000 0000 0000 0000 0000 0000'O;
+//  var octetstring expected19 := '0000 0000 0000 0000 0000 0000'O;
+
+  o := enc_raw3(v1);
+  if ( o == expected1) { setverdict(pass) }
+  else { setverdict(fail, "Encoding error 1. Expected: ",expected1, "; got: ",o)}
+  if (v1 == dec_raw3(expected1)) {setverdict(pass)} 
+  else {setverdict(fail, "1. Decoding error of ",expected1, " ;Expected:", v1," got ", dec_raw3(expected1) )}
+
+  o := enc_raw3(v2);
+  if ( o == expected2) { setverdict(pass) }
+  else { setverdict(fail, "Encoding error 2. Expected: ",expected2, "; got: ",o)}
+  if (v2 == dec_raw3(expected2)) {setverdict(pass)} 
+  else {setverdict(fail, "2. Decoding error of ",expected2, " ;Expected: ", v2," got ", dec_raw3(expected2) )}
+
+
+  o := enc_raw3(v3);
+  if ( o == expected3) { setverdict(pass) }
+  else { setverdict(fail, "Encoding error 3. Expected: ",expected3, "; got: ",o)}
+  if (v3 == dec_raw3(expected3)) {setverdict(pass)} 
+  else {setverdict(fail, "3. Decoding error of ",expected3, " ;Expected: ", v3," got ", dec_raw3(expected3) )}
+
+  o := enc_raw3(v4);
+  if ( o == expected4) { setverdict(pass) }
+  else { setverdict(fail, "Encoding error 4. Expected: ",expected4, "; got: ",o)}
+  if (v4 == dec_raw3(expected4)) {setverdict(pass)} 
+  else {setverdict(fail, "4. Decoding error of ",expected4, " ;Expected: ", v4," got ", dec_raw3(expected4) )}
+
+  o := enc_raw3(-140737488355328);
+  if ( o == expected5) { setverdict(pass) }
+  else { setverdict(fail, "Encoding error 5. Expected: ",expected5, "; got: ",o)}
+  if (v5 == dec_raw3(expected5)) {setverdict(pass)} 
+  else {setverdict(fail, "5. Decoding error of ",expected5, " ;Expected: ", v5," got ", dec_raw3(expected5) )}
+
+  o := enc_raw3(v6);
+  if ( o == expected6) { setverdict(pass) }
+  else { setverdict(fail, "Encoding error 6. Expected: ",expected6, "; got: ",o)}
+  if (v6 == dec_raw3(expected6)) {setverdict(pass)} 
+  else {setverdict(fail, "6. Decoding error of ",expected6, " ;Expected: ", v6," got ", dec_raw3(expected6) )}
+  
+  o := enc_raw3(v7);
+  if ( o == expected7) { setverdict(pass) }
+  else { setverdict(fail, "Encoding error 7. Expected: ",expected7, "; got: ",o)}
+  if (v7 == dec_raw3(expected7)) {setverdict(pass)} 
+  else {setverdict(fail, "7. Decoding error of ",expected7, " ;Expected: ", v7," got ", dec_raw3(expected7) )}
+
+  o := enc_raw3(v8);
+  if ( o == expected8) { setverdict(pass) }
+  else { setverdict(fail, "Encoding error 8. Expected: ",expected8, "; got: ",o)}
+  if (v8 == dec_raw3(expected8)) {setverdict(pass)} 
+  else {setverdict(fail, "8. Decoding error of ",expected8, " ;Expected: ", v8," got ", dec_raw3(expected8) )}
+
+  o := enc_raw3(v9);
+  if ( o == expected9) { setverdict(pass) }
+  else { setverdict(fail, "Encoding error 9. Expected: ",expected9, "; got: ",o)}
+  if (v9 == dec_raw3(expected9)) {setverdict(pass)} 
+  else {setverdict(fail, "9. Decoding error of ",expected9, " ;Expected: ", v9," got ", dec_raw3(expected9) )}
+
+  o := enc_raw3(v10);
+  if ( o == expected10) { setverdict(pass) }
+  else { setverdict(fail, "Encoding error 10. Expected: ",expected10, "; got: ",o)}
+  if (v10 == dec_raw3(expected10)) {setverdict(pass)} 
+  else {setverdict(fail, "10. Decoding error of ",expected10, " ;Expected: ", v10," got ", dec_raw3(expected10) )}
+  
+  o := enc_raw3(v11);
+  if ( o == expected11) { setverdict(pass) }
+  else { setverdict(fail, "Encoding error 11. Expected: ",expected11, "; got: ",o)}
+  if (v11 == dec_raw3(expected11)) {setverdict(pass)} 
+  else {setverdict(fail, "11. Decoding error of ",expected11, " ;Expected: ", v11," got ", dec_raw3(expected11) )}
+  
+  o := enc_raw3(v12);
+  if ( o == expected12) { setverdict(pass) }
+  else { setverdict(fail, "Encoding error 12. Expected: ",expected12, "; got: ",o)}
+  if (v12 == dec_raw3(expected12)) {setverdict(pass)} 
+  else {setverdict(fail, "12. Decoding error of ",expected12, " ;Expected: ", v12," got ", dec_raw3(expected12) )}
+  
+  o := enc_raw3(v13);
+  if ( o == expected13) { setverdict(pass) }
+  else { setverdict(fail, "Encoding error 12. Expected: ",expected13, "; got: ",o)}
+  if (v13 == dec_raw3(expected13)) {setverdict(pass)} 
+  else {setverdict(fail, "13. Decoding error of ",expected13, " ;Expected: ", v13," got ", dec_raw3(expected13) )}
+
+  o := enc_raw3(v14);
+  if ( o == expected14) { setverdict(pass) }
+  else { setverdict(fail, "Encoding error 14. Expected: ",expected14, "; got: ",o)}
+  if (v14 == dec_raw3(expected14)) {setverdict(pass)} 
+  else {setverdict(fail, "14. Decoding error of ",expected14, " ;Expected: ", v14," got ", dec_raw3(expected14) )}
+} 
+//=================================================
+// Encoding/decoding records with big integer fields
+//=================================================
+ 
+external function enc_raw(in rec_raw1 r) return octetstring
+  with { extension "encode(RAW) prototype(convert) errorbehavior(ALL:WARNING)" }
+external function dec_raw(in octetstring r) return rec_raw1
+  with { extension "decode(RAW) prototype(convert) errorbehavior(ALL:WARNING)" }
+  
+type integer myint1
+with {
+  variant "FIELDLENGTH(256)"
+  variant "COMP(2scompl)" 
+  variant "BITORDERINFIELD(lsb)"
+  variant "PADDING(dword32)"
+  encode "RAW" } // The script eats the trailing '}' in a new line.
+
+type record rec_raw1 {
+  myint1 int1,
+  myint1 int2
+} with { variant "" encode "RAW" }
+
+ 
+testcase TC_encoding_decoding_records_with_big_integer_fields() runs on TempComp{
+  var rec_raw1 myrec1 := {int1 := -12345678910111213141516, int2 := -3}
+  var octetstring o1 := 'F44174CD76A949BD62FDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF'O;
+  var rec_raw1 myrec2 := {int1 := -11111111111111111111111, int2 := -11111111111111111111111}
+  var octetstring o2 := '398E6356A2915BAAA5FDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF398E6356A2915BAAA5FDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF'O;
+  var rec_raw1 myrec3 := {int1 := -2147483648, int2 := -4294967296}
+  var octetstring o3 := '00000080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF'O;
+  var rec_raw1 myrec4 := {int1 := 2147483648, int2 := -4294967296}
+  var octetstring o4 := '000000800000000000000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF'O;
+  var rec_raw1 myrec5 := {int1 := -2147483649, int2 := 2147483649}
+  var octetstring o5 := 'FFFFFF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0100008000000000000000000000000000000000000000000000000000000000'O;
+  var rec_raw1 myrec6 := {int1 := -1234, int2 := -4321}
+  var octetstring o6 := '2EFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1FEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF'O;
+
+  if (o1 == enc_raw(myrec1)) {setverdict(pass)} 
+	else {setverdict(fail, "myrec1: ", myrec1, "; enc_raw(myrec1): ", enc_raw(myrec1), ";Expected: ",o1)}
+  
+	if (myrec1 == dec_raw(o1)) {setverdict(pass)} 
+	else {setverdict(fail, "o1: ", o1, ";dec_raw(o1):", dec_raw(o1), ";Expected: ", myrec1)}
+  
+	if (o2 == enc_raw(myrec2)) {setverdict(pass)} 
+	else {setverdict(fail, "myrec2: ", myrec2, "; enc_raw(myrec2): ", enc_raw(myrec2), ";Expected: ",o2)}
+  
+	if (myrec2 == dec_raw(o2)) {setverdict(pass)} 
+	else {setverdict(fail, "o2: ", o2, ";dec_raw(o2):", dec_raw(o2), ";Expected: ", myrec2)}
+  
+	if (o3 == enc_raw(myrec3)) {setverdict(pass)} 
+	else {setverdict(fail, "myrec3: ", myrec3, "; enc_raw(myrec1): ", enc_raw(myrec3), ";Expected: ",o3)}
+  
+	if (myrec3 == dec_raw(o3)) {setverdict(pass)} 
+	else {setverdict(fail, "o3: ", o3, ";dec_raw(o3):", dec_raw(o3), ";Expected: ", myrec3)}
+  
+	if (o4 == enc_raw(myrec4)) {setverdict(pass)} 
+	else {setverdict(fail, "myrec4: ", myrec4, "; enc_raw(myrec4): ", enc_raw(myrec4), ";Expected: ",o4)}
+  
+	if (myrec4 == dec_raw(o4)) {setverdict(pass)} 
+	else {setverdict(fail, "o4: ", o4, ";dec_raw(o4):", dec_raw(o4), ";Expected: ", myrec4)}
+  
+	if (o5 == enc_raw(myrec5)) {setverdict(pass)} 
+	else {setverdict(fail, "myrec5: ", myrec5, "; enc_raw(myrec5): ", enc_raw(myrec5), ";Expected: ",o5)} 
+  
+	if (myrec5 == dec_raw(o5)) {setverdict(pass)} 
+	else {setverdict(fail, "o5: ", o5, ";dec_raw(o5):", dec_raw(o5), ";Expected: ", myrec5)}
+  
+	if (o6 == enc_raw(myrec6)) {setverdict(pass)} 
+	else {setverdict(fail, "myrec6: ", myrec6, "; enc_raw(myrec6): ", enc_raw(myrec6), ";Expected: ",o6)} 
+  
+	if (myrec6 == dec_raw(o6)) {setverdict(pass)} 
+	else {setverdict(fail, "o6: ", o6, ";dec_raw(o6):", dec_raw(o6), ";Expected: ", myrec6)}
+  
+}
+
+//=================================================
+//  Multiple optional fields (R8G FOA bug)
+//=================================================
+
+external function enc_PDU_GTPCv2(in PDU_GTPCv2 pdu) return octetstring
+with { extension "prototype(convert)" extension "encode(RAW)" }
+
+external function dec_PDU_GTPCv2(in octetstring stream) return PDU_GTPCv2
+with { extension "prototype(convert)" extension "decode(RAW)" }
+
+type bitstring BIT5 length(5) with { encode "RAW"  variant "FIELDLENGTH(5)" };
+
+type octetstring OCT1_ length(1) with { encode "RAW"  variant "FIELDLENGTH(1)" };
+type octetstring OCT4 length(4) with { encode "RAW"  variant "FIELDLENGTH(4)" };
+type integer LIN1 (0..255) with { encode "RAW"  variant "FIELDLENGTH(8)" };
+
+type integer LIN2_BO_LAST (0..65535) with { encode "RAW"  variant "FIELDLENGTH(16), COMP(nosign), BYTEORDER(last)" };
+
+type record Cause {
+    OCT1_             elementIdentifier, //dec 2, '02'O  
+    LIN2_BO_LAST      lengthIndicator,
+    BIT4              instance,
+    BIT4              spare,
+    OCT1_             causeValue,
+    BIT1              cS,
+    BIT1              bCE,
+    BIT1              pCE,
+    BIT5              spare2,
+    OCT1_             typeOfOffendingIE optional,
+    LIN2_BO_LAST      lengthIndicator2 optional,
+    BIT4              instanceOfOffendingIE optional,
+    BIT4              spare3 optional
+} with { encode "RAW" 
+    variant "PRESENCE (elementIdentifier = '02'O; )" 
+    variant (lengthIndicator) "LENGTHTO(causeValue,cS,bCE,pCE,spare2,typeOfOffendingIE,
+    lengthIndicator2,instanceOfOffendingIE,spare3 )" };
+
+type record Recovery {
+    OCT1_              elementIdentifier,  // dec 3, '03'O 
+    LIN2_BO_LAST      lengthIndicator,
+    BIT4              instance,
+    BIT4              spare,
+    integer           recoveryValue
+} with { encode "RAW" 
+    variant (lengthIndicator) "LENGTHTO(recoveryValue)"
+    variant "PRESENCE (elementIdentifier = '03'O; )" }; 
+
+type set of  ProtocolID_or_ContainerID   ProtocolIDs_and_ContainerIDs;
+
+type record ProtocolID_or_ContainerID {
+    OCT2               protocolID_or_ContainerID,
+    LIN1               lengthIndicator,
+    octetstring        protID_orContID_Contents
+} with { encode "RAW" 
+    variant (lengthIndicator) "LENGTHTO (protID_orContID_Contents)"};
+
+type record ProtocolConfigOptions {
+    OCT1_                         elementIdentifier, // dec 78 '4E'O;
+    LIN2_BO_LAST                 lengthIndicator,
+    BIT4                         instance,
+    BIT4                         spare,
+    BIT3                         configProtocol,
+    BIT4                         spare2,  //'0000'B
+    BIT1                         extensionField,   //'1'B
+    ProtocolIDs_and_ContainerIDs protocolIDs_and_ContainerIDs optional
+} with { encode "RAW" 
+    variant (lengthIndicator) "LENGTHTO(configProtocol,spare2,extensionField,protocolIDs_and_ContainerIDs)"
+    variant "PRESENCE (elementIdentifier = '4E'O; )" };
+
+type record PrivateExtension {
+    OCT1_                         elementIdentifier, // dec 255, 'FF'O
+    LIN2_BO_LAST                 lengthIndicator,
+    BIT4                         instance,
+    BIT4                         spare,
+    integer                      enterpriseID,
+    octetstring                  proprietartyValue 
+}  with { encode "RAW" 
+    variant (lengthIndicator) "LENGTHTO(enterpriseID,proprietartyValue)"; 
+    variant "PRESENCE (elementIdentifier = 'FF'O;)"; };
+
+type set DeleteSessionResponse {
+    Cause                                   cause,
+    Recovery                                recovery optional,
+    ProtocolConfigOptions                   protocolConfigOptions optional, 
+    PrivateExtension                        privateExtension optional };
+
+type union GTPCv2_PDUs {
+    DeleteSessionResponse                        deleteSessionResponse };
+
+type record PDU_GTPCv2 {
+    BIT3                           spare,   //0 
+    BIT1                           t_Bit,
+    BIT1                           p_Bit,
+    BIT3                           version,  //'010'B
+    OCT1_                           messageType,
+    LIN2_BO_LAST                   lengthf, 
+    OCT4                           tEID optional,
+    OCT3                           sequenceNumber,
+    OCT1_                           spare3, // 0
+    GTPCv2_PDUs                    gtpcv2_pdu,
+    PDU_GTPCv2                     piggybackPDU_GTPCv2 optional
+}  with { encode "RAW" 
+    variant (tEID) "PRESENCE(t_Bit = '1'B)";
+    variant (piggybackPDU_GTPCv2) "PRESENCE(p_Bit = '1'B)";   
+    variant (lengthf) "LENGTHTO(tEID,sequenceNumber,spare3,gtpcv2_pdu)";
+    variant (gtpcv2_pdu) "CROSSTAG(
+    deleteSessionResponse,                             messageType = '25'O;  //37
+    )"; };
+
+testcase TC_Multiple_optional_fields() runs on TempComp{
+  var PDU_GTPCv2 vl_temp := dec_PDU_GTPCv2( '48250013800000000249BF000200020010000300010011'O );
+  setverdict(pass);
+}
+
+//===========================================
+//  CONTROL PART
+//===========================================
+control {
+  execute (TC_FIELDLENGTH_16_for_integer());
+  execute (TC_FIELDLENGTH_8_for_integer());
+  execute (TC_FIELDLENGTH_4_for_integer());
+  execute (TC_FIELDLENGTH_16_for_integer_2());
+  execute (TC_FIELDLENGTH_32_for_integer_1_bit_long());
+  execute (TC_Default_FIELDLENGTH_for_integer());
+  execute (TC_FIELDLENGTH_8_for_bitstring());
+  execute (TC_FIELDLENGTH_8_for_bitstring_4_bits_long());
+  execute (TC_FIELDLENGTH_4_for_bitstring());
+  execute (TC_FIELDLENGTH_16_for_bitstring());
+  execute (TC_FIELDLENGTH_24_for_bitstring());
+  execute (TC_FIELDLENGTH_0_for_bitstring());
+  execute (TC_DEFAULT_FIELDLENGTH_for_bitstring());
+  execute (TC_FIELDLENGTH_32_for_bitstring_4_bits_long());
+  execute (TC_FIELDLENGTH_1_for_octetstring());
+  execute (TC_FIELDLENGTH_2_for_octetstring());
+  execute (TC_FIELDLENGTH_2_and_BYTEORDER_first_for_octetstring());
+  execute (TC_FIELDLENGTH_2_and_BYTEORDER_last_for_octetstring());
+  execute (TC_FIELDLENGTH_4_and_BYTEORDER_first_for_octetstring());
+  execute (TC_FIELDLENGTH_4_for_octetstring_3_octets_long());
+  execute (TC_FIELDLENGTH_5_for_octetstring_2_octets_long());
+  execute (TC_FIELDLENGTH_4_and_BYTEORDER_last_for_octetstring());
+  execute (TC_FIELDLENGTH_4_and_BYTEORDER_last_for_octetstring_3_octets_long());
+  execute (TC_Default_FIELDLENGTH_for_octetstring());
+  execute (TC_FIELDLENGTH_0_for_octetstring());
+  execute (TC_FIELDLENGTH_4_for_hexstring());
+  execute (TC_FIELDLENGTH_8_for_hexstring());
+  execute (TC_DEFAULT_FIELDLENGTH_for_hexstring());
+  execute (TC_FIELDLENGTH_0_for_hexstring());
+  execute (TC_FIELDLENGTH_12_for_hexstring_2_hex_long());
+  execute (TC_FIELDLENGTH_4_for_enumerated());
+  execute (TC_FIELDLENGTH_32_for_enumerated());
+  execute (TC_Default_FIELDLENGTH_for_enumerated());
+  execute (TC_FIELDLENGTH_with_length_restriction_bitstring());
+  execute (TC_FIELDLENGTH_with_length_restriction_hexstring());
+  execute (TC_FIELDLENGTH_with_length_restriction_octetstring());
+  execute (TC_FIELDLENGTH_with_length_restriction_record());
+  execute (TC_FIELDLENGTH_with_length_restriction_record_of());
+  execute (TC_FIELDLENGTH_with_length_restriction_set());
+  execute (TC_FIELDLENGTH_with_length_restriction_set_of());
+//error  execute (TC_FIELDLENGTH_with_length_restriction_and_align_bitstring());
+  execute (TC_FIELDLENGTH_with_length_restriction_and_align_hexstring());
+  execute (TC_FIELDLENGTH_with_length_restriction_and_align_octetstring());
+  execute (TC_BYTEORDER_first_for_integer_0());
+  execute (TC_BYTEORDER_first_for_integer_1());
+  execute (TC_BYTEORDER_first_for_integer_18());
+  execute (TC_BYTEORDER_first_and_fieldlength_8_for_integer());
+  execute (TC_BYTEORDER_first_and_fieldlength_16_for_integer());
+  execute (TC_BYTEORDER_last_for_integer_0());
+  execute (TC_BYTEORDER_last_for_integer_1());
+  execute (TC_BYTEORDER_last_for_integer_18());
+  execute (TC_BYTEORDER_last_and_fieldlength_8_for_integer());
+  execute (TC_BYTEORDER_last_and_fieldlength_16_for_integer());
+  execute (TC_BYTEORDER_first_for_bitstring());
+  execute (TC_BYTEORDER_last_for_bitstring());
+  execute (TC_BYTEORDER_first_for_octetstring());
+  execute (TC_BYTEORDER_last_for_octetstring());
+  execute (TC_BYTEORDER_first_for_enumerated());
+  execute (TC_BYTEORDER_last_for_enumerated());
+  execute (TC_BYTEORDER_first_for_hexstring());
+  execute (TC_BYTEORDER_last_for_hexstring());
+  execute(TC_BITORDERINFIELD_lsb_for_integer_8());
+  execute(TC_BITORDERINFIELD_msb_for_integer_8());
+  execute(TC_BITORDERINFIELD_lsb_for_integer_16());
+  execute(TC_BITORDERINFIELD_msb_for_integer_16());
+  execute(TC_BITORDERINFIELD_lsb_for_octetstring_1());
+  execute(TC_BITORDERINFIELD_msb_for_octetstring_1());
+  execute(TC_BITORDERINFIELD_lsb_for_octetstring_2());
+  execute(TC_BITORDERINFIELD_msb_for_octetstring_2());
+  execute(TC_BITORDERINFIELD_lsb_for_bitstring_8());
+  execute(TC_BITORDERINFIELD_msb_for_bitstring_8()); 
+  execute(TC_BITORDERINFIELD_lsb_for_bitstring_16());
+  execute(TC_BITORDERINFIELD_msb_for_bitstring_16()); 
+  execute(TC_BITORDERINFIELD_lsb_for_enumerated_4());
+  execute(TC_BITORDERINFIELD_msb_for_enumerated_8());
+  execute(TC_BITORDERINFIELD_lsb_for_hexstring()); 
+  execute(TC_BITORDERINFIELD_msb_for_hexstring());
+  execute(TC_BITORDERINOCTET_lsb_for_integer_8());
+  execute(TC_BITORDERINOCTET_msb_for_integer_8());
+  execute(TC_BITORDERINOCTET_lsb_for_integer_16());
+  execute(TC_BITORDERINOCTET_msb_for_integer_16());
+  execute(TC_BITORDERINOCTET_lsb_for_octetstring_1());
+  execute(TC_BITORDERINOCTET_msb_for_octetstring_1());
+  execute(TC_BITORDERINOCTET_lsb_for_octetstring_2());
+  execute(TC_BITORDERINOCTET_msb_for_octetstring_2()); 
+  execute(TC_BITORDERINOCTET_lsb_for_bitstring_8()); 
+  execute(TC_BITORDERINOCTET_msb_for_bitstring_8());
+  execute(TC_BITORDERINOCTET_lsb_for_bitstring_16());
+  execute(TC_BITORDERINOCTET_msb_for_bitstring_16());
+  execute(TC_BITORDERINOCTET_lsb_for_enumerated());
+  execute(TC_BITORDERINOCTET_msb_for_enumerated());         
+  execute(TC_BITORDERINOCTET_lsb_for_hexstring());
+  execute(TC_BITORDERINOCTET_msb_for_hexstring());
+  execute(TC_COMP_nosign_for_positive_integer_8());
+  execute(TC_COMP_signbit_for_positive_integer_8());
+  execute(TC_COMP_signbit_for_negative_integer_8()); 
+  execute(TC_COMP_2scompl_for_positive_integer_8());
+  execute(TC_COMP_2scompl_for_negative_integer_8());
+  execute(TC_PADDING_for_integer()); //100
+  execute(TC_PADDING_for_bitstring());
+  execute(TC_PADDING_for_enumerated());
+  execute(TC_PADDING_for_hexstring());
+  execute(TC_PREPADDING_yes_for_bitstring());
+  execute(TC_PREPADDING_yes_for_hexstring());
+  execute(TC_PREPADDING_word16_for_octetstring());
+  execute(TC_PREPADDING_word16_for_record_of());
+  execute(TC_PREPADDING_dword32_for_set_of());
+  execute(TC_PREPADDING_dword32_for_record());
+  execute(TC_PREPADDING_word16_for_set());
+  execute(TC_PREPADDING_word16_for_union());
+  execute(TC_PADDING_PATTERN_for_record_of());
+  execute(TC_PADDING_PATTERN_for_set_of());
+  execute(TC_PADDING_PATTERN_for_record());
+  execute(TC_PADDING_PATTERN_for_set());
+  execute(TC_PADDING_PATTERN_for_union());
+  execute(TC_PADDALL_with_PADDING_Attribute_record());
+  execute(TC_PADDALL_with_PADDING_Attribute_set());
+  execute(TC_PADDALL_with_PREPADDING_Attribute_record());
+  execute(TC_PADDALL_with_PREPADDING_Attribute_set());
+  execute(TC_PTROFFSET_is_set_to_default_base());//120
+  execute(TC_PTROFFSET_is_set_to_the_beginning_of_record());
+  execute(TC_PTROFFSET_is_set_to_data_field());
+  execute(TC_HEXORDER_low_for_hexstring());
+  execute(TC_HEXORDER_high_for_hexstring());
+  execute(TC_EXTENSION_BIT_no_for_octetstring());
+  execute(TC_EXTENSION_BIT_yes_for_octetstring());
+  execute(TC_EXTENSION_BIT_reverse_for_octetstring());
+  execute(TC_EXTENSION_BIT_yes_for_record_of_octetstring());
+  execute(TC_EXTENSION_BIT_no_for_record_of_octetstring());
+  execute(TC_EXTENSION_BIT_yes_for_record_of_bitstring());
+  execute(TC_EXTENSION_BIT_reverse_for_record_of_bitstring());
+  execute(TC_EXTENSION_BIT_yes_for_set_of_bitstring());
+  execute(TC_EXTENSION_BIT_reverse_for_set_of_bitstring());
+  execute(TC_EXTENSION_BIT_yes_for_set_of_hexstring());
+  execute(TC_EXTENSION_BIT_reverse_for_set_of_hexstring());
+  execute(TC_record_with_EXTENSION_BIT_1());
+  execute(TC_record_with_EXTENSION_BIT_2());
+  execute(TC_record_with_EXTENSION_BIT_3());
+  execute(TC_record_with_EXTENSION_BIT_4());
+  execute(TC_record_with_EXTENSION_BIT_5());
+  execute(TC_record_with_EXTENSION_BIT_6());
+  execute(TC_record_with_EXTENSION_BIT_7());
+  execute(TC_record_with_EXTENSION_BIT_8());
+  execute(TC_record_with_EXTENSION_BIT_9());
+  execute(TC_EXTENSION_BIT_GROUP_no());
+  execute(TC_EXTENSION_BIT_GROUP_yes());
+  execute(TC_EXTENSION_BIT_GROUP_yes_2_groups());
+  execute(TC_EXTENSION_BIT_GROUP_yes_reverse_2_groups());
+  execute(TC_ALIGN_right_for_octetstring());
+  execute(TC_ALIGN_left_for_octetstring());
+  execute(TC_ALIGN_right_for_bitstring());
+  execute(TC_ALIGN_left_for_bitstring());
+  execute(TC_record_with_integer_and_octetstring());
+  execute(TC_record_with_default_values_in_field());
+  execute(TC_record_with_bitstring());
+  execute(TC_record_with_enumerated_and_fieldlength_calculation());
+  execute(TC_record_called_from_record());
+  execute(TC_union_called_from_record_with_CROSSTAG());
+  execute(TC_union_called_from_record_with_CROSSTAG_OTHERWISE());
+  execute(TC_record_without_specifying_the_default_attributes_for_fields());
+  execute(TC_record_of_called_from_record());
+  execute(TC_set_with_TAG());
+  execute(TC_union_with_TAG_first_element_called());
+  execute(TC_union_with_TAG_second_element_called());
+  execute(TC_union_with_TAG_third_element_called());
+  execute(TC_union_with_TAG_third_element_called_with_OTHERWISE());
+  execute(TC_set_of_called_from_record());
+  execute(TC_record_with_optional_field_with_PRESENCE());
+  execute(TC_record_with_UNIT());
+  execute(TC_record_with_PTRUNIT());
+  execute(TC_record_with_PTROFFSET());
+  execute(TC_structured_types_1());
+  execute(TC_structured_types_2());
+  execute(TC_structured_types_3());
+  execute(TC_structured_types_4());
+  execute(TC_structured_types_5());
+  execute(TC_structured_types_6());
+  execute(TC_structured_types_7());
+  execute(TC_structured_types_8());
+  execute(TC_structured_types_9());
+  execute(TC_structured_types_10());
+  execute(TC_structured_types_11());
+  execute(TC_structured_types_12());
+  execute(TC_structured_types_13());
+  execute(TC_structured_types_14());
+  execute(TC_structured_types_15());
+  execute(TC_structured_types_16());
+  execute(TC_structured_types_17());
+  execute(TC_Raw_update_test_1());
+  execute(TC_Raw_update_test_2());
+  execute(TC_Raw_update_test_3());
+  execute(TC_Raw_update_test_4());
+  execute(TC_Raw_update_test_5());
+  execute(TC_Raw_update_test_6());
+  execute(TC_Raw_update_test_7());
+  execute(TC_Raw_update_test_8());
+  execute(TC_Raw_update_test_9());
+  execute(TC_Raw_update_test_10());
+  execute(TC_Raw_update_test_11());
+  execute(TC_Raw_update_test_12());
+  execute(TC_Raw_update_test_13());
+  execute(TC_Raw_update_test_14());
+  execute(TC_Raw_update_test_15());
+  execute(TC_Raw_update_test_16());
+  execute(TC_group_raw_attribute_test_1());
+  execute(TC_group_raw_attribute_test_2()); 
+  execute(TC_group_raw_attribute_test_3());
+  execute(TC_group_raw_attribute_test_4());
+  execute(TC_group_raw_attribute_test_5());
+  execute(TC_group_raw_attribute_test_6());
+  execute(TC_group_raw_attribute_test_7());
+  execute(TC_Fast_enc_dec_function());
+  execute(TC_Backtrack_decode_function());
+  execute(TC_Sliding_decode_function());
+  execute(TC_Decoding_empty_octetstring());
+  execute(TC_encoding_decoding_of_big_integers());
+  execute(TC_encoding_decoding_records_with_big_integer_fields());
+  execute(TC_Multiple_optional_fields()); //FOA bug
+}
+}
diff --git a/Regression_Test_java/src/SelectUnion.ttcn b/Regression_Test_java/src/SelectUnion.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..f8e40eaf7b53c14f187a14b7815d63b47915b564
--- /dev/null
+++ b/Regression_Test_java/src/SelectUnion.ttcn
@@ -0,0 +1,323 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Szabo, Bence Janos
+ *
+ ******************************************************************************/
+
+module SelectUnion {
+
+type component EmptyCT {};
+
+type union Messages {
+  integer msg1,
+  bitstring msg2,
+  boolean msg3,
+  octetstring msg4,
+  charstring msg5
+}
+
+
+///////////////////////////////////////////////////////////////////////////////
+
+
+function f_select_union_without_else(in Messages p_msg, out integer result) {
+  select union (p_msg) {
+    case (msg1) { result := 1; }
+    case (msg2) { result := 2; }
+    case (msg3) { result := 3; }
+    case (msg4) { result := 4; }
+    case (msg5) { result := 5; }
+  }
+}
+
+
+testcase tc_SelectUnionWithoutElse() runs on EmptyCT {
+  var integer result;
+  var Messages myMessage;
+
+  myMessage.msg1 := 42;
+  f_select_union_without_else(myMessage, result);
+  if (result != 1) {
+    setverdict(fail);
+  }
+
+  myMessage.msg2 := '0000'B;
+  f_select_union_without_else(myMessage, result);
+  if (result != 2) {
+    setverdict(fail);
+  }
+
+  myMessage.msg3 := false;
+  f_select_union_without_else(myMessage, result);
+  if (result != 3) {
+    setverdict(fail);
+  }
+
+  myMessage.msg4 := 'AAAA'O;
+  f_select_union_without_else(myMessage, result);
+  if (result != 4) {
+    setverdict(fail);
+  }
+
+  myMessage.msg5 := "lorem ipsum";
+  f_select_union_without_else(myMessage, result);
+  if (result != 5) {
+    setverdict(fail);
+  }
+  setverdict(pass);
+}
+
+
+///////////////////////////////////////////////////////////////////////////////
+
+
+function f_select_union_with_else(in Messages p_msg, out integer result) {
+  select union (p_msg) {
+    case (msg1) { result := 1; }
+    case else { result := 0; }
+  }
+}
+
+
+testcase tc_SelectUnionWithElse() runs on EmptyCT {
+  var integer result;
+  var Messages myMessage;
+
+  myMessage.msg1 := 42;
+  f_select_union_with_else(myMessage, result);
+  if (result != 1) {
+    setverdict(fail);
+  }
+
+  myMessage.msg2 := '0000'B;
+  f_select_union_with_else(myMessage, result);
+  if (result != 0) {
+    setverdict(fail);
+  }
+
+  myMessage.msg3 := false;
+  f_select_union_with_else(myMessage, result);
+  if (result != 0) {
+    setverdict(fail);
+  }
+
+  myMessage.msg4 := 'AAAA'O;
+  f_select_union_with_else(myMessage, result);
+  if (result != 0) {
+    setverdict(fail);
+  }
+
+  myMessage.msg5 := "lorem ipsum";
+  f_select_union_with_else(myMessage, result);
+  if (result != 0) {
+    setverdict(fail);
+  }
+  setverdict(pass);
+}
+
+
+///////////////////////////////////////////////////////////////////////////////
+
+
+function f_select_union_anytype(in anytype p_msg, out integer result) {
+  select union (p_msg) {
+    case (integer) { result := 1; }
+    case (bitstring) { result := 2; }
+    case (boolean) { result := 3; }
+    case (octetstring) { result := 4; }
+    case (Messages) { result := 5; }
+    case else { result := 0; }
+  }
+}
+
+
+testcase tc_SelectUnionAnyType() runs on EmptyCT {
+  var integer result;
+  var anytype myAnyType;
+
+  myAnyType.integer := 42;
+  f_select_union_anytype(myAnyType, result);
+  if (result != 1) {
+    setverdict(fail);
+  }
+
+  myAnyType.bitstring := '0000'B;
+  f_select_union_anytype(myAnyType, result);
+  if (result != 2) {
+    setverdict(fail);
+  }
+
+  myAnyType.boolean := false;
+  f_select_union_anytype(myAnyType, result);
+  if (result != 3) {
+    setverdict(fail);
+  }
+
+  myAnyType.octetstring := 'AAAA'O;
+  f_select_union_anytype(myAnyType, result);
+  if (result != 4) {
+    setverdict(fail);
+  }
+
+  myAnyType.Messages.msg4 := 'AAAA'O;
+  f_select_union_anytype(myAnyType, result);
+  if (result != 5) {
+    setverdict(fail);
+  }
+
+  myAnyType.charstring := "lorem ipsum";
+  f_select_union_anytype(myAnyType, result);
+  if (result != 0) {
+    setverdict(fail);
+  }
+  setverdict(pass);
+}
+
+
+///////////////////////////////////////////////////////////////////////////////
+
+
+function f_select_union_multiple_branches(in Messages p_msg, out integer result) {
+  select union (p_msg) {
+    case (msg1) { result := 1; }
+    case (msg2, msg3) { result := 2; }
+    case (msg4, msg5) { result := 3; }
+  }
+}
+
+
+testcase tc_SelectUnionMultipleBranches() runs on EmptyCT {
+  var integer result;
+  var Messages myMessage;
+
+  myMessage.msg1 := 42;
+  f_select_union_multiple_branches(myMessage, result);
+  if (result != 1) {
+    setverdict(fail);
+  }
+
+  myMessage.msg2 := '0000'B;
+  f_select_union_multiple_branches(myMessage, result);
+  if (result != 2) {
+    setverdict(fail);
+  }
+
+  myMessage.msg3 := false;
+  f_select_union_multiple_branches(myMessage, result);
+  if (result != 2) {
+    setverdict(fail);
+  }
+
+  myMessage.msg4 := 'AAAA'O;
+  f_select_union_multiple_branches(myMessage, result);
+  if (result != 3) {
+    setverdict(fail);
+  }
+
+  myMessage.msg5 := "lorem ipsum";
+  f_select_union_multiple_branches(myMessage, result);
+  if (result != 3) {
+    setverdict(fail);
+  }
+  setverdict(pass);
+}
+
+
+///////////////////////////////////////////////////////////////////////////////
+
+
+function f_select_union_multiple_branches_anytype(in anytype p_msg, out integer result) {
+  select union (p_msg) {
+    case (integer) { result := 1; }
+    case (bitstring, boolean) { result := 2; }
+    case (octetstring, charstring) { result := 3; }
+  }
+}
+
+
+testcase tc_SelectUnionMultipleBranchesAnyType() runs on EmptyCT {
+  var integer result;
+  var anytype myMessage;
+
+  myMessage.integer := 42;
+  f_select_union_multiple_branches_anytype(myMessage, result);
+  if (result != 1) {
+    setverdict(fail);
+  }
+
+  myMessage.bitstring := '0000'B;
+  f_select_union_multiple_branches_anytype(myMessage, result);
+  if (result != 2) {
+    setverdict(fail);
+  }
+
+  myMessage.boolean := false;
+  f_select_union_multiple_branches_anytype(myMessage, result);
+  if (result != 2) {
+    setverdict(fail);
+  }
+
+  myMessage.octetstring := 'AAAA'O;
+  f_select_union_multiple_branches_anytype(myMessage, result);
+  if (result != 3) {
+    setverdict(fail);
+  }
+
+  myMessage.charstring := "lorem ipsum";
+  f_select_union_multiple_branches_anytype(myMessage, result);
+  if (result != 3) {
+    setverdict(fail);
+  }
+  setverdict(pass);
+}
+
+
+///////////////////////////////////////////////////////////////////////////////
+
+
+type integer Byte (-128 .. 127) with { variant "8 bit" };
+
+// Just to compile: the head of the select union is a complicated expression
+//function f_select_union_different_codegen(in anytype p_msg, out integer result) {
+//  var Messages arr[1];
+//  var Messages myMessage;
+//  myMessage.msg1 := 1;
+//  arr := { myMessage };
+//  var Byte x := 11;
+//  select union (arr[f_return_1(encvalue_unichar(x, "UTF-8"))]) {
+//    case (msg1) { result := 1; }
+//    case (msg2, msg3) { result := 2; }
+//    case (msg4) { result := 3; }
+//  }
+//}
+
+function f_return_1(in universal charstring str) return integer {
+  return 1;
+}
+
+
+///////////////////////////////////////////////////////////////////////////////
+
+
+control {
+  execute(tc_SelectUnionWithoutElse());
+  execute(tc_SelectUnionWithElse());
+  execute(tc_SelectUnionAnyType());
+  execute(tc_SelectUnionMultipleBranches());
+  execute(tc_SelectUnionMultipleBranchesAnyType());
+}
+}
+
+
+with {
+  extension "anytype integer, bitstring"
+  extension "anytype charstring, boolean, octetstring"
+  extension "anytype Messages"
+  encode "RAW";
+}
\ No newline at end of file
diff --git a/Regression_Test_java/src/TanytypeOper.ttcn b/Regression_Test_java/src/TanytypeOper.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..73683a840e61895e2cf43b2c15e31c6413521f45
--- /dev/null
+++ b/Regression_Test_java/src/TanytypeOper.ttcn
@@ -0,0 +1,740 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Raduly, Csaba
+ *   Szabados, Kristof
+ *
+ ******************************************************************************/
+module TanytypeOper {
+// ********** Type definitions  *********************
+type component anytypeOper_mycomp {}; 
+type enumerated anytypeOper_myenum {xx1,xx2,xx3};
+type record anytypeOper_trecord {
+	integer x1 optional,
+	float x2 };
+type record of octetstring anytypeOper_trecof;
+type set anytypeOper_tset {
+	integer x1,
+	float x2 optional };
+type set of charstring anytypeOper_tsetof;
+
+type union anytypeOper_tunion {
+	integer x1,
+	float x2 };
+
+type integer int;
+
+
+
+
+
+
+
+
+
+
+
+
+
+// *************** Constanst ***********************
+//const anytypeOper_trecord anytypeOper_temp1:={ x1:=omit, x2:=3.4 };
+//const anytypeOper_trecof anytypeOper_temp2:={ 'AF12'O };
+//const anytypeOper_tset anytypeOper_temp3:={ x1:=234, x2:=1.9};
+//const anytypeOper_tsetof anytypeOper_temp4:={"f","8"};
+//const anytypeOper_tunion anytypeOper_temp5:={ x2:=1.3 };
+const anytype anytypeOper_const1:=
+{ integer := 1 }; 	//union with basic types
+
+const anytype anytypeOper_const2:= { 	//union with enum
+  anytypeOper_myenum := xx1 };
+
+const anytype anytypeOper_const3:= {    //union from record
+  anytypeOper_trecord := { x1:=1, x2:=1.2 } } ;
+
+const anytype anytypeOper_const4:={   //union from record of
+  anytypeOper_trecof := { '12AB'O, 'CD12'O } };
+
+const anytype anytypeOper_const5:={   //union from set
+  anytypeOper_tset :={ x1:=2, x2:=1.3} };
+
+const anytype anytypeOper_const6:={   //union from set of
+ anytypeOper_tsetof := {"a","b"} };
+
+const anytype anytypeOper_const7:={   //union from union
+ anytypeOper_tunion :={ x1 :=3 } } ;
+
+testcase anytypeAssign() runs on anytypeOper_mycomp{
+var anytype x1:={	//union with basic types
+  integer:=1 };
+var anytype x2,x3;
+x2:={ float:=1.2 };
+if (x1.integer==1) {setverdict(pass);}	//at declaration
+     else {setverdict(fail);}
+if (ischosen(x1.integer)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1.float))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.float==1.2) {setverdict(pass);}	//later
+     else {setverdict(fail);}
+if (ischosen(x2.float)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2.integer))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase anytypeAssignEnum() runs on anytypeOper_mycomp{
+var anytype x1:={	//union with enum
+  anytypeOper_myenum:=xx1};
+var anytype x2;
+x2:={ anytypeOper_myenum:=xx2 };
+if (x1.anytypeOper_myenum==xx1) {setverdict(pass);}	//at declaration
+     else {setverdict(fail);}
+if (ischosen(x1.anytypeOper_myenum)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1.integer))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.anytypeOper_myenum==xx2) {setverdict(pass);}	//later
+     else {setverdict(fail);}
+if (ischosen(x2.anytypeOper_myenum)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2.integer))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase anytypeAssignRec() runs on anytypeOper_mycomp{
+//var anytypeOper_trecord temp1:={ x1:=omit, x2:=3.4 };
+var anytype x1:={   //union from record
+ anytypeOper_trecord:={ x1:=1, x2:=1.2 } };
+var anytype x2;
+x2:={ anytypeOper_trecord:={ x1:=1, x2:=1.2 } };
+if (x1.anytypeOper_trecord.x1==1) {setverdict(pass);}	//at declaration
+     else {setverdict(fail);}
+if (x1.anytypeOper_trecord.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x1.anytypeOper_trecord)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1.integer))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.anytypeOper_trecord.x1==1) {setverdict(pass);}	//later
+     else {setverdict(fail);}
+if (x2.anytypeOper_trecord.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x2.anytypeOper_trecord)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2.integer))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase anytypeAssignRecof() runs on anytypeOper_mycomp{
+//var anytypeOper_trecof temp2:={'AF12'O};
+var anytype x1:={   //union from record of
+ anytypeOper_trecof := { '12AB'O, 'CD12'O } };
+var anytype x2;
+x2:={  anytypeOper_trecof:={ '12AB'O, 'CD12'O } };
+if (x1.anytypeOper_trecof[0]=='12AB'O) {setverdict(pass);}	//at declaration
+     else {setverdict(fail);}
+if (x1.anytypeOper_trecof[1]=='CD12'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x1.anytypeOper_trecof)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1.integer))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.anytypeOper_trecof[0]=='12AB'O) {setverdict(pass);}	//later
+     else {setverdict(fail);}
+if (x2.anytypeOper_trecof[1]=='CD12'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x2.anytypeOper_trecof)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2.integer))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+
+testcase anytypeAssignSet() runs on anytypeOper_mycomp{
+//var anytypeOper_tset temp1:={ x1:=2, x2:=omit };
+var anytype x1:={   //union from record
+ anytypeOper_tset:={ x1:=1, x2:=1.2 } };
+var anytype x2;
+x2:={   anytypeOper_tset:={ x1:=1, x2:=1.2 } };
+if (x1.anytypeOper_tset.x1==1) {setverdict(pass);}	//at declaration
+     else {setverdict(fail);}
+if (x1.anytypeOper_tset.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x1.anytypeOper_tset)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1.integer))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.anytypeOper_tset.x1==1) {setverdict(pass);}	//later
+     else {setverdict(fail);}
+if (x2.anytypeOper_tset.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x2.anytypeOper_tset)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2.integer))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase anytypeAssignSetof() runs on anytypeOper_mycomp{
+//var anytypeOper_tsetof temp2:={"a","7"};
+var anytype x1:={   //union from set of
+ anytypeOper_tsetof:={ "1", "a" } };
+var anytype x2;
+x2:={  anytypeOper_tsetof:={ "1", "a" } };
+if (x1.anytypeOper_tsetof[0]=="1") {setverdict(pass);}	//at declaration
+     else {setverdict(fail);}
+if (x1.anytypeOper_tsetof[1]=="a") {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x1.anytypeOper_tsetof)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1.integer))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.anytypeOper_tsetof[0]=="1") {setverdict(pass);}	//later
+     else {setverdict(fail);}
+if (x2.anytypeOper_tsetof[1]=="a") {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x2.anytypeOper_tsetof)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2.integer))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase anytypeAssignUnion() runs on anytypeOper_mycomp{
+//var anytypeOper_tunion temp5 := {x2:=1.3}
+var anytype x1:={   //union from union
+ anytypeOper_tunion:={ x1 :=3 } };
+var anytype x2;
+x2:={ anytypeOper_tunion:={ x1 :=3 } };
+if (x1.anytypeOper_tunion.x1==3) {setverdict(pass);}	//at declaration
+     else {setverdict(fail);}
+if (ischosen(x1.anytypeOper_tunion.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1.anytypeOper_tunion.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x1.anytypeOper_tunion)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1.integer))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.anytypeOper_tunion.x1==3) {setverdict(pass);}	//later
+     else {setverdict(fail);}
+if (ischosen(x2.anytypeOper_tunion.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2.anytypeOper_tunion.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x2.anytypeOper_tunion)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2.integer))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase anytypeAssignElem() runs on anytypeOper_mycomp{
+var anytype x1, x2;	//union with basic types
+x1:={ integer:=1 };
+x2:= {integer:=2}
+x1.integer:=3;		// change value
+x2.float:=3.2;		//choose other
+if (x1.integer==3) {setverdict(pass);}	//change value
+     else {setverdict(fail);}
+if (ischosen(x1.integer)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1.float))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.float==3.2) {setverdict(pass);}	//choose other
+     else {setverdict(fail);}
+if (ischosen(x2.float)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2.integer))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase anytypeAssignElemEnum() runs on anytypeOper_mycomp{
+var anytype x1, x2;	//union with enum
+x1:={ anytypeOper_myenum:=xx1 };
+x2:= {anytypeOper_myenum:=xx2}
+x1.anytypeOper_myenum:=xx3;		// change value
+x2.integer:=3;		//choose other
+if (x1.anytypeOper_myenum==xx3) {setverdict(pass);}	//change value
+     else {setverdict(fail);}
+if (ischosen(x1.anytypeOper_myenum)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1.integer))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.integer==3) {setverdict(pass);}	//choose other
+     else {setverdict(fail);}
+if (ischosen(x2.integer)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2.anytypeOper_myenum))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase anytypeAssignElemRec() runs on anytypeOper_mycomp{
+//var anytypeOper_trecord temp1:={ x1:=omit, x2:=3.4 };
+var anytype x1,x2;	//union from record
+x1:={   anytypeOper_trecord:={ x1:=1, x2:=1.2 } };
+x2:={   anytypeOper_trecord:={ x1:=1, x2:=1.2 } };
+x1.anytypeOper_trecord.x1:=2;		//change value
+x2.integer:=2;		//change selection
+if (x1.anytypeOper_trecord.x1==2) {setverdict(pass);}	//change value
+     else {setverdict(fail);}
+if (x1.anytypeOper_trecord.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x1.anytypeOper_trecord)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1.integer))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.integer==2) {setverdict(pass);}	//change selection
+     else {setverdict(fail);}
+if (ischosen(x2.integer)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2.anytypeOper_trecord))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase anytypeAssignElemRecof() runs on anytypeOper_mycomp{
+//var anytypeOper_trecof temp2:={'AF12'O};
+var anytype x1,x2;    //union from record of
+x1:={ anytypeOper_trecof:={ '12AB'O, 'CD12'O } };
+x2:={ anytypeOper_trecof:={ '12AB'O, 'CD12'O } };
+x1.anytypeOper_trecof[1]:='34AB'O;	//change value
+x2.integer:=2;		//change selection
+if (x1.anytypeOper_trecof[0]=='12AB'O) {setverdict(pass);}	//change value
+     else {setverdict(fail);}
+if (x1.anytypeOper_trecof[1]=='34AB'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x1.anytypeOper_trecof)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1.integer))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.integer==2) {setverdict(pass);}	//change selection
+     else {setverdict(fail);}
+if (ischosen(x2.integer)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2.anytypeOper_trecof))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+
+testcase anytypeAssignElemSet() runs on anytypeOper_mycomp{
+//var anytypeOper_tset temp1:={ x1:=2, x2:=omit };
+var anytype x1,x2;   //union from record
+x1:= { anytypeOper_tset:={ x1:=1, x2:=1.2 } };
+x2:= { anytypeOper_tset:={ x1:=1, x2:=1.2 } };
+x1.anytypeOper_tset.x2:=3.4;			//change value
+x2.integer:=3;			//change selection
+if (x1.anytypeOper_tset.x1==1) {setverdict(pass);}	//change value
+     else {setverdict(fail);}
+if (x1.anytypeOper_tset.x2==3.4) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x1.anytypeOper_tset)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1.integer))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.integer==3) {setverdict(pass);}	//change selection
+     else {setverdict(fail);}
+if (ischosen(x2.integer)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2.anytypeOper_tset))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase anytypeAssignElemSetof() runs on anytypeOper_mycomp{
+//var anytypeOper_tsetof temp2:={"a","7"};
+var anytype x1,x2;   //union from record of
+x1:={ anytypeOper_tsetof:={ "1", "a" } };
+x2:={ integer:=1 };
+x1.anytypeOper_tsetof[0]:="h";		//change value
+x2.anytypeOper_tsetof:={ "1", "a" };		//change selection
+if (x1.anytypeOper_tsetof[0]=="h") {setverdict(pass);}	//change value
+     else {setverdict(fail);}
+if (x1.anytypeOper_tsetof[1]=="a") {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x1.anytypeOper_tsetof)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1.integer))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.anytypeOper_tsetof[0]=="1") {setverdict(pass);}	//change selection
+     else {setverdict(fail);}
+if (x2.anytypeOper_tsetof[1]=="a") {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x2.anytypeOper_tsetof)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2.integer))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase anytypeAssignElemUnion() runs on anytypeOper_mycomp{
+//var anytypeOper_tunion temp5 := {x2:=1.3}
+var anytype x1,x2;   //union from union
+x1:={ anytypeOper_tunion:={ x1 :=3 } };
+x2:={ integer:=2 };
+x1.anytypeOper_tunion.x2:=3.4;			//change value
+x2.anytypeOper_tunion:={ x2 :=3.4 };		//change selection
+if (x1.anytypeOper_tunion.x2==3.4) {setverdict(pass);}	//change value
+     else {setverdict(fail);}
+if (ischosen(x1.anytypeOper_tunion.x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1.anytypeOper_tunion.x1))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x1.anytypeOper_tunion)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1.integer))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.anytypeOper_tunion.x2==3.4) {setverdict(pass);}	//change selection
+     else {setverdict(fail);}
+if (ischosen(x2.anytypeOper_tunion.x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2.anytypeOper_tunion.x1))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x2.anytypeOper_tunion)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2.integer))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+
+testcase anytypeConst() runs on anytypeOper_mycomp{
+const anytype const1:={	//union with basic types
+ integer:=1 };
+if (anytypeOper_const1.integer==1) {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+if (ischosen(anytypeOper_const1.integer)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(anytypeOper_const1.float))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const1.integer==1) {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+if (ischosen(const1.integer)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(const1.float))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase anytypeConstEnum() runs on anytypeOper_mycomp{
+const anytype const2:={	//union with enum
+ anytypeOper_myenum:=xx1} ;
+if (anytypeOper_const2.anytypeOper_myenum==xx1) {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+if (ischosen(anytypeOper_const2.anytypeOper_myenum)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(anytypeOper_const2.integer))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const2.anytypeOper_myenum==xx1) {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+if (ischosen(const2.anytypeOper_myenum)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(const2.integer))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase anytypeConstRec() runs on anytypeOper_mycomp{
+const anytype const3:={   //union from record
+  anytypeOper_trecord:={ x1:=1, x2:=1.2 } } ;
+if (anytypeOper_const3.anytypeOper_trecord.x1==1) {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+if (anytypeOper_const3.anytypeOper_trecord.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(anytypeOper_const3.anytypeOper_trecord)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(anytypeOper_const3.integer))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const3.anytypeOper_trecord.x1==1) {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+if (const3.anytypeOper_trecord.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(const3.anytypeOper_trecord)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(const3.integer))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase anytypeConstRecof() runs on anytypeOper_mycomp{
+const anytype const4:={   //union from record of
+ anytypeOper_trecof :={ '12AB'O, 'CD12'O } } ;
+if (anytypeOper_const4.anytypeOper_trecof[0]=='12AB'O) {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+if (anytypeOper_const4.anytypeOper_trecof[1]=='CD12'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(anytypeOper_const4.anytypeOper_trecof)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(anytypeOper_const4.integer))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const4.anytypeOper_trecof[0]=='12AB'O) {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+if (const4.anytypeOper_trecof[1]=='CD12'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(const4.anytypeOper_trecof)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(const4.integer))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+
+testcase anytypeConstSet() runs on anytypeOper_mycomp{
+const anytype const5:={   //union from set
+  anytypeOper_tset :={ x1:=2, x2:=1.3} };
+if (anytypeOper_const5.anytypeOper_tset.x1==2) {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+if (anytypeOper_const5.anytypeOper_tset.x2==1.3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(anytypeOper_const5.anytypeOper_tset)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(anytypeOper_const5.integer))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const5.anytypeOper_tset.x1==2) {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+if (const5.anytypeOper_tset.x2==1.3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(const5.anytypeOper_tset)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(const5.integer))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase anytypeConstSetof() runs on anytypeOper_mycomp{
+const anytype const6:={   //union from set of
+  anytypeOper_tsetof :={"a","b"} };
+if (anytypeOper_const6.anytypeOper_tsetof[0]=="a") {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+if (anytypeOper_const6.anytypeOper_tsetof[1]=="b") {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(anytypeOper_const6.anytypeOper_tsetof)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(anytypeOper_const6.integer))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const6.anytypeOper_tsetof[0]=="a") {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+if (const6.anytypeOper_tsetof[1]=="b") {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(const6.anytypeOper_tsetof)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(const6.integer))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase anytypeConstUnion() runs on anytypeOper_mycomp{
+const anytype const7:={   //union from union
+ anytypeOper_tunion:={ x1 :=3 } };
+if (anytypeOper_const7.anytypeOper_tunion.x1==3) {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+if (ischosen(anytypeOper_const7.anytypeOper_tunion.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(anytypeOper_const7.anytypeOper_tunion.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(anytypeOper_const7.anytypeOper_tunion)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(anytypeOper_const7.integer))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const7.anytypeOper_tunion.x1==3) {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+if (ischosen(const7.anytypeOper_tunion.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(const7.anytypeOper_tunion.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(const7.anytypeOper_tunion)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(const7.integer))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase anytypeComp() runs on anytypeOper_mycomp{
+var anytype x1,x2,x3,x4;
+x1:={ integer:=1  };
+x2:={ integer:=1 };
+x3:={ integer:=2 };		// different value
+x4:={ float:=1.2 };	// different selection
+if (x1==x2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1==x3)) {setverdict(pass);}	// different value
+     else {setverdict(fail);}
+if (not(x4==x1)) {setverdict(pass);}	// different selection
+     else {setverdict(fail);}
+if (not(x1!=x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1!=x3) {setverdict(pass);}		// different value
+     else {setverdict(fail);}
+if (x4!=x2) {setverdict(pass);}		// different selection
+     else {setverdict(fail);}
+}
+
+testcase anytypeCompSame() runs on anytypeOper_mycomp{
+var anytype x1,x2;
+x1:={ integer:=1  };			// same value, different selection
+x2:={ int:=1 };
+if (x1!=x2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1==x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase anytypeCompEnum() runs on anytypeOper_mycomp{
+var anytype x1,x2,x3,x4;
+x1:={ anytypeOper_myenum:=xx1  };
+x2:={ anytypeOper_myenum:=xx1 };
+x3:={ anytypeOper_myenum:=xx2 };		// different value
+x4:={ integer:=1 };	// different selection
+if (x1==x2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1==x3)) {setverdict(pass);}	// different value
+     else {setverdict(fail);}
+if (not(x4==x1)) {setverdict(pass);}	// different selection
+     else {setverdict(fail);}
+if (not(x1!=x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1!=x3) {setverdict(pass);}		// different value
+     else {setverdict(fail);}
+if (x4!=x2) {setverdict(pass);}		// different selection
+     else {setverdict(fail);}
+}
+
+
+testcase anytypeCompRec() runs on anytypeOper_mycomp{
+//var anytypeOper_trecord temp1:={ x1:=omit, x2:=3.4 };
+var anytype x1,x2,x3,x4;
+x1 :={  anytypeOper_trecord:={ x1:=1, x2:=1.2 } };
+x2 :={  anytypeOper_trecord:={ x1:=1, x2:=1.2 } };
+x3 :={  anytypeOper_trecord:={ x1:=2, x2:=1.2 } }; // different value
+x4 :={  integer:=1 }; // different selection
+if (x1==x2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1==x3)) {setverdict(pass);}	// different value
+     else {setverdict(fail);}
+if (not(x4==x1)) {setverdict(pass);}	// different selection
+     else {setverdict(fail);}
+if (not(x1!=x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1!=x3) {setverdict(pass);}		// different value
+     else {setverdict(fail);}
+if (x4!=x2) {setverdict(pass);}		// different selection
+     else {setverdict(fail);}
+}
+
+
+testcase anytypeCompRecof() runs on anytypeOper_mycomp{
+//var anytypeOper_trecof temp2:={'AF12'O};
+var anytype x1,x2,x3,x4;	//union from record of
+x1:={  anytypeOper_trecof:={ '12AB'O, 'CD12'O } };
+x2:={  anytypeOper_trecof:={ '12AB'O, 'CD12'O } };
+x3:={  anytypeOper_trecof:={ '12AB'O } };		//different value
+x4:={  integer:=12 };		//different selection
+if (x1==x2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1==x3)) {setverdict(pass);}	// different value
+     else {setverdict(fail);}
+if (not(x4==x1)) {setverdict(pass);}	// different selection
+     else {setverdict(fail);}
+if (not(x1!=x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1!=x3) {setverdict(pass);}		// different value
+     else {setverdict(fail);}
+if (x4!=x2) {setverdict(pass);}		// different selection
+     else {setverdict(fail);}
+}
+
+
+testcase anytypeCompSet() runs on anytypeOper_mycomp{
+//var anytypeOper_tset temp1:={ x1:=2, x2:=omit };
+var anytype x1,x2,x3,x4; // union from set
+x1:={ anytypeOper_tset:={ x1:=1, x2:=1.2 } };
+x2:={ anytypeOper_tset:={ x1:=1, x2:=1.2 } };
+x3:={ anytypeOper_tset:={ x1:=4, x2:=1.2 } }; // different value
+x4:={ integer:=4 }; 			// different selection
+if (x1==x2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1==x3)) {setverdict(pass);}	// different value
+     else {setverdict(fail);}
+if (not(x4==x1)) {setverdict(pass);}	// different selection
+     else {setverdict(fail);}
+if (not(x1!=x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1!=x3) {setverdict(pass);}		// different value
+     else {setverdict(fail);}
+if (x4!=x2) {setverdict(pass);}		// different selection
+     else {setverdict(fail);}
+}
+
+testcase anytypeCompSetof() runs on anytypeOper_mycomp{
+//var anytypeOper_tsetof temp2:={"a","7"};
+var anytype x1,x2,x3,x4;	//union from record of
+x1:={ anytypeOper_tsetof:={ "1", "a" } };
+x2:={ anytypeOper_tsetof:={ "1", "a" } };
+x3:={ anytypeOper_tsetof:={ "1", "a", "k" } };	//different value
+x4:={ integer:=2 };			//different selection
+if (x1==x2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1==x3)) {setverdict(pass);}	// different value
+     else {setverdict(fail);}
+if (not(x4==x1)) {setverdict(pass);}	// different selection
+     else {setverdict(fail);}
+if (not(x1!=x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1!=x3) {setverdict(pass);}		// different value
+     else {setverdict(fail);}
+if (x4!=x2) {setverdict(pass);}		// different selection
+     else {setverdict(fail);}
+}
+
+testcase anytypeCompUnion() runs on anytypeOper_mycomp{
+//var anytypeOper_tunion temp5 := {x2:=1.3}
+var anytype x1,x2,x3,x4;	// union form union
+x1:={  anytypeOper_tunion:={ x1 :=3 } };
+x2:={  anytypeOper_tunion:={ x1 :=3 } };
+x3:={  anytypeOper_tunion:={ x2 :=3.9 } };		//different value
+x4:={  integer:=3 };				//different selection
+if (x1==x2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1==x3)) {setverdict(pass);}	// different value
+     else {setverdict(fail);}
+if (not(x4==x1)) {setverdict(pass);}	// different selection
+     else {setverdict(fail);}
+if (not(x1!=x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1!=x3) {setverdict(pass);}		// different value
+     else {setverdict(fail);}
+if (x4!=x2) {setverdict(pass);}		// different selection
+     else {setverdict(fail);}
+}
+
+
+control {
+ execute(anytypeAssign());
+ execute(anytypeAssignEnum());
+ execute(anytypeAssignRec());
+ execute(anytypeAssignRecof());
+ execute(anytypeAssignSet());
+ execute(anytypeAssignSetof());
+ execute(anytypeAssignUnion());
+ execute(anytypeAssignElem());
+ execute(anytypeAssignElemEnum());
+ execute(anytypeAssignElemRec());
+ execute(anytypeAssignElemRecof());
+ execute(anytypeAssignElemSet());
+ execute(anytypeAssignElemSetof());
+ execute(anytypeAssignElemUnion());
+ execute(anytypeConst());
+ execute(anytypeConstEnum());
+ execute(anytypeConstRec());
+ execute(anytypeConstRecof());
+ execute(anytypeConstSet());
+ execute(anytypeConstSetof());
+ execute(anytypeConstUnion())
+ execute(anytypeComp());
+ execute(anytypeCompSame());
+ execute(anytypeCompEnum());
+ execute(anytypeCompRec());
+ execute(anytypeCompRecof());
+ execute(anytypeCompSet());
+ execute(anytypeCompSetof());
+ execute(anytypeCompUnion())
+}
+}
+with {
+extension "anytype int, integer, float, anytypeOper_tunion, anytypeOper_myenum"
+extension "anytype anytypeOper_trecord, anytypeOper_trecof"
+extension "anytype anytypeOper_tset,    anytypeOper_tsetof"
+}
+
diff --git a/Regression_Test_java/src/TanytypeWrapOper.ttcn b/Regression_Test_java/src/TanytypeWrapOper.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..d2a7ba751a8d6a339c0476112ed4dd0929ebf3f6
--- /dev/null
+++ b/Regression_Test_java/src/TanytypeWrapOper.ttcn
@@ -0,0 +1,748 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Raduly, Csaba
+ *   Szabados, Kristof
+ *
+ ******************************************************************************/
+module TanytypeWrapOper {
+// ********** Type definitions  *********************
+type component anytypeWrapOper_mycomp {};
+type enumerated anytypeWrapOper_myenum {xx1,xx2,xx3};
+type record anytypeWrapOper_trecord {
+	integer x1 optional,
+	float x2 };
+type record of octetstring anytypeWrapOper_trecof;
+type set anytypeWrapOper_tset {
+	integer x1,
+	float x2 optional };
+type set of charstring anytypeWrapOper_tsetof;
+
+type union anytypeWrapOper_tunion {
+	integer x1,
+	float x2 };
+type union anytypeWrapOper_myunion1 {integer x1, float x2}; 	// union of basic types
+type union anytypeWrapOper_myunion2 {  // union of enum
+	anytypeWrapOper_myenum x1,
+	integer x2};
+type union anytypeWrapOper_myunion3 {  // union of record
+	anytypeWrapOper_trecord x1,
+	integer x2};
+type union anytypeWrapOper_myunion4 { // union of record of
+	anytypeWrapOper_trecof x1,
+	integer x2};
+type union anytypeWrapOper_myunion5 {  // union of set
+	anytypeWrapOper_tset x1,
+	integer x2};
+type union anytypeWrapOper_myunion6 { // union of set of
+	anytypeWrapOper_tsetof x1,
+	integer x2};
+type union anytypeWrapOper_myunion7 { // union of union
+	anytypeWrapOper_tunion x1,
+	integer x2};
+type union anytypeWrapOper_myunion8 { // union of same types
+	integer x1,
+	integer x2};
+
+// *************** Constanst ***********************
+//const anytypeWrapOper_trecord anytypeWrapOper_temp1:={ x1:=omit, x2:=3.4 };
+//const anytypeWrapOper_trecof anytypeWrapOper_temp2:={ 'AF12'O };
+//const anytypeWrapOper_tset anytypeWrapOper_temp3:={ x1:=234, x2:=1.9};
+//const anytypeWrapOper_tsetof anytypeWrapOper_temp4:={"f","8"};
+//const anytypeWrapOper_tunion anytypeWrapOper_temp5:={ x2:=1.3 };
+const anytype anytypeWrapOper_const1:=
+{ anytypeWrapOper_myunion1 := { x1:=1 } }; 	//union with basic types
+
+const anytype anytypeWrapOper_const2:= { anytypeWrapOper_myunion2 := {	//union with enum
+  x1:=xx1 }};
+
+const anytype anytypeWrapOper_const3:= { anytypeWrapOper_myunion3 := {   //union from record
+  x1:={ x1:=1, x2:=1.2 } } };
+
+const anytype anytypeWrapOper_const4:={   //union from record of
+ anytypeWrapOper_myunion4 := { x1:={ '12AB'O, 'CD12'O } } };
+
+const anytype anytypeWrapOper_const5:={   //union from set
+ anytypeWrapOper_myunion5 := { x1:={ x1:=2, x2:=1.3} } };
+
+const anytype anytypeWrapOper_const6:={   //union from set of
+ anytypeWrapOper_myunion6 := { x1:={"a","b"} } };
+
+const anytype anytypeWrapOper_const7:={   //union from union
+ anytypeWrapOper_myunion7 := { x1:={ x1 :=3 } } };
+
+testcase anytypewrapAssign() runs on anytypeWrapOper_mycomp{
+var anytype x1:={	//union with basic types
+  anytypeWrapOper_myunion1 := { x1:=1} };
+var anytypeWrapOper_myunion1 x2,x3;
+x2:={ x2:=1.2 };
+if (x1.anytypeWrapOper_myunion1.x1==1) {setverdict(pass);}	//at declaration
+     else {setverdict(fail);}
+if (ischosen(x1.anytypeWrapOper_myunion1.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1.anytypeWrapOper_myunion1.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.x2==1.2) {setverdict(pass);}	//later
+     else {setverdict(fail);}
+if (ischosen(x2.x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2.x1))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase anytypewrapAssignEnum() runs on anytypeWrapOper_mycomp{
+var anytypeWrapOper_myunion2 x1:={	//union with enum
+  x1:=xx1};
+var anytypeWrapOper_myunion2 x2;
+x2:={ x1:=xx2 };
+if (x1.x1==xx1) {setverdict(pass);}	//at declaration
+     else {setverdict(fail);}
+if (ischosen(x1.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.x1==xx2) {setverdict(pass);}	//later
+     else {setverdict(fail);}
+if (ischosen(x2.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase anytypewrapAssignRec() runs on anytypeWrapOper_mycomp{
+//var anytypeWrapOper_trecord temp1:={ x1:=omit, x2:=3.4 };
+var anytypeWrapOper_myunion3 x1:={   //union from record
+ x1:={ x1:=1, x2:=1.2 } };
+var anytypeWrapOper_myunion3 x2;
+x2:={ x1:={ x1:=1, x2:=1.2 } };
+if (x1.x1.x1==1) {setverdict(pass);}	//at declaration
+     else {setverdict(fail);}
+if (x1.x1.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x1.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.x1.x1==1) {setverdict(pass);}	//later
+     else {setverdict(fail);}
+if (x2.x1.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x2.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase anytypewrapAssignRecof() runs on anytypeWrapOper_mycomp{
+//var anytypeWrapOper_trecof temp2:={'AF12'O};
+var anytypeWrapOper_myunion4 x1:={   //union from record of
+ x1:={ '12AB'O, 'CD12'O } };
+var anytypeWrapOper_myunion4 x2;
+x2:={  x1:={ '12AB'O, 'CD12'O } };
+if (x1.x1[0]=='12AB'O) {setverdict(pass);}	//at declaration
+     else {setverdict(fail);}
+if (x1.x1[1]=='CD12'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x1.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.x1[0]=='12AB'O) {setverdict(pass);}	//later
+     else {setverdict(fail);}
+if (x2.x1[1]=='CD12'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x2.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+
+testcase anytypewrapAssignSet() runs on anytypeWrapOper_mycomp{
+//var anytypeWrapOper_tset temp1:={ x1:=2, x2:=omit };
+var anytypeWrapOper_myunion5 x1:={   //union from record
+ x1:={ x1:=1, x2:=1.2 } };
+var anytypeWrapOper_myunion5 x2;
+x2:={   x1:={ x1:=1, x2:=1.2 } };
+if (x1.x1.x1==1) {setverdict(pass);}	//at declaration
+     else {setverdict(fail);}
+if (x1.x1.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x1.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.x1.x1==1) {setverdict(pass);}	//later
+     else {setverdict(fail);}
+if (x2.x1.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x2.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase anytypewrapAssignSetof() runs on anytypeWrapOper_mycomp{
+//var anytypeWrapOper_tsetof temp2:={"a","7"};
+var anytypeWrapOper_myunion6 x1:={   //union from set of
+ x1:={ "1", "a" } };
+var anytypeWrapOper_myunion6 x2;
+x2:={  x1:={ "1", "a" } };
+if (x1.x1[0]=="1") {setverdict(pass);}	//at declaration
+     else {setverdict(fail);}
+if (x1.x1[1]=="a") {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x1.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.x1[0]=="1") {setverdict(pass);}	//later
+     else {setverdict(fail);}
+if (x2.x1[1]=="a") {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x2.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase anytypewrapAssignUnion() runs on anytypeWrapOper_mycomp{
+var anytypeWrapOper_tunion temp5 := {x2:=1.3}
+var anytypeWrapOper_myunion7 x1:={   //union from union
+ x1:={ x1 :=3 } };
+var anytypeWrapOper_myunion7 x2;
+x2:={ x1:={ x1 :=3 } };
+if (x1.x1.x1==3) {setverdict(pass);}	//at declaration
+     else {setverdict(fail);}
+if (ischosen(x1.x1.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1.x1.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x1.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.x1.x1==3) {setverdict(pass);}	//later
+     else {setverdict(fail);}
+if (ischosen(x2.x1.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2.x1.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x2.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase anytypewrapAssignElem() runs on anytypeWrapOper_mycomp{
+var anytypeWrapOper_myunion1 x1, x2;	//union with basic types
+x1:={ x1:=1 };
+x2:= {x1:=2}
+x1.x1:=3;		// change value
+x2.x2:=3.2;		//choose other
+if (x1.x1==3) {setverdict(pass);}	//change value
+     else {setverdict(fail);}
+if (ischosen(x1.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.x2==3.2) {setverdict(pass);}	//choose other
+     else {setverdict(fail);}
+if (ischosen(x2.x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2.x1))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase anytypewrapAssignElemEnum() runs on anytypeWrapOper_mycomp{
+var anytypeWrapOper_myunion2 x1, x2;	//union with enum
+x1:={ x1:=xx1 };
+x2:= {x1:=xx2}
+x1.x1:=xx3;		// change value
+x2.x2:=3;		//choose other
+if (x1.x1==xx3) {setverdict(pass);}	//change value
+     else {setverdict(fail);}
+if (ischosen(x1.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.x2==3) {setverdict(pass);}	//choose other
+     else {setverdict(fail);}
+if (ischosen(x2.x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2.x1))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase anytypewrapAssignElemRec() runs on anytypeWrapOper_mycomp{
+//var anytypeWrapOper_trecord temp1:={ x1:=omit, x2:=3.4 };
+var anytypeWrapOper_myunion3 x1,x2;	//union from record
+x1:={   x1:={ x1:=1, x2:=1.2 } };
+x2:={   x1:={ x1:=1, x2:=1.2 } };
+x1.x1.x1:=2;		//change value
+x2.x2:=2;		//change selection
+if (x1.x1.x1==2) {setverdict(pass);}	//change value
+     else {setverdict(fail);}
+if (x1.x1.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x1.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.x2==2) {setverdict(pass);}	//change selection
+     else {setverdict(fail);}
+if (ischosen(x2.x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2.x1))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase anytypewrapAssignElemRecof() runs on anytypeWrapOper_mycomp{
+//var anytypeWrapOper_trecof temp2:={'AF12'O};
+var anytypeWrapOper_myunion4 x1,x2;    //union from record of
+x1:={ x1:={ '12AB'O, 'CD12'O } };
+x2:={ x1:={ '12AB'O, 'CD12'O } };
+x1.x1[1]:='34AB'O;	//change value
+x2.x2:=2;		//change selection
+if (x1.x1[0]=='12AB'O) {setverdict(pass);}	//change value
+     else {setverdict(fail);}
+if (x1.x1[1]=='34AB'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x1.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.x2==2) {setverdict(pass);}	//change selection
+     else {setverdict(fail);}
+if (ischosen(x2.x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2.x1))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+
+testcase anytypewrapAssignElemSet() runs on anytypeWrapOper_mycomp{
+//var anytypeWrapOper_tset temp1:={ x1:=2, x2:=omit };
+var anytypeWrapOper_myunion5 x1,x2;   //union from record
+x1:= { x1:={ x1:=1, x2:=1.2 } };
+x2:= { x1:={ x1:=1, x2:=1.2 } };
+x1.x1.x2:=3.4;			//change value
+x2.x2:=3;			//change selection
+if (x1.x1.x1==1) {setverdict(pass);}	//change value
+     else {setverdict(fail);}
+if (x1.x1.x2==3.4) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x1.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.x2==3) {setverdict(pass);}	//change selection
+     else {setverdict(fail);}
+if (ischosen(x2.x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2.x1))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase anytypewrapAssignElemSetof() runs on anytypeWrapOper_mycomp{
+//var anytypeWrapOper_tsetof temp2:={"a","7"};
+var anytypeWrapOper_myunion6 x1,x2;   //union from record of
+x1:={ x1:={ "1", "a" } };
+x2:={ x2:=1 };
+x1.x1[0]:="h";		//change value
+x2.x1:={ "1", "a" };		//change selection
+if (x1.x1[0]=="h") {setverdict(pass);}	//change value
+     else {setverdict(fail);}
+if (x1.x1[1]=="a") {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x1.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.x1[0]=="1") {setverdict(pass);}	//change selection
+     else {setverdict(fail);}
+if (x2.x1[1]=="a") {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x2.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase anytypewrapAssignElemUnion() runs on anytypeWrapOper_mycomp{
+//var anytypeWrapOper_tunion temp5 := {x2:=1.3}
+var anytypeWrapOper_myunion7 x1,x2;   //union from union
+x1:={ x1:={ x1 :=3 } };
+x2:={ x2:=2 };
+x1.x1.x2:=3.4;			//change value
+x2.x1:={ x2 :=3.4 };		//change selection
+if (x1.x1.x2==3.4) {setverdict(pass);}	//change value
+     else {setverdict(fail);}
+if (ischosen(x1.x1.x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1.x1.x1))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x1.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.x1.x2==3.4) {setverdict(pass);}	//change selection
+     else {setverdict(fail);}
+if (ischosen(x2.x1.x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2.x1.x1))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x2.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+
+testcase anytypewrapConst() runs on anytypeWrapOper_mycomp{
+const anytype const1:={	//union with basic types
+ anytypeWrapOper_myunion1 := { x1:=1 } };
+if (anytypeWrapOper_const1.anytypeWrapOper_myunion1.x1==1) {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+if (ischosen(anytypeWrapOper_const1.anytypeWrapOper_myunion1.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(anytypeWrapOper_const1.anytypeWrapOper_myunion1.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const1.anytypeWrapOper_myunion1.x1==1) {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+if (ischosen(const1.anytypeWrapOper_myunion1.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(const1.anytypeWrapOper_myunion1.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase anytypewrapConstEnum() runs on anytypeWrapOper_mycomp{
+const anytype const2:={	//union with enum
+ anytypeWrapOper_myunion2 := {x1:=xx1} };
+if (anytypeWrapOper_const2.anytypeWrapOper_myunion2.x1==xx1) {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+if (ischosen(anytypeWrapOper_const2.anytypeWrapOper_myunion2.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(anytypeWrapOper_const2.anytypeWrapOper_myunion2.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const2.anytypeWrapOper_myunion2.x1==xx1) {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+if (ischosen(const2.anytypeWrapOper_myunion2.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(const2.anytypeWrapOper_myunion2.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase anytypewrapConstRec() runs on anytypeWrapOper_mycomp{
+const anytype const3:={   //union from record
+ anytypeWrapOper_myunion3 := { x1:={ x1:=1, x2:=1.2 } } };
+if (anytypeWrapOper_const3.anytypeWrapOper_myunion3.x1.x1==1) {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+if (anytypeWrapOper_const3.anytypeWrapOper_myunion3.x1.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(anytypeWrapOper_const3.anytypeWrapOper_myunion3.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(anytypeWrapOper_const3.anytypeWrapOper_myunion3.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const3.anytypeWrapOper_myunion3.x1.x1==1) {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+if (const3.anytypeWrapOper_myunion3.x1.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(const3.anytypeWrapOper_myunion3.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(const3.anytypeWrapOper_myunion3.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase anytypewrapConstRecof() runs on anytypeWrapOper_mycomp{
+const anytype const4:={   //union from record of
+ anytypeWrapOper_myunion4 := { x1:={ '12AB'O, 'CD12'O } } };
+if (anytypeWrapOper_const4.anytypeWrapOper_myunion4.x1[0]=='12AB'O) {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+if (anytypeWrapOper_const4.anytypeWrapOper_myunion4.x1[1]=='CD12'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(anytypeWrapOper_const4.anytypeWrapOper_myunion4.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(anytypeWrapOper_const4.anytypeWrapOper_myunion4.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const4.anytypeWrapOper_myunion4.x1[0]=='12AB'O) {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+if (const4.anytypeWrapOper_myunion4.x1[1]=='CD12'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(const4.anytypeWrapOper_myunion4.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(const4.anytypeWrapOper_myunion4.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+
+testcase anytypewrapConstSet() runs on anytypeWrapOper_mycomp{
+const anytype const5:={   //union from set
+ anytypeWrapOper_myunion5 := { x1:={ x1:=2, x2:=1.3} } };
+if (anytypeWrapOper_const5.anytypeWrapOper_myunion5.x1.x1==2) {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+if (anytypeWrapOper_const5.anytypeWrapOper_myunion5.x1.x2==1.3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(anytypeWrapOper_const5.anytypeWrapOper_myunion5.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(anytypeWrapOper_const5.anytypeWrapOper_myunion5.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const5.anytypeWrapOper_myunion5.x1.x1==2) {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+if (const5.anytypeWrapOper_myunion5.x1.x2==1.3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(const5.anytypeWrapOper_myunion5.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(const5.anytypeWrapOper_myunion5.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase anytypewrapConstSetof() runs on anytypeWrapOper_mycomp{
+const anytype const6:={   //union from set of
+ anytypeWrapOper_myunion6 := { x1:={"a","b"} } };
+if (anytypeWrapOper_const6.anytypeWrapOper_myunion6.x1[0]=="a") {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+if (anytypeWrapOper_const6.anytypeWrapOper_myunion6.x1[1]=="b") {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(anytypeWrapOper_const6.anytypeWrapOper_myunion6.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(anytypeWrapOper_const6.anytypeWrapOper_myunion6.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const6.anytypeWrapOper_myunion6.x1[0]=="a") {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+if (const6.anytypeWrapOper_myunion6.x1[1]=="b") {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(const6.anytypeWrapOper_myunion6.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(const6.anytypeWrapOper_myunion6.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase anytypewrapConstUnion() runs on anytypeWrapOper_mycomp{
+const anytype const7:={   //union from union
+ anytypeWrapOper_myunion7 := { x1:={ x1 :=3 } } };
+if (anytypeWrapOper_const7.anytypeWrapOper_myunion7.x1.x1==3) {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+if (ischosen(anytypeWrapOper_const7.anytypeWrapOper_myunion7.x1.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(anytypeWrapOper_const7.anytypeWrapOper_myunion7.x1.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(anytypeWrapOper_const7.anytypeWrapOper_myunion7.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(anytypeWrapOper_const7.anytypeWrapOper_myunion7.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const7.anytypeWrapOper_myunion7.x1.x1==3) {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+if (ischosen(const7.anytypeWrapOper_myunion7.x1.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(const7.anytypeWrapOper_myunion7.x1.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(const7.anytypeWrapOper_myunion7.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(const7.anytypeWrapOper_myunion7.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase anytypewrapComp() runs on anytypeWrapOper_mycomp{
+var anytypeWrapOper_myunion1 x1,x2,x3,x4;
+x1:={ x1:=1  };
+x2:={ x1:=1 };
+x3:={ x1:=2 };		// different value
+x4:={ x2:=1.2 };	// different selection
+if (x1==x2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1==x3)) {setverdict(pass);}	// different value
+     else {setverdict(fail);}
+if (not(x4==x1)) {setverdict(pass);}	// different selection
+     else {setverdict(fail);}
+if (not(x1!=x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1!=x3) {setverdict(pass);}		// different value
+     else {setverdict(fail);}
+if (x4!=x2) {setverdict(pass);}		// different selection
+     else {setverdict(fail);}
+}
+
+testcase anytypewrapCompSame() runs on anytypeWrapOper_mycomp{
+var anytypeWrapOper_myunion8 x1,x2;
+x1:={ x1:=1  };			// same value, different selection
+x2:={ x2:=1 };
+if (x1!=x2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1==x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase anytypewrapCompEnum() runs on anytypeWrapOper_mycomp{
+var anytypeWrapOper_myunion2 x1,x2,x3,x4;
+x1:={ x1:=xx1  };
+x2:={ x1:=xx1 };
+x3:={ x1:=xx2 };		// different value
+x4:={ x2:=1 };	// different selection
+if (x1==x2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1==x3)) {setverdict(pass);}	// different value
+     else {setverdict(fail);}
+if (not(x4==x1)) {setverdict(pass);}	// different selection
+     else {setverdict(fail);}
+if (not(x1!=x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1!=x3) {setverdict(pass);}		// different value
+     else {setverdict(fail);}
+if (x4!=x2) {setverdict(pass);}		// different selection
+     else {setverdict(fail);}
+}
+
+
+testcase anytypewrapCompRec() runs on anytypeWrapOper_mycomp{
+//var anytypeWrapOper_trecord temp1:={ x1:=omit, x2:=3.4 };
+var anytypeWrapOper_myunion3 x1,x2,x3,x4;
+x1 :={  x1:={ x1:=1, x2:=1.2 } };
+x2 :={  x1:={ x1:=1, x2:=1.2 } };
+x3 :={  x1:={ x1:=2, x2:=1.2 } }; // different value
+x4 :={  x2:=1 }; // different selection
+if (x1==x2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1==x3)) {setverdict(pass);}	// different value
+     else {setverdict(fail);}
+if (not(x4==x1)) {setverdict(pass);}	// different selection
+     else {setverdict(fail);}
+if (not(x1!=x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1!=x3) {setverdict(pass);}		// different value
+     else {setverdict(fail);}
+if (x4!=x2) {setverdict(pass);}		// different selection
+     else {setverdict(fail);}
+}
+
+
+testcase anytypewrapCompRecof() runs on anytypeWrapOper_mycomp{
+//var anytypeWrapOper_trecof temp2:={'AF12'O};
+var anytypeWrapOper_myunion4 x1,x2,x3,x4;	//union from record of
+x1:={  x1:={ '12AB'O, 'CD12'O } };
+x2:={  x1:={ '12AB'O, 'CD12'O } };
+x3:={  x1:={ '12AB'O } };		//different value
+x4:={  x2:=12 };		//different selection
+if (x1==x2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1==x3)) {setverdict(pass);}	// different value
+     else {setverdict(fail);}
+if (not(x4==x1)) {setverdict(pass);}	// different selection
+     else {setverdict(fail);}
+if (not(x1!=x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1!=x3) {setverdict(pass);}		// different value
+     else {setverdict(fail);}
+if (x4!=x2) {setverdict(pass);}		// different selection
+     else {setverdict(fail);}
+}
+
+
+testcase anytypewrapCompSet() runs on anytypeWrapOper_mycomp{
+//var anytypeWrapOper_tset temp1:={ x1:=2, x2:=omit };
+var anytypeWrapOper_myunion5 x1,x2,x3,x4; // union from set
+x1:={ x1:={ x1:=1, x2:=1.2 } };
+x2:={ x1:={ x1:=1, x2:=1.2 } };
+x3:={ x1:={ x1:=4, x2:=1.2 } }; // different value
+x4:={ x2:=4 }; 			// different selection
+if (x1==x2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1==x3)) {setverdict(pass);}	// different value
+     else {setverdict(fail);}
+if (not(x4==x1)) {setverdict(pass);}	// different selection
+     else {setverdict(fail);}
+if (not(x1!=x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1!=x3) {setverdict(pass);}		// different value
+     else {setverdict(fail);}
+if (x4!=x2) {setverdict(pass);}		// different selection
+     else {setverdict(fail);}
+}
+
+testcase anytypewrapCompSetof() runs on anytypeWrapOper_mycomp{
+//var anytypeWrapOper_tsetof temp2:={"a","7"};
+var anytypeWrapOper_myunion6 x1,x2,x3,x4;	//union from record of
+x1:={ x1:={ "1", "a" } };
+x2:={ x1:={ "1", "a" } };
+x3:={ x1:={ "1", "a", "k" } };	//different value
+x4:={ x2:=2 };			//different selection
+if (x1==x2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1==x3)) {setverdict(pass);}	// different value
+     else {setverdict(fail);}
+if (not(x4==x1)) {setverdict(pass);}	// different selection
+     else {setverdict(fail);}
+if (not(x1!=x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1!=x3) {setverdict(pass);}		// different value
+     else {setverdict(fail);}
+if (x4!=x2) {setverdict(pass);}		// different selection
+     else {setverdict(fail);}
+}
+
+testcase anytypewrapCompUnion() runs on anytypeWrapOper_mycomp{
+var anytypeWrapOper_tunion temp5 := {x2:=1.3}
+var anytypeWrapOper_myunion7 x1,x2,x3,x4;	// union form union
+x1:={  x1:={ x1 :=3 } };
+x2:={  x1:={ x1 :=3 } };
+x3:={  x1:={ x2 :=3.9 } };		//different value
+x4:={  x2:=3 };				//different selection
+if (x1==x2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1==x3)) {setverdict(pass);}	// different value
+     else {setverdict(fail);}
+if (not(x4==x1)) {setverdict(pass);}	// different selection
+     else {setverdict(fail);}
+if (not(x1!=x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1!=x3) {setverdict(pass);}		// different value
+     else {setverdict(fail);}
+if (x4!=x2) {setverdict(pass);}		// different selection
+     else {setverdict(fail);}
+}
+
+
+control {
+ execute(anytypewrapAssign());
+ execute(anytypewrapAssignEnum());
+ execute(anytypewrapAssignRec());
+ execute(anytypewrapAssignRecof());
+ execute(anytypewrapAssignSet());
+ execute(anytypewrapAssignSetof());
+ execute(anytypewrapAssignUnion());
+ execute(anytypewrapAssignElem());
+ execute(anytypewrapAssignElemEnum());
+ execute(anytypewrapAssignElemRec());
+ execute(anytypewrapAssignElemRecof());
+ execute(anytypewrapAssignElemSet());
+ execute(anytypewrapAssignElemSetof());
+ execute(anytypewrapAssignElemUnion());
+ execute(anytypewrapConst());
+ execute(anytypewrapConstEnum());
+ execute(anytypewrapConstRec());
+ execute(anytypewrapConstRecof());
+ execute(anytypewrapConstSet());
+ execute(anytypewrapConstSetof());
+ execute(anytypewrapConstUnion())
+ execute(anytypewrapComp());
+ execute(anytypewrapCompSame());
+ execute(anytypewrapCompEnum());
+ execute(anytypewrapCompRec());
+ execute(anytypewrapCompRecof());
+ execute(anytypewrapCompSet());
+ execute(anytypewrapCompSetof());
+ execute(anytypewrapCompUnion())
+}
+}
+with {
+extension "anytype anytypeWrapOper_tunion, anytypeWrapOper_myunion1, anytypeWrapOper_myunion2"
+extension "anytype anytypeWrapOper_myunion3, anytypeWrapOper_myunion4, anytypeWrapOper_myunion5"
+extension "anytype anytypeWrapOper_myunion6, anytypeWrapOper_myunion7, anytypeWrapOper_myunion8"
+}
+
diff --git a/Regression_Test_java/src/TarrayOper.ttcn b/Regression_Test_java/src/TarrayOper.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..095ad53e39fee3763e1c39345b99f166138b60b2
--- /dev/null
+++ b/Regression_Test_java/src/TarrayOper.ttcn
@@ -0,0 +1,966 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Beres, Szabolcs
+ *   Cserveni, Akos
+ *   Forstner, Matyas
+ *   Godar, Marton
+ *   Raduly, Csaba
+ *   Szabados, Kristof
+ *   Szabo, Janos Zoltan – initial implementation
+ *   Pandi, Krisztian
+ *
+ ******************************************************************************/
+module TarrayOper {
+// ********** Type definitions  *********************
+type component arrayOper_mycomp {};
+type enumerated arrayOper_myenum {xx1,xx2,xx3};
+type record arrayOper_trecord {
+	integer x1 optional,
+	float x2 };
+type record of octetstring arrayOper_trecof;
+type set arrayOper_tset {
+	integer x1,
+	float x2 optional };
+type set of charstring arrayOper_tsetof;
+type set of integer arrayOper_tsetof2;
+type union arrayOper_tunion {
+	integer x1,
+	float x2 };
+type arrayOper_tsetof2 arrayOper_triplet[3];
+type arrayOper_triplet arrayOper_triplettriplet[3];
+type record arrayOper_trecord2{
+	integer x1[3]
+};
+// *************** Constanst ***********************
+const arrayOper_trecord arrayOper_temp1:={ x1:=omit, x2:=3.4 };
+const arrayOper_trecof arrayOper_temp2:={ 'AF12'O };
+const arrayOper_tset arrayOper_temp3:={ x1:=234, x2:=1.9};
+const arrayOper_tsetof arrayOper_temp4:={"f","8"};
+const arrayOper_tunion arrayOper_temp5:={ x2:=1.3 };
+const integer arrayOper_const1[2]:={ 1,2 }	//array of basic types
+const arrayOper_myenum arrayOper_const2[2]:={ xx2, xx1 }
+const arrayOper_trecord arrayOper_const4[2]:={   //array of record
+  { x1:=1, x2:=1.2 },arrayOper_temp1 };
+const arrayOper_trecof arrayOper_const6[2]:={   //array of record of
+ { '12AB'O, 'CD12'O },  arrayOper_temp2 };
+const arrayOper_tset arrayOper_const8[2]:={   //array of set
+ { x1:=2, x2:=1.3}, arrayOper_temp3 };
+const arrayOper_tsetof arrayOper_const10[2]:={   //array of set of
+ {"a","b"}, arrayOper_temp4 }; //{"f","8"},
+const arrayOper_tunion arrayOper_const12[2]:={   //array of union
+ { x1 :=3 }, arrayOper_temp5  }; //{ x2:=1.3 }
+const arrayOper_tsetof2 arrayOper_const13[3][3]:={
+{{1,2},{2,3},{3,4}},{{1,2},{4,5},{6,7}},{{2,1},{3,2},{4,3}}}
+
+
+
+testcase arrayAssign() runs on arrayOper_mycomp{
+var integer x1[2]:={ 12,34} 	//array of basic types
+var integer x2[2];
+var integer x3[2 .. 4];		//index ranges
+x2:={ 32, 12 };
+x3:={32,12,3};
+if (x1[0]==12) {setverdict(pass);}	//at declaration
+     else {setverdict(fail);}
+if (x1[1]==34) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[0]==32) {setverdict(pass);}	//later
+     else {setverdict(fail);}
+if (x2[1]==12) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x3[2]==32) {setverdict(pass);}	//index ranges
+     else {setverdict(fail);}
+if (x3[3]==12) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x3[4]==3) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase arrayAssignEnum() runs on arrayOper_mycomp{
+var arrayOper_myenum x1[2]:={ xx2, - }	//array of enum
+var arrayOper_myenum x2[2];
+x2:={xx2,xx1};
+//at declaration
+if (x1[0]==xx2) {setverdict(pass);}
+     else {setverdict(fail);}
+//later
+if (x2[0]==xx2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[1]==xx1) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase arrayAssignRec() runs on arrayOper_mycomp{
+var arrayOper_trecord temp1:={ x1:=omit, x2:=3.4 };
+var arrayOper_trecord x1[2]:={   //array of record
+ { x1:=1, x2:=1.2 }, temp1 };
+var arrayOper_trecord x2[2];
+x2:={ { x1:=1, x2:=1.2 }, temp1 };
+if (x1[0].x1==1) {setverdict(pass);}	//at declaration
+     else {setverdict(fail);}
+if (x1[0].x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1[1]==temp1) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[0].x1==1) {setverdict(pass);}	//later
+     else {setverdict(fail);}
+if (x2[0].x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(x2[1].x1))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[1].x2==3.4) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase arrayAssignRecof() runs on arrayOper_mycomp{
+var arrayOper_trecof temp2:={'AF12'O};
+var arrayOper_trecof x1[2]:={   //array of record of
+ { '12AB'O, 'CD12'O }, temp2 };
+var arrayOper_trecof x2[2];
+x2:={ { '12AB'O, 'CD12'O }, temp2 };
+if (x1[0][0]=='12AB'O) {setverdict(pass);}	//at declaration
+     else {setverdict(fail);}
+if (x1[0][1]=='CD12'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1[1]==temp2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[0][0]=='12AB'O) {setverdict(pass);}	//later
+     else {setverdict(fail);}
+if (x2[0][1]=='CD12'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[1][0]=='AF12'O) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase arrayAssignSet() runs on arrayOper_mycomp{
+var arrayOper_tset temp1:={ x1:=2, x2:=omit };
+var arrayOper_tset x1[2]:={   //array of set
+ { x1:=1, x2:=1.2 }, temp1 };
+var arrayOper_tset x2[2];
+x2:={ { x1:=1, x2:=1.2 }, temp1 };
+if (x1[0].x1==1) {setverdict(pass);}	//at declaration
+     else {setverdict(fail);}
+if (x1[0].x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1[1]==temp1) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[0].x1==1) {setverdict(pass);}	//later
+     else {setverdict(fail);}
+if (x2[0].x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[1].x1==2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(x2[1].x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase arrayAssignSetof() runs on arrayOper_mycomp{
+var arrayOper_tsetof temp2:={"a","7"};
+var arrayOper_tsetof x1[2]:={   //array of set of
+ { "1", "a" }, temp2 };
+var arrayOper_tsetof x2[2];
+x2:={ { "1", "a" }, temp2 };
+if (x1[0][0]=="1") {setverdict(pass);}	//at declaration
+     else {setverdict(fail);}
+if (x1[0][1]=="a") {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1[1]==temp2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[0][0]=="1") {setverdict(pass);}	//later
+     else {setverdict(fail);}
+if (x2[0][1]=="a") {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[1][0]=="a") {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[1][1]=="7") {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase arrayAssignUnion() runs on arrayOper_mycomp{
+var arrayOper_tunion temp5 := {x2:=1.3}
+var arrayOper_tunion x1[2]:={   	//array of union
+ { x1 :=3 }, temp5  }; //{ x2:=1.3
+var arrayOper_tunion x2[2];
+x2:={ { x1 :=3 }, temp5 }; //{ x2:=1.3 }
+if (x1[0].x1==3) {setverdict(pass);}	//at declaration
+     else {setverdict(fail);}
+if (ischosen(x1[0].x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1[0].x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1[1]==temp5) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[0].x1==3) {setverdict(pass);}	//later
+     else {setverdict(fail);}
+if (ischosen(x2[0].x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2[0].x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[1].x2==1.3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x2[1].x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2[1].x1))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase arrayAssignArray() runs on arrayOper_mycomp{
+var charstring x1[2][2]:={   //array of array
+ { "1", "a" }, {"a","7"} };
+var arrayOper_tsetof x2[2];
+x2:={ { "1", "a" }, {"a","7"} };
+if (x1[0][0]=="1") {setverdict(pass);}	//at declaration
+     else {setverdict(fail);}
+if (x1[0][1]=="a") {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1[1][0]=="a") {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1[1][1]=="7") {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[0][0]=="1") {setverdict(pass);}	//later
+     else {setverdict(fail);}
+if (x2[0][1]=="a") {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[1][0]=="a") {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[1][1]=="7") {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase arrayAssignSubArray() runs on arrayOper_mycomp{
+  var integer x1[4][2] := {{1,2},{3,4},{5,6},{7,8}}; //array of basic types
+  var integer x2[2][2] := {x1[0],x1[3]};
+  var integer x3[1][2] := {{x1[0][0],x1[1][0]}};
+  if(x2[0][0]==1){setverdict(pass);}
+  else {setverdict(fail);}
+  if(x2[0][1]==2){setverdict(pass);}
+  else {setverdict(fail);}
+  if(x2[1][0]==7){setverdict(pass);}
+  else {setverdict(fail);}
+  if(x2[1][1]==8){setverdict(pass);}
+  else {setverdict(fail);}
+  if(x3[0][0]==1){setverdict(pass);}
+  else {setverdict(fail);}
+  if(x3[0][1]==3){setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+testcase arrayAssignRangedArray() runs on arrayOper_mycomp{
+  var integer x1[1..2][2..3]:={{1,2},{2,3}};
+  var integer x2[0..1][2..3]:={{11,22},x1[1]};
+  if(x1[1][2]==1){setverdict(pass);}
+  else{setverdict(fail);}
+  if(x1[1][3]==2){setverdict(pass);}
+  else{setverdict(fail);}
+  if(x1[2][2]==2){setverdict(pass);}
+  else{setverdict(fail);}
+  if(x1[2][3]==3){setverdict(pass);}
+  else{setverdict(fail);}
+  if(x2[0][2]==11){setverdict(pass);}
+  else{setverdict(fail);}
+  if(x2[0][3]==22){setverdict(pass);}
+  else{setverdict(fail);}
+  if(x2[1][2]==1){setverdict(pass);}
+  else{setverdict(fail);}
+}
+
+testcase arrayAssignElem() runs on arrayOper_mycomp{
+var integer x1[2], x2[2], x3[2], x4[5] ;	//array of basic types
+x1:={ 3, 2 };
+x2:={ 1, 2 };
+x3:=x2;
+x2[0]:=3;			//change element to value
+x3[0]:=x2[0];			//change element to element
+x4[2]:=2;			// out of order
+if (x1[1]==2) {setverdict(pass);}	//accessing individual element
+     else {setverdict(fail);}
+if (x2[0]==3) {setverdict(pass);}	// change element to value
+     else {setverdict(fail);}
+if (x2[1]==2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x3[0]==3) {setverdict(pass);}	// change element to element
+     else {setverdict(fail);}
+if (x3[1]==2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x4[2]==2) {setverdict(pass);}	// out of order
+     else {setverdict(fail);}
+}
+
+testcase arrayAssignElemEnum() runs on arrayOper_mycomp{
+var arrayOper_myenum x1[2],x2[3]; //array of enumerated
+x1:={ xx1, xx2 };
+x1[0]:=xx3;			//change element
+x2[2]:=xx3;			// out of order
+if (x1[0]==xx3) {setverdict(pass);}	// change element
+     else {setverdict(fail);}
+if (x1[1]==xx2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[2]==xx3) {setverdict(pass);}	// out of order
+     else {setverdict(fail);}
+}
+
+testcase arrayAssignElemRec() runs on arrayOper_mycomp{
+var arrayOper_trecord x1[2],x2[2]; 	//array of record
+x1:={   { x1:=1, x2:=1.2 }, { x1:=omit, x2:=3.4 } };
+x1[0].x1:=2;
+x1[1].x1:=3;
+x2[1]:= {x1:=2, x2:=1.3};		//out of order
+if (x1[0].x1==2) {setverdict(pass);}	// change element
+     else {setverdict(fail);}
+if (x1[0].x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1[1].x1==3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1[1].x2==3.4) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[1].x1==2) {setverdict(pass);}	   // out of order
+     else {setverdict(fail);}
+if (x2[1].x2==1.3) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase arrayAssignElemRecof() runs on arrayOper_mycomp{
+var arrayOper_trecof x1[2],x2[3];		 //record of record of
+x1:={  { '12AB'O, 'CD12'O }, { 'ABCD'O } };
+x1[0][1]:='34AB'O;		//change element
+x2[2]:={'12CD'O};		//out of order
+if (x1[0][0]=='12AB'O) {setverdict(pass);}	// change element
+     else {setverdict(fail);}
+if (x1[0][1]=='34AB'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1[1][0]=='ABCD'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[2][0]=='12CD'O) {setverdict(pass);}	//out of order
+     else {setverdict(fail);}}
+
+testcase arrayAssignElemSet() runs on arrayOper_mycomp{
+var arrayOper_tset x1[2],x2[3];    	//array of set
+x1:={ { x1:=1, x2:=1.2 }, { x1:=2, x2:=omit }};
+x1[0].x2:=3.4;				//change element
+x2[2]:={  x1:=2, x2:=1.3 };		// out of order
+if (x1[0].x1==1) {setverdict(pass);}	//change element
+     else {setverdict(fail);}
+if (x1[0].x2==3.4) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1[1].x1==2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(x1[1].x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[2].x1==2) {setverdict(pass);}	//out of order
+     else {setverdict(fail);}
+if (x2[2].x2==1.3) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase arrayAssignElemSetof() runs on arrayOper_mycomp{
+var arrayOper_tsetof x1[2],x2[3];   	//array of set of
+x1:={ { "1" }, {"a","7"}};
+x1[0][0]:="h";			// change element
+x2[2]:={"2"};			//out of order
+if (x1[0][0]=="h") {setverdict(pass);}	  //change element
+     else {setverdict(fail);}
+if (x1[1][0]=="a") {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1[1][1]=="7") {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[2][0]=="2") {setverdict(pass);}		// out of order
+     else {setverdict(fail);}
+}
+
+testcase arrayAssignElemUnion() runs on arrayOper_mycomp{
+//var arrayOper_tunion temp5 := {x2:=1.3}
+var arrayOper_tunion x1[2],x2[3];   //array of union
+x1:={ {x1 :=3 }, {x2:=1.3} };
+x1[0].x2:=3.4;			//change element
+x2[2]:={ x2:=1.4}; 		// out of order
+if (x1[0].x2==3.4) {setverdict(pass);}		//changed element
+     else {setverdict(fail);}
+if (ischosen(x1[0].x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1[0].x1))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1[1].x2==1.3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x1[1].x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1[1].x1))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[2].x2==1.4) {setverdict(pass);}		//out of order
+     else {setverdict(fail);}
+if (ischosen(x2[2].x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2[2].x1))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase arrayAssignSubArrayElem() runs on arrayOper_mycomp{
+  var integer x1[4][2]; //array of basic types
+  var integer x2[2][2];
+  var integer x3[1][2];
+  x1:={{1,2},{3,4},{5,6},{7,8}};
+  x2:={x1[0],x1[3]};
+  x3[0]:={x1[0][0],3};
+  if(x2[0][0]==1){setverdict(pass);}
+  else {setverdict(fail);}
+  if(x2[0][1]==2){setverdict(pass);}
+  else {setverdict(fail);}
+  if(x2[1][0]==7){setverdict(pass);}
+  else {setverdict(fail);}
+  if(x2[1][1]==8){setverdict(pass);}
+  else {setverdict(fail);}
+  if(x3[0][0]==1){setverdict(pass);}
+  else {setverdict(fail);}
+  if(x3[0][1]==3){setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+testcase arrayAssignRangedArrayElem() runs on arrayOper_mycomp{
+  var integer x1[1..2][2..3];
+  var integer x2[0..1][2..3];
+  x1:={{1,2},{2,3}};
+  x2:={{11,22},x1[1]};
+  if(x1[1][2]==1){setverdict(pass);}
+  else{setverdict(fail);}
+  if(x1[1][3]==2){setverdict(pass);}
+  else{setverdict(fail);}
+  if(x1[2][2]==2){setverdict(pass);}
+  else{setverdict(fail);}
+  if(x1[2][3]==3){setverdict(pass);}
+  else{setverdict(fail);}
+  if(x2[0][2]==11){setverdict(pass);}
+  else{setverdict(fail);}
+  if(x2[0][3]==22){setverdict(pass);}
+  else{setverdict(fail);}
+  if(x2[1][2]==1){setverdict(pass);}
+  else{setverdict(fail);}
+}
+
+testcase arrayConst() runs on arrayOper_mycomp{
+const integer const1[3]:={1,2,3} //array of basic types
+if (arrayOper_const1[0]==1) {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+if (arrayOper_const1[1]==2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const1[0]==1) {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+if (const1[1]==2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const1[2]==3) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase arrayConstEnum() runs on arrayOper_mycomp{
+const arrayOper_myenum const1[3]:={xx1,xx2,xx3} //array of enumerated
+if (arrayOper_const2[0]==xx2) {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+if (arrayOper_const2[1]==xx1) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const1[0]==xx1) {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+if (const1[1]==xx2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const1[2]==xx3) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase arrayConstRec() runs on arrayOper_mycomp{
+const arrayOper_trecord const4[2]:={   //array of record
+ { x1:=1, x2:=1.2 }, arrayOper_temp1 };
+if (arrayOper_const4[0].x1==1) {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+if (arrayOper_const4[0].x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (arrayOper_const4[1]==arrayOper_temp1) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const4[0].x1==1) {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+if (const4[0].x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const4[1]==arrayOper_temp1) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase arrayConstRecof() runs on arrayOper_mycomp{
+const arrayOper_trecof const6[2]:={   //array of record of
+ { '12AB'O, 'CD12'O }, arrayOper_temp2 };
+if (arrayOper_const6[0][0]=='12AB'O) {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+if (arrayOper_const6[0][1]=='CD12'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (arrayOper_const6[1]==arrayOper_temp2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const6[0][0]=='12AB'O) {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+if (const6[0][1]=='CD12'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const6[1]==arrayOper_temp2) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase arrayConstSet() runs on arrayOper_mycomp{
+const arrayOper_tset const8[2]:={   			//array of set
+ { x1:=2, x2:=1.3}, arrayOper_temp3 };
+if (arrayOper_const8[0].x1==2) {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+if (arrayOper_const8[0].x2==1.3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (arrayOper_const8[1]==arrayOper_temp3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const8[0].x1==2) {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+if (const8[0].x2==1.3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const8[1]==arrayOper_temp3) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase arrayConstSetof() runs on arrayOper_mycomp{
+const arrayOper_tsetof const10[2]:={  		 //array of set of
+ {"a","b"}, {"f","8"} };
+if (arrayOper_const10[0][0]=="a") {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+if (arrayOper_const10[0][1]=="b") {setverdict(pass);}
+     else {setverdict(fail);}
+if (arrayOper_const10[1]==arrayOper_temp4) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const10[0][0]=="a") {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+if (const10[0][1]=="b") {setverdict(pass);}
+     else {setverdict(fail);}
+if (const10[1][0]=="f") {setverdict(pass);}
+     else {setverdict(fail);}
+if (const10[1][1]=="8") {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase arrayConstUnion() runs on arrayOper_mycomp{
+const arrayOper_tunion const12[2]:={   //array of union
+ { x1 :=3 }, { x2:=1.3 } };
+if (arrayOper_const12[0].x1==3) {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+if (ischosen(arrayOper_const12[0].x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(arrayOper_const12[0].x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (arrayOper_const12[1]==arrayOper_temp5) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const12[0].x1==3) {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+if (ischosen(const12[0].x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(const12[0].x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const12[1].x2==1.3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(const12[1].x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(const12[1].x1))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase arrayComp() runs on arrayOper_mycomp{
+var integer x1[3],x2[0..2],x3[3],x4[3],x5[4]; //array of basic type
+x1:={ 1,2,3 };
+x2:={ 1,2,3 };
+x3:={ 1,2,4 };
+x4:={3,2,1};
+x5:={1,2,3,-};
+if (x1==x2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1==x3)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1==x4)) {setverdict(pass);}	//out of order
+     else {setverdict(fail);}
+if (x1!=x3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1!=x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1!=x4) {setverdict(pass);}		//out of order
+     else {setverdict(fail);}
+}
+
+testcase arrayCompConst() runs on arrayOper_mycomp{	//In testcase definition//
+  const integer c_array1[4] := { 1,2,3,4};
+  const integer c_array2[4] := { 1,2,3,4};
+  const integer c_array3[4] := { 4,3,2,1};
+  const integer c_array4_ind[4] := { [0] := 1, [1] := 2, [2] := 3, [3] := 4};
+  const integer c_array5_ind[4] := { [3] := 4, [1] := 2, [2] := 3, [0] := 1};
+  
+  
+  var integer vl_array5[4] := { 1,2,3,4};
+
+  
+  if(c_array1 == c_array1) {setverdict(pass);}
+  else {setverdict(fail);}	//^In else statement\:$//	//^warning: Control never reaches this code because of previous effective condition\(s\)$//
+  
+  if({1,2,3,4} == c_array1) {setverdict(pass);}
+  else {setverdict(fail);} //^In else statement\:$//	//^warning: Control never reaches this code because of previous effective condition\(s\)$//
+  
+  if(c_array1 == c_array2) {setverdict(pass);}
+  else {setverdict(fail);} //^In else statement\:$//	//^warning: Control never reaches this code because of previous effective condition\(s\)$//
+
+  if(c_array1 == c_array4_ind) {setverdict(pass);}
+  else {setverdict(fail);} //^In else statement\:$//	//^warning: Control never reaches this code because of previous effective condition\(s\)$//
+  
+  if(c_array4_ind == c_array4_ind) {setverdict(pass);}
+  else {setverdict(fail);} //^In else statement\:$//	//^warning: Control never reaches this code because of previous effective condition\(s\)$//
+  
+  if({ [0] := 1, [1] := 2, [2] := 3, [3] := 4} == c_array4_ind) {setverdict(pass);}
+  else {setverdict(fail);} //^In else statement\:$//	//^warning: Control never reaches this code because of previous effective condition\(s\)$//
+  
+  if(c_array4_ind == c_array5_ind) {setverdict(pass);}
+  else {setverdict(fail);} //^In else statement\:$//	//^warning: Control never reaches this code because of previous effective condition\(s\)$//
+  
+
+  if(vl_array5 == c_array1) {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+testcase arrayCompEnum() runs on arrayOper_mycomp{
+var arrayOper_myenum x1[3],x2[3],x3[3];  // array of enum
+x1:={ xx1,xx2,xx3 };
+x2:={ xx1,xx2,xx3 };
+x3:={ xx1,xx2,xx2 };
+if (x1==x2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1==x3)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1!=x3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1!=x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase arrayCompRec() runs on arrayOper_mycomp{
+var arrayOper_trecord x1[2],x2[2],x3[2];	// array of record
+x1 :={ { x1:=1, x2:=1.2 }, { x1:=omit, x2:=3.4 } };
+x2 :={ { x1:=1, x2:=1.2 }, { x1:=omit, x2:=3.4 } };
+x3 :={ { x1:=2, x2:=1.2 }, { x1:=omit, x2:=3.4 } };
+if (x1==x2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1==x3)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1!=x3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1!=x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+
+testcase arrayCompRecof() runs on arrayOper_mycomp{
+//var arrayOper_trecof temp2:={'AF12'O};
+var arrayOper_trecof x1[2],x2[2],x3[2]; //array of record of
+x1:={ { '12AB'O, 'CD12'O }, {'AF12'O} };
+x2:={ { '12AB'O, 'CD12'O }, {'AF12'O} };
+x3:={ { '12AB'O  }, {'AF12'O} };
+if (x1==x2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1==x3)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2!=x3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1!=x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+
+testcase arrayCompSet() runs on arrayOper_mycomp{
+//var arrayOper_tset temp1:={ x1:=2, x2:=omit };
+var arrayOper_tset x1[2],x2[2],x3[2]; 		//array of set
+x1:={ { x1:=1, x2:=1.2 }, { x1:=2, x2:=omit } };
+x2:={ { x2:=1.2, x1:=1 }, { x1:=2, x2:=omit }};
+x3:={ { x1:=1, x2:=1.2 }, { x1:=1, x2:=1.2 }  };
+if (x1==x2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x2==x3)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1!=x3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1!=x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase arrayCompSetof() runs on arrayOper_mycomp{
+var arrayOper_tsetof temp2:={"a","7"};
+var arrayOper_tsetof x1[2],x2[2],x3[2];   	//array of set of
+x1:={ { "1", "a" },  temp2 };
+x2:={ { "1", "a" }, {"a","7"} };
+x3:={ { "1", "a" }, {"l", "k"} };
+if (x1==x2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x2==x3)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1!=x3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1!=x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase arrayCompUnion() runs on arrayOper_mycomp{
+var arrayOper_tunion temp5 := {x2:=1.3}
+var arrayOper_tunion x1[2],x2[2],x3[2]; 	//array of union
+x1:={ { x1 :=3 }, { x2:=1.3 } };
+x2:={ { x1 :=3 }, temp5 }; //{ x2:=1.3 }
+x3:={ { x2 :=3.9 },temp5 }; //{ x2:=1.3 }
+if (x1==x2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1==x3)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2!=x3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1!=x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase arrayMatching() runs on arrayOper_mycomp{
+  template arrayOper_triplet template1:={{1,2},{2,3},{3,4}};
+  template arrayOper_triplet template2:=
+    {subset(1,2,3),subset(3,4,5),subset(5,6,7,8)};
+  template arrayOper_triplet template3:={superset(1),superset(2),superset(4)};
+  template arrayOper_trecord2 template4:={{1,?,3}};
+  var arrayOper_trecord2 x1:={{1,2,3}};
+  if(match(arrayOper_const13[0],template1)){setverdict(pass);}
+  else {setverdict(fail);}
+  if(not(match(arrayOper_const13[0],template2))){setverdict(pass);}
+  else {setverdict(fail);}
+  if(match(arrayOper_const13[1],template2)){setverdict(pass);}
+  else {setverdict(fail);}
+  if(not(match(arrayOper_const13[1],template3))){setverdict(pass);}
+  else {setverdict(fail);}
+  if(match(arrayOper_const13[2],template3)){setverdict(pass);}
+  else {setverdict(fail);}
+  if(match(x1,template4)){setverdict(pass);}
+  else{setverdict(fail);}
+}
+
+testcase arraySummation() runs on arrayOper_mycomp{
+  var integer x1[2][3]:={{1,2,3},{4,5,6}};
+  var integer i1,i2,sum;
+  x1[1][1]:=3;
+  sum:=0;
+  for(i1:=0;i1<sizeof(x1);i1:=i1+1)
+  {
+    for(i2:=0;i2<sizeof(x1[i1]);i2:=i2+1)
+    {
+      sum:=sum+x1[i1][i2];
+    }
+  }
+  if(sum==19){setverdict(pass);}
+  else{setverdict(fail);}
+}
+
+testcase arrayRotateOperators() runs on arrayOper_mycomp{
+  var integer x1[5]:={1,2,3,4,5}
+  var integer x2[5],x3[5],x4[5],x5[5],x6[5],x7[5];
+  x2 := x1 <@ 1;
+  x3 := x1 <@ 10;
+  x4 := x1 <@ 3 <@ 2;
+  x5 := x1 @> 1;
+  x6 := x1 @> 10;
+  x7 := x1 @> 3 @> 2;
+  if (x2 == {2,3,4,5,1}) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x3 == x1) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x4 == x1) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x5 == {5,1,2,3,4}) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x6 == x1) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x7 == x1) {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+testcase arrayLengthof() runs on arrayOper_mycomp{
+// lengthof returns the sequential number of the last initialized element of the array
+  var integer x1[2]:={1,2}					// last init element is the second
+  var integer x2[2],x3[3],x4[2],x5[5];		// array of basic types
+  x2:={ 1, 2 };								// last init element is the second
+  x3:={1,2, -};								// last init element is the second
+											// x4: last init element is the zero
+  x5[2]:=1;									// last init element is the third
+  if (lengthof(x1)==2) {setverdict(pass);}	//assignment at declaration
+  else {setverdict(fail);}
+  if (lengthof(x2)==2) {setverdict(pass);}	//assignment later
+  else {setverdict(fail);}
+  if (lengthof(x3)==2) {setverdict(pass);}	//partly filled, TITAN specific
+  else {setverdict(fail);}
+  if (lengthof(x4)==0) {setverdict(pass);}	//empty
+  else {setverdict(fail);}
+  if (lengthof(x5)==3) {setverdict(pass);}	//out of order
+  else {setverdict(fail);}
+}
+
+testcase arraySizeof() runs on arrayOper_mycomp{
+  var integer x1[2]:={1,2}
+  var integer x2[2],x3[3],x4[2],x5[5];	//array of basic types
+  x2:={ 1, 2 };
+  x3:={1,2, -};	// partly filled array
+  x5[2]:=1;	//out of order
+  if (sizeof(x1)==2) {setverdict(pass);}	//assignment at declaration
+  else {setverdict(fail);}
+  if (sizeof(x2)==2) {setverdict(pass);}	//assignment later
+  else {setverdict(fail);}
+  if (sizeof(x3)==3) {setverdict(pass);}	//partly filled, TITAN specific
+  else {setverdict(fail);}
+  if (sizeof(x4)==2) {setverdict(pass);}	//empty
+  else {setverdict(fail);}
+  if (sizeof(x5)==5) {setverdict(pass);}	//out of order
+  else {setverdict(fail);}
+}
+
+testcase arraySizeof2() runs on arrayOper_mycomp{
+  var integer x1[1..3][1]:={{1},{2},{3}};
+  var integer x2[11..12],x3[3..5],x4[-8..-7],x5[-4..0];	//array of basic types
+  x2:={ 1, 2 };
+  x3:={1,2, -};	// partly filled array
+  x5[-3]:=1;	//out of order
+  if (sizeof(x1)==3) {setverdict(pass);}	//assignment at declaration
+  else {setverdict(fail);}
+  if (sizeof(x1[1])==1) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (sizeof(x2)==2) {setverdict(pass);}	//assignment later
+  else {setverdict(fail);}
+  if (sizeof(x3)==3) {setverdict(pass);}	//partly filled, TITAN specific
+  else {setverdict(fail);}
+  if (sizeof(x4)==2) {setverdict(pass);}	//empty
+  else {setverdict(fail);}
+  if (sizeof(x5)==5) {setverdict(pass);}	//out of order
+  else {setverdict(fail);}
+}
+
+testcase arrayIsvalue() runs on arrayOper_mycomp{
+  var integer x0[2];
+  var integer x1[2] := { 12,34 }
+  var integer x2[2]; 
+  x2:={ 32, 12 };
+  var integer x3[2 .. 4];
+  var integer x4[2 .. 4] := {32,12,3};
+  var template integer x5[3] :=  omit;
+  var template integer x6[3] :=  { 1, 2, 3 } ifpresent;
+
+  if ( isvalue(x0) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(x0[0]) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(x1) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isvalue(x2) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isvalue(x3) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(x4) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isvalue(x5) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(x6) ) { setverdict(fail); } else { setverdict(pass); };
+}
+
+testcase emptyTemplateArrayOneDimensional() runs on arrayOper_mycomp{
+  var template charstring csa[10]
+  var template charstring cs
+  //cs := csa[0]
+  if ( isbound(csa[0]) ) { setverdict(fail); } else { setverdict(pass); };
+}
+
+testcase emptyTemplateArrayTwoDimensional() runs on arrayOper_mycomp{
+  var template charstring csa[10][10]
+  var template charstring cs
+  //cs := csa[0][1]
+  if ( isbound(csa[0][1]) ) { setverdict(fail); } else { setverdict(pass); };
+}
+
+type enumerated DefaultCallHandling { 
+  releaseCall, continueCall 
+}; 
+type record DP_AnalysedInfoCriterium {};
+type record of DP_AnalysedInfoCriterium DP_AnalysedInfoCriteriumList; 
+template DP_AnalysedInfoCriterium t_MAP_DP_AnalysedInfoCriterium(octetstring ox, 
+  integer ix, charstring cx, DefaultCallHandling dx) := {} 
+function f_Converter_Charstring_To_Map(in charstring c) return octetstring { 
+  return char2oct(c); 
+} 
+template DP_AnalysedInfoCriterium t_MAP_D_CSI(template DP_AnalysedInfoCriteriumList tdpl, integer num) := { }
+
+testcase TemplateArray() runs on arrayOper_mycomp{
+
+  var template DP_AnalysedInfoCriterium v_DP_AnalysedInfoCriterium[8]; 
+  var charstring v_gsmSCF := "howdy"; 
+  var template DP_AnalysedInfoCriterium v_D_CSI_1 ; 
+  v_DP_AnalysedInfoCriterium[0] := t_MAP_DP_AnalysedInfoCriterium( '91'O& f_Converter_Charstring_To_Map(                                                                 "491799000000003"), // ISDN-AddressString, 
+                                                                   50000, // ServiceKey, 
+                                                                   v_gsmSCF,// ISDN-AddressString, 
+                                                                   releaseCall); // DefaultCallHandling, 
+  v_DP_AnalysedInfoCriterium[1] := t_MAP_DP_AnalysedInfoCriterium( '91'O& f_Converter_Charstring_To_Map(                                                                 "491799000000002"), // ISDN-AddressString, 
+                                                                   32768, // ServiceKey, 
+                                                                   v_gsmSCF,// ISDN-AddressString, 
+                                                                   releaseCall); // DefaultCallHandling,       
+  
+  v_DP_AnalysedInfoCriterium[2] := t_MAP_DP_AnalysedInfoCriterium( 'A1'O&f_Converter_Charstring_To_Map(                                                                 "491799000000001"), // ISDN-AddressString, 
+                                                                   128, // ServiceKey, 
+                                                                   v_gsmSCF,// ISDN-AddressString, 
+                                                                    continueCall); // DefaultCallHandling, 
+  
+  v_D_CSI_1 := t_MAP_D_CSI ({v_DP_AnalysedInfoCriterium[0], v_DP_AnalysedInfoCriterium[1], v_DP_AnalysedInfoCriterium[2                             ]},//DP-AnalysedInfoCriteriaList 
+                               3); //CamelCapabilityHandling 
+  
+  if ( isbound(t_MAP_D_CSI({v_DP_AnalysedInfoCriterium[0], v_DP_AnalysedInfoCriterium[1], v_DP_AnalysedInfoCriterium[2                             ]},3)) ) 
+  { setverdict(pass); } else { setverdict(fail); };
+}
+
+control
+{
+ const arrayOper_tsetof2 cl_1[3][3]:={   // constant in control part
+  {{1,2},{2,3},{3,4}},{{1,2},{4,5},{6,7}},{{2,1},{3,2},{4,3}}};
+ var arrayOper_tsetof2 vl_1[3][3]; //variable in control part
+
+ execute(arrayAssign());
+ execute(arrayAssignEnum());
+ execute(arrayAssignRec());
+ execute(arrayAssignRecof());
+ execute(arrayAssignSet());
+ execute(arrayAssignSetof());
+ execute(arrayAssignUnion());
+ execute(arrayAssignArray());
+ execute(arrayAssignSubArray());
+ execute(arrayAssignRangedArray());
+ execute(arrayAssignElem());
+ execute(arrayAssignElemEnum());
+ execute(arrayAssignElemRec());
+ execute(arrayAssignElemRecof());
+ execute(arrayAssignElemSet());
+ execute(arrayAssignElemSetof());
+ execute(arrayAssignElemUnion());
+ execute(arrayAssignSubArrayElem());
+ execute(arrayAssignRangedArrayElem());
+ execute(arrayConst());
+ execute(arrayConstEnum());
+ execute(arrayConstRec());
+ execute(arrayConstRecof());
+ execute(arrayConstSet());
+ execute(arrayConstSetof());
+ execute(arrayConstUnion());
+ execute(arrayComp());
+ execute(arrayCompConst());
+ execute(arrayCompEnum());
+ execute(arrayCompRec());
+ execute(arrayCompRecof());
+ execute(arrayCompSet());
+ execute(arrayCompSetof());
+ execute(arrayCompUnion());
+ execute(arrayMatching());
+ execute(arraySummation());
+
+ execute(arrayRotateOperators());
+ execute(arrayLengthof());
+ execute(arraySizeof());
+ execute(arraySizeof2());
+ execute(arrayIsvalue());
+ 
+ execute(emptyTemplateArrayOneDimensional());
+ execute(emptyTemplateArrayTwoDimensional());
+ execute(TemplateArray());
+}
+
+}
diff --git a/Regression_Test_java/src/TassignmentNotation.asn b/Regression_Test_java/src/TassignmentNotation.asn
new file mode 100644
index 0000000000000000000000000000000000000000..bdf695fd358909eb2a238ed8a2411f233475868e
--- /dev/null
+++ b/Regression_Test_java/src/TassignmentNotation.asn
@@ -0,0 +1,24 @@
+--/////////////////////////////////////////////////////////////////////////////
+-- Copyright (c) 2000-2019 Ericsson Telecom AB
+-- All rights reserved. This program and the accompanying materials
+-- are made available under the terms of the Eclipse Public License v2.0
+-- which accompanies this distribution, and is available at
+-- https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+--
+-- Contributors:
+--   Balasko, Jeno
+--   Kovacs, Ferenc
+--   Raduly, Csaba
+--
+--/////////////////////////////////////////////////////////////////////////////
+ASN-Definitions DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+IMPORTS ; -- nothing 
+
+ASN-CSTR ::= CHARACTER STRING
+ASN-SEQ-I ::= SEQUENCE (SIZE (1..10)) OF INTEGER
+ASN-SEQ-R ::= SEQUENCE { asn-seq-i ASN-SEQ-I }
+
+idx-ASN INTEGER ::= 0
+
+END
diff --git a/Regression_Test_java/src/TassignmentNotation.ttcn b/Regression_Test_java/src/TassignmentNotation.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..1b4c3d01fd0022a090e9e5f478d60608ccb0c511
--- /dev/null
+++ b/Regression_Test_java/src/TassignmentNotation.ttcn
@@ -0,0 +1,343 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Kovacs, Ferenc
+ *   Raduly, Csaba
+ *   Szabados, Kristof
+ *
+ ******************************************************************************/
+module TassignmentNotation
+{
+import from ASN_Definitions language "ASN.1 : 1997" all
+type component empty { }
+type record tri
+{
+  integer a,
+  integer b,
+  integer c
+}
+function f1 () return integer { return 100 }
+type record of tri tritri
+type record of tritri tritritri
+//modulepar tritri tsp_param :=
+//{
+//  { 0, 1, 2 },
+//  { 4, 5, 6 }
+//}
+//modulepar tritritri tsp_param_param :=
+//{
+//  { { 10, 11, 12 }, { 13, 14, 15 } },
+//  { { 16, 17, 18 }, { 19, 20, 21 } }
+//}
+//modulepar integer tsp_index := 0
+//modulepar charstring tsp_editor := "mcedit"
+testcase asns () runs on empty
+{
+  template ASN_SEQ_R asn_temp := { asn_seq_i := { 0, 1, 2 } }
+  template ASN_SEQ_R asn_temp_mod modifies asn_temp := { asn_seq_i := { [1] := 0, [2] := 0 } }
+  var ASN_SEQ_R asn_temp_exp := { asn_seq_i := { 0, 0, 0 } }
+  if (match (asn_temp_exp, asn_temp_mod)) { setverdict (pass) }
+  else { setverdict (fail, __LINE__) }
+  var integer index := 1
+  var ASN_SEQ_I v1 := { 1, 2, 3 }
+  var ASN_SEQ_I v2 := { [0] := 100, [index] := 200, [index + 1] := 300 }
+  var ASN_SEQ_I v1_exp := { 100, 200, 300 }
+  v1[0] := 100 * v1[0]
+  v1[index] := 100 * v1[index + 1 - 1]
+  v1[index + 1] := v2[2]
+  if (v1 != v2) { setverdict (fail, __LINE__) }
+  else { setverdict (pass) }
+  v1 := { 100 }
+  /* Evaluated from left to right.  */
+  v1 := { [sizeof (v1)] := 200, [sizeof (v1)] := 300 }
+  if (v1 != v1_exp) { setverdict (fail, __LINE__) }
+  else { setverdict (pass) }
+  var ASN_SEQ_R v3 := { asn_seq_i := { 1, 2, 3 } }
+  var ASN_SEQ_R v4 := { asn_seq_i := { [index] := 111 } }
+  var ASN_SEQ_R v3_exp := { asn_seq_i := { 11, 22, 33 } }
+  var ASN_SEQ_R v5 := { asn_seq_i := { [1000 + index + sizeof (v3.asn_seq_i)] := 1000 } }
+  v4.asn_seq_i[index] := 22
+  v4 := { asn_seq_i := { [index - 1] := index + 10, [2] := 33 } }
+  v3 := v4
+  v3 := { asn_seq_i := { [index - 1] := 11 } }
+  if (v3 != v3_exp) { setverdict (fail, __LINE__) }
+  else { setverdict (pass) }
+  v4.asn_seq_i[0] := v3.asn_seq_i[0]
+  if (v4 != v3_exp) { setverdict (fail, __LINE__) }
+  else { setverdict (pass) }
+  if (isvalue (v4)) { setverdict (pass) }
+  else { setverdict (fail, __LINE__) }
+  if (isvalue (v4.asn_seq_i[index])) { setverdict (pass) }
+  else { setverdict (fail, __LINE__) }
+  if (isvalue (v2[valueof (asn_temp_mod.asn_seq_i[0])])) { setverdict (pass) }
+  else { setverdict (fail, __LINE__) }
+  if (sizeof (v5.asn_seq_i) == 1005) { setverdict (pass) }
+  else { setverdict (fail, __LINE__) }
+  if (isvalue (asn_temp_mod)) { setverdict (pass) }
+  else { setverdict (fail, __LINE__) }
+  /* Template with uninitialized elements.  */
+  template ASN_SEQ_R mod2 modifies asn_temp_mod := { asn_seq_i := { [100] := 0, [200] := 0 } }
+  if (not isvalue (mod2)) { setverdict (pass) }
+  else { setverdict (fail, __LINE__) }
+  if (not isvalue (mod2.asn_seq_i)) { setverdict (pass) }
+  else { setverdict (fail, __LINE__) }
+}
+type record array_element { integer a, integer b }
+type array_element array_elements[4]
+type record of array_element array_record_of
+type record of integer intlist
+type set of integer intset
+testcase arrays () runs on empty
+{
+  var integer first := 0
+  var integer second := 1
+  var integer third := 2
+  var array_element arr2[4]
+  var array_element arr3[14]
+  var array_elements array :=
+  {
+    [first] := { first, 0 },
+    [second] := { 1, second },
+    [third] := { third, 2 },
+    [third + 1] := { 3, third + 1 }
+  }
+  arr2 := array
+  arr2 := { [3] := { 100, third } }
+  arr3 := { [10] := arr2[1] }
+  var array_elements array_expected := { { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, third + 1 } }
+  if (array == array_expected) { setverdict (pass) }
+  else { setverdict (fail, __LINE__) }
+  template array_elements array_base := { { 100, 200 }, { -1, -2 }, { 1000, 2000 }, { -10, -20 } }
+  template array_elements array_modified modifies array_base :=
+  {
+    [0] := { 0, 0 },
+    [2] := { third, third },
+    [second] := { 1, first + 1 },
+    [third + 1] := { third + 1, 3 }
+  }
+  if (match (array_expected, array_modified)) { setverdict (pass) }
+  else { setverdict (fail, __LINE__) }
+  /* "array[500 + f1 ()]" is a dynamic test case error.  */
+  if (isvalue (array[500 + f1 () - 599])) { setverdict (pass) }
+  else { setverdict (fail, __LINE__) }
+  if (isvalue (array)) { setverdict (pass) }
+  else { setverdict (fail, __LINE__) }
+  if (isvalue (array[f1 () - f1 () + 1].a)) { setverdict (pass) }
+  else { setverdict (fail, __LINE__) }
+  if (isvalue (arr2[500 + f1 () - 598])) { setverdict (pass) }
+  else { setverdict (fail, __LINE__) }
+  if (isvalue (arr2)) { setverdict (pass) }
+  else { setverdict (fail, __LINE__) }
+  if (not isvalue (arr3)) { setverdict (pass) }
+  else { setverdict (fail, __LINE__) }
+  if (isvalue (arr2[f1 () - f1 () + 1].a)) { setverdict (pass) }
+  else { setverdict (fail, __LINE__) }
+  if (sizeof (arr3) == 14) { setverdict (pass) }
+  else { setverdict (fail, __LINE__) }
+  /* Creating holes in arrays is not possible.  (Without dynamic test case
+     error.)  */
+}
+//testcase configs () runs on empty
+//{
+//  template tritri tsp_param_expected :=
+//  {
+//    { 0, 1, 2 },
+//    { 3, 4, 5 },
+//    { 33, 22, 11 },
+//    { 100, 100, 100 }
+//  }
+//  var tritri tsp_param_exp2 :=
+//  {
+//    [0] := { 0, 1, 2 },
+//    [1] := { 3, 4, 5 },
+//    [2] := { 33, 22, 11 },
+//    [3] := { 100, 100, 100 }
+//  }
+//  var tritri tsp_param_exp3 :=
+//  {
+//    [0] := { 0, 1, 2 },
+//    [3] := { 3, 4, 5 },
+//    [2] := { 33, 22, 11 },
+//    [1] := { 100, 100, 100 }
+//  }
+//  if (match (tsp_param, tsp_param_expected)) { setverdict (pass) }
+//  else { setverdict (fail, __LINE__) }
+//  if (tsp_param == tsp_param_exp2) { setverdict (pass) }
+//  else { setverdict (fail, __LINE__) }
+//  if (tsp_param != tsp_param_exp3) { setverdict (pass) }
+//  else { setverdict (fail, __LINE__) }
+//}
+type record of my mylist
+type set of my_set myset
+type record my { intlist ilist, integer i }
+type record my_set { intset iset, integer i }
+type record dummy { mylist mlist }
+type record dummy_set { myset mset }
+testcase recofs () runs on empty
+{
+  template dummy t1 := { mlist := { { ilist := { 0 }, i := 0 } } }
+  template dummy t1_mod1 modifies t1 := { mlist := { [0] := { ilist := { 1 } } } }
+  var dummy t1_mod_exp := { mlist := { { ilist := { 1 }, i := 0 } } }
+  if (match (t1_mod_exp, t1_mod1)) { setverdict (pass) }
+  else { setverdict (fail, __LINE__) }
+  var integer index := 0
+  /* An index like "index + 1 - 1" caused circular reference with previous
+     versions.  The name was not set correctly.  */
+  template dummy t1_mod2 modifies t1 := { mlist := { [index + 1 - index - 1] := { ilist := { [0 - index] := index + 1 } } } }
+  if (match (t1_mod_exp, t1_mod2)) { setverdict (pass) }
+  else { setverdict (fail, __LINE__) }
+  var intlist v1 := { [0] := 0, [index + 1] := 1 }
+  var intlist v1_exp := { 100, 1 }
+  var intlist v3 := { [100 + f1 ()] := 100 }
+  v1[1] := index + 1
+  v1 := { [0] := 100 }
+  if (v1 == v1_exp) { setverdict (pass) }
+  else { setverdict (fail, __LINE__) }
+  var dummy v2 := { mlist := { { ilist := { 1, 2 }, i := 500 } } }
+  v2 := { mlist := { { ilist := { [index + 2] := 3 }, i := v2.mlist[index].i - 100 } } }
+  var dummy v2_exp := { mlist := { { ilist := { -, -, 3 }, i := 400 } } }
+  if (v2 == v2_exp) { setverdict (pass) }
+  else { setverdict (fail, __LINE__, ": ", match(v2, v2_exp)) }
+  if (not isvalue (t1_mod2.mlist[500])) { setverdict (pass) }
+  else { setverdict (fail, __LINE__) }
+  if (isvalue (t1_mod2.mlist[0])) { setverdict (pass) }
+  else { setverdict (fail, __LINE__) }
+  if (not isvalue (t1_mod2.mlist[1])) { setverdict (pass) }
+  else { setverdict (fail, __LINE__) }
+  if (not isvalue (v2)) { setverdict (pass) }
+  else { setverdict (fail, __LINE__) }
+  if (not isvalue (v2.mlist[index].ilist[1])) { setverdict (pass) }
+  else { setverdict (fail, __LINE__) }
+  if (isvalue (v1)) { setverdict (pass) }
+  else { setverdict (fail, __LINE__) }
+  if (isvalue (v1[0])) { setverdict (pass) }
+  else { setverdict (fail, __LINE__) }
+  if (not isvalue (v3)) { setverdict (pass) }
+  else { setverdict (fail, __LINE__) }
+  if (isvalue (v3[200])) { setverdict (pass) }
+  else { setverdict (fail, __LINE__) }
+  if (sizeof (v3) == 201) { setverdict (pass) }
+  else { setverdict (fail, __LINE__) }
+}
+testcase setofs () runs on empty
+{ /* Same as the previous.  */
+  template dummy_set t1 := { mset := { { iset := { 0 }, i := 0 } } }
+  template dummy_set t1_mod1 modifies t1 := { mset := { [0] := { iset := { 1 } } } }
+  var dummy_set t1_mod_exp := { mset := { { iset := { 1 }, i := 0 } } }
+  if (match (t1_mod_exp, t1_mod1)) { setverdict (pass) }
+  else { setverdict (fail, __LINE__) }
+  var integer index := 0
+  template dummy_set t1_mod2 modifies t1 := { mset := { [index + 1 - index - 1] := { iset := { [0 - index] := index + 1 } } } }
+  if (match (t1_mod_exp, t1_mod2)) { setverdict (pass) }
+  else { setverdict (fail, __LINE__) }
+  var intset v1 := { [0] := 0, [index + 1] := 1 }
+  var intset v1_exp := { 100, 1 }
+  v1[1] := index + 1
+  v1 := { [0] := 100 }
+  if (v1 == v1_exp) { setverdict (pass) }
+  else { setverdict (fail, __LINE__) }
+  var dummy_set v2 := { mset := { { iset := { 1, 2 }, i := 500 } } }
+  var dummy_set v2_exp := { mset := { { iset := { -, -, 3 }, i := 400 } } }
+  var intset v3 := { [100 + f1 ()] := 100 }
+  v2 := { mset := { { iset := { [index + 2] := 3 }, i := v2.mset[index].i - 100 } } }
+  if (v2 == v2_exp) { setverdict (pass) }
+  else { setverdict (fail, __LINE__, ": ", match(v2, v2_exp)) }
+  /* It should be a compile only test.  */
+  var ASN_CSTR asnstr
+  asnstr := { { fixed := NULL }, "{ itu-t identified-organization etsi(0) reserved(127) etsi-identified-organization(0) ericsson(5) }", 'abcd'O };
+  var objid oi := objid { itu_t (0) 1 2 }
+  /* Using isvalue.  */
+  if (isvalue (t1_mod2)) { setverdict (pass) }
+  else { setverdict (fail, __LINE__) }
+  if (isvalue (t1_mod2.mset)) { setverdict (pass) }
+  else { setverdict (fail, __LINE__) }
+  /* Indexing with constants was a problem with INDEXED_TEMPLATE_LIST
+     nodes.  */
+  if (not isvalue (t1_mod2.mset[500])) { setverdict (pass) }
+  else { setverdict (fail, __LINE__) }
+  if (isvalue (t1_mod2.mset[0])) { setverdict (pass) }
+  else { setverdict (fail, __LINE__) }
+  if (not isvalue (t1_mod2.mset[1])) { setverdict (pass) }
+  else { setverdict (fail, __LINE__) }
+  if (not isvalue (v2)) { setverdict (pass) }
+  else { setverdict (fail, __LINE__) }
+  if (not isvalue (v2.mset[index].iset[1])) { setverdict (pass) }
+  else { setverdict (fail, __LINE__) }
+  if (isvalue (v1)) { setverdict (pass) }
+  else { setverdict (fail, __LINE__) }
+  if (isvalue (v1[0])) { setverdict (pass) }
+  else { setverdict (fail, __LINE__) }
+  if (not isvalue (v3)) { setverdict (pass) }
+  else { setverdict (fail, __LINE__) }
+  if (isvalue (v3[200])) { setverdict (pass) }
+  else { setverdict (fail, __LINE__) }
+  if (sizeof (v3) == 201) { setverdict (pass) }
+  else { setverdict (fail, __LINE__) }
+}
+
+type integer intarr[2..5]
+
+testcase tc_TR938_939() runs on empty {
+  // Constants with the same base-types, but initialized in different ways.
+  // All the same.  Evaluated during CP.  It's specific to the mentioned
+  // TR939, but the restructuring for TR938 should make this obsolete.
+  const intlist il1 := { [0] := 0, [1] := 1 }
+  const intlist il2 := { [0] := 0, [1] := 1 }
+  const intlist il3 := { [1] := 1, [0] := 0 }
+  const intlist il4 := { 0, 1 }
+  const intlist il5 := { 1, 0 }
+  const intlist il6 := { 0, 1, 2 }
+  const intlist il7 := { [0] := 0, [1] := 1, [2] := 2 }
+  const intlist il8 := { [2] := 2, [1] := 1, [0] := 0 }
+  if (il1 == il1)                { setverdict(pass) } else { setverdict(fail, __LINE__) }
+  if (il1 == il2)                { setverdict(pass) } else { setverdict(fail, __LINE__) }
+  if (il1 == il3)                { setverdict(pass) } else { setverdict(fail, __LINE__) }
+  if (il1 == il4)                { setverdict(pass) } else { setverdict(fail, __LINE__) }
+  if (il1 == il2 and il2 == il3
+      and il3 == il4)            { setverdict(pass) } else { setverdict(fail, __LINE__) }
+  if (il1 != il5)                { setverdict(pass) } else { setverdict(fail, __LINE__) }
+  if (il1 != il6)                { setverdict(pass) } else { setverdict(fail, __LINE__) }
+  if (il1 != il7)                { setverdict(pass) } else { setverdict(fail, __LINE__) }
+  if (il1 != il8)                { setverdict(pass) } else { setverdict(fail, __LINE__) }
+  // Initializing value-range arrays.
+  var intarr ia1 := { [2] := 2, [3] := 3, [4] := 4, [5] := 5 }
+  var intarr ia2 := { 2, 3, 4, 5 }
+  if (ia1 == ia2)                { setverdict(pass) } else { setverdict(fail, __LINE__) }
+  // Initializing arrays using dynamic index values.
+  var integer i := 2
+  var intarr ia3 := { [i] := 2, [i] := 2 }
+  ia3[i + 1] := 3; ia3[i + 2] := 4; ia3[i + 3] := 5
+  var intarr ia4 := { [i] := 2, [i] := 2 }
+  ia4[i + 1] := 3; ia4[i + 2] := 4; ia4[i + 3] := 5
+  if (ia3 == ia4) { setverdict(pass) } else { setverdict(fail, __LINE__) }
+}
+
+// Test for TR943.  The code section was not set correctly for references from
+// different modules.  The module of the referenced index should come after
+// this module.  Otherwise, the test is useless.
+template intlist t_intlist := { 0 }
+template intlist tm_intlist modifies t_intlist := { [idx_ASN] := 1 }
+testcase tc_TR943() runs on empty {
+  // Same for values.
+  var intlist il1 := { [idx_ASN] := 1 }
+  if (il1 == { 1 })           { setverdict(pass) } else { setverdict(fail, __LINE__) }
+  if (match(il1, tm_intlist)) { setverdict(pass) } else { setverdict(fail, __LINE__) }
+}
+
+control
+{
+  execute (asns ())
+  execute (recofs ())
+  execute (setofs ())
+  execute (arrays ())
+//  execute (configs ())
+  execute (tc_TR938_939 ())
+  execute (tc_TR943 ())
+}
+}
diff --git a/Regression_Test_java/src/TbasicStatem.ttcn b/Regression_Test_java/src/TbasicStatem.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..0e3fcff615299ca27b684d66252d992c60ac869f
--- /dev/null
+++ b/Regression_Test_java/src/TbasicStatem.ttcn
@@ -0,0 +1,386 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Baranyi, Botond
+ *   Gecse, Roland
+ *   Harai, Tibor
+ *   Kovacs, Ferenc
+ *   Raduly, Csaba
+ *   Szabo, Janos Zoltan – initial implementation
+ *
+ ******************************************************************************/
+module TbasicStatem {
+type component basicStatem_mycomp {};
+
+
+testcase basicStatemIf() runs on basicStatem_mycomp {
+// literal constants in the expression
+if (true) {setverdict(pass)}
+ else {setverdict(fail)}
+if (false) {setverdict(fail)}
+ else {setverdict(pass)}
+// variable references in the expression
+var boolean b := true;
+if (b) {setverdict(pass)}
+ else {setverdict(fail)}
+b := false;
+if (b) {setverdict(fail)}
+ else {setverdict(pass)}
+}
+
+testcase basicStatemElseIf() runs on basicStatem_mycomp {
+// literal constants in the expressions
+if (false) {setverdict(fail)}
+ else if (false) {setverdict(fail)}
+ else {setverdict(pass)}
+if (false) {setverdict(fail)}
+ else if (true) {setverdict(pass)}
+ else {setverdict(fail)}
+if (true) {setverdict(pass)}
+ else if (false) {setverdict(fail)}
+ else {setverdict(fail)}
+// variable references in the expressions
+var boolean b1 := false, b2 := false;
+if (b1) {setverdict(fail)}
+ else if (b2) {setverdict(fail)}
+ else {setverdict(pass)}
+b2 := true;
+if (b1) {setverdict(fail)}
+ else if (b2) {setverdict(pass)}
+ else {setverdict(fail)}
+b1 := true;
+if (b1) {setverdict(pass)}
+ else if (b2) {setverdict(fail)}
+ else {setverdict(fail)}
+}
+
+type record address { integer filed }
+
+testcase basicStatemSelectCase() runs on basicStatem_mycomp {
+var bitstring bit1, bit2;
+bit1:='1001'B;
+bit2:='11001'B;
+select (bit1) {
+ case ('11'B,'101000101'B) { setverdict(fail); }
+ case ('1001'B,bit2,'10'B) { setverdict(pass); }
+ case else { setverdict(inconc); }
+}
+var boolean boo1, boo2;
+boo1:=false;
+boo2:=true;
+select (boo1) {
+ case (true,boo2) { setverdict(fail); }
+ case (false)     { setverdict(pass); }
+ case else { setverdict(inconc); }
+}
+var charstring char1, char2;
+char1:="A";
+char2:="cvs";
+select (char1) {
+ case ("lkjsd",char2) { setverdict(fail); }
+ case ("ff","C","A") { setverdict(pass); }
+ case else { setverdict(inconc); }
+}
+var universal charstring uchar1, uchar2;
+uchar1:=char(0,0,1,113);
+uchar2:=char(0,0,0,129);
+select (uchar1) {
+ case (uchar2,char(0,0,0,67)) { setverdict(fail); }
+ case (char(0,0,0,69),char(0,0,0,68),char(0,0,1,113)) { setverdict(pass); }
+ case else { setverdict(inconc); }
+}
+var integer int1, int2;
+int1:= 4;
+int2:= 7;
+select (int1) {
+ case (3,0) { setverdict(fail); }
+ case (11,int2,4) { setverdict(pass); }
+ case else { setverdict(inconc); }
+}
+select (int1 + int2) {
+ case (3,0) { setverdict(fail); }
+ case (11,4) { setverdict(pass); }
+ case else { setverdict(inconc); }
+}
+select (int1 + int2) {
+ case (3,0) { setverdict(fail); }
+ case (3) { setverdict(fail); }
+ case (0,3) { setverdict(fail); }
+ case (0,4) { setverdict(fail); }
+ case (99999999999999999999999999999999999) { setverdict(fail); }
+ case (11,4) { setverdict(pass); }
+ case else { setverdict(inconc); }
+ case else { setverdict(inconc); }
+}
+select (int1 + int2) {
+ case (3,0) { setverdict(fail); }
+ case (3) { setverdict(fail); }
+ case (0,3) { setverdict(fail); }
+ case (0,4) { setverdict(fail); }
+ case (11,4) { setverdict(pass); }
+ case else { setverdict(inconc); }
+}
+var octetstring octet1, octet2;
+octet1:= 'A9'O;
+octet2:= '1267FD'O;
+select (octet1) {
+ case ('FF'O,'A9'O,octet2) { setverdict(pass); }
+ case ('067B'O,'FA'O) { setverdict(fail); }
+ case else { setverdict(inconc); }
+}
+var hexstring hex1, hex2;
+hex1:= '12C'H;
+hex2:= 'A778F'H;
+select (hex1) {
+ case ('D'H,'AA'H) { setverdict(fail); }
+ case (hex2,'12C'H,'3'H) { setverdict(pass); }
+ case else { setverdict(inconc); }
+}
+var verdicttype verd1, verd2;
+verd1:= none;
+verd2:= error;
+select (verd1) {
+ case (pass,fail) { setverdict(fail); }
+ case (verd2,none,inconc) { setverdict(pass); }
+ case else { setverdict(inconc); }
+}
+var float float1, float2;
+float1:= 2.3;
+float2:= 7.89;
+select (float1) {
+ case (float2,0.4) { setverdict(fail); }
+ case (2.31,7.0,2.29) { setverdict(inconc); }
+ case else { setverdict(pass); }
+}
+var address v_add1 := {23};
+var address v_add2 := {47};
+select (v_add1) {
+ case ({56},v_add2) { setverdict(fail); }
+ case ({4},{23},{234}) { setverdict(pass); }
+ case else { setverdict(inconc); }
+}
+}
+
+testcase basicStatemFor() runs on basicStatem_mycomp {
+var integer i,x1,x2;
+x1:=0;
+x2:=0;
+for (i:=1;i<=10;i:=i+1) {x1:=x1+1};
+for (var integer j:=1;j<1000;j:=j*2) {x2:=x2+2;}
+if (x1==10) {setverdict(pass);} // index variable declared separately
+ else {setverdict(fail);}
+if (x2==20) {setverdict(pass);}  // index variable declared in the loop
+ else {setverdict(fail);}
+}
+
+testcase basicStatemWhile() runs on basicStatem_mycomp {
+var integer i,x1,x2;
+x1:=0;
+x2:=0;
+i:=1;
+while (i<=10) {i:=i+1; x1:=x1+1};
+i:=1
+while (i<=0) {i:=i+1; x2:=x2+1};
+if (x1==10) {setverdict(pass)}
+ else {setverdict(fail)};
+if (x2==0) {setverdict(pass)} // zero-sized loop
+ else {setverdict(fail)};
+
+}
+
+testcase basicStatemDoWhile() runs on basicStatem_mycomp {
+var integer i,x1,x2;
+x1:=0;
+x2:=0;
+i:=1;
+do {i:=i+1; x1:=x1+1} while (i<=10);
+i:=1;
+do {i:=i+1; x2:=x2+1} while (i<=0);
+if (x1==10) {setverdict(pass)}
+ else {setverdict(fail)};
+if (x2==1) {setverdict(pass)}  // "zero-sized" loop
+ else {setverdict(fail)};
+}
+
+//testcase basicStatemLabelGoto1() runs on basicStatem_mycomp {
+//goto L1;		// forward
+//setverdict(fail);
+//label L1;
+//setverdict(pass);
+//}
+//
+//testcase basicStatemLabelGoto2() runs on basicStatem_mycomp {
+//var integer x;
+//x:=0
+//label L1;		// backward
+//x:=x+1;
+//if (x==2) {setverdict(pass)}
+//else { goto L1};
+//}
+
+//testcase basicStatemStop() runs on basicStatem_mycomp {
+//setverdict(pass);
+//stop;
+//setverdict(fail);
+//}
+
+function f_aliasValue(integer par1, in integer par2, out integer par3,
+  inout integer par4, template integer par5)
+{
+  // all parameters should be zero, par3 is inaccessible yet
+  if (par1 == 0 and par2 == 0 and par4 == 0 and valueof(par5) == 0)
+    { setverdict(pass); }
+  else { setverdict(fail); }
+  par3 := 1;
+  // par3 and par4 should change to one, the rest should remain zero
+  if (par1 == 0 and par2 == 0 and par3 == 1 and par4 == 1 and
+      valueof(par5) == 0) { setverdict(pass); }
+  else { setverdict(fail); }
+  par1 := 2;
+  // nothing except par1 should change
+  if (par1 == 2 and par2 == 0 and par3 == 1 and par4 == 1 and
+      valueof(par5) == 0) { setverdict(pass); }
+  else { setverdict(fail); }
+}
+
+function f_aliasTemplate(template integer par1, in template integer par2,
+  out template integer par3, inout template integer par4, integer par5)
+{
+  if (valueof(par1) == 0 and valueof(par2) == 0 and valueof(par4) == 0 and
+      par5 == 0) { setverdict(pass); }
+  else { setverdict(fail); }
+  par3 := 1;
+  if (valueof(par1) == 0 and valueof(par2) == 0 and valueof(par3) == 1 and
+      valueof(par4) == 1 and par5 == 0) { setverdict(pass); }
+  else { setverdict(fail); }
+  par1 := 2;
+  if (valueof(par1) == 2 and valueof(par2) == 0 and valueof(par3) == 1 and
+      valueof(par4) == 1 and par5 == 0) { setverdict(pass); }
+  else { setverdict(fail); }
+}
+
+testcase basicStatemfunctionCallAlias() runs on basicStatem_mycomp
+{
+  var integer i := 0;
+  f_aliasValue(i, i, i, i, i);
+  if (i == 1) { setverdict(pass); }
+  else { setverdict(fail); }
+  var template integer j := 0;
+  f_aliasTemplate(j, j, j, j, valueof(j));
+  if (valueof(j) == 1) { setverdict(pass); }
+  else { setverdict(fail); }
+}
+
+type record r_empty { }
+type set s_empty { }
+type record of r_empty ro_empty
+type set of s_empty so_empty
+type union u_empty { ro_empty f1, so_empty f2 }
+type anytype a_empty
+type enumerated e_empty { f1, f2 }
+type component c_HM79493
+{
+  var integer i;                var template integer it
+  var float f;                  var template float ft
+  var boolean b;                var template boolean bt
+  var verdicttype v;            var template verdicttype vt
+  var bitstring bs;             var template bitstring bst
+  var hexstring hs;             var template hexstring hst
+  var octetstring os;           var template octetstring ost
+  var charstring cs;            var template charstring cst
+  var universal charstring ucs; var template universal charstring ucst
+  var c_HM79493 c;              var template c_HM79493 ct
+  var r_empty r;                var template r_empty rt
+  var s_empty s;                var template s_empty st
+  var ro_empty ro;              var template ro_empty rot
+  var so_empty so;              var template so_empty sot
+  var u_empty u;                var template u_empty ut
+  var a_empty a;                var template a_empty at
+  var e_empty e;                var template e_empty et
+  
+  // HQ19911: uncomment and watch the DTE
+  // var template ro_empty tro := { permutation({}) }
+}
+
+testcase tc_HM79493_set() runs on c_HM79493
+{
+  i := 100; it := 100
+  f := 100.0; ft := 100.0
+  b := true; bt := true
+  v := pass; vt := pass
+  bs := '00'B; bst := '00'B
+  hs := '00'H; hst := '00'H
+  os := '00'O; ost := '00'O
+  cs := "00"; cst := "00"
+  ucs := char(0, 0, 0, 0); ucst := char(0, 0, 0, 0)
+  c := self; ct := self
+  r := { }; rt := { }
+  s := { }; st := { }
+  ro := { }; rot := { }
+  so := { }; sot := { }
+  u := { f1 := { } }; ut := { f1 := { } }
+  a := { u_empty := { f1 := { } } }; at := { u_empty := { f1 := { } } }
+  e := f1; et := f1
+  setverdict(pass)
+}
+
+testcase tc_HM79493_check() runs on c_HM79493
+{
+  if (log2str(i) == "<unbound>") { setverdict(pass) } else { setverdict(fail) }
+  if (log2str(it) == "<uninitialized template>") { setverdict(pass) } else { setverdict(fail) }
+  if (log2str(f) == "<unbound>") { setverdict(pass) } else { setverdict(fail) }
+  if (log2str(ft) == "<uninitialized template>") { setverdict(pass) } else { setverdict(fail) }
+  if (log2str(b) == "<unbound>") { setverdict(pass) } else { setverdict(fail) }
+  if (log2str(bt) == "<uninitialized template>") { setverdict(pass) } else { setverdict(fail) }
+  if (log2str(v) == "<unbound>") { setverdict(pass) } else { setverdict(fail) }
+  if (log2str(vt) == "<uninitialized template>") { setverdict(pass) } else { setverdict(fail) }
+  if (log2str(bs) == "<unbound>") { setverdict(pass) } else { setverdict(fail) }
+  if (log2str(bst) == "<uninitialized template>") { setverdict(pass) } else { setverdict(fail) }
+  if (log2str(hs) == "<unbound>") { setverdict(pass) } else { setverdict(fail) }
+  if (log2str(hst) == "<uninitialized template>") { setverdict(pass) } else { setverdict(fail) }
+  if (log2str(os) == "<unbound>") { setverdict(pass) } else { setverdict(fail) }
+  if (log2str(ost) == "<uninitialized template>") { setverdict(pass) } else { setverdict(fail) }
+  if (log2str(cs) == "<unbound>") { setverdict(pass) } else { setverdict(fail) }
+  if (log2str(cst) == "<uninitialized template>") { setverdict(pass) } else { setverdict(fail) }
+  if (log2str(ucs) == "<unbound>") { setverdict(pass) } else { setverdict(fail) }
+  if (log2str(ucst) == "<uninitialized template>") { setverdict(pass) } else { setverdict(fail) }
+  if (log2str(c) == "<unbound>") { setverdict(pass) } else { setverdict(fail) }
+  if (log2str(ct) == "<uninitialized template>") { setverdict(pass) } else { setverdict(fail) }
+  if (log2str(r) == "<unbound>") { setverdict(pass) } else { setverdict(fail) }
+  if (log2str(rt) == "<uninitialized template>") { setverdict(pass) } else { setverdict(fail) }
+  if (log2str(s) == "<unbound>") { setverdict(pass) } else { setverdict(fail) }
+  if (log2str(st) == "<uninitialized template>") { setverdict(pass) } else { setverdict(fail) }
+  if (log2str(ro) == "<unbound>") { setverdict(pass) } else { setverdict(fail) }
+  if (log2str(rot) == "<uninitialized template>") { setverdict(pass) } else { setverdict(fail) }
+  if (log2str(so) == "<unbound>") { setverdict(pass) } else { setverdict(fail) }
+  if (log2str(sot) == "<uninitialized template>") { setverdict(pass) } else { setverdict(fail) }
+  if (log2str(u) == "<unbound>") { setverdict(pass) } else { setverdict(fail) }
+  if (log2str(ut) == "<uninitialized template>") { setverdict(pass) } else { setverdict(fail) }
+  if (log2str(a) == "<unbound>") { setverdict(pass) } else { setverdict(fail) }
+  if (log2str(at) == "<uninitialized template>") { setverdict(pass) } else { setverdict(fail) }
+  if (log2str(e) == "<unbound>") { setverdict(pass) } else { setverdict(fail) }
+  if (log2str(et) == "<uninitialized template>") { setverdict(pass) } else { setverdict(fail) }
+}
+
+control {
+ execute(basicStatemIf());
+ execute(basicStatemElseIf());
+ execute(basicStatemSelectCase());
+ execute(basicStatemFor());
+ execute(basicStatemWhile());
+ execute(basicStatemDoWhile());
+// execute(basicStatemLabelGoto1());
+// execute(basicStatemLabelGoto2());
+// execute(basicStatemStop());
+ //execute(basicStatemfunctionCallAlias());
+ execute(tc_HM79493_set());  // Set component variables/variable templates.
+ execute(tc_HM79493_check());  // All component variables/variable templates must be unbound.
+}
+} with { extension "anytype u_empty" }
+
diff --git a/Regression_Test_java/src/TbitstrOper.ttcn b/Regression_Test_java/src/TbitstrOper.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..4cbd428cb04facc624bcd19236c5c7e3c03bef1d
--- /dev/null
+++ b/Regression_Test_java/src/TbitstrOper.ttcn
@@ -0,0 +1,709 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Kovacs, Ferenc
+ *   Raduly, Csaba
+ *   Szabados, Kristof
+ *   Szabo, Janos Zoltan – initial implementation
+ *
+ ******************************************************************************/
+module TbitstrOper
+{ type component bitstrOper_comptype { };
+const bitstring TbitstrOper_const1qw:='11111111000000001111'B;//FIXME for bughunt only
+const bitstring TbitstrOper_const1:='1000'B;
+
+testcase bitstrAssign() runs on bitstrOper_comptype
+{ var bitstring x1:='01101'B;
+  var bitstring x2,x3,x4;
+  x2:='0111'B;
+  x4:='01'B;
+  x3:=''B;
+  x4:='0101'B;
+  if (x1=='01101'B) {setverdict(pass);}	//at declaration
+     else {setverdict(fail);}
+  if (x2=='0111'B) {setverdict(pass);}		//later
+     else {setverdict(fail);}
+  if (x3==''B) {setverdict(pass);}		//empty string
+     else {setverdict(fail);}
+  if (x4=='0101'B) {setverdict(pass);}		//change of size
+     else {setverdict(fail);}
+}
+
+testcase bitstrAssignElem10() runs on bitstrOper_comptype
+{ var bitstring x1,x2,x3,x4,x5,x6;
+  x1:='11111'B;
+  x4:='11111'B;
+  x2:='00000'B;
+  x5:='11111'B;
+  x3:='1'B;
+  x6:='0'B
+  x3:=x2[1];
+  x1[1]:='0'B;
+  x4[3]:=x2[3];
+  x5[1]:=x6;
+  if (x1[0]=='1'B) {setverdict(pass);}		//accessing an element
+   else {setverdict(fail);}
+  if (x3=='0'B) {setverdict(pass);}		//change string to element
+   else {setverdict(fail);}
+  if (x1=='10111'B) {setverdict(pass);}	//change element to value
+   else {setverdict(fail);}
+  if (x4=='11101'B) {setverdict(pass);}	//change element to element
+   else {setverdict(fail);}
+  if (x5=='10111'B) {setverdict(pass);}	//change element to string
+   else {setverdict(fail);}
+}
+
+testcase bitstrAssignElem01() runs on bitstrOper_comptype
+{ var bitstring x1,x2,x3,x4,x5,x6;
+  x1:='00000'B;
+  x2:='11111'B;
+  x4:='00000'B;
+  x5:='00000'B;
+  x6:='1'B;
+  x3:='0'B;
+  x3:=x2[1];
+  x1[2]:='1'B;
+  x4[1]:=x2[4];
+  x5[1]:=x6;
+  if (x3=='1'B) {setverdict(pass);}		//change string to element
+   else {setverdict(fail);}
+  if (x1=='00100'B) {setverdict(pass);}	//change element to value
+   else {setverdict(fail);}
+  if (x4=='01000'B) {setverdict(pass);}	//change element to element
+   else {setverdict(fail);}
+  if (x5=='01000'B) {setverdict(pass);}	//change element to string
+   else {setverdict(fail);}
+}
+
+testcase bitstrAssignElem00() runs on bitstrOper_comptype
+{ var bitstring x1,x2,x3,x4,x5,x6;
+  x1:='00000'B;
+  x2:='00000'B;
+  x4:='00000'B;
+  x5:='00000'B;
+  x6:='0'B;
+  x3:='0'B;
+  x3:=x2[1];
+  x1[2]:='0'B;
+  x4[1]:=x2[4];
+  x5[1]:=x6;
+  if (x3=='0'B) {setverdict(pass);}		//change string to element
+   else {setverdict(fail);}
+  if (x1=='00000'B) {setverdict(pass);}	//change element to value
+   else {setverdict(fail);}
+  if (x4=='00000'B) {setverdict(pass);}	//change element to element
+   else {setverdict(fail);}
+  if (x5=='00000'B) {setverdict(pass);}	//change element to string
+   else {setverdict(fail);}
+}
+
+testcase bitstrAssignElem11() runs on bitstrOper_comptype
+{ var bitstring x1,x2,x3,x4,x5,x6;
+  x1:='11111'B;
+  x2:='11111'B;
+  x4:='11111'B;
+  x5:='11111'B;
+  x6:='1'B;
+  x3:='1'B;
+  x3:=x2[1];
+  x1[2]:='1'B;
+  x4[1]:=x2[4];
+  x5[1]:=x6;
+  if (x3=='1'B) {setverdict(pass);}		//change string to element
+   else {setverdict(fail);}
+  if (x1=='11111'B) {setverdict(pass);}	//change element to value
+   else {setverdict(fail);}
+  if (x4=='11111'B) {setverdict(pass);}	//change element to element
+   else {setverdict(fail);}
+  if (x5=='11111'B) {setverdict(pass);}	//change element to string
+   else {setverdict(fail);}
+}
+
+testcase bitstrAssignElemAdd() runs on bitstrOper_comptype
+{var bitstring x1,x2;
+ x1:='000'B;
+ x2:='1111'B;
+ x1[3]:='1'B;
+ x2[4]:=x1[0];
+ if (x1=='0001'B) {setverdict(pass);}	//add "1"
+   else {setverdict(fail);}
+ if (x2=='11110'B) {setverdict(pass);}	//add "0"
+   else {setverdict(fail);}
+}
+
+testcase bitstrLengthof() runs on bitstrOper_comptype
+{ var bitstring x1:='01101'B;
+  var bitstring x2,x3,x4,x5;
+  x2:='0111'B;
+  x4:='01'B;
+  x5:='01'B;
+  x3:=''B;
+  x4:='0101'B;
+  x5[2]:='0'B;
+  if (lengthof(x1)==5) {setverdict(pass);}	//at declaration
+     else {setverdict(fail);}
+  if (lengthof(x2)==4) {setverdict(pass);}	//later
+     else {setverdict(fail);}
+  if (lengthof(x3)==0) {setverdict(pass);}	//empty string
+     else {setverdict(fail);}
+  if (lengthof(x4)==4) {setverdict(pass);}	//change of size
+     else {setverdict(fail);}
+  if (lengthof(x5)==3) {setverdict(pass);}	//add element
+     else {setverdict(fail);}
+}
+
+testcase bitstrConst() runs on bitstrOper_comptype
+{const bitstring TbitstrOper_const3:='0001'B;
+ if (TbitstrOper_const1=='1000'B) {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+ if (TbitstrOper_const3=='0001'B) {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+}
+
+testcase bitstrComp_str_str() runs on bitstrOper_comptype
+{var bitstring x1,x2,x3;
+ x1:='0110'B;
+ x2:='0110'B;
+ x3:='011'B;
+ if (x1==x2) {setverdict(pass);}	//equality, equals
+   else {setverdict(fail);}
+ if (not(x3==x2)) {setverdict(pass);}	//equality, not equals
+   else {setverdict(fail);}
+ if (x1!=x3) {setverdict(pass);}	//non-equality, not equals
+   else {setverdict(fail);}
+ if (not(x1!=x2)) {setverdict(pass);}	//non-equality, equals
+   else {setverdict(fail);}
+}
+
+testcase bitstrComp_el_str() runs on bitstrOper_comptype
+{var bitstring x1,x2,x3;
+ x1:='0110'B;
+ x2:='1'B;
+ x3:='0'B;
+ if (x1[2]==x2) {setverdict(pass);}	//equality, equals
+   else {setverdict(fail);}
+ if (not(x1[2]==x3)) {setverdict(pass);}	//equality, not equals
+   else {setverdict(fail);}
+ if (x1[1]!=x3) {setverdict(pass);}	//non-equality, not equals
+   else {setverdict(fail);}
+ if (not(x1[1]!='1'B)) {setverdict(pass);}	//non-equality, equals
+   else {setverdict(fail);}
+}
+
+testcase bitstrComp_str_el() runs on bitstrOper_comptype
+{var bitstring x1,x2,x3;
+ x1:='0110'B;
+ x2:='1'B;
+ x3:='0'B;
+ if (x2==x1[1]) {setverdict(pass);}	//equality, equals
+   else {setverdict(fail);}
+ if (not(x3==x1[1])) {setverdict(pass);}	//equality, not equals
+   else {setverdict(fail);}
+ if (x2!=x1[0]) {setverdict(pass);}	//non-equality, not equals
+   else {setverdict(fail);}
+ if (not('1'B!=x1[1])) {setverdict(pass);}	//non-equality, equals
+   else {setverdict(fail);}
+}
+
+testcase bitstrComp_el_el() runs on bitstrOper_comptype
+{var bitstring x1,x2,x3;
+ x1:='0110'B;
+ x2:='0110'B;
+ x3:='011'B;
+ if (x1[2]==x2[2]) {setverdict(pass);}	//equality, equals
+   else {setverdict(fail);}
+ if (not(x1[2]==x2[3])) {setverdict(pass);}	//equality, not equals
+   else {setverdict(fail);}
+ if (x1[1]!=x3[0]) {setverdict(pass);}	//non-equality, not equals
+   else {setverdict(fail);}
+ if (not(x1[1]!=x3[1])) {setverdict(pass);}	//non-equality, equals
+   else {setverdict(fail);}
+}
+
+testcase bitstrConcat() runs on bitstrOper_comptype
+{var bitstring x1,x2,x3,x4,x5,x6,x7,x8;
+ x1:='0011'B;
+ x2:='1100'B;
+ x3:= x1 & x2;
+ x4:=x1&x2[3];
+ x5:=x1[1]&x2;
+ x6:=x1[2]&x2[1];
+ x7:='11111111000000001111111'B;
+ x8:=x1[0]&x7;
+ if ((x3=='00111100'B)and(lengthof(x3)==8)) {setverdict(pass);}	//string_string
+   else {setverdict(fail);}
+ if ((x4=='00110'B)and(lengthof(x4)==5)) {setverdict(pass);}		//string_element
+   else {setverdict(fail);}
+ if ((x5=='01100'B)and(lengthof(x5)==5)) {setverdict(pass);}		//element_string
+   else {setverdict(fail);}
+ if ((x6=='11'B)and(lengthof(x6)==2)) {setverdict(pass);}		//element_element
+  else {setverdict(fail);}
+ if((x8=='011111111000000001111111'B)and(lengthof(x8)==24)) {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+testcase bitstrNot_str() runs on bitstrOper_comptype
+{ var bitstring x1,x2;
+  x1:='01101'B;
+  x2:=not4b(x1);
+  if (x2=='10010'B) {setverdict(pass);}
+     else {setverdict(fail);}
+  log(not4b(x1));    // HQ51603: the generated C++ must compile
+  action(not4b(x1)); // HQ51603
+}
+
+testcase bitstrNot_el() runs on bitstrOper_comptype
+{ var bitstring x1,x2,x3;
+  x1:='00111'B;
+  x2:=not4b(x1[1]);
+  x3:=not4b(x1[3]);
+  if (x2=='1'B) {setverdict(pass);}	//not "0"
+     else {setverdict(fail);}
+  if (x3=='0'B) {setverdict(pass);}	//not "1"
+     else {setverdict(fail);}
+}
+
+testcase bitstrAnd_str_str() runs on bitstrOper_comptype
+{ var bitstring x1,x2,x3;
+  x1:='01101'B;
+  x2:='00111'B;
+  x3:=x1 and4b x2;
+  if (x3=='00101'B) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase bitstrAnd_el_str() runs on bitstrOper_comptype
+{ var bitstring x1,x2,x3,x4,x5,x6;
+  x1:='0011'B;
+  x2:='1'B;
+  x3:=x1[0] and4b '0'B;
+  x4:=x1[0] and4b x2;
+  x5:=x1[2] and4b '0'B;
+  x6:=x1[3] and4b x2;
+  if (x3=='0'B) {setverdict(pass);}	//"0" and "0"
+     else {setverdict(fail);}
+  if (x4=='0'B) {setverdict(pass);}	//"0" and "1"
+     else {setverdict(fail);}
+  if (x5=='0'B) {setverdict(pass);}	//"1" and "0"
+     else {setverdict(fail);}
+  if (x6=='1'B) {setverdict(pass);}	//"1" and "1"
+     else {setverdict(fail);}
+}
+
+testcase bitstrAnd_str_el() runs on bitstrOper_comptype
+{ var bitstring x1,x2,x3,x4,x5,x6;
+  x1:='0011'B;
+  x2:='1'B;
+  x3:='0'B and4b x1[0];
+  x4:=x2 and4b x1[1];
+  x5:='0'B and4b x1[2];
+  x6:=x2 and4b x1[3];
+  if (x3=='0'B) {setverdict(pass);}	//"0" and "0"
+     else {setverdict(fail);}
+  if (x4=='0'B) {setverdict(pass);}	//"0" and "1"
+     else {setverdict(fail);}
+  if (x5=='0'B) {setverdict(pass);}	//"1" and "0"
+     else {setverdict(fail);}
+  if (x6=='1'B) {setverdict(pass);}	//"1" and "1"
+     else {setverdict(fail);}
+}
+
+testcase bitstrAnd_el_el() runs on bitstrOper_comptype
+{ var bitstring x1,x2,x3,x4,x5,x6;
+  x1:='0011'B;
+  x2:='0011'B;
+  x3:=x2[0] and4b x1[0];
+  x4:=x2[1] and4b x1[3];
+  x5:=x1[3] and4b x1[0];
+  x6:=x2[3] and4b x1[3];
+  if (x3=='0'B) {setverdict(pass);}	//"0" and "0"
+     else {setverdict(fail);}
+  if (x4=='0'B) {setverdict(pass);}	//"0" and "1"
+     else {setverdict(fail);}
+  if (x5=='0'B) {setverdict(pass);}	//"1" and "0"
+     else {setverdict(fail);}
+  if (x6=='1'B) {setverdict(pass);}	//"1" and "1"
+     else {setverdict(fail);}
+}
+
+testcase bitstrOr_str_str() runs on bitstrOper_comptype
+{ var bitstring x1,x2,x3;
+  x1:='01101'B;
+  x2:='00111'B;
+  x3:=x1 or4b x2;
+  if (x3=='01111'B) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase bitstrOr_el_str() runs on bitstrOper_comptype
+{ var bitstring x1,x2,x3,x4,x5,x6;
+  x1:='0011'B;
+  x2:='1'B;
+  x3:=x1[0] or4b '0'B;
+  x4:=x1[0] or4b x2;
+  x5:=x1[2] or4b '0'B;
+  x6:=x1[3] or4b x2;
+  if (x3=='0'B) {setverdict(pass);}	//"0" or "0"
+     else {setverdict(fail);}
+  if (x4=='1'B) {setverdict(pass);}	//"0" or "1"
+     else {setverdict(fail);}
+  if (x5=='1'B) {setverdict(pass);}	//"1" or "0"
+     else {setverdict(fail);}
+  if (x6=='1'B) {setverdict(pass);}	//"1" or "1"
+     else {setverdict(fail);}
+}
+
+testcase bitstrOr_str_el() runs on bitstrOper_comptype
+{ var bitstring x1,x2,x3,x4,x5,x6;
+  x1:='0011'B;
+  x2:='1'B;
+  x3:='0'B or4b x1[0];
+  x4:=x2 or4b x1[1];
+  x5:='0'B or4b x1[2];
+  x6:=x2 or4b x1[3];
+  if (x3=='0'B) {setverdict(pass);}	//"0" or "0"
+     else {setverdict(fail);}
+  if (x4=='1'B) {setverdict(pass);}	//"0" or "1"
+     else {setverdict(fail);}
+  if (x5=='1'B) {setverdict(pass);}	//"1" or "0"
+     else {setverdict(fail);}
+  if (x6=='1'B) {setverdict(pass);}	//"1" or "1"
+     else {setverdict(fail);}
+}
+
+testcase bitstrOr_el_el() runs on bitstrOper_comptype
+{ var bitstring x1,x2,x3,x4,x5,x6;
+  x1:='0011'B;
+  x2:='0011'B;
+  x3:=x2[0] or4b x1[0];
+  x4:=x2[1] or4b x1[3];
+  x5:=x1[3] or4b x1[0];
+  x6:=x2[3] or4b x1[3];
+  if (x3=='0'B) {setverdict(pass);}	//"0" or "0"
+     else {setverdict(fail);}
+  if (x4=='1'B) {setverdict(pass);}	//"0" or "1"
+     else {setverdict(fail);}
+  if (x5=='1'B) {setverdict(pass);}	//"1" or "0"
+     else {setverdict(fail);}
+  if (x6=='1'B) {setverdict(pass);}	//"1" or "1"
+     else {setverdict(fail);}
+}
+
+testcase bitstrXor_str_str() runs on bitstrOper_comptype
+{ var bitstring x1,x2,x3;
+  x1:='01101'B;
+  x2:='00111'B;
+  x3:=x1 xor4b x2;
+  if (x3=='01010'B) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase bitstrXor_el_str() runs on bitstrOper_comptype
+{ var bitstring x1,x2,x3,x4,x5,x6;
+  x1:='0011'B;
+  x2:='1'B;
+  x3:=x1[0] xor4b '0'B;
+  x4:=x1[0] xor4b x2;
+  x5:=x1[2] xor4b '0'B;
+  x6:=x1[3] xor4b x2;
+  if (x3=='0'B) {setverdict(pass);}	//"0" xor "0"
+     else {setverdict(fail);}
+  if (x4=='1'B) {setverdict(pass);}	//"0" xor "1"
+     else {setverdict(fail);}
+  if (x5=='1'B) {setverdict(pass);}	//"1" xor "0"
+     else {setverdict(fail);}
+  if (x6=='0'B) {setverdict(pass);}	//"1" xor "1"
+     else {setverdict(fail);}
+}
+
+testcase bitstrXor_str_el() runs on bitstrOper_comptype
+{ var bitstring x1,x2,x3,x4,x5,x6;
+  x1:='0011'B;
+  x2:='1'B;
+  x3:='0'B xor4b x1[0];
+  x4:=x2 xor4b x1[1];
+  x5:='0'B xor4b x1[2];
+  x6:=x2 xor4b x1[3];
+  if (x3=='0'B) {setverdict(pass);}	//"0" xor "0"
+     else {setverdict(fail);}
+  if (x4=='1'B) {setverdict(pass);}	//"0" xor "1"
+     else {setverdict(fail);}
+  if (x5=='1'B) {setverdict(pass);}	//"1" xor "0"
+     else {setverdict(fail);}
+  if (x6=='0'B) {setverdict(pass);}	//"1" xor "1"
+     else {setverdict(fail);}
+}
+
+testcase bitstrXor_el_el() runs on bitstrOper_comptype
+{ var bitstring x1,x2,x3,x4,x5,x6;
+  x1:='0011'B;
+  x2:='0011'B;
+  x3:=x2[0] xor4b x1[0];
+  x4:=x2[1] xor4b x1[3];
+  x5:=x1[3] xor4b x1[0];
+  x6:=x2[3] xor4b x1[3];
+  if (x3=='0'B) {setverdict(pass);}	//"0" xor "0"
+     else {setverdict(fail);}
+  if (x4=='1'B) {setverdict(pass);}	//"0" xor "1"
+     else {setverdict(fail);}
+  if (x5=='1'B) {setverdict(pass);}	//"1" xor "0"
+     else {setverdict(fail);}
+  if (x6=='0'B) {setverdict(pass);}	//"1" xor "1"
+     else {setverdict(fail);}
+}
+
+testcase bitstrShiftRight1() runs on bitstrOper_comptype
+{ var bitstring x1,x2;
+  x1:='01101'B;
+  x2:=x1 >> 1;
+  if (x2=='00110'B) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase bitstrShiftRight2() runs on bitstrOper_comptype
+{ var bitstring x1,x2;
+  x1:='01101'B;
+  x2:=x1 >> 2;
+  if (x2=='00011'B) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase bitstrShiftRightSum() runs on bitstrOper_comptype
+{ var bitstring x1,x2;
+  x1:='01101'B;
+  x2:=x1 >> (1+1);
+  if (x2=='00011'B) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase bitstrShiftRightEmpty() runs on bitstrOper_comptype
+{ var bitstring x1,x2;
+  x1:=''B;
+  x2:=x1 >> 1;
+  if (x2==''B) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase bitstrShiftLeft1() runs on bitstrOper_comptype
+{ var bitstring x1,x2;
+  x1:='01101'B;
+  x2:=x1 << 1;
+  if (x2=='11010'B) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase bitstrShiftLeft2() runs on bitstrOper_comptype
+{ var bitstring x1,x2;
+  x1:='01101'B;
+  x2:=x1 << 2;
+  if (x2=='10100'B) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase bitstrShiftLeftSum() runs on bitstrOper_comptype
+{ var bitstring x1,x2;
+  x1:='01101'B;
+  x2:=x1 << (1+1);
+  if (x2=='10100'B) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase bitstrShiftLeftEmpty() runs on bitstrOper_comptype
+{ var bitstring x1,x2;
+  x1:=''B;
+  x2:=x1 << 1;
+  if (x2==''B) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase bitstrRotateRight1() runs on bitstrOper_comptype
+{ var bitstring x1,x2;
+  x1:='01101'B;
+  x2:=x1 @> 1;
+  if (x2=='10110'B) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase bitstrRotateRight2() runs on bitstrOper_comptype
+{ var bitstring x1,x2;
+  x1:='01101'B;
+  x2:=x1 @> 2;
+  if (x2=='01011'B) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase bitstrRotateRightSum() runs on bitstrOper_comptype
+{ var bitstring x1,x2;
+  x1:='01101'B;
+  x2:=x1 @> (1+1);
+  if (x2=='01011'B) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase bitstrRotateRightEmpty() runs on bitstrOper_comptype
+{ var bitstring x1,x2;
+  x1:=''B;
+  x2:=x1 @> 1;
+  if (x2==''B) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase bitstrRotateLeft1() runs on bitstrOper_comptype
+{ var bitstring x1,x2;
+  x1:='01101'B;
+  x2:=x1 <@ 1;
+  if (x2=='11010'B) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase bitstrRotateLeft2() runs on bitstrOper_comptype
+{ var bitstring x1,x2;
+  x1:='01101'B;
+  x2:=x1 <@ 2;
+  if (x2=='10101'B) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase bitstrRotateLeftSum() runs on bitstrOper_comptype
+{ var bitstring x1,x2;
+  x1:='01101'B;
+ x2:=x1 <@ (1+1);
+  if (x2=='10101'B) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase bitstrRotateLeftEmpty() runs on bitstrOper_comptype
+{ var bitstring x1,x2;
+  x1:=''B;
+ x2:=x1 <@ 1;
+  if (x2==''B) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+type bitstring mybstr1
+type mybstr1 mybstr2
+type mybstr1 mybstr3 ('0'B, '1'B)
+type mybstr1 mybstr4 ('0'B, '1'B) length(1)
+type mybstr1 mybstr5 length(1)
+type mybstr1 mybstr6 (int2bit(512, 11), int2bit(1024, 11))
+// Length 0.
+type bitstring mybstr7 length(0..0)
+type bitstring MyByte length(8..8)
+type bitstring MyNibbleToByte length(4..8)
+type bitstring BitStrings1 ('0'B, '1'B)
+type bitstring BitStrings2 ('00'B, '01'B, '10'B, '10'B)
+type bitstring BitStrings_1_2 (BitStrings1, BitStrings2)
+type bitstring mybstr8 (mybstr3, mybstr4)
+type bitstring mybstr9 length(0..infinity)  // Full set.
+
+const mybstr4 c_mybstr1 := '0'B
+const mybstr8 c_mybstr2 := c_mybstr1
+
+template mybstr4 t_mybstr1 := '0'B
+template mybstr8 t_mybstr2 := t_mybstr1
+template mybstr7 t_mybstr3 := ''B length(0)
+
+function f_bstr1() return mybstr3 {
+  var mybstr2 v_mybstr1 := int2bit(bit2int('0'B), 1)
+  var template mybstr4 vt_mybstr1 := '1'B
+  // `vt_mybstr1[0] := '0'B' doesn't compile.  T_REFD nodes were not handled
+  // in the fix for TR 921.
+  return substr(v_mybstr1 & valueof(vt_mybstr1), 0, 1)
+}
+
+testcase bitstrSubtypes(in template mybstr3 p1) runs on bitstrOper_comptype {
+  var template mybstr3 vt_mybstr1 := '0'B  // Value list.
+  var template mybstr4 vt_mybstr2 := '0'B  // Length with value list.
+  var template mybstr5 vt_mybstr3 := '0'B  // Length only.
+  var mybstr3 v_mybstr1 := valueof(vt_mybstr1)
+  var mybstr4 v_mybstr2 := valueof(vt_mybstr2)
+  var mybstr5 v_mybstr3 := valueof(vt_mybstr3)
+
+  if (valueof(vt_mybstr1) == v_mybstr1 and v_mybstr2 == valueof(vt_mybstr2)) { setverdict(pass) }
+  else { setverdict(fail) }
+  if (valueof(vt_mybstr3) == v_mybstr3) { setverdict(pass) }
+  else { setverdict(fail) }
+  if (f_bstr1() == c_mybstr1 and '0'B == f_bstr1()) { setverdict(pass) }
+  else { setverdict(fail) }
+}
+
+testcase bitstrIsvalue() runs on bitstrOper_comptype{
+  var bitstring ostr0;
+  var bitstring ostr1 := '1111'B;
+  var template bitstring tostr;
+
+  if ( isvalue(ostr0) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(ostr1) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isvalue(tostr) ) { setverdict(fail); } else { setverdict(pass); };
+}
+
+testcase bitstrIsbound() runs on bitstrOper_comptype{
+  var bitstring ostr0;
+  var bitstring ostr1 := '1111'B;
+  var template bitstring tostr;
+
+  if ( isbound(ostr0) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isbound(ostr0[0]) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isbound(ostr1) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isbound(tostr) ) { setverdict(fail); } else { setverdict(pass); };
+}
+
+  control
+  {
+    const bitstring cl_1:='1000'B;
+    var bitstring vl_1;
+
+    execute(bitstrAssign());
+    execute(bitstrAssignElem10());
+    execute(bitstrAssignElem01());
+    execute(bitstrAssignElem00());
+    execute(bitstrAssignElem11());
+    execute(bitstrAssignElemAdd());
+    execute(bitstrLengthof());
+    execute(bitstrConst());
+    execute(bitstrComp_str_str());
+    execute(bitstrComp_el_str());
+    execute(bitstrComp_str_el());
+    execute(bitstrComp_el_el());
+    execute(bitstrConcat());
+    execute(bitstrNot_str());
+    execute(bitstrNot_el());
+    execute(bitstrAnd_str_str());
+    execute(bitstrAnd_el_str());
+    execute(bitstrAnd_str_el());
+    execute(bitstrAnd_el_el());
+    execute(bitstrOr_str_str());
+    execute(bitstrOr_el_str());
+    execute(bitstrOr_str_el());
+    execute(bitstrOr_el_el());
+    execute(bitstrXor_str_str());
+    execute(bitstrXor_el_str());
+    execute(bitstrXor_str_el());
+    execute(bitstrXor_el_el());
+    execute(bitstrShiftRight1());
+    execute(bitstrShiftRight2());
+    execute(bitstrShiftRightSum());
+    execute(bitstrShiftRightEmpty());
+    execute(bitstrShiftLeft1());
+    execute(bitstrShiftLeft2());
+    execute(bitstrShiftLeftSum());
+    execute(bitstrShiftLeftEmpty());
+    execute(bitstrRotateRight1());
+    execute(bitstrRotateRight2());
+    execute(bitstrRotateRightSum());
+    execute(bitstrRotateRightEmpty());
+    execute(bitstrRotateLeft1());
+    execute(bitstrRotateLeft2());
+    execute(bitstrRotateLeftSum());
+    execute(bitstrRotateLeftEmpty());
+    execute(bitstrSubtypes('0'B));
+    execute(bitstrIsvalue());
+    execute(bitstrIsbound());
+   }
+}
diff --git a/Regression_Test_java/src/TboolOper.ttcn b/Regression_Test_java/src/TboolOper.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..015f554caa01aa8caded920fded99081b1d5842d
--- /dev/null
+++ b/Regression_Test_java/src/TboolOper.ttcn
@@ -0,0 +1,399 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Baranyi, Botond
+ *   Kovacs, Ferenc
+ *   Raduly, Csaba
+ *   Szabados, Kristof
+ *   Szabo, Janos Zoltan – initial implementation 
+ *
+ ******************************************************************************/
+module TboolOper
+{const boolean TboolOper_const1:=true;   
+type component boolOper_comptype { };
+
+testcase boolAssign() runs on boolOper_comptype
+{ var boolean x1:=true;
+  var boolean x4:=x1;
+  var boolean x2,x3;
+  x2:=false;
+  x3:=x2;
+  if (x1) {setverdict(pass);}	//at declaration, value
+     else {setverdict(fail);}
+  if (x4) {setverdict(pass);}	//at declaration, variable
+     else {setverdict(fail);}
+  if (not(x2)) {setverdict(pass);}	//later, value
+     else {setverdict(fail);}
+  if (not(x3)) {setverdict(pass);}	//later, variable
+     else {setverdict(fail);}
+}
+
+testcase boolConst() runs on boolOper_comptype {
+const boolean TboolOper_const3:=false;
+if (TboolOper_const1) {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+//if (TboolOper_const2==2) {setverdict(pass);}	//control part
+//     else {setverdict(fail);}
+if (not(TboolOper_const3)) {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+}
+
+testcase boolCompEq() runs on boolOper_comptype
+{ var boolean x1,x2,x3;
+  x1:=true;
+  x2:=true;
+  x3:=false;
+  if (x1==x2) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (not(x3==x2)) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (x1==true) {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if (not(x1==false)) {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if (true==x1) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if (not(false==x1)) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if (true==true) {setverdict(pass);}	//value_value
+   else {setverdict(fail);}
+  if (not(true==false)) {setverdict(pass);}	//value_value
+   else {setverdict(fail);}
+}
+
+testcase boolCompNotEq() runs on boolOper_comptype
+{ var boolean x1,x2,x3;
+  x1:=true;
+  x2:=false;
+  x3:=true;
+  if (x1!=x2) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (not(x1!=x3)) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (x1!=false) {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if (not(x1!=true)) {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if (true!=x2) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if (not(false!=x2)) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if (true!=false) {setverdict(pass);}	//value_value
+   else {setverdict(fail);}
+  if (not(false!=false)) {setverdict(pass);}	//value_value
+   else {setverdict(fail);}
+}
+
+testcase boolNot() runs on boolOper_comptype
+{ var boolean x1,x2,x3,x4,x5,x6;
+  x1:=true;
+  x2:=false;
+  x3:=not(x1);
+  x4:=not(x2);
+  x5:=not(true);
+  x6:=not(false);
+  if (not(x3)) {setverdict(pass);}	//variable
+   else {setverdict(fail);}
+  if (x4) {setverdict(pass);}		//variable
+   else {setverdict(fail);}
+  if (not(x5)) {setverdict(pass);}	//value
+   else {setverdict(fail);}
+  if (x6) {setverdict(pass);}		//value
+   else {setverdict(fail);}
+}
+
+testcase boolAnd() runs on boolOper_comptype
+{ var boolean x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18;
+  x1:=true;
+  x2:=false;
+  x3:=x1 and x1;
+  x4:=x1 and x2;
+  x5:=x2 and x1;
+  x6:=x2 and x2;
+  x7:=x1 and true;
+  x8:=x1 and false;
+  x9:=x2 and true;
+  x10:=x2 and false;
+  x11:=true and x1;
+  x12:=true and x2;
+  x13:=false and x1;
+  x14:=false and x2;
+  x15:=true and true;
+  x16:=true and false;
+  x17:=false and true;
+  x18:=false and false;
+  if (x3) {setverdict(pass);}		//variable_variable
+   else {setverdict(fail,"1");}
+  if (not(x4)) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail, "2");}
+  if (not(x5)) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail, "3");}
+  if (not(x6)) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail, "4");}
+  if (x7) {setverdict(pass);}		//variable_value
+   else {setverdict(fail, "5");}
+  if (not(x8)) {setverdict(pass);}	//variable_value
+   else {setverdict(fail, "6");}
+  if (not(x9)) {setverdict(pass);}	//variable_value
+   else {setverdict(fail, "7");}
+  if (not(x10)) {setverdict(pass);}	//variable_value
+   else {setverdict(fail, "8");}
+  if (x11) {setverdict(pass);}		//value_variable
+   else {setverdict(fail,"9" );}
+  if (not(x12)) {setverdict(pass);}	//value_variable
+   else {setverdict(fail, "10");}
+  if (not(x13)) {setverdict(pass);}	//value_variable
+   else {setverdict(fail, "11");}
+  if (not(x14)) {setverdict(pass);}	//value_variable
+   else {setverdict(fail, "12");}
+  if (x15) {setverdict(pass);}		//value_value
+   else {setverdict(fail, "13");}
+  if (not(x16)) {setverdict(pass);}	//value_value
+   else {setverdict(fail, "14");}
+  if (not(x17)) {setverdict(pass);}	//value_value
+   else {setverdict(fail, "15");}
+  if (not(x18)) {setverdict(pass);}	//value_value
+   else {setverdict(fail, "16");}
+}
+
+testcase boolOr() runs on boolOper_comptype
+{ var boolean x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18;
+  x1:=true;
+  x2:=false;
+  x3:=x1 or x1;
+  x4:=x1 or x2;
+  x5:=x2 or x1;
+  x6:=x2 or x2;
+  x7:=x1 or true;
+  x8:=x1 or false;
+  x9:=x2 or true;
+  x10:=x2 or false;
+  x11:=true or x1;
+  x12:=true or x2;
+  x13:=false or x1;
+  x14:=false or x2;
+  x15:=true or true;
+  x16:=true or false;
+  x17:=false or true;
+  x18:=false or false;
+  if (x3) {setverdict(pass);}		//variable_variable
+   else {setverdict(fail);}
+  if (x4) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (x5) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (not(x6)) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (x7) {setverdict(pass);}		//variable_value
+   else {setverdict(fail);}
+  if (x8) {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if (x9) {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if (not(x10)) {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if (x11) {setverdict(pass);}		//value_variable
+   else {setverdict(fail);}
+  if (x12) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if (x13) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if (not(x14)) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if (x15) {setverdict(pass);}		//value_value
+   else {setverdict(fail);}
+  if (x16) {setverdict(pass);}	//value_value
+   else {setverdict(fail);}
+  if (x17) {setverdict(pass);}	//value_value
+   else {setverdict(fail);}
+  if (not(x18)) {setverdict(pass);}	//value_value
+   else {setverdict(fail);}
+}
+
+testcase boolXor() runs on boolOper_comptype
+{ var boolean x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18;
+  x1:=true;
+  x2:=false;
+  x3:=x1 xor x1;
+  x4:=x1 xor x2;
+  x5:=x2 xor x1;
+  x6:=x2 xor x2;
+  x7:=x1 xor true;
+  x8:=x1 xor false;
+  x9:=x2 xor true;
+  x10:=x2 xor false;
+  x11:=true xor x1;
+  x12:=true xor x2;
+  x13:=false xor x1;
+  x14:=false xor x2;
+  x15:=true xor true;
+  x16:=true xor false;
+  x17:=false xor true;
+  x18:=false xor false;
+  if (not(x3)) {setverdict(pass);}		//variable_variable
+   else {setverdict(fail);}
+  if (x4) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (x5) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (not(x6)) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (not(x7)) {setverdict(pass);}		//variable_value
+   else {setverdict(fail);}
+  if (x8) {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if (x9) {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if (not(x10)) {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if (not(x11)) {setverdict(pass);}		//value_variable
+   else {setverdict(fail);}
+  if (x12) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if (x13) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if (not(x14)) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if (not(x15)) {setverdict(pass);}		//value_value
+   else {setverdict(fail);}
+  if (x16) {setverdict(pass);}	//value_value
+   else {setverdict(fail);}
+  if (x17) {setverdict(pass);}	//value_value
+   else {setverdict(fail);}
+  if (not(x18)) {setverdict(pass);}	//value_value
+   else {setverdict(fail);}
+}
+
+type boolean myb1
+type boolean myb2 (true)
+type boolean myb3 (false)
+// FATAL_ERROR() with R8B: `type boolean myb3 (true, valueof(t_myb1))'.
+type boolean myb4 (c_myb1, not c_myb1 and c_myb1)
+type myb3 myb5
+type boolean myb6 (myb2, myb3)
+
+const boolean c_myb1 := true
+const myb6 c_myb2 := c_myb1
+
+template boolean t_myb1 := true
+template myb6 t_myb2 := t_myb1
+
+function f_b1(in boolean p1) return boolean { return p1 }
+
+function f_b2() return myb4 {
+  var template boolean vt_myb1 := t_myb1
+  if (valueof(t_myb1) and valueof(vt_myb1)) { return true }
+  else { return false }
+}
+
+function f_b3() return myb4 {
+  var myb4 v_myb1 := false
+  var template myb4 vt_myb1 := c_myb1
+  if (not v_myb1 and valueof(vt_myb1) == true) { return true }
+  else { return false }
+}
+
+testcase boolSubtypes() runs on boolOper_comptype {
+  if (f_b1(c_myb1) == f_b2()) { setverdict(pass) }
+  else { setverdict(fail) }
+}
+
+testcase boolIsvalue() runs on boolOper_comptype{
+  var template boolean vt0;
+  var template boolean vt1 := ( true, true, true );
+
+  if ( isvalue(vt0) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(vt1) ) { setverdict(fail); } else { setverdict(pass); };
+}
+
+type union TestUnion {
+  integer t,
+  boolean b
+}
+
+type record TestRecord {
+  integer t,
+  boolean b optional
+}
+
+// for TR fix HT60781
+testcase boolShortCircuit() runs on boolOper_comptype {
+  // create a union variable, make sure the boolean field is not chosen
+  var TestUnion myUnion := { t := 1 };
+  
+  // reference the boolean field in the 2nd part of a condition using 'and' or 'or'
+  // only the first part of the condition should be evaluated, since
+  // evaluating the 2nd part would produce a DTE (because the field isn't chosen)
+  if (ischosen(myUnion.b) and myUnion.b) {
+    setverdict(fail, "Error in 'if' condition, field 'b' is not supposed to be chosen");
+  }
+  while (ischosen(myUnion.b) and myUnion.b) {
+    setverdict(fail, "Error in 'while' condition, field 'b' is not supposed to be chosen");
+  }
+  var integer i;
+  for (i := 0; ischosen(myUnion.b) and myUnion.b and i < 5; i := i + 1) {
+    setverdict(fail, "Error in 'for' condition, field 'b' is not supposed to be chosen");
+  }
+  var boolean res := not ischosen(myUnion.b) or myUnion.b;
+  if (not res) {
+    setverdict(fail, "Error in boolean assignment, field 'b' is not supposed to be chosen");
+  }
+
+  // create a record variable, make sure the boolean field is omitted
+  var TestRecord myRec := { t := 1, b := omit };
+  
+  // reference the boolean field in the 2nd part of a condition, same as with the union field
+  // (referencing the boolean field would cause a DTE again, because it is omitted)
+  if (ispresent(myRec.b) and myRec.b) {
+    setverdict(fail, "Error in 'if' condition, field 'b' is not supposed to be present");
+  }
+  while (ispresent(myRec.b) and myRec.b) {
+    setverdict(fail, "Error in 'if' condition, field 'b' is not supposed to be present");
+  }
+  for (i := 0; ispresent(myRec.b) and myRec.b and i < 5; i := i + 1) {
+    setverdict(fail, "Error in 'for' condition, field 'b' is not supposed to be present");
+  }
+  res := not ispresent(myRec.b) or myRec.b;
+  if (not res) {
+    setverdict(fail, "Error in boolean assignment, field 'b' is not supposed to be present");
+  }
+  setverdict(pass);
+}
+
+type record MyRecord {
+  integer a optional
+}
+
+// comparing an optional record field to 'omit' in a boolean variable assignment (bug 498430)
+testcase boolCompEqOmit() runs on boolOper_comptype {
+  var MyRecord myRecord := { a := omit };
+  var boolean b := myRecord.a == omit;
+  if (b == true) { setverdict(pass); }
+  else { setverdict(fail); }
+}
+
+control {
+  const boolean cl_1:=true;
+  var boolean vl_1;
+
+  execute(boolAssign());
+  execute(boolConst());
+  execute(boolCompEq());
+  execute(boolCompNotEq());
+  execute(boolNot());
+  execute(boolAnd());
+  execute(boolOr());
+  execute(boolXor());
+  execute(boolSubtypes());
+  execute(boolIsvalue());
+  execute(boolShortCircuit());
+  execute(boolCompEqOmit());
+}
+
+}
diff --git a/Regression_Test_java/src/TcharOper.ttcn b/Regression_Test_java/src/TcharOper.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..467239bda70050b38b72c93fc4daeb7a3a3cba4b
--- /dev/null
+++ b/Regression_Test_java/src/TcharOper.ttcn
@@ -0,0 +1,102 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Raduly, Csaba
+ *   Szabados, Kristof
+ *   Szabo, Janos Zoltan – initial implementation
+ *
+ ******************************************************************************/
+
+// char type is no longer a standalone type, it maps to charstring in the standard
+module TcharOper
+{
+type char typedefbasic_mychar; 
+const char TcharOper_const1:="h";
+type component charOper_comptype { };
+
+testcase charAssign() runs on charOper_comptype
+{ var char x1:="a";
+  var char x4:=x1;
+  var char x2,x3;
+  x2:="x";
+  x3:=x2;
+  if (x1=="a") {setverdict(pass);}	//at declaration, value
+     else {setverdict(fail);}
+  if (x4=="a") {setverdict(pass);}	//at declaration, variable
+     else {setverdict(fail);}
+  if (x2=="x") {setverdict(pass);}	//later, value
+     else {setverdict(fail);}
+  if (x3=="x") {setverdict(pass);}	//later, variable
+     else {setverdict(fail);}
+}
+
+testcase charConst() runs on charOper_comptype {
+const char TcharOper_const3:="1";
+if (TcharOper_const1=="h") {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+//if (TcharOper_const2==2) {setverdict(pass);}	//control part
+//     else {setverdict(fail);}
+if (TcharOper_const3=="1") {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+}
+
+testcase charCompEq() runs on charOper_comptype
+{ var char x1,x2,x3;
+  x1:="a";
+  x2:="a";
+  x3:="c";
+  if (x1==x2) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (not(x3==x2)) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (x1=="a") {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if (not(x1=="v")) {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if ("a"==x1) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if (not("4"==x1)) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if ("a"=="a") {setverdict(pass);}	//value_value
+   else {setverdict(fail);}
+  if (not("c"=="a")) {setverdict(pass);}	//value_value
+   else {setverdict(fail);}
+}
+
+testcase charCompNotEq() runs on charOper_comptype
+{ var char x1,x2,x3;
+  x1:="a";
+  x2:="k";
+  x3:="a";
+  if (x1!=x2) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (not(x1!=x3)) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (x1!="l") {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if (not(x1!="a")) {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if ("m"!=x2) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if (not("k"!=x2)) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if ("a"!="b") {setverdict(pass);}	//value_value
+   else {setverdict(fail);}
+  if (not("1"!="1")) {setverdict(pass);}	//value_value
+   else {setverdict(fail);}
+}
+
+control {
+  execute(charAssign());
+  execute(charConst());
+  execute(charCompEq());
+  execute(charCompNotEq());
+}
+
+}
diff --git a/Regression_Test_java/src/TcharstrOper.ttcn b/Regression_Test_java/src/TcharstrOper.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..e9d2479ad3765d107597da2602de2309f02ea877
--- /dev/null
+++ b/Regression_Test_java/src/TcharstrOper.ttcn
@@ -0,0 +1,555 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Baranyi, Botond
+ *   Kovacs, Ferenc
+ *   Raduly, Csaba
+ *   Szabados, Kristof
+ *   Szabo, Janos Zoltan – initial implementation
+ *
+ ******************************************************************************/
+module TcharstrOper
+{type component charstrOper_comptype { };
+const charstring TcharstrOper_const1:="asd1";
+
+testcase charstrAssign() runs on charstrOper_comptype
+{ var charstring x1:="ABCD";
+  var charstring x5:=x1;
+  var charstring x2,x3,x4,x6;
+  x2:="1234";
+  x6:=x2;
+  x4:="ab12";
+  x3:="";
+  x4:="ab123";
+  if (x1=="ABCD") {setverdict(pass);}	//at declaration, with value
+     else {setverdict(fail);}
+  if (x5=="ABCD") {setverdict(pass);}	//at declaration, with variable
+     else {setverdict(fail);}
+  if (x2=="1234") {setverdict(pass);}	//later, with value
+     else {setverdict(fail);}
+  if (x6=="1234") {setverdict(pass);}	//later, with variable
+     else {setverdict(fail);}
+  if (x3=="") {setverdict(pass);}	//empty string
+     else {setverdict(fail);}
+  if (x4=="ab123") {setverdict(pass);}	//change of size
+     else {setverdict(fail);}
+}
+
+// testcase charstrAssignQuote() runs on charstrOper_comptype
+//{ var charstring x1;
+//  x1:="ab""12";
+//  if ((x1=="ab""12")) {setverdict(pass);}
+//     else {setverdict(fail);}
+//}
+
+
+testcase charstrAssignElem() runs on charstrOper_comptype
+{ var charstring x1,x2,x3,x4,x5,x6;
+  x1:="AAAAAA";
+  x4:="AAAAAA";
+  x2:="AAAAAA";
+  x5:="abcdef";
+  x6:="AAAAAA"
+  x3:="ab";
+  x3:=x5[1];
+  x1[1]:="b";
+  x2[2]:=x3;
+  x4[1]:=x5[2];
+  x6[6]:="B";
+  if (x5[1]=="b") {setverdict(pass);}		//accessing an element
+   else {setverdict(fail);}
+  if (x3=="b") {setverdict(pass);}		//change string to element
+   else {setverdict(fail);}
+  if (x1=="AbAAAA") {setverdict(pass);}	//change element to value
+   else {setverdict(fail);}
+  if (x4=="AcAAAA") {setverdict(pass);}	//change element to element
+   else {setverdict(fail);}
+  if (x2=="AAbAAA") {setverdict(pass);}	//change element to string
+   else {setverdict(fail);}
+  if (x6=="AAAAAAB") {setverdict(pass);}	//add element to string
+   else {setverdict(fail);}
+}
+
+testcase charstrLengthof() runs on charstrOper_comptype
+{ var charstring x1:="ABCD";
+  var charstring x6:=x1;
+  var charstring x2,x3,x4,x5,x7;
+  x2:="1234";
+  x7:=x2;
+  x4:="ab12";
+  x5:="abcd";
+  x3:="";
+  x4:="ab123";
+  x5[4]:="e";
+  if (lengthof(x1)==4) {setverdict(pass);}	//at declaration, with value
+     else {setverdict(fail);}
+  if (lengthof(x6)==4) {setverdict(pass);}	//at declaration, with variable
+     else {setverdict(fail);}
+  if (lengthof(x2)==4) {setverdict(pass);}	//later, with value
+     else {setverdict(fail);}
+  if (lengthof(x7)==4) {setverdict(pass);}	//later, with variable
+     else {setverdict(fail);}
+  if (lengthof(x3)==0) {setverdict(pass);}	//empty string
+     else {setverdict(fail);}
+  if (lengthof(x4)==5) {setverdict(pass);}	//change of size by assignment
+     else {setverdict(fail);}
+  if (lengthof(x5)==5) {setverdict(pass);}	//change of size by adding element
+     else {setverdict(fail);}
+}
+
+testcase charstrAssignElemAdd() runs on charstrOper_comptype
+{ var charstring x1,x2,x3,x4,x5;
+  x1:="AAAAAA";
+  x4:="AAAAAA";
+  x2:="AAAAAA";
+  x3:="b";
+  x5:="abcdef";
+  x1[6]:="b";
+  x2[6]:=x3;
+  x4[6]:=x5[2];
+  if ((x1=="AAAAAAb")and(lengthof(x1)==7)) {setverdict(pass);}	//add value
+   else {setverdict(fail);}
+  if ((x2=="AAAAAAb")and(lengthof(x2)==7)) {setverdict(pass);}	//add string
+   else {setverdict(fail);}
+  if ((x4=="AAAAAAc")and(lengthof(x4)==7)) {setverdict(pass);}	//add element
+   else {setverdict(fail);}
+}
+
+testcase charstrConst() runs on charstrOper_comptype {
+const charstring TcharstrOper_const3:="klm";
+if (TcharstrOper_const1=="asd1") {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+if (TcharstrOper_const3=="klm") {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+}
+
+testcase charstrCompEq() runs on charstrOper_comptype
+{ var charstring x1,x2,x3,x4,x5;
+  x1:="abc";
+  x2:="abc";
+  x3:="cde";
+  x4:="d";
+  if (x1==x2) {setverdict(pass);}	//string_string
+   else {setverdict(fail);}
+  if (not(x1==x3)) {setverdict(pass);}	//string_string
+   else {setverdict(fail);}
+  if (x4==x3[1]) {setverdict(pass);}	//string_element
+   else {setverdict(fail);}
+  if (not(x4==x3[0])) {setverdict(pass);}	//string_element
+   else {setverdict(fail);}
+  if (x1=="abc") {setverdict(pass);}	//string_value
+   else {setverdict(fail);}
+  if (not(x1=="aabc")) {setverdict(pass);}	//string_value
+   else {setverdict(fail);}
+  if (x3[1]==x4) {setverdict(pass);}	//element_string
+   else {setverdict(fail);}
+  if (not(x3[2]==x4)) {setverdict(pass);}	//element_string
+   else {setverdict(fail);}
+  if (x1[1]==x2[1]) {setverdict(pass);}	//element_element
+   else {setverdict(fail);}
+  if (not(x1[0]==x2[1])) {setverdict(pass);}	//element_element
+   else {setverdict(fail);}
+  if (x3[2]=="e") {setverdict(pass);}	//element_value
+   else {setverdict(fail);}
+  if (not(x3[2]=="f")) {setverdict(pass);}	//element_value
+   else {setverdict(fail);}
+  if ("abc"==x2) {setverdict(pass);}	//value_string
+   else {setverdict(fail);}
+  if (not("dbc"==x2)) {setverdict(pass);}	//value_string
+   else {setverdict(fail);}
+  if ("d"==x3[1]) {setverdict(pass);}	//value_element
+   else {setverdict(fail);}
+  if (not("k"==x3[1])) {setverdict(pass);}	//value_element
+   else {setverdict(fail);}
+//  if ("df"=="df") {setverdict(pass);}	//value_value
+//   else {setverdict(fail);}
+//  if (not("dh"=="df")) {setverdict(pass);}	//value_value
+//   else {setverdict(fail);}
+}
+
+testcase charstrCompNotEq() runs on charstrOper_comptype
+{ var charstring x1,x2,x3,x4,x5;
+  x1:="abc";
+  x2:="abc";
+  x3:="cde";
+  x4:="d";
+  if (not(x1!=x2)) {setverdict(pass);}	//string_string
+   else {setverdict(fail);}
+  if (x1!=x3) {setverdict(pass);}	//string_string
+   else {setverdict(fail);}
+  if (not(x4!=x3[1])) {setverdict(pass);}	//string_element
+   else {setverdict(fail);}
+  if (x4!=x3[2]) {setverdict(pass);}	//string_element
+   else {setverdict(fail);}
+  if (not(x1!="abc")) {setverdict(pass);}	//string_value
+   else {setverdict(fail);}
+  if (x1!="ab") {setverdict(pass);}	//string_value
+   else {setverdict(fail);}
+  if (not(x3[1]!=x4)) {setverdict(pass);}	//element_string
+   else {setverdict(fail);}
+  if (x1[1]!=x4) {setverdict(pass);}	//element_string
+   else {setverdict(fail);}
+  if (not(x1[1]!=x2[1])) {setverdict(pass);}	//element_element
+   else {setverdict(fail);}
+  if (x1[1]!=x3[1]) {setverdict(pass);}	//element_element
+   else {setverdict(fail);}
+  if (not(x3[2]!="e")) {setverdict(pass);}	//element_value
+   else {setverdict(fail);}
+  if (x3[2]!="F") {setverdict(pass);}	//element_value
+   else {setverdict(fail);}
+  if (not("abc"!=x2)) {setverdict(pass);}	//value_string
+   else {setverdict(fail);}
+  if ("abcD"!=x2) {setverdict(pass);}	//value_string
+   else {setverdict(fail);}
+  if (not("b"!=x1[1])) {setverdict(pass);}	//value_element
+   else {setverdict(fail);}
+  if ("d"!=x1[1]) {setverdict(pass);}	//value_element
+   else {setverdict(fail);}
+//  if (not("ef"!="ef")) {setverdict(pass);}	//value_value
+//   else {setverdict(fail);}
+//  if ("d"!="ef") {setverdict(pass);}	//value_value
+//   else {setverdict(fail);}
+}
+
+//testcase charstrCompSmall() runs on charstrOper_comptype
+//{ var charstring x1,x2,x3,x4,x5;
+//  x1:="cde";
+//  x2:="abc";
+//  x3:="cde";
+//  x4:="ghi";
+//  x5:="d";
+//  if (x3<x4) {setverdict(pass);}	//string_string
+//   else {setverdict(fail);}
+//  if ((not(x1<x2))and(not(x1<x3))and(x1<x4)) {setverdict(pass);}	//string_string
+//   else {setverdict(fail);}
+//  if ((not(x5<x3[0]))and(not(x5<x3[1]))and(x5<x3[2])) {setverdict(pass);}	//string_element
+//   else {setverdict(fail);}
+//  if ((not(x1<"abc"))and(not(x1<"cde"))and(x1<"ghi")) {setverdict(pass);}	//string_value
+//   else {setverdict(fail);}
+//  if ((not(x3[2]<x5))and(not(x3[1]<x5))and(x3[0]<x5)) {setverdict(pass);}	//element_string
+//   else {setverdict(fail);}
+//  if ((not(x3[2]<x1[1]))and(not(x3[1]<x1[1]))and(x3[0]<x1[1])) {setverdict(pass);}	//element_element
+//   else {setverdict(fail);}
+//  if ((not(x3[2]<"d"))and(not(x3[1]<"e"))and(x3[0]<"fg")) {setverdict(pass);}	//element_value
+//   else {setverdict(fail);}
+//  if ((not("de"<x2))and(not("abc"<x2))and("ab"<x2)) {setverdict(pass);}	//value_string
+//   else {setverdict(fail);}
+//  if ("de"<x1[1]) {setverdict(pass);}	//value_element
+//  else {setverdict(fail);}
+//  if ("de"<"ef") {setverdict(pass);}	//value_value
+//   else {setverdict(fail);}
+//}
+
+//testcase charstrCompBig() runs on charstrOper_comptype
+//{ var charstring x1,x2,x3,x4,x5;
+//  x1:="cde";
+//  x2:="abc";
+//  x3:="cde";
+//  x4:="ghi";
+// x5:="d";
+//  if ((not(x2>x1))and(not(x3>x1))and(x4>x1)) {setverdict(pass);}	//string_string
+//   else {setverdict(fail);}
+//  if ((not("abc">x1))and(not("cde">x1))and("ghi">x1)) {setverdict(pass);}	//value_string
+//   else {setverdict(fail);}
+//  if ((not(x2>"de"))and(not(x2>"abc"))and(x2>"ab")) {setverdict(pass);}	//string_value
+//   else {setverdict(fail);}
+//}
+
+testcase charstrConcat() runs on charstrOper_comptype
+{var charstring x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11;
+ x1:="ABCD";
+ x2:="1234";
+ x3:= x1 & x2;
+ x4:=x1&x2[1];
+ x5:=x1[1]&x2;
+ x6:=x1[0]&x2[1];
+ x7:=x1&"1234";
+ x8:=x1[1]&"1234";
+ x9:="1234"&x1;
+ x10:="1234"&x1[1];
+// x11:="1234"&"ABCD";
+ if ((x3=="ABCD1234")and(lengthof(x3)==8)) {setverdict(pass);}	//string&string
+   else {setverdict(fail);}
+ if ((x4=="ABCD2")and(lengthof(x4)==5)) {setverdict(pass);}	//string&element
+   else {setverdict(fail);}
+ if ((x7=="ABCD1234")and(lengthof(x7)==8)) {setverdict(pass);}	//string&value
+   else {setverdict(fail);}
+ if ((x5=="B1234")and(lengthof(x5)==5)) {setverdict(pass);}	//element&string
+   else {setverdict(fail);}
+ if ((x6=="A2")and(lengthof(x6)==2)) {setverdict(pass);}	//element&element
+   else {setverdict(fail);}
+ if ((x8=="B1234")and(lengthof(x8)==5)) {setverdict(pass);}	//element&value
+   else {setverdict(fail);}
+ if ((x9=="1234ABCD")and(lengthof(x9)==8)) {setverdict(pass);}	//value&string
+   else {setverdict(fail);}
+ if ((x10=="1234B")and(lengthof(x10)==5)) {setverdict(pass);}	//value&element
+   else {setverdict(fail);}
+// if ((x11=="1234ABCD")and(lengthof(x11)==8)) {setverdict(pass);}	//value&value
+//   else {setverdict(fail);}
+}
+
+testcase charstrRotateRight1() runs on charstrOper_comptype
+{ var charstring x1,x2,x3;
+  x1:="ABCDEF";
+  x2:=x1 @> 1;
+//  x3:="FABCDE" @> 1;
+  if (x2=="FABCDE") {setverdict(pass);}	//variable
+     else {setverdict(fail);}
+//  if (x3=="FABCDE") {setverdict(pass);}	//value
+//     else {setverdict(fail);}
+}
+
+testcase charstrRotateRight2() runs on charstrOper_comptype
+{ var charstring x1,x2,x3;
+  x1:="ABCDEF";
+  x2:=x1 @> 2;
+//  x3:="EFABCD" @> 2;
+  if (x2=="EFABCD") {setverdict(pass);}	//variable
+     else {setverdict(fail);}
+//  if (x3=="EFABCD") {setverdict(pass);}	//value
+//     else {setverdict(fail);}
+}
+
+testcase charstrRotateRightSum() runs on charstrOper_comptype
+{ var charstring x1,x2,x3;
+  x1:="ABCDEF";
+  x2:=x1 @> (1+1);
+//  x3:="EFABCD" @> (1+1);
+  if (x2=="EFABCD") {setverdict(pass);}	//variable
+     else {setverdict(fail);}
+//  if (x3=="EFABCD") {setverdict(pass);}	//value
+//     else {setverdict(fail);}
+}
+
+testcase charstrRotateRightEmpty() runs on charstrOper_comptype
+{ var charstring x1,x2,x3;
+  x1:="";
+  x2:=x1 @> 1;
+//  x3:="" @> 1;
+  if (x2=="") {setverdict(pass);}	//variable
+     else {setverdict(fail);}
+//  if (x3=="") {setverdict(pass);}	//value
+//(x3=="") {setverdict(pass);}	//value
+//          else {setverdict(fail);}
+}
+
+testcase charstrRotateLeft1() runs on charstrOper_comptype
+{ var charstring x1,x2,x3;
+  x1:="ABCDEF";
+  x2:=x1 <@ 1;
+//  x3:="BCDEFA" <@ 1;
+  if (x2=="BCDEFA") {setverdict(pass);}	//variable
+     else {setverdict(fail);}
+//  if (x3=="BCDEFA") {setverdict(pass);}	//value
+//     else {setverdict(fail);}
+}
+
+testcase charstrRotateLeft2() runs on charstrOper_comptype
+{ var charstring x1,x2,x3;
+  x1:="ABCDEF";
+  x2:=x1 <@ 2;
+//  x3:="CDEFAB" <@ 2;
+  if (x2=="CDEFAB") {setverdict(pass);}	//variable
+     else {setverdict(fail);}
+//  if (x3=="CDEFAB") {setverdict(pass);}	//value
+//     else {setverdict(fail);}
+}
+
+testcase charstrRotateLeftSum() runs on charstrOper_comptype
+{ var charstring x1,x2,x3;
+  x1:="ABCDEF";
+  x2:=x1 <@ (1+1);
+//  x3:="CDEFAB" <@ (1+1);
+  if (x2=="CDEFAB") {setverdict(pass);}	//variable
+     else {setverdict(fail);}
+//  if (x3=="CDEFAB") {setverdict(pass);}	//value
+//     else {setverdict(fail);}
+}
+
+testcase charstrRotateLeftEmpty() runs on charstrOper_comptype
+{ var charstring x1,x2,x3;
+  x1:="";
+  x2:=x1 <@ 1;
+//  x3:="" <@ 1;
+  if (x2=="") {setverdict(pass);}	//variable
+     else {setverdict(fail);}
+//  if (x3=="") {setverdict(pass);}	//value
+//     else {setverdict(fail);}
+}
+
+template integer t_mylen1 := 1
+const integer c_mylen1 := 1
+type charstring mycstr1
+type charstring mycstr2 length(4)
+type charstring mycstr3 length(c_mylen1)
+type charstring mycstr4 length(c_mylen1..c_mylen1 + c_mylen1)
+type mycstr4 mycstr5 ("", " ", "  ") length (float2int(-0.0) + 1)
+type charstring mycstr6 ("a".."z", "0".."9")
+type charstring mycstr7 ("a".."z") length(1..infinity)
+type mycstr7 mycstr8 length(1)
+type charstring mycstr9 (mycstr2)
+type charstring mycstr10 length(0..infinity)  // Full set.
+
+type charstring mycstr11 (pattern "abc?xyz");
+type charstring mycstr12 (pattern @nocase "abc*xyz");
+
+const mycstr7 c_mycstr1 := "a"
+const mycstr9 c_mycstr2 := "abcd"
+
+//template mycstr2 t_mycstr1 := pattern "ab" & "cd"
+//template mycstr9 t_mycstr2 := t_mycstr1
+template mycstr8 t_mycstr3 := "a" length(1)
+template mycstr4 t_mycstr4 := ? length(1..2)
+
+function f_cstr1() return mycstr4 { return " " }
+function f_cstr2() return mycstr3 {
+  return substr(c_mycstr1, 0, 1) & substr("1234567890", 0, 0)
+}
+
+testcase charstrSubtypes() runs on charstrOper_comptype {
+  var template mycstr2 vt_mycstr1 := "abcd"  // Length only.
+  var template mycstr4 vt_mycstr2 := "ab"  // Length with range.
+  var template mycstr6 vt_mycstr3 := "a"  // Value range list.
+  var template mycstr7 vt_mycstr4 := vt_mycstr3  // Value range with length.
+  var template mycstr11 vt_mycstr5 := "abc1xyz"; // Pattern (case sensitive)
+  var template mycstr12 vt_mycstr6 := "abc123xyz"; // Pattern (case insensitive)
+  var mycstr2 v_mycstr1 := valueof(vt_mycstr1)
+  var mycstr4 v_mycstr2 := valueof(vt_mycstr2)
+  var mycstr6 v_mycstr3 := valueof(vt_mycstr3)
+  var mycstr7 v_mycstr4 := valueof(vt_mycstr4)
+  var mycstr11 v_mycstr5 := valueof(vt_mycstr5)
+  var mycstr12 v_mycstr6 := valueof(vt_mycstr6)
+
+  if (valueof(vt_mycstr1) == v_mycstr1 and v_mycstr2 == valueof(vt_mycstr2)) { setverdict(pass) }
+  else { setverdict(fail) }
+  if (valueof(vt_mycstr3) == v_mycstr3 and v_mycstr4 == valueof(vt_mycstr4)) { setverdict(pass) }
+  else { setverdict(fail) }
+  if (valueof(vt_mycstr5) == v_mycstr5 and v_mycstr6 == valueof(vt_mycstr6)) { setverdict(pass) }
+  else { setverdict(fail) }
+  if (c_mycstr1 == f_cstr2() and " " == f_cstr1()) { setverdict(pass) }
+  else { setverdict(fail) }
+}
+
+testcase charstrIsvalue() runs on charstrOper_comptype{
+  var charstring s0, s1 := "Hello";
+  var template charstring ts_char0 := "ABCD";
+  var template charstring tr_char1 := "AB?D";
+//  var template charstring tr_pattern1 := pattern "ABCD";
+//  var template charstring tr_patternx := pattern "AB?D";
+  var template charstring tr_opt := omit;
+
+  if ( isvalue(s0) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(s1) ) { setverdict(pass); } else { setverdict(fail); };
+
+  if ( isvalue(ts_char0) ) {setverdict(pass); } else { setverdict(fail); }
+  if ( isvalue(tr_char1) ) { setverdict(pass); } else { setverdict(fail); }
+//  if ( isvalue(tr_pattern1) ) {setverdict(fail); } else { setverdict(pass); }
+//  if ( isvalue(tr_patternx) ) {setverdict(fail); } else { setverdict(pass); }
+  if ( isvalue(tr_opt) ) {setverdict(fail); } else { setverdict(pass); }
+
+  if ( isvalue(modifies ts_char0 := *) ) { setverdict(fail); } else { setverdict(pass); }
+//  if ( isvalue(modifies tr_pattern1 := "A?CD") ) { setverdict(pass); } else { setverdict(fail); }
+//  if ( isvalue(modifies tr_char1 := pattern "DCBA") ) { setverdict(fail); } else { setverdict(pass); }
+}
+
+testcase charstrIsbound() runs on charstrOper_comptype{
+  var charstring s0, s1 := "Hello";
+  var template charstring ts_char0 := "ABCD";
+  var template charstring tr_char1 := "AB?D";
+//  var template charstring tr_pattern1 := pattern "ABCD";
+//  var template charstring tr_patternx := pattern "AB?D";
+  var template charstring tr_opt := omit;
+
+  if ( isbound(s0) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isbound(s0[0]) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isbound(s1) ) { setverdict(pass); } else { setverdict(fail); };
+
+  if ( isbound(ts_char0) ) {setverdict(pass); } else { setverdict(fail); }
+  if ( isbound(tr_char1) ) { setverdict(pass); } else { setverdict(fail); }
+//  if ( isbound(tr_pattern1) ) { setverdict(pass); } else { setverdict(fail); };
+//  if ( isbound(tr_patternx) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isbound(tr_opt) ) { setverdict(pass); } else { setverdict(fail); };
+
+  if ( isbound(modifies ts_char0 := *) ) { setverdict(pass); } else { setverdict(fail); };
+//  if ( isbound(modifies tr_pattern1 := "A?CD") ) { setverdict(pass); } else { setverdict(fail); }
+//  if ( isbound(modifies tr_char1 := pattern "DCBA") ) { setverdict(pass); } else { setverdict(fail); };
+}
+
+testcase tc_simple_charstring_unbound() runs on charstrOper_comptype {
+  var charstring vl_ch1;
+  if(ispresent(vl_ch1)){setverdict(fail)} else {setverdict(pass)}
+  var charstring vl_ch2:="honey"; 
+  if(ispresent(vl_ch2)) { setverdict(pass)} else {setverdict(fail)}
+  var template charstring vlt_ch3;
+  if(ispresent(vlt_ch3)){setverdict(fail)} else {setverdict(pass)}
+  var template charstring vlt_ch4:="AB?D*"
+  if(ispresent(vlt_ch4)) {setverdict(pass)} else {setverdict(fail)}
+}
+
+//testcase tc_simple_charstring_template_pattern_ispresent() runs on charstrOper_comptype {
+//  var template charstring vlt_ch;
+//  vlt_ch:= pattern "AB?D"
+//  if(ispresent(vlt_ch)) {setverdict(pass)} else {setverdict(fail)}
+//}
+
+testcase tc_simple_charstring() runs on charstrOper_comptype {
+  var charstring vl_ch;
+  if(isbound(vl_ch)){setverdict(fail)} else {setverdict(pass)}
+  vl_ch:="honey"
+  if(isbound(vl_ch)) {setverdict(pass)} else {setverdict(fail)}
+}
+
+testcase tc_simple_charstring_template() runs on charstrOper_comptype {
+  var template charstring vlt_ch;
+  if(isbound(vlt_ch)){setverdict(fail)} else {setverdict(pass)}
+  vlt_ch:="AB?D*"
+  if(isbound(vlt_ch)) {setverdict(pass)} else {setverdict(fail)}
+}
+
+//testcase tc_simple_charstring_template_pattern() runs on charstrOper_comptype {
+//  var template charstring vlt_ch;
+//  if(isbound(vlt_ch)){setverdict(fail)} else {setverdict(pass)}
+//  vlt_ch:= pattern "AB?D"
+//  if(isbound(vlt_ch)) {setverdict(pass)} else {setverdict(fail)}
+//}
+
+control {
+  const charstring cl_1:="asd1";
+  var charstring vl_1;
+
+  execute(charstrAssign());
+//  execute(charstrAssignQuote());
+  execute(charstrAssignElem());
+  execute(charstrLengthof());
+  execute(charstrAssignElemAdd());
+  execute(charstrConst());
+  execute(charstrCompEq());
+  execute(charstrCompNotEq());
+//  execute(charstrCompSmall());
+//  execute(charstrCompBig());
+  execute(charstrConcat());
+  execute(charstrRotateRight1());
+  execute(charstrRotateRight2());
+  execute(charstrRotateRightSum());
+  execute(charstrRotateRightEmpty());
+  execute(charstrRotateLeft1());
+  execute(charstrRotateLeft2());
+  execute(charstrRotateLeftSum());
+  execute(charstrRotateLeftEmpty());
+  execute(charstrSubtypes());
+  execute(charstrIsvalue());
+  execute(charstrIsbound());
+  execute(tc_simple_charstring_unbound());
+//  execute(tc_simple_charstring_template_pattern_ispresent());
+  execute(tc_simple_charstring());
+  execute(tc_simple_charstring_template());
+//  execute(tc_simple_charstring_template_pattern());
+}
+
+}
diff --git a/Regression_Test_java/src/TcontrolTimer.ttcn b/Regression_Test_java/src/TcontrolTimer.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..2c1a4a188929487075ccdc744542d9a7e9d88920
--- /dev/null
+++ b/Regression_Test_java/src/TcontrolTimer.ttcn
@@ -0,0 +1,64 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Szabo, Janos Zoltan – initial implementation
+ *
+ ******************************************************************************/
+module TcontrolTimer {
+
+type component CT {}
+
+testcase tc_delay(float delay) runs on CT
+{
+  timer T := delay;
+  all timer.stop;
+  T.start;
+  T.timeout;
+  setverdict(pass);
+}
+
+testcase SetVerdict(verdicttype v) runs on CT
+{
+  setverdict(v);
+}
+
+function f()
+{
+  timer T := 0.4;
+  T.start;
+  execute(tc_delay(0.1));
+  alt {
+    [] T.timeout { execute(SetVerdict(fail)); }
+    [] any timer.timeout { execute(SetVerdict(pass)); }
+  }
+}
+
+control {
+  timer T1 := 0.3, T2 := 0.4;
+  T1.start;
+  execute(tc_delay(0.1));
+  T2.start;
+  alt {
+    [] T1.timeout { execute(SetVerdict(pass)); }
+    [] T2.timeout { execute(SetVerdict(fail)); }
+  }
+  all timer.stop;
+  T1.start;
+  execute(tc_delay(0.1), 0.2);
+  T2.start;
+  alt {
+    [] T1.timeout { execute(SetVerdict(pass)); }
+    [] T2.timeout { execute(SetVerdict(fail)); }
+  }
+  all timer.stop;
+  T1.start;
+  f();
+}
+
+}
diff --git a/Regression_Test_java/src/TdefaultOper.ttcn b/Regression_Test_java/src/TdefaultOper.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..ac18b7a59e28eed28108c05c71072e17867fa8a7
--- /dev/null
+++ b/Regression_Test_java/src/TdefaultOper.ttcn
@@ -0,0 +1,119 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Kovacs, Ferenc
+ *   Raduly, Csaba
+ *   Szabados, Kristof
+ *
+ ******************************************************************************/
+module TdefaultOper
+{
+type component defaultOper_comptype { };
+
+altstep A1() runs on defaultOper_comptype
+{
+  [] any timer.timeout { setverdict(inconc);}
+}
+
+testcase defaultIsvalue() runs on defaultOper_comptype
+{
+  var default v0;
+  var default v1 := null;
+  var template default tdf0;
+  template default tdf1 := null;
+  var default d1 := activate( A1() );
+
+  if ( isvalue(v0) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(v1) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isvalue(tdf0) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(tdf1) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isvalue(d1) ) { setverdict(pass); } else { setverdict(fail); };
+  
+  tdf0 := d1;
+  d1 := valueof(tdf0);
+}
+
+  altstep as_empty() runs on defaultOper_comptype {
+    [] any timer.timeout { }
+  };
+
+  function f_empty() runs on defaultOper_comptype { }
+
+  testcase tc_special_default_value_unbound() runs on defaultOper_comptype {
+    var default vl_default;
+    if(ispresent(vl_default)){setverdict(fail)}else {setverdict(pass)};
+  }
+
+  testcase tc_special_default_value_null() runs on defaultOper_comptype {
+    var default vl_default := null;
+    if(ispresent(vl_default)) {setverdict(pass)} else {setverdict(fail)}
+  }
+  testcase tc_special_default_value_isvalue() runs on defaultOper_comptype {
+    var default vl_default := activate(as_empty());
+    if(ispresent(vl_default)){setverdict(pass)}else {setverdict(fail)};
+
+    deactivate(vl_default);
+    if(ispresent(vl_default)){setverdict(pass)}else {setverdict(fail)};
+  }
+
+  testcase tc_special_compref_unbound() runs on defaultOper_comptype {
+    var defaultOper_comptype vc_myComp;
+    if(ispresent(vc_myComp)){setverdict(fail)}else {setverdict(pass)};
+  }
+
+//  testcase tc_special_compref_isvalue() runs on defaultOper_comptype {
+//    var defaultOper_comptype vc_myComp:= defaultOper_comptype.create("hali");
+//    if(ispresent(vc_myComp)){setverdict(pass)}else {setverdict(fail)};
+//
+//    vc_myComp.start(f_empty());
+//    if(ispresent(vc_myComp)){setverdict(pass)}else {setverdict(fail)};
+//
+//    vc_myComp.done;
+//    if(ispresent(vc_myComp)){setverdict(pass)}else {setverdict(fail)};
+//  }
+
+testcase tc_special_default_value() runs on defaultOper_comptype {
+  var default vl_default;
+  if(isbound(vl_default)){setverdict(fail)}else {setverdict(pass)};
+
+  vl_default := null;
+  if(isbound(vl_default)) {setverdict(pass)} else {setverdict(fail)}
+
+  vl_default := activate(as_empty());
+  if(isbound(vl_default)){setverdict(pass)}else {setverdict(fail)};
+
+  deactivate(vl_default);
+  if(isbound(vl_default)){setverdict(pass)}else {setverdict(fail)};
+}
+
+//testcase tc_special_compref() runs on defaultOper_comptype {
+//  var defaultOper_comptype vc_myComp;
+//  if(isbound(vc_myComp)){setverdict(fail)}else {setverdict(pass)};
+//
+//  vc_myComp:= defaultOper_comptype.create("hali");
+//  if(isbound(vc_myComp)){setverdict(pass)}else {setverdict(fail)};
+//
+//  vc_myComp.start(f_empty());
+//  if(isbound(vc_myComp)){setverdict(pass)}else {setverdict(fail)};
+//  
+//  vc_myComp.done;
+//  if(isbound(vc_myComp)){setverdict(pass)}else {setverdict(fail)};
+//}
+
+control {
+  execute(defaultIsvalue());
+  execute(tc_special_default_value_unbound());
+  execute(tc_special_default_value_null());
+  execute(tc_special_default_value_isvalue());
+  execute(tc_special_compref_unbound());
+//  execute(tc_special_compref_isvalue());
+  execute(tc_special_default_value());
+//  execute(tc_special_compref());
+}
+}
diff --git a/Regression_Test_java/src/TenumOper.ttcn b/Regression_Test_java/src/TenumOper.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..427d9ff42e28eff6e6c7837c831b4c0384f2bc83
--- /dev/null
+++ b/Regression_Test_java/src/TenumOper.ttcn
@@ -0,0 +1,332 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Baranyi, Botond
+ *   Forstner, Matyas
+ *   Kovacs, Ferenc
+ *   Raduly, Csaba
+ *   Szabados, Kristof
+ *   Szabo, Janos Zoltan – initial implementation
+ *
+ ******************************************************************************/
+module TenumOper {
+// ********** Type definitions  *********************
+type component emptyComponent {};
+type enumerated myenum1 {xx1,xx2,xx3};
+type enumerated myenum2 {xx3,xx4,xx5};  // reuse identifiers
+type enumerated myenum3 {xx6(2),xx7(4),xx8(1)};  // with numbers
+type enumerated myenum4 {xx9,xx10(3),xx11};	// partly with numbers
+
+type myenum1 myenumSubtype1 (xx1)
+type myenum1 myenumSubtype2
+
+type record myrecord {
+  myenum1 e1 optional,
+  myenum3 e3
+}
+
+type record of myenum4 myrecordof;
+
+// *************** Constanst ***********************
+const myenum1 cg_1:= xx2;
+const myenumSubtype1 cg_mye1 := xx1
+
+template myenum1 t_mye1 := cg_mye1
+template myenum1 t_mye2 := xx1
+template myenumSubtype1 t_mye3 := xx1
+
+modulepar myenumSubtype1 tsp_mod1 := xx1
+
+testcase tc_enumAssign() runs on emptyComponent{
+    var myenum1 vl1:= xx1;
+    var myenum1 vl2;
+    vl2:= xx2;
+    if (vl1==xx1) {setverdict(pass);}	//at declaration
+    else {setverdict(fail);}
+    if (vl2==xx2) {setverdict(pass);}	//later
+    else {setverdict(fail);}
+}
+
+testcase tc_enumConst() runs on emptyComponent{
+    const myenum1 cl_1:=xx1;
+    if (cg_1==xx2) {setverdict(pass);}	//definition part
+    else {setverdict(fail);}
+    if (cl_1==xx1) {setverdict(pass);}	//testcase
+    else {setverdict(fail);}
+}
+
+testcase tc_enumCompEq() runs on emptyComponent {
+    var myenum1 vl1,vl2,vl3;
+    var myenum2 vl4;
+    vl1:=xx1;
+    vl2:=xx1;
+    vl3:=xx3;
+    vl4:=xx3;
+    if (vl1==vl2) {setverdict(pass);}	//variable_variable
+    else {setverdict(fail);}
+    if (not(vl3==vl2)) {setverdict(pass);}	//variable_variable
+    else {setverdict(fail);}
+    if (vl1==xx1) {setverdict(pass);}	//variable_value
+    else {setverdict(fail);}
+    if (not(vl1==xx2)) {setverdict(pass);}	//variable_value
+    else {setverdict(fail);}
+    if (xx1==vl1) {setverdict(pass);}	//value_variable
+    else {setverdict(fail);}
+    if (not(xx3==vl1)) {setverdict(pass);}	//value_variable
+    else {setverdict(fail);}
+}
+
+testcase tc_enumCompNotEq() runs on emptyComponent
+{ var myenum1 vl1,vl2,vl3;
+    var myenum2 vl4
+    vl1:=xx1;
+    vl2:=xx3;
+    vl3:=xx1;
+    vl4:=xx3;
+    if (vl1!=vl2) {setverdict(pass);}	//variable_variable
+    else {setverdict(fail);}
+    if (not(vl1!=vl3)) {setverdict(pass);}	//variable_variable
+    else {setverdict(fail);}
+    if (vl1!=xx2) {setverdict(pass);}	//variable_value
+    else {setverdict(fail);}
+    if (not(vl1!=xx1)) {setverdict(pass);}	//variable_value
+    else {setverdict(fail);}
+    if (xx2!=vl2) {setverdict(pass);}	//value_variable
+    else {setverdict(fail);}
+    if (not(xx3!=vl2)) {setverdict(pass);}	//value_variable
+    else {setverdict(fail);}
+}
+
+testcase tc_enumCompLess() runs on emptyComponent
+{ var myenum1 vl1,vl2,vl3;
+    vl1:=xx1;
+    vl2:=xx1;
+    vl3:=xx2;
+    if (vl1<vl3) {setverdict(pass);}	//variable_variable
+    else {setverdict(fail);}
+    if (not(vl1<vl2)) {setverdict(pass);}	//variable_variable
+    else {setverdict(fail);}
+    if (not(vl3<vl1)) {setverdict(pass);}	//variable_variable
+    else {setverdict(fail);}
+    if (vl1<xx2) {setverdict(pass);}	//variable_value
+    else {setverdict(fail);}
+    if (not(vl1<xx1)) {setverdict(pass);}	//variable_value
+    else {setverdict(fail);}
+    if (not(vl3<xx1)) {setverdict(pass);}	//variable_value
+    else {setverdict(fail);}
+    if (xx1<vl3) {setverdict(pass);}	//value_variable
+    else {setverdict(fail);}
+    if (not(xx1<vl2)) {setverdict(pass);}	//value_variable
+    else {setverdict(fail);}
+    if (not(xx2<vl1)) {setverdict(pass);}	//value_variable
+    else {setverdict(fail);}
+}
+
+testcase tc_enumCompLessEq() runs on emptyComponent
+{ var myenum1 vl1,vl2,vl3;
+    vl1:=xx1;
+    vl2:=xx1;
+    vl3:=xx2;
+    if (vl1<=vl3) {setverdict(pass);}	//variable_variable
+    else {setverdict(fail);}
+    if (vl1<=vl2) {setverdict(pass);}	//variable_variable
+    else {setverdict(fail);}
+    if (not(vl3<=vl1)) {setverdict(pass);}	//variable_variable
+    else {setverdict(fail);}
+    if (vl1<=xx2) {setverdict(pass);}	//variable_value
+    else {setverdict(fail);}
+    if (vl1<=xx1) {setverdict(pass);}	//variable_value
+    else {setverdict(fail);}
+    if (not(vl3<=xx1)) {setverdict(pass);}	//variable_value
+    else {setverdict(fail);}
+    if (xx1<=vl3) {setverdict(pass);}	//value_variable
+    else {setverdict(fail);}
+    if (xx1<=vl2) {setverdict(pass);}	//value_variable
+    else {setverdict(fail);}
+    if (not(xx2<=vl1)) {setverdict(pass);}	//value_variable
+    else {setverdict(fail);}
+}
+
+testcase tc_enumCompGreat() runs on emptyComponent
+{ var myenum1 vl1,vl2,vl3;
+    vl1:=xx1;
+    vl2:=xx1;
+    vl3:=xx2;
+    if (vl3>vl1) {setverdict(pass);}	//variable_variable
+    else {setverdict(fail);}
+    if (not(vl1>vl2)) {setverdict(pass);}	//variable_variable
+    else {setverdict(fail);}
+    if (not(vl1>vl3)) {setverdict(pass);}	//variable_variable
+    else {setverdict(fail);}
+    if (vl3>xx1) {setverdict(pass);}	//variable_value
+    else {setverdict(fail);}
+    if (not(vl1>xx1)) {setverdict(pass);}	//variable_value
+    else {setverdict(fail);}
+    if (not(vl2>xx2)) {setverdict(pass);}	//variable_value
+    else {setverdict(fail);}
+    if (xx2>vl1) {setverdict(pass);}	//value_variable
+    else {setverdict(fail);}
+    if (not(xx1>vl2)) {setverdict(pass);}	//value_variable
+    else {setverdict(fail);}
+    if (not(xx1>vl3)) {setverdict(pass);}	//value_variable
+    else {setverdict(fail);}
+}
+
+testcase tc_enumCompGreatEq() runs on emptyComponent
+{ var myenum1 vl1,vl2,vl3;
+    vl1:=xx1;
+    vl2:=xx1;
+    vl3:=xx2;
+    if (vl3>=vl1) {setverdict(pass);}	//variable_variable
+    else {setverdict(fail);}
+    if (vl1>=vl2) {setverdict(pass);}	//variable_variable
+    else {setverdict(fail);}
+    if (not(vl1>=vl3)) {setverdict(pass);}	//variable_variable
+    else {setverdict(fail);}
+    if (vl3>=xx1) {setverdict(pass);}	//variable_value
+    else {setverdict(fail);}
+    if (vl1>=xx1) {setverdict(pass);}	//variable_value
+    else {setverdict(fail);}
+    if (not(vl2>=xx2)) {setverdict(pass);}	//variable_value
+    else {setverdict(fail);}
+    if (xx2>=vl1) {setverdict(pass);}	//value_variable
+    else {setverdict(fail);}
+    if (xx1>=vl2) {setverdict(pass);}	//value_variable
+    else {setverdict(fail);}
+    if (not(xx1>=vl3)) {setverdict(pass);}	//value_variable
+    else {setverdict(fail);}
+}
+
+// in the number tests the automatic choice of numbers counts.
+testcase tc_enumNumb1() runs on emptyComponent
+{ var myenum1 vl1,vl2,vl3;  // automatic numbers
+    vl1:=xx1;
+    vl2:=xx2;
+    vl3:=xx3;
+    if (vl1<vl2) {setverdict(pass);}
+    else {setverdict(fail);}
+    if (vl2<vl3) {setverdict(pass);}
+    else {setverdict(fail);}
+}
+
+testcase tc_enumNumb2() runs on emptyComponent
+{ var myenum3 vl1,vl2,vl3;  // manual numbers
+    vl1:=xx6; //2
+    vl2:=xx7; //4
+    vl3:=xx8; //1
+    if (vl3<vl1) {setverdict(pass);}
+    else {setverdict(fail);}
+    if (vl1<vl2) {setverdict(pass);}
+    else {setverdict(fail);}
+}
+
+testcase tc_enumNumb3() runs on emptyComponent
+{ var myenum4 vl1,vl2,vl3;  // semi-automatic numbers
+    vl1:=xx9; //0 - automatic
+    vl2:=xx10; //3 - manual
+    vl3:=xx11; //1 - automatic
+    if (vl1<vl3) {setverdict(pass);}
+    else {setverdict(fail);}
+    if (vl3<vl2) {setverdict(pass);}
+    else {setverdict(fail);}
+}
+
+function f_enumReturn() return myenumSubtype1
+{
+    var template myenumSubtype2 vt_mye1 := xx1
+    var myenumSubtype2 vl_mye1 := xx1
+    var myenumSubtype2 vl_myenumSubtype1 := valueof(t_mye1)
+    var myenumSubtype2 vl_myenumSubtype2 := cg_mye1
+    if (cg_mye1 == valueof(vt_mye1)) { return cg_mye1 }
+    else { return valueof(vt_mye1) }
+//    if (vl_mye1 == vl_myenumSubtype1 and vl_myenumSubtype1 == vl_myenumSubtype2) { return valueof(t_mye1) }
+//    else { return cg_mye1 }
+}
+
+testcase tc_enumSubtypes() runs on emptyComponent
+{
+    if (f_enumReturn() == xx1) { setverdict(pass) }
+    else { setverdict(fail) }
+}
+
+testcase tc_enumIsvalue() runs on emptyComponent
+{
+  var myenum1 x1 := xx1, x2;
+  template myenum1 subenum := (xx1,xx2);
+  template myenum1 every := ?;
+  template myenum1 actual := xx1;
+
+  if ( isvalue(x1) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isvalue(x2) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(subenum) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(every) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(actual) ) { setverdict(pass); } else { setverdict(fail); };
+
+  if ( isvalue(myenum1 : ( xx1 )) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isvalue(myenum1 : ( xx1, xx2 )) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(myenum1 : *) ) { setverdict(fail); } else { setverdict(pass); };
+
+  if ( isvalue(modifies actual := xx2) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isvalue(modifies actual := *) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(modifies subenum := xx2) ) { setverdict(pass); } else { setverdict(fail); };
+}
+
+testcase tc_int2enum() runs on emptyComponent
+{
+  var myenum1 e1 := xx1;
+  var myenum2 e2;
+  var integer i := 2;
+  var myrecord rec1 := { e1 := omit, e3 := xx7 };
+  var myrecord rec2;
+  var myrecordof recof1 := { xx10, xx11 };
+  var myrecordof recof2 := { xx9 };
+  
+  int2enum(1, e1);
+  int2enum(i, e2);
+  int2enum(5 - 3, rec1.e3);
+  int2enum(lengthof(recof1), rec1.e1);
+  int2enum(enum2int(cg_1), rec2.e3);
+  int2enum(1 + str2int("2"), recof1[1]);
+  int2enum(2 / 2, recof2[2]);
+  
+  if (e1 != xx2) { setverdict(fail, "e1 = ", e1); }
+  if (e2 != xx5) { setverdict(fail, "e2 = ", e2); }
+  if (rec1 != { e1 := xx3, e3 := xx6 }) { setverdict(fail, "rec1 = ", rec1) };
+  if (log2str(rec2) != "{ e1 := <unbound>, e3 := xx8 (1) }") { setverdict(fail, "rec2 = ", rec2); }
+  if (recof1 != { xx10, xx10 }) { setverdict(fail, "recof1 = ", recof1); }
+  if (log2str(recof2) != "{ xx9 (0), <unbound>, xx11 (1) }") { setverdict(fail, "recof2 = ", recof2); }
+  setverdict(pass);
+}
+
+control {
+    const myenum1 cl_1 := xx1; // can constants be declared in the control part
+    const myenum2 cl_2 := xx3;
+    const myenum3 cl_3 := xx6;
+    const myenum4 cl_4 := xx9;
+    var myenum1 vl_1; // can variable be declared in the control part
+    var myenum2 vl_2;
+    var myenum3 vl_3;
+    var myenum4 vl_4;
+
+    execute(tc_enumAssign());
+    execute(tc_enumConst());
+    execute(tc_enumCompEq());
+    execute(tc_enumCompNotEq());
+    execute(tc_enumCompLess());
+    execute(tc_enumCompLessEq());
+    execute(tc_enumCompGreat());
+    execute(tc_enumCompGreatEq());
+    execute(tc_enumNumb1());
+    execute(tc_enumNumb2());
+    execute(tc_enumNumb3());
+    execute(tc_enumSubtypes());
+    execute(tc_enumIsvalue());
+    execute(tc_int2enum());
+}
+}
diff --git a/Regression_Test_java/src/TfloatOper.ttcn b/Regression_Test_java/src/TfloatOper.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..e72187dd99395f02247b9a2183b6fc0c0c7d01d2
--- /dev/null
+++ b/Regression_Test_java/src/TfloatOper.ttcn
@@ -0,0 +1,507 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Gecse, Roland
+ *   Kovacs, Ferenc
+ *   Raduly, Csaba
+ *   Szabados, Kristof
+ *   Szabo, Janos Zoltan – initial implementation
+ *
+ ******************************************************************************/
+module TfloatOper
+{const float TfloatOper_const1:=2.0;
+type component floatOper_comptype { };
+
+testcase floatAssign() runs on floatOper_comptype
+{ var float x1:=12E3;
+  var float x4:=x1;
+  var float x2,x3;
+  x2:=-124.2;
+  x3:=x2;
+  if (x1==12E3) {setverdict(pass);}	//at declaration, value
+     else {setverdict(fail);}
+  if (x4==12000.0) {setverdict(pass);}	//at declaration, variable
+     else {setverdict(fail);}
+  if (x2==-124.2) {setverdict(pass);}	//later, value
+     else {setverdict(fail);}
+  if (x3==-124.2) {setverdict(pass);}	//later, variable
+     else {setverdict(fail);}
+}
+
+testcase floatConst() runs on floatOper_comptype {
+const float TfloatOper_const3:=-5E2;
+if (TfloatOper_const1==2.0) {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+//if (TfloatOper_const2==2) {setverdict(pass);}	//control part
+//     else {setverdict(fail);}
+if (TfloatOper_const3==-500.0) {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+}
+
+testcase floatCompEq() runs on floatOper_comptype
+{ var float x1,x2,x3;
+  x1:=100.0;
+  x2:=1E2;
+  x3:=200.0;
+  if (x1==x2) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (not(x3==x2)) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (x1==1E2) {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if (not(x1==1010.0)) {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if (1E2==x1) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if (not(1001.0==x1)) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if (100.0==1E2) {setverdict(pass);}	//value_value
+   else {setverdict(fail);}
+  if (not(1100.0==100.0)) {setverdict(pass);}	//value_value
+   else {setverdict(fail);}
+}
+
+testcase floatCompNotEq() runs on floatOper_comptype
+{ var float x1,x2,x3;
+  x1:=1E2;
+  x2:=200.0;
+  x3:=100.0;
+  if (x1!=x2) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (not(x1!=x3)) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (x1!=150.0) {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if (not(x1!=1E2)) {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if (120.0!=x2) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if (not(2E2!=x2)) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if (111.0!=1E2) {setverdict(pass);}	//value_value
+   else {setverdict(fail);}
+  if (not(111.0!=111.0)) {setverdict(pass);}	//value_value
+   else {setverdict(fail);}
+}
+
+testcase floatCompLess() runs on floatOper_comptype
+{ var float x1,x2,x3;
+  x1:=1E2;
+  x2:=100.0;
+  x3:=200.0;
+  if (x1<x3) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (not(x1<x2)) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (not(x3<x1)) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (x1<110.0) {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if (not(x1<1E2)) {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if (not(x2<9E1)) {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if (100.0<x3) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if (not(1E2<x2)) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if (not(110.0<x1)) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if (1E2<120.0) {setverdict(pass);}	//value_value
+   else {setverdict(fail);}
+  if (not(100.0<1E2)) {setverdict(pass);}	//value_value
+   else {setverdict(fail);}
+  if (not(110.0<1E1)) {setverdict(pass);}	//value_value
+   else {setverdict(fail);}
+}
+
+testcase floatCompLessEq() runs on floatOper_comptype
+{ var float x1,x2,x3;
+  x1:=100.0;
+  x2:=1E2;
+  x3:=200.0;
+  if (x1<=x3) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (x1<=x2) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (not(x3<=x1)) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (x1<=11E1) {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if (x1<=1E2) {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if (not(x2<=90.0)) {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if (1E2<=x3) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if (100.0<=x2) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if (not(110.0<=x1)) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if (1E2<=120.0) {setverdict(pass);}	//value_value
+   else {setverdict(fail);}
+  if (100.0<=1E2) {setverdict(pass);}	//value_value
+   else {setverdict(fail);}
+  if (not(110.0<=10.0)) {setverdict(pass);}	//value_value
+   else {setverdict(fail);}
+}
+
+testcase floatCompGreat() runs on floatOper_comptype
+{ var float x1,x2,x3;
+  x1:=100.0;
+  x2:=1E2;
+  x3:=200.0;
+  if (x3>x1) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (not(x1>x2)) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (not(x1>x3)) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (x1>99.0) {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if (not(x1>1E2)) {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if (not(x2>11E1)) {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if (210.0>x3) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if (not(1E2>x2)) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if (not(90.0>x1)) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if (130.0>1.2E2) {setverdict(pass);}	//value_value
+   else {setverdict(fail);}
+  if (not(1E2>100.0)) {setverdict(pass);}	//value_value
+   else {setverdict(fail);}
+  if (not(10.0>110.0)) {setverdict(pass);}	//value_value
+   else {setverdict(fail);}
+}
+
+testcase floatCompGreatEq() runs on floatOper_comptype
+{ var float x1,x2,x3;
+  x1:=1E2;
+  x2:=100.0;
+  x3:=200.0;
+  if (x3>=x1) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (x1>=x2) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (not(x1>=x3)) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (x1>=99.0) {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if (x1>=1E2) {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if (not(x2>=11E2)) {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if (210.0>=x3) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if (1E2>=x2) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if (not(9E1>=x1)) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if (130.0>=1.2E2) {setverdict(pass);} //value_value
+   else {setverdict(fail);}
+  if (100.0>=1E2) {setverdict(pass);}	//value_value
+   else {setverdict(fail);}
+  if (not(1E1>=110.0)) {setverdict(pass);}	//value_value
+   else {setverdict(fail);}
+}
+
+testcase floatAdd() runs on floatOper_comptype
+{ var float x1,x2,x3,x4,x5,x6;
+  x1:=125.5;
+  x2:=1000.0;
+  x3:=x1+x2;
+  x4:=x2+456.2;
+  x5:=1E2+x1;
+  x6:=1E2+234.3;
+  if (x3==1125.5) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (x4==1456.2) {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if (x5==225.5) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if (x6==334.3) {setverdict(pass);}	//value_value
+   else {setverdict(fail);}
+}
+
+testcase floatSubs() runs on floatOper_comptype
+{ var float x1,x2,x3,x4,x5,x6;
+  x1:=125.2;
+  x2:=1125.2;
+  x3:=x1-x2;
+  x4:=x2-102.0;
+  x5:=1E2-x1;
+  x6:=100.0-2.34E2;
+  if (((x3+1000.0)<1E-12)and((-1000.0-x3)>-1E-12)) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (((x4-1023.2)<1E-12)and((1023.2-x4)>-1E-12)) {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if (((x5+25.2)<1E-12)and((-25.2-x5)>-1E-12)) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if (((x6+134.0)<1E-12)and((-134.0-x6)>-1E-12)) {setverdict(pass);}	//value_value
+   else {setverdict(fail);}
+}
+
+testcase floatMultipl() runs on floatOper_comptype
+{ var float x1,x2,x3,x4,x5,x6;
+  x1:=12.0;
+  x2:=10.1;
+  x3:=x1*x2;
+  x4:=x2*-2.0;
+  x5:=1E1*x1;
+  x6:=-2.5*3.0;
+  if (((x3-121.2)<1E-12)and((121.2-x3)>-1E-12)) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (((x4+20.2)<1E-12)and((-20.2-x4)>-1E-12)) {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if (((x5-120.0)<1E-12)and((120.0-x5)>-1E-12)) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if (((x6+7.5)<1E-12)and((-7.5-x6)>-1E-12)) {setverdict(pass);}	//value_value
+   else {setverdict(fail);}
+}
+
+testcase floatDiv() runs on floatOper_comptype
+{ var float x1,x2,x3,x4,x5,x6;
+  x1:=-125.0;
+  x2:=500.0;
+  x3:=x2/x1;
+  x4:=x2/50.0;
+  x5:=250.0/x1;
+  x6:=1E2/-25.0;
+  if (((x3+4.0)<1E-12)and((-4.0-x3)>-1E-12)) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (((x4-10.0)<1E-12)and((10.0-x4)>-1E-12)) {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if (((x5+2.0)<1E-12)and((-2.0-x5)>-1E-12)) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if (((x6+4.0)<1E-12)and((-4.0-x6)>-1E-12)) {setverdict(pass);}	//value_value
+   else {setverdict(fail);}
+}
+
+type component floatOperSubtypes_comptype { }
+
+type float myf1
+type float myf2 (1.0, 2.0, 3.0)
+type float myf3 (-infinity..0.0)
+type float myf4 (-infinity..infinity)
+type float myf5 (-infinity..infinity, 0.0, 1.0, 2.0, 3.0)
+type myf5 myf6
+type float myf7 (2147483648.0, 4294967296.0, 8589934592.0)
+type float myf8 (2147483648.0..8589934592.0)
+type float myf9 (myf2, myf3)
+type myf9 myf10 (myf2)
+type myf8 myf11 (2147483648.0..4294967296.0, 4294967296.0..4294967300.0)
+
+const myf1 c_myf1 := 1.0
+const myf2 c_myf2 := 1.0
+const myf3 c_myf3 := 0.0
+const myf4 c_myf4 := c_myf3
+const myf5 c_myf5 := c_myf4
+const myf6 c_myf6 := c_myf5
+const myf7 c_myf7 := 4294967296.0
+const myf8 c_myf8 := c_myf7
+const myf9 c_myf9 := 0.0
+const myf10 c_myf10 := 1.0
+template myf1 t_myf1 := 1.0
+template myf2 t_myf2 := 1.0
+template myf3 t_myf3 := 0.0
+template myf4 t_myf4 := t_myf3
+template myf5 t_myf5 := t_myf4
+template myf6 t_myf6 := t_myf5
+template myf7 t_myf7 := 4294967296.0
+template myf8 t_myf8 := t_myf7
+template myf9 t_myf9 := 0.0
+template myf10 t_myf10 := 1.0
+
+testcase floatSubtypes() runs on floatOperSubtypes_comptype
+{
+  if (c_myf1 == c_myf2 and valueof(t_myf1) == valueof(t_myf2)) { setverdict(pass) }
+  else { setverdict(fail) }
+  var template myf1 vt_myf1 := 1.0
+  var template myf2 vt_myf2 := 1.0
+  var myf1 v_myf1 := 1.0
+  var myf2 v_myf2 := 1.0
+  if (v_myf1 == v_myf2 and valueof(vt_myf1) == valueof(vt_myf2)) { setverdict(pass) }
+  else { setverdict(fail) }
+  if (c_myf3 == c_myf4 and c_myf4 == c_myf5 and c_myf5 == c_myf6 and
+      valueof(t_myf3) == valueof(t_myf4) and valueof(t_myf4) == valueof(t_myf5) and
+      valueof(t_myf5) == valueof(t_myf6)) { setverdict(pass) }
+  else { setverdict(fail) }
+  var template myf3 vt_myf3 := 0.0
+  var template myf4 vt_myf4 := vt_myf3
+  var template myf5 vt_myf5 := vt_myf4
+  var template myf6 vt_myf6 := vt_myf5
+  var myf3 v_myf3 := 0.0
+  var myf4 v_myf4 := v_myf3
+  var myf5 v_myf5 := v_myf4
+  var myf6 v_myf6 := v_myf5
+  if (v_myf3 == v_myf4 and v_myf4 == v_myf5 and v_myf5 == v_myf6 and
+      valueof(vt_myf3) == valueof(vt_myf4) and valueof(vt_myf4) == valueof(vt_myf5) and
+      valueof(vt_myf5) == valueof(vt_myf6)) { setverdict(pass) }
+  else { setverdict(fail) }
+  if (c_myf7 == c_myf8 and valueof(t_myf7) == valueof(t_myf8)) { setverdict(pass) }
+  else { setverdict(fail) }
+  var template myf7 vt_myf7 := 4294967296.0
+  var template myf8 vt_myf8 := vt_myf7
+  var myf7 v_myf7 := 4294967296.0
+  var myf8 v_myf8 := v_myf7
+  if (v_myf7 == v_myf8 and valueof(vt_myf7) == valueof(vt_myf8)) { setverdict(pass) }
+  else { setverdict(fail) }
+}
+
+testcase floatIsvalue() runs on floatOper_comptype {
+  var float f0, f1 := 1.0;
+  var template float tf0;
+  var template float tf1 := (5.5);
+  var template float tf2 := (1.0 .. 2.0);
+
+  if ( isvalue(f0) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(f1) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isvalue(tf0) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(tf1) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isvalue(tf2) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(f1 + 1.0) ) { setverdict(pass); } else { setverdict(fail); };
+}
+
+testcase floatIsbound() runs on floatOper_comptype {
+  var float f0, f1 := 1.0;
+  var template float tf0;
+  var template float tf1 := (5.5);
+  var template float tf2 := (1.0 .. 2.0);
+
+  if ( isbound(f0) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isbound(f1) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isbound(tf0) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isbound(tf1) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isbound(tf2) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isbound(f1 + 1.0) ) { setverdict(pass); } else { setverdict(fail); };
+}
+
+testcase floatComparison() runs on floatOper_comptype {
+  // 
+  var float minus_zero := -0.0;
+  var float plus_zero  :=  0.0;
+
+  //----------------
+
+  if (minus_zero == -0.0) { setverdict(pass); } else { setverdict(fail, __LINE__, ": -0.0 NOT == -0.0") } 
+  if (minus_zero <=  0.0) { setverdict(pass); } else { setverdict(fail, __LINE__, ": -0.0 NOT <= 0.0") }
+  if (minus_zero <   0.0) { setverdict(pass); } else { setverdict(fail, __LINE__, ": -0.0 NOT < 0.0") }
+  if (minus_zero <=  plus_zero) { setverdict(pass); } else { setverdict(fail, __LINE__, ": -0.0 NOT <= 0.0") }
+  if (minus_zero <   plus_zero) { setverdict(pass); } else { setverdict(fail, __LINE__, ": -0.0 NOT < 0.0") }
+  if (plus_zero >=  minus_zero) { setverdict(pass); } else { setverdict(fail, __LINE__, ": 0.0 NOT >= -0.0") }
+  if (plus_zero >   minus_zero) { setverdict(pass); } else { setverdict(fail, __LINE__, ": 0.0 NOT > -0.0") }
+  
+  if (-infinity <  minus_zero ) { setverdict(pass); } else { setverdict(fail, __LINE__, ": -infinity NOT < -0.0") }
+  if (-infinity <= minus_zero ) { setverdict(pass); } else { setverdict(fail, __LINE__, ": -infinity NOT <= -0.0") }
+  if (minus_zero <  infinity) { setverdict(pass); } else { setverdict(fail, __LINE__, ": -0.0 NOT < infinity") }
+  if (minus_zero <= infinity) { setverdict(pass); } else { setverdict(fail, __LINE__, ": -0.0 NOT <= infinity") }
+  if (minus_zero <  not_a_number) { setverdict(pass); } else { setverdict(fail, __LINE__, ": -0.0 NOT < not_a_number") }
+  if (minus_zero <= not_a_number) { setverdict(pass); } else { setverdict(fail, __LINE__, ": -0.0 NOT <= not_a_number") }
+  if (not_a_number >  minus_zero) { setverdict(pass); } else { setverdict(fail, __LINE__, ": not_a_number NOT > -0.0") }
+  if (not_a_number >= minus_zero) { setverdict(pass); } else { setverdict(fail, __LINE__, ": not_a_number NOT >= -0.0") }
+
+  //----------------
+
+  var float plus_inf := infinity;
+  if (plus_inf == infinity) { setverdict(pass); } else { setverdict(fail, __LINE__, ": infinity==infinity:NotOK") }
+  if (-infinity <  plus_inf ) { setverdict(pass); } else { setverdict(fail, __LINE__, ": -infinity<infinity:NotOK") }
+  if (-infinity <= plus_inf ) { setverdict(pass); } else { setverdict(fail, __LINE__, ": -infinity<=infinity:NotOK") }
+  if (plus_inf <  not_a_number) { setverdict(pass); } else { setverdict(fail, __LINE__, ": infinity<not_a_number:NotOK") }
+  if (plus_inf <= not_a_number) { setverdict(pass); } else { setverdict(fail, __LINE__, ": infinity<=not_a_number:NotOK") }
+
+  //----------------
+
+  var float minus_inf := -infinity;
+  if (minus_inf == -infinity) { setverdict(pass); } else { setverdict(fail, __LINE__, ": -infinity==-infinity:NotOK") }
+  if (minus_inf < not_a_number) { setverdict(pass); } else { setverdict(fail, __LINE__, ": -infinity<not_a_number:NotOK") }
+  if (minus_inf <= not_a_number) { setverdict(pass); } else { setverdict(fail, __LINE__, ": -infinity<=not_a_number:NotOK") }
+
+  //----------------
+
+  var float NaN := not_a_number;
+  if (NaN != not_a_number) { setverdict(fail, __LINE__, ": not_a_number==not_a_number:NotOK") }
+  if (NaN < NaN) { setverdict(fail, __LINE__, ": not_a_number<not_a_number:NotOK") }
+  if (NaN > NaN) { setverdict(fail, __LINE__, ": not_a_number<not_a_number:NotOK") }
+}
+
+testcase constFloatComparison() runs on floatOper_comptype {
+  // 
+  const float minus_zero := -0.0;
+  const float plus_zero  :=  0.0;
+
+  //----------------
+
+  if (minus_zero == -0.0) { setverdict(pass); } else { setverdict(fail, __LINE__, ": -0.0 NOT == -0.0") } 
+  if (minus_zero <=  0.0) { setverdict(pass); } else { setverdict(fail, __LINE__, ": -0.0 NOT <= 0.0") }
+  if (minus_zero <   0.0) { setverdict(pass); } else { setverdict(fail, __LINE__, ": -0.0 NOT < 0.0") }
+  if (minus_zero <=  plus_zero) { setverdict(pass); } else { setverdict(fail, __LINE__, ": -0.0 NOT <= 0.0") }
+  if (minus_zero <   plus_zero) { setverdict(pass); } else { setverdict(fail, __LINE__, ": -0.0 NOT < 0.0") }
+  if (plus_zero >=  minus_zero) { setverdict(pass); } else { setverdict(fail, __LINE__, ": 0.0 NOT >= -0.0") }
+  if (plus_zero >   minus_zero) { setverdict(pass); } else { setverdict(fail, __LINE__, ": 0.0 NOT > -0.0") }
+  
+  if (-infinity <  minus_zero ) { setverdict(pass); } else { setverdict(fail, __LINE__, ": -infinity NOT < -0.0") }
+  if (-infinity <= minus_zero ) { setverdict(pass); } else { setverdict(fail, __LINE__, ": -infinity NOT <= -0.0") }
+  if (minus_zero <  infinity) { setverdict(pass); } else { setverdict(fail, __LINE__, ": -0.0 NOT < infinity") }
+  if (minus_zero <= infinity) { setverdict(pass); } else { setverdict(fail, __LINE__, ": -0.0 NOT <= infinity") }
+  if (minus_zero <  not_a_number) { setverdict(pass); } else { setverdict(fail, __LINE__, ": -0.0 NOT < not_a_number") }
+  if (minus_zero <= not_a_number) { setverdict(pass); } else { setverdict(fail, __LINE__, ": -0.0 NOT <= not_a_number") }
+  if (not_a_number >  minus_zero) { setverdict(pass); } else { setverdict(fail, __LINE__, ": not_a_number NOT > -0.0") }
+  if (not_a_number >= minus_zero) { setverdict(pass); } else { setverdict(fail, __LINE__, ": not_a_number NOT >= -0.0") }
+
+  //----------------
+
+  const float plus_inf := infinity;
+  if (plus_inf == infinity) { setverdict(pass); } else { setverdict(fail, __LINE__, ": infinity==infinity:NotOK") }
+  if (-infinity <  plus_inf ) { setverdict(pass); } else { setverdict(fail, __LINE__, ": -infinity<infinity:NotOK") }
+  if (-infinity <= plus_inf ) { setverdict(pass); } else { setverdict(fail, __LINE__, ": -infinity<=infinity:NotOK") }
+  if (plus_inf <  not_a_number) { setverdict(pass); } else { setverdict(fail, __LINE__, ": infinity<not_a_number:NotOK") }
+  if (plus_inf <= not_a_number) { setverdict(pass); } else { setverdict(fail, __LINE__, ": infinity<=not_a_number:NotOK") }
+
+  //----------------
+
+  const float minus_inf := -infinity;
+  if (minus_inf == -infinity) { setverdict(pass); } else { setverdict(fail, __LINE__, ": -infinity==-infinity:NotOK") }
+  if (minus_inf < not_a_number) { setverdict(pass); } else { setverdict(fail, __LINE__, ": -infinity<not_a_number:NotOK") }
+  if (minus_inf <= not_a_number) { setverdict(pass); } else { setverdict(fail, __LINE__, ": -infinity<=not_a_number:NotOK") }
+
+  //----------------
+
+  const float NaN := not_a_number;
+  if (NaN != not_a_number) { setverdict(fail, __LINE__, ": not_a_number==not_a_number:NotOK") }
+  if (NaN < NaN) { setverdict(fail, __LINE__, ": not_a_number<not_a_number:NotOK") }
+  if (NaN > NaN) { setverdict(fail, __LINE__, ": not_a_number<not_a_number:NotOK") }
+}
+
+control {
+  const float cl_1:=2.0;
+  var float vl_1;
+
+  execute(floatAssign());
+  execute(floatConst());
+  execute(floatCompEq());
+  execute(floatCompNotEq());
+  execute(floatCompLess());
+  execute(floatCompLessEq());
+  execute(floatCompGreat());
+  execute(floatCompGreatEq());
+  execute(floatAdd());
+  execute(floatSubs());
+  execute(floatMultipl());
+  execute(floatDiv());
+  execute(floatSubtypes());
+  execute(floatIsvalue());
+  execute(floatIsbound());
+  execute(floatComparison());
+  execute(constFloatComparison());
+}
+
+}
diff --git a/Regression_Test_java/src/TfloatOperSpecial.ttcn b/Regression_Test_java/src/TfloatOperSpecial.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..d7c988a8badef5c30c031e7f0ee9d74aeea48097
--- /dev/null
+++ b/Regression_Test_java/src/TfloatOperSpecial.ttcn
@@ -0,0 +1,601 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Szabo, Bence Janos
+ *
+ ******************************************************************************/
+module TfloatOperSpecial {
+
+type component EmptyCT {}
+
+
+testcase tc_addition() runs on EmptyCT {
+  
+  var float f := infinity;
+  var float f2 := 1.0;
+  f := f + 1.0;
+  if (f != infinity) {
+    setverdict(fail);
+  }
+  f := f + f2;
+  if (f != infinity) {
+    setverdict(fail);
+  }
+
+  f := -infinity;
+  f := f + 1.0;
+  if (f != -infinity) {
+    setverdict(fail);
+  }
+  f := f + f2;
+  if (f != -infinity) {
+    setverdict(fail);
+  }
+
+  f := f2 + f;
+  if (f != -infinity) {
+    setverdict(fail);
+  }
+
+  f := infinity + 1.0;
+  if (f != infinity) {
+    setverdict(fail);
+  }
+
+  f := -infinity + 1.0;
+  if (f != -infinity) {
+    setverdict(fail);
+  }
+
+  f := not_a_number + f2;
+  if (f != not_a_number) {
+    setverdict(fail);
+  }
+
+  f := f2 + not_a_number;
+  if (f != not_a_number) {
+    setverdict(fail);
+  }
+
+  f := infinity + not_a_number;
+  if (f != not_a_number) {
+    setverdict(fail);
+  }
+
+  f := -infinity + not_a_number;
+  if (f != not_a_number) {
+    setverdict(fail);
+  }
+
+  f := -infinity + infinity;
+  if (f != not_a_number) {
+    setverdict(fail);
+  }
+
+  f := infinity + infinity;
+  if (f != infinity) {
+    setverdict(fail);
+  }
+  f := -infinity + -infinity;
+  if (f != -infinity) {
+    setverdict(fail);
+  }
+  f := not_a_number + not_a_number;
+  if (f != not_a_number) {
+    setverdict(fail);
+  }
+
+  setverdict(pass);
+}
+
+testcase tc_subtraction() runs on EmptyCT {
+  
+  var float f := infinity;
+  var float f2 := 1.0;
+  f := f - 1.0;
+  if (f != infinity) {
+    setverdict(fail);
+  }
+  f := f - f2;
+  if (f != infinity) {
+    setverdict(fail);
+  }
+
+  f := f2 - f;
+  if (f != -infinity) {
+    setverdict(fail);
+  }
+
+  f := -infinity;
+  f := f - 1.0;
+  if (f != -infinity) {
+    setverdict(fail);
+  }
+  f := f - f2;
+  if (f != -infinity) {
+    setverdict(fail);
+  }
+
+  f := infinity - 1.0;
+  if (f != infinity) {
+    setverdict(fail);
+  }
+
+  f := -infinity - 1.0;
+  if (f != -infinity) {
+    setverdict(fail);
+  }
+
+
+  f := not_a_number - f2;
+  if (f != not_a_number) {
+    setverdict(fail);
+  }
+
+  f := f2 - not_a_number;
+  if (f != not_a_number) {
+    setverdict(fail);
+  }
+
+  f := infinity - not_a_number;
+  if (f != not_a_number) {
+    setverdict(fail);
+  }
+
+  f := -infinity - not_a_number;
+  if (f != not_a_number) {
+    setverdict(fail);
+  }
+
+  f := -infinity - infinity;
+  if (f != -infinity) {
+    setverdict(fail);
+  }
+
+  f := infinity - infinity;
+  if (f != not_a_number) {
+    setverdict(fail);
+  }
+
+  f := -infinity - -infinity;
+  if (f != not_a_number) {
+    setverdict(fail);
+  }
+  f := not_a_number - not_a_number;
+  if (f != not_a_number) {
+    setverdict(fail);
+  }
+
+  setverdict(pass);
+}
+
+
+testcase tc_multiplication() runs on EmptyCT {
+  var float f := infinity;
+  var float f2 := 2.0;
+  var float f3 := -2.0;
+  f := f * 2.0;
+  if (f != infinity) {
+    setverdict(fail);
+  }
+  f := f * f2;
+  if (f != infinity) {
+    setverdict(fail);
+  }
+  f := f * f3;
+  if (f != -infinity) {
+    setverdict(fail);
+  }
+
+  f := infinity;
+  f := f2 * f;
+  if (f != infinity) {
+    setverdict(fail);
+  }
+
+  f := -infinity;
+  f := f * 2.0;
+  if (f != -infinity) {
+    setverdict(fail);
+  }
+  f := f * f2;
+  if (f != -infinity) {
+    setverdict(fail);
+  }
+  f := f * f3;
+  if (f != infinity) {
+    setverdict(fail);
+  }
+
+  f := infinity * 1.0;
+  if (f != infinity) {
+    setverdict(fail);
+  }
+
+  f := -infinity * 1.0;
+  if (f != -infinity) {
+    setverdict(fail);
+  }
+
+  f := not_a_number * f2;
+  if (f != not_a_number) {
+    setverdict(fail);
+  }
+
+  f := f2 * not_a_number;
+  if (f != not_a_number) {
+    setverdict(fail);
+  }
+
+  f := infinity * not_a_number;
+  if (f != not_a_number) {
+    setverdict(fail);
+  }
+
+  f := -infinity * not_a_number;
+  if (f != not_a_number) {
+    setverdict(fail);
+  }
+
+  f := -infinity * infinity;
+  if (f != -infinity) {
+    setverdict(fail);
+  }
+
+  f := infinity * infinity;
+  if (f != infinity) {
+    setverdict(fail);
+  }
+
+  f := -infinity * -infinity;
+  if (f != infinity) {
+    setverdict(fail);
+  }
+  f := not_a_number * not_a_number;
+  if (f != not_a_number) {
+    setverdict(fail);
+  }
+
+  setverdict(pass);
+}
+
+
+testcase tc_division() runs on EmptyCT {
+  var float f := infinity;
+  var float f2 := 2.0;
+  var float f3 := -2.0;
+  f := f / 2.0;
+  if (f != infinity) {
+    setverdict(fail);
+  }
+  f := f / f2;
+  if (f != infinity) {
+    setverdict(fail);
+  }
+  f := f / f3;
+  if (f != -infinity) {
+    setverdict(fail);
+  }
+
+  f := infinity;
+  f := f2 / f;
+  if (f != 0.000000) {
+    setverdict(fail);
+  }
+
+  f := -infinity;
+  f := f / 2.0;
+  if (f != -infinity) {
+    setverdict(fail);
+  }
+  f := f / f2;
+  if (f != -infinity) {
+    setverdict(fail);
+  }
+  f := f / f3;
+  if (f != infinity) {
+    setverdict(fail);
+  }
+
+  f := f2 / f;
+  if (f != 0.000000) {
+    setverdict(fail);
+  }
+
+  f := infinity;
+  f := f3 / f;
+  if (f != -0.000000) {
+    setverdict(fail);
+  }
+
+  f := -infinity;
+  f := f2 / f;
+  if (f != -0.000000) {
+    setverdict(fail);
+  }
+
+  f := -infinity;
+  f := f3 / f;
+  if (f != 0.000000) {
+    setverdict(fail);
+  }
+
+  f := infinity / 2.0;
+  if (f != infinity) {
+    setverdict(fail);
+  }
+
+  f := -infinity / 2.0;
+  if (f != -infinity) {
+    setverdict(fail);
+  }
+
+
+  f := not_a_number / f2;
+  if (f != not_a_number) {
+    setverdict(fail);
+  }
+
+  f := f2 / not_a_number;
+  if (f != not_a_number) {
+    setverdict(fail);
+  }
+
+  f := infinity / not_a_number;
+  if (f != not_a_number) {
+    setverdict(fail);
+  }
+
+  f := -infinity / not_a_number;
+  if (f != not_a_number) {
+    setverdict(fail);
+  }
+
+  f := -infinity / infinity;
+  if (f != not_a_number) {
+    setverdict(fail);
+  }
+
+  f := infinity / infinity;
+  if (f != not_a_number) {
+    setverdict(fail);
+  }
+
+  f := -infinity / -infinity;
+  if (f != not_a_number) {
+    setverdict(fail);
+  }
+  f := not_a_number / not_a_number;
+  if (f != not_a_number) {
+    setverdict(fail);
+  }
+
+  setverdict(pass);
+}
+
+
+//===========================================================================//
+
+
+const float inf := infinity;
+const float neginf := -infinity;
+const float two := 2.0;
+const float negtwo := -2.0;
+
+// All of theese are infinity
+const float c_f1 := inf + two;
+const float c_f2 := inf + negtwo;
+const float c_f3 := inf - two;
+const float c_f4 := inf - negtwo;
+const float c_f5 := inf * two;
+const float c_f6 := inf / two;
+const float c_f7 := neginf * negtwo;
+const float c_f8 := neginf / negtwo;
+const float c_f21 := inf + inf;
+const float c_f22 := inf * inf;
+const float c_f23 := -inf * -inf;
+
+// All of theese are -infinity
+const float c_f9 := neginf + two;
+const float c_f10 := neginf + negtwo;
+const float c_f11 := neginf - two;
+const float c_f12 := neginf - negtwo;
+const float c_f13 := neginf * two;
+const float c_f14 := neginf / two;
+const float c_f15 := inf * negtwo;
+const float c_f16 := inf / negtwo;
+const float c_f24 := -inf - inf;
+const float c_f25 := -inf * inf;
+const float c_f26 := inf * -inf;
+const float c_f27 := -inf + -inf;
+
+
+// All of theese are 0.000000
+const float c_f17 := two / inf;
+
+// All of theese are -0.000000
+const float c_f18 := two / neginf;
+
+// All of theese are not_a_number
+const float c_f19 := inf * 0.0;
+const float c_f20 := neginf * 0.0;
+const float c_f28 := not_a_number + 1.0;
+const float c_f29 := not_a_number - 1.0;
+const float c_f30 := 1.0 + not_a_number;
+const float c_f31 := 1.0 - not_a_number;
+const float c_f32 := not_a_number * 1.0;
+const float c_f33 := not_a_number / 1.0;
+const float c_f34 := 1.0 * not_a_number;
+const float c_f35 := 1.0 / not_a_number;
+const float c_f36 := inf / inf;
+const float c_f37 := -inf / inf;
+const float c_f38 := -inf / -inf;
+const float c_f39 := inf / -inf;
+const float c_f40 := not_a_number + not_a_number;
+const float c_f41 := not_a_number - not_a_number;
+const float c_f42 := not_a_number * not_a_number;
+const float c_f43 := not_a_number / not_a_number;
+
+testcase tc_compile_time() runs on EmptyCT {
+
+  // Infinities
+  if (c_f1 != infinity) {
+    setverdict(fail);
+  }
+  if (c_f2 != infinity) {
+    setverdict(fail);
+  }
+  if (c_f3 != infinity) {
+    setverdict(fail);
+  }
+  if (c_f4 != infinity) {
+    setverdict(fail);
+  }
+  if (c_f5 != infinity) {
+    setverdict(fail);
+  }
+  if (c_f6 != infinity) {
+    setverdict(fail);
+  }
+  if (c_f7 != infinity) {
+    setverdict(fail);
+  }
+  if (c_f8 != infinity) {
+    setverdict(fail);
+  }
+  if (c_f21 != infinity) {
+    setverdict(fail);
+  }
+  if (c_f22 != infinity) {
+    setverdict(fail);
+  }
+  if (c_f23 != infinity) {
+    setverdict(fail);
+  }
+
+
+  // Negative infinities
+  if (c_f9 != -infinity) {
+    setverdict(fail);
+  }
+  if (c_f10 != -infinity) {
+    setverdict(fail);
+  }
+  if (c_f11 != -infinity) {
+    setverdict(fail);
+  }
+  if (c_f12 != -infinity) {
+    setverdict(fail);
+  }
+  if (c_f13 != -infinity) {
+    setverdict(fail);
+  }
+  if (c_f14 != -infinity) {
+    setverdict(fail);
+  }
+  if (c_f15 != -infinity) {
+    setverdict(fail);
+  }
+  if (c_f16 != -infinity) {
+    setverdict(fail);
+  }
+  if (c_f24 != -infinity) {
+    setverdict(fail);
+  }
+  if (c_f25 != -infinity) {
+    setverdict(fail);
+  }
+  if (c_f26 != -infinity) {
+    setverdict(fail);
+  }
+  if (c_f27 != -infinity) {
+    setverdict(fail);
+  }
+
+
+  // 0.000000
+  if (c_f17 != 0.000000) {
+    setverdict(fail);
+  }
+
+  // -0.000000
+  if (c_f18 != -0.000000) {
+    setverdict(fail);
+  }
+
+
+  // Not a number
+  if (c_f19 != not_a_number) {
+    setverdict(fail);
+  }
+  if (c_f20 != not_a_number) {
+    setverdict(fail);
+  }
+  if (c_f28 != not_a_number) {
+    setverdict(fail);
+  }
+  if (c_f29 != not_a_number) {
+    setverdict(fail);
+  }
+  if (c_f30 != not_a_number) {
+    setverdict(fail);
+  }
+  if (c_f31 != not_a_number) {
+    setverdict(fail);
+  }
+  if (c_f32 != not_a_number) {
+    setverdict(fail);
+  }
+  if (c_f33 != not_a_number) {
+    setverdict(fail);
+  }
+  if (c_f34 != not_a_number) {
+    setverdict(fail);
+  }
+  if (c_f35 != not_a_number) {
+    setverdict(fail);
+  }
+  if (c_f36 != not_a_number) {
+    setverdict(fail);
+  }
+  if (c_f37 != not_a_number) {
+    setverdict(fail);
+  }
+  if (c_f38 != not_a_number) {
+    setverdict(fail);
+  }
+  if (c_f39 != not_a_number) {
+    setverdict(fail);
+  }
+  if (c_f40 != not_a_number) {
+    setverdict(fail);
+  }
+  if (c_f41 != not_a_number) {
+    setverdict(fail);
+  }
+  if (c_f42 != not_a_number) {
+    setverdict(fail);
+  }
+  if (c_f43 != not_a_number) {
+    setverdict(fail);
+  }
+
+  setverdict(pass);
+}
+
+//===========================================================================//
+
+control {
+  execute(tc_addition());
+  execute(tc_subtraction());
+  execute(tc_multiplication());
+  execute(tc_division());
+  execute(tc_compile_time());
+}
+
+}
\ No newline at end of file
diff --git a/Regression_Test_java/src/ThexstrOper.ttcn b/Regression_Test_java/src/ThexstrOper.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..34296ae6f133174f0d1f0cc50c37a43374424331
--- /dev/null
+++ b/Regression_Test_java/src/ThexstrOper.ttcn
@@ -0,0 +1,102 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Kovacs, Ferenc
+ *   Szabados, Kristof 
+ *
+ ******************************************************************************/
+module ThexstrOper
+{
+type component hexstrOper_comptype { }
+
+type hexstring myhstr0
+type hexstring myhstr1 length(1)
+type hexstring myhstr2 length(0..1)
+type hexstring myhstr3 ('0'H, '1'H, '00'H, '01'H, '10'H, '11'H) length(1)
+type hexstring myhstr4 ('0'H, '1'H)
+type hexstring myhstr5 (int2hex(0, 1) & ''H, int2hex(1, 1))
+type myhstr5 myhstr6
+type myhstr6 myhstr7 (c_myhstr1, int2hex(hex2int(c_myhstr1), 1))
+type myhstr6 myhstr8 (int2hex(hex2int('0'H), 1))
+type hexstring myhstr9 (myhstr2, myhstr3)
+type hexstring myhstr10 length(0..infinity)  // Full set.
+
+const hexstring c_myhstr1 := '0'H
+const myhstr9 c_myhstr2 := c_myhstr1
+
+template hexstring t_myhstr1 := '0'H
+template myhstr9 t_myhstr2 := t_myhstr1
+template myhstr3 t_myhstr3 := '0'H length(1)
+// TITAN doesn't allow patterns to be other than `charstring' or `universal
+// charstring' types.  It's denied by the grammar.
+
+function f_hstr1() return myhstr6 {
+  return substr(replace(int2hex(0, 1) & int2hex(1, 1), 0, 1, '1'H), 0, 1)
+}
+
+testcase hexstrSubtypes() runs on hexstrOper_comptype {
+  var template myhstr1 vt_myhstr1 := '0'H  // Simple length.
+  var template myhstr2 vt_myhstr2 := ''H  // Length with range.
+  var template myhstr3 vt_myhstr3 := vt_myhstr1  // Values and length.
+  var template myhstr4 vt_myhstr4 := vt_myhstr1  // Values only.
+  var myhstr1 v_myhstr1 := '0'H
+  var myhstr2 v_myhstr2 := ''H
+  var myhstr3 v_myhstr3 := v_myhstr1
+  var myhstr4 v_myhstr4 := v_myhstr1
+
+  if (valueof(vt_myhstr1) == v_myhstr1 and v_myhstr2 == valueof(vt_myhstr2)) { setverdict(pass) }
+  else { setverdict(fail) }
+  if (valueof(vt_myhstr3) == v_myhstr3 and v_myhstr4 == valueof(vt_myhstr4)) { setverdict(pass) }
+  else { setverdict(fail) }
+  if (f_hstr1() == '1'H) { setverdict(pass) }
+  else { setverdict(fail) }
+}
+
+testcase hexstrIsvalue() runs on hexstrOper_comptype{
+  var hexstring hstr0;
+  var hexstring hstr1 := '1111'H;
+  var template hexstring thstr;
+
+  if ( isvalue(hstr0) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(hstr1) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isvalue(thstr) ) { setverdict(fail); } else { setverdict(pass); };
+}
+
+testcase hexstrIsbound() runs on hexstrOper_comptype {
+  var hexstring hstr0;
+  var hexstring hstr1 := '1111'H;
+  var template hexstring thstr;
+
+  if ( isbound(hstr0) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isbound(hstr0[0]) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isbound(hstr1) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isbound(thstr) ) { setverdict(fail); } else { setverdict(pass); };
+}
+
+testcase CR_TR00018474() runs on hexstrOper_comptype {
+  // Indexing of string template variables.
+  var template hexstring vth1 := 'AABBCCDDEE'H
+  var template hexstring vth2 := 'AABB?CC'H  // It's a pattern, cannot be indexed.
+  vth1[0] := 'B'H
+  if (match('BABBCCDDEE'H, vth1)) { setverdict(pass) } else { setverdict(fail) }
+  vth1[0] := 'B'H  // Indexed assignment notation cannot be used here.
+  vth1[1] := 'A'H  // Still works, nothing special.
+  if (match('BABBCCDDEE'H, vth1)) { setverdict(pass) } else { setverdict(fail) }
+}
+
+control {
+  const hexstring cl_1 := '0'H
+  var hexstring vl_1;
+
+  execute(hexstrSubtypes());
+  execute(hexstrIsvalue());
+  execute(hexstrIsbound());
+  execute(CR_TR00018474());
+}
+}
diff --git a/Regression_Test_java/src/TintOper.ttcn b/Regression_Test_java/src/TintOper.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..c6f59fa53cb45fda9b18daa7743da3512a4840e0
--- /dev/null
+++ b/Regression_Test_java/src/TintOper.ttcn
@@ -0,0 +1,1079 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Forstner, Matyas
+ *   Kovacs, Ferenc
+ *   Raduly, Csaba
+ *   Szabados, Kristof
+ *   Szabo, Janos Zoltan – initial implementation
+ *
+ ******************************************************************************/
+module TintOper
+{const integer TintOper_const1:=2;
+type component intOper_comptype { };
+/*
+type port PCOType message
+{
+  inout integer
+  inout eint1
+  inout rint1
+}
+
+type component bigIntOper_comptype { port PCOType comp_port }
+*/
+
+template integer tint1 := -12345678910111213141516
+template integer tint2 := 123456789101112131415
+template integer tint3 := -11111111111111111111111
+template integer tint4 := 111111111111111111111
+type enumerated eint1 {ec1(-1), ec2(2147483647), ec3(-2147483647)}
+type record rint1 {
+  integer f1,
+  integer f2,
+  integer f3,
+  integer f4
+}
+
+template integer t_param1(rint1 par) := par.f2;  // parameterised template
+
+modulepar integer par_unbound;
+modulepar integer par_bound := 42;
+
+testcase intAssign() runs on intOper_comptype
+{ var integer x1:=123;
+  var integer x4:=x1;
+  var integer x2,x3;
+  x2:=124;
+  x3:=x2;
+  if (x1==123) {setverdict(pass);}	//at declaration, value
+     else {setverdict(fail);}
+  if (x4==123) {setverdict(pass);}	//at declaration, variable
+     else {setverdict(fail);}
+  if (x2==124) {setverdict(pass);}	//later, value
+     else {setverdict(fail);}
+  if (x3==124) {setverdict(pass);}	//later, variable
+     else {setverdict(fail);}
+}
+
+testcase intConst() runs on intOper_comptype {
+const integer TintOper_const3:=5;
+if (TintOper_const1==2) {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+//if (TintOper_const2==2) {setverdict(pass);}	//control part
+//     else {setverdict(fail);}
+if (TintOper_const3==5) {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+}
+
+testcase intCompEq() runs on intOper_comptype
+{ var integer x1,x2,x3;
+  x1:=100;
+  x2:=100;
+  x3:=200;
+  if (x1==x2) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (not(x3==x2)) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (x1==100) {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if (not(x1==1010)) {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if (100==x1) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if (not(1001==x1)) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if (100==100) {setverdict(pass);}	//value_value
+   else {setverdict(fail);}
+  if (not(1100==100)) {setverdict(pass);}	//value_value
+   else {setverdict(fail);}
+}
+
+testcase intCompNotEq() runs on intOper_comptype
+{ var integer x1,x2,x3;
+  x1:=100;
+  x2:=200;
+  x3:=100;
+  if (x1!=x2) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (not(x1!=x3)) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (x1!=150) {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if (not(x1!=100)) {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if (120!=x2) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if (not(200!=x2)) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if (111!=112) {setverdict(pass);}	//value_value
+   else {setverdict(fail);}
+  if (not(111!=111)) {setverdict(pass);}	//value_value
+   else {setverdict(fail);}
+}
+
+testcase intCompLess() runs on intOper_comptype
+{ var integer x1,x2,x3;
+  x1:=100;
+  x2:=100;
+  x3:=200;
+  if (x1<x3) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (not(x1<x2)) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (not(x3<x1)) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (x1<110) {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if (not(x1<100)) {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if (not(x2<90)) {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if (100<x3) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if (not(100<x2)) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if (not(110<x1)) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if (100<120) {setverdict(pass);}	//value_value
+   else {setverdict(fail);}
+  if (not(100<100)) {setverdict(pass);} //value_value
+   else {setverdict(fail);}
+  if (not(110<10)) {setverdict(pass);}	//value_value
+   else {setverdict(fail);}
+}
+
+testcase intCompLessEq() runs on intOper_comptype
+{ var integer x1,x2,x3;
+  x1:=100;
+  x2:=100;
+  x3:=200;
+  if (x1<=x3) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (x1<=x2) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (not(x3<=x1)) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (x1<=110) {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if (x1<=100) {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if (not(x2<=90)) {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if (100<=x3) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if (100<=x2) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if (not(110<=x1)) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if (100<=120) {setverdict(pass);}	//value_value
+   else {setverdict(fail);}
+  if (100<=100) {setverdict(pass);}	//value_value
+   else {setverdict(fail);}
+  if (not(110<=10)) {setverdict(pass);}	//value_value
+   else {setverdict(fail);}
+}
+
+testcase intCompGreat() runs on intOper_comptype
+{ var integer x1,x2,x3;
+  x1:=100;
+  x2:=100;
+  x3:=200;
+  if (x3>x1) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (not(x1>x2)) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (not(x1>x3)) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (x1>99) {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if (not(x1>100)) {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if (not(x2>110)) {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if (210>x3) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if (not(100>x2)) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if (not(90>x1)) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if (130>120) {setverdict(pass);}	//value_value
+   else {setverdict(fail);}
+  if (not(100>100)) {setverdict(pass);}	//value_value
+   else {setverdict(fail);}
+  if (not(10>110)) {setverdict(pass);}	//value_value
+   else {setverdict(fail);}
+}
+
+testcase intCompGreatEq() runs on intOper_comptype
+{ var integer x1,x2,x3;
+  x1:=100;
+  x2:=100;
+  x3:=200;
+  if (x3>=x1) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail, "1");}
+  if (x1>=x2) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail, "2");}
+  if (not(x1>=x3)) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail, "3");}
+  if (x1>=99) {setverdict(pass);}	//variable_value
+   else {setverdict(fail, "4");}
+  if (x1>=100) {setverdict(pass);}	//variable_value
+   else {setverdict(fail, "5");}
+  if (not(x2>=110)) {setverdict(pass);}	//variable_value
+   else {setverdict(fail, "6");}
+  if (210>=x3) {setverdict(pass);}	//value_variable
+   else {setverdict(fail, "7");}
+  if (100>=x2) {setverdict(pass);}	//value_variable
+   else {setverdict(fail, "8");}
+  if (not(90>=x1)) {setverdict(pass);}	//value_variable
+   else {setverdict(fail, "9");}
+  if (130>=120) {setverdict(pass);}	//value_value
+   else {setverdict(fail, "10");}
+  if (100>=100) {setverdict(pass);}	//value_value
+   else {setverdict(fail, "11");}
+  if (not(10>=110)) {setverdict(pass);}	//value_value
+   else {setverdict(fail, "12");}
+}
+
+testcase intAdd() runs on intOper_comptype
+{ var integer x1,x2,x3,x4,x5,x6,x7,x8,x9;
+  const integer x10:=-100,x11:=-200,x12:=x10+x11;
+  x1:=125;
+  x2:=1000;
+  x3:=x1+x2;
+  x4:=x2+456;
+  x5:=100+x1;
+  x6:=100+234;
+  x7:=-100;
+  x8:=-200;
+  x9:=x7+x8;
+  if (x3==1125) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (x4==1456) {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if (x5==225) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if (x6==334) {setverdict(pass);}	//value_value
+   else {setverdict(fail);}
+  if (x9==-300) {setverdict(pass);}
+   else {setverdict(fail);}
+  if (x7+x8==-300) {setverdict(pass);}
+   else {setverdict(fail);}
+  if (-100+-200==-300) {setverdict(pass);}
+   else {setverdict(fail);}
+  if (x12==-300) {setverdict(pass);}
+   else {setverdict(fail);}
+  if (x10+x11==x12) {setverdict(pass);}
+   else {setverdict(fail);}
+  if (-100+-200==x12) {setverdict(pass);}
+   else {setverdict(fail);}
+}
+
+testcase intSubs() runs on intOper_comptype
+{ var integer x1,x2,x3,x4,x5,x6;
+  x1:=125;
+  x2:=1125;
+  x3:=x1-x2;
+  x4:=x2-102;
+  x5:=100-x1;
+  x6:=100-234;
+  if (x3==-1000) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (x4==1023) {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if (x5==-25) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if (x6==-134) {setverdict(pass);}	//value_value
+   else {setverdict(fail);}
+}
+
+testcase intMultipl() runs on intOper_comptype
+{ var integer x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17;
+  x1:=12;
+  x2:=10;
+  x3:=x1*x2;
+  x4:=x2*-2;
+  x5:=10*x1;
+  x6:=-2*3;
+  x7:=3*-2;
+  x8:=-2*-3;
+  x9:=-x1*x2;
+  x10:=-x1*-x2;
+  x11:=x1*-x2;
+  x12:=1000000;
+  x13:=x12*x2;
+  x14:=-x2*x12;
+  x15:=-x12*-x2;
+  x16:=1000000*10;
+  x17:=-10*1000000;
+  if (x3==120) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (x4==-20) {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if (x5==120) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if (x6==-6) {setverdict(pass);}	//value_value
+   else {setverdict(fail);}
+  if (x7==-6) {setverdict(pass);}
+   else {setverdict(fail);}
+  if (x8==6) {setverdict(pass);}
+   else {setverdict(fail);}
+  if (x9==-120) {setverdict(pass);}
+   else {setverdict(fail);}
+  if (x10==120) {setverdict(pass);}
+   else {setverdict(fail);}
+  if (x11==-120) {setverdict(pass);}
+   else {setverdict(fail);}
+  if (x13==10000000) {setverdict(pass);}
+   else {setverdict(fail);}
+  if (x14==-10000000) {setverdict(pass);}
+   else {setverdict(fail);}
+  if (x15==10000000) {setverdict(pass);}
+   else {setverdict(fail);}
+  if (x16==10000000) {setverdict(pass);}
+   else {setverdict(fail);}
+  if (x17==-10000000) {setverdict(pass);}
+   else {setverdict(fail);}
+}
+
+testcase intDiv() runs on intOper_comptype
+{ var integer x1,x2,x3,x4,x5,x6,x7,x8;
+  x1:=-125;
+  x2:=501;
+  x3:=x2/x1;
+  x4:=x2/50;
+  x5:=252/x1;
+  x6:=102/-25;
+  x7:=-102/-25;
+  x8:=-25/102;
+  if (x3==-4) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (x4==10) {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if (x5==-2) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if (x6==-4) {setverdict(pass);}	//value_value
+   else {setverdict(fail);}
+  if (x7==4) {setverdict(pass);}
+   else {setverdict(fail);}
+  if (x8==0) {setverdict(pass);}
+   else {setverdict(fail);}
+}
+
+testcase intMod() runs on intOper_comptype
+{ var integer x1,x2,x3,x4,x5,x6;
+  x1:=-125;
+  x2:=503;
+  x3:=x2 mod x1;
+  x4:=x2 mod 50;
+  x5:=254 mod x1;
+  x6:=102 mod -25;			// positive x
+  if (x3==3) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (x4==3) {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if (x5==4) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if (x6==2) {setverdict(pass);}	//value_value
+   else {setverdict(fail);}
+  x2:=-503;
+  x3:=x2 mod x1;
+  x4:=x2 mod 50;
+  x5:=-254 mod x1;
+  x6:=-102 mod -25;			// negative x
+  if (x3==122) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (x4==47) {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if (x5==121) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if (x6==23) {setverdict(pass);}	//value_value
+   else {setverdict(fail);}
+}
+
+testcase intRem() runs on intOper_comptype
+{ var integer x1,x2,x3,x4,x5,x6;
+  x1:=-125;
+  x2:=503;
+  x3:=x2 rem x1;
+  x4:=x2 rem 50;
+  x5:=254 rem x1;
+  x6:=102 rem -25;			// positive x
+  if (x3==3) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (x4==3) {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if (x5==4) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if (x6==2) {setverdict(pass);}	//value_value
+   else {setverdict(fail);}
+  x2:=-503;
+  x3:=x2 rem x1;
+  x4:=x2 rem 50;
+  x5:=-254 rem x1;
+  x6:=-102 rem -25;			// negative x
+  if (x3==-3) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (x4==-3) {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if (x5==-4) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if (x6==-2) {setverdict(pass);}	//value_value
+   else {setverdict(fail);}
+}
+
+/*
+testcase intShiftRight1() runs on intOper_comptype
+{ var integer x1,x2;
+  x1:=234;
+  x2:=x1 >> 1;
+  if (x2==117) {setverdict(pass);}	//variable
+     else {setverdict(fail);}
+}
+
+testcase intShiftRight2() runs on intOper_comptype
+{ var integer x1,x2;
+  x1:=234;
+  x2:=x1 >> 2;
+  if (x2==58) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase intShiftRightSum() runs on intOper_comptype
+{ var integer x1,x2;
+  x1:=234;
+  x2:=x1 >> (1+1);
+  if (x2==58) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase intShiftLeft1() runs on intOper_comptype
+{ var integer x1,x2;
+  x1:=112;
+  x2:=x1 << 1;
+  if (x2==224) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase intShiftLeft2() runs on intOper_comptype
+{ var integer x1,x2;
+  x1:=112;
+  x2:=x1 << 2;
+  if (x2==448) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase intShiftLeftSum() runs on intOper_comptype
+{ var integer x1,x2;
+  x1:=112;
+  x2:=x1 << (1+1);
+  if (x2==448) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+*/
+/*
+testcase bigIntConst() runs on bigIntOper_comptype
+{
+  connect(self:comp_port, self:comp_port)
+  timer T := 1.0
+  comp_port.send(-12345678910111213141516)
+  comp_port.send(123456789101112131415)
+  comp_port.send(-1234567891011121314)
+  comp_port.send(12345678910111213)
+  T.start
+  alt {
+    [11111111111111111111 > 0]                    comp_port.receive(-12345678910111213141516) { setverdict(pass) repeat }
+    [22222222222222222222 > 11111111111111111111] comp_port.receive(123456789101112131415)    { setverdict(pass) repeat }
+    [33333333333333333333 > 22222222222222222222] comp_port.receive(-1234567891011121314)     { setverdict(pass) repeat }
+    [44444444444444444444 > 33333333333333333333] comp_port.receive(12345678910111213)        { setverdict(pass) }
+    [] T.timeout { setverdict(fail) }
+  }
+  disconnect(self:comp_port, self:comp_port)
+}
+
+testcase bigIntVar() runs on bigIntOper_comptype
+{
+  connect(self:comp_port, self:comp_port)
+  timer T := 1.0
+  const integer ca := 0
+  const integer cb := 11111111111111111111
+  const integer cc := 22222222222222222222
+  const integer cd := 33333333333333333333
+  const integer ce := 44444444444444444444
+  var integer a := -12345678910111213141516
+  var integer b := 123456789101112131415
+  var integer c := -1234567891011121314
+  var integer d := 123456789101112131
+  comp_port.send(a)
+  comp_port.send(b)
+  comp_port.send(c)
+  comp_port.send(d)
+  T.start
+  alt {
+    [cb > ca] comp_port.receive(a) { setverdict(pass) repeat }
+    [cc > cb] comp_port.receive(b) { setverdict(pass) repeat }
+    [cd > cc] comp_port.receive(c) { setverdict(pass) repeat }
+    [ce > cd] comp_port.receive(d) { setverdict(pass) }
+    [] T.timeout { setverdict(fail) }
+  }
+  disconnect(self:comp_port, self:comp_port)
+}
+
+testcase bigIntTemplate() runs on bigIntOper_comptype
+{
+  connect(self:comp_port, self:comp_port)
+  timer T := 1.0
+  var integer a := -12345678910111213141516
+  var integer b := 123456789101112131415
+  var integer c := -11111111111111111111111
+  var integer d := 111111111111111111111
+  // No `valueof' on large integer templates.  Only values can be sent on
+  // ports due to interface problems.
+  comp_port.send(a)
+  comp_port.send(b)
+  comp_port.send(c)
+  comp_port.send(d)
+  T.start
+  alt {
+    [] comp_port.receive(tint1) { setverdict(pass) repeat }
+    [] comp_port.receive(tint2) { setverdict(pass) repeat }
+    [] comp_port.receive(tint3) { setverdict(pass) repeat }
+    [] comp_port.receive(tint4) { setverdict(pass) }
+    [] T.timeout { setverdict(fail) }
+  }
+  disconnect(self:comp_port, self:comp_port)
+}
+
+testcase bigIntVariableTemplate() runs on bigIntOper_comptype
+{
+  connect(self:comp_port, self:comp_port)
+  timer T := 1.0
+  var integer a := -12345678910111213141516
+  var integer b := 123456789101112131415
+  var integer c := -11111111111111111111111
+  var integer d := 111111111111111111111
+  var template integer vtint1 := a
+  var template integer vtint2 := b
+  var template integer vtint3 := -11111111111111111111111
+  var template integer vtint4 := 111111111111111111111
+  comp_port.send(a)
+  comp_port.send(b)
+  comp_port.send(c)
+  comp_port.send(d)
+  T.start
+  alt {
+    [] comp_port.receive(vtint1) { setverdict(pass) repeat }
+    [] comp_port.receive(vtint2) { setverdict(pass) repeat }
+    [] comp_port.receive(vtint3) { setverdict(pass) repeat }
+    [] comp_port.receive(vtint4) { setverdict(pass) }
+    [] T.timeout { setverdict(fail) }
+  }
+  disconnect(self:comp_port, self:comp_port)
+}
+
+testcase bigIntEnumerated() runs on bigIntOper_comptype
+{
+  connect(self:comp_port, self:comp_port)
+  timer T := 1.0
+  var eint1 veint1 := ec1
+  var eint1 veint2 := ec2
+  var eint1 veint3 := ec3
+  comp_port.send(veint1); T.start; comp_port.receive(veint1) { setverdict(pass) }; T.stop
+  comp_port.send(veint2); T.start; comp_port.receive(veint2) { setverdict(pass) }; T.stop
+  comp_port.send(veint3); T.start; comp_port.receive(veint3) { setverdict(pass) }; T.stop
+  disconnect(self:comp_port, self:comp_port)
+}
+
+testcase bigIntRecord() runs on bigIntOper_comptype
+{
+  connect(self:comp_port, self:comp_port)
+  timer T := 1.0
+  var rint1 vrint1 := { 12345678910111213141516, -11111111111111111111, 1234, -12345 }
+  var rint1 vrint2 := { 128, 65536, 4294967296, -4294967296 }
+  var rint1 vrint3 := { 2147483648, -2147483648, 0, -1 }
+  var rint1 vrint4 := { 4294967296, -4294967296, 4294967295, -4294967295 }
+  var rint1 vrint5 := { 4294967297, -4294967297, 2147483648, -2147483648 }
+  var rint1 vrint6 := { 2147483647, -2147483647, 2147483649, -2147483649 }
+  var rint1 vrint7 := { 260217910, -260217910, 1, -1 }
+  comp_port.send(vrint1); T.start; comp_port.receive(vrint1) { setverdict(pass) }; T.stop
+  comp_port.send(vrint2); T.start; comp_port.receive(vrint2) { setverdict(pass) }; T.stop
+  comp_port.send(vrint3); T.start; comp_port.receive(vrint3) { setverdict(pass) }; T.stop
+  comp_port.send(vrint4); T.start; comp_port.receive(vrint4) { setverdict(pass) }; T.stop
+  comp_port.send(vrint5); T.start; comp_port.receive(vrint5) { setverdict(pass) }; T.stop
+  comp_port.send(vrint6); T.start; comp_port.receive(vrint6) { setverdict(pass) }; T.stop
+  comp_port.send(vrint7); T.start; comp_port.receive(vrint7) { setverdict(pass) }; T.stop
+  disconnect(self:comp_port, self:comp_port)
+}*/
+
+testcase bigIntLogicalOps() runs on intOper_comptype
+{
+  {
+  // Only Cond2/Cond4/Cond6/Cond7/Cond10/Cond11/Cond15/Cond17/Cond18 should
+  // stay.  Test for conditional operators and CP on big integers.
+  if (12345678910111213141516 < 0)  { setverdict(fail) }  // Removed by CP.
+  if (12345678910111213141516 > 0)  { setverdict(pass) }
+  if (12345678910111213141516 == 0) { setverdict(fail) }  // Removed by CP.
+  if (12345678910111213141516 != 0) { setverdict(pass) }
+  if (12345678910111213141516 <= 0) { setverdict(fail) }  // Removed by CP.
+  if (12345678910111213141516 >= 0) { setverdict(pass) }
+  if (0 < 12345678910111213141516)  { setverdict(pass) }
+  if (0 > 12345678910111213141516)  { setverdict(fail) }  // Removed by CP.
+  if (0 == 12345678910111213141516) { setverdict(fail) }  // Removed by CP.
+  if (0 != 12345678910111213141516) { setverdict(pass) }
+  if (0 <= 12345678910111213141516) { setverdict(pass) }
+  if (0 >= 12345678910111213141516) { setverdict(fail) }  // Removed by CP.
+  if (12345678910111213141516 < 12345678910111213141516)  { setverdict(fail) }  // Removed by CP.
+  if (12345678910111213141516 > 12345678910111213141516)  { setverdict(fail) }  // Removed by CP.
+  if (12345678910111213141516 == 12345678910111213141516) { setverdict(pass) }
+  if (12345678910111213141516 != 12345678910111213141516) { setverdict(fail) }  // Removed by CP.
+  if (12345678910111213141516 <= 12345678910111213141516) { setverdict(pass) }
+  if (12345678910111213141516 >= 12345678910111213141516) { setverdict(pass) }
+  }
+  {
+  // With a constant.  Same as the previous.
+  const integer i := 0, j := 12345678910111213141516
+  if (j < i)  { setverdict(fail) }  // Removed by CP.
+  if (j > i)  { setverdict(pass) }
+  if (j == i) { setverdict(fail) }  // Removed by CP.
+  if (j != i) { setverdict(pass) }
+  if (j <= i) { setverdict(fail) }  // Removed by CP.
+  if (j >= i) { setverdict(pass) }
+  if (i < j)  { setverdict(pass) }
+  if (i > j)  { setverdict(fail) }  // Removed by CP.
+  if (i == j) { setverdict(fail) }  // Removed by CP.
+  if (i != j) { setverdict(pass) }
+  if (i <= j) { setverdict(pass) }
+  if (i >= j) { setverdict(fail) }  // Removed by CP.
+  if (j < j)  { setverdict(fail) }  // Removed by CP.
+  if (j > j)  { setverdict(fail) }  // Removed by CP.
+  if (j == j) { setverdict(pass) }
+  if (j != j) { setverdict(fail) }  // Removed by CP.
+  if (j <= j) { setverdict(pass) }
+  if (j >= j) { setverdict(pass) }
+  }
+  {
+  // With variable operands.  No CP.
+  var integer i := 0, j := 12345678910111213141516, result := 0
+  if (12345678910111213141516 < i)  { result := result + 1 }
+  if (12345678910111213141516 > i)  { result := result + 1 }
+  if (12345678910111213141516 == i) { result := result + 1 }
+  if (12345678910111213141516 != i) { result := result + 1 }
+  if (12345678910111213141516 <= i) { result := result + 1 }
+  if (12345678910111213141516 >= i) { result := result + 1 }
+  if (i < 12345678910111213141516)  { result := result + 1 }
+  if (i > 12345678910111213141516)  { result := result + 1 }
+  if (i == 12345678910111213141516) { result := result + 1 }
+  if (i != 12345678910111213141516) { result := result + 1 }
+  if (i <= 12345678910111213141516) { result := result + 1 }
+  if (i >= 12345678910111213141516) { result := result + 1 }
+  if (12345678910111213141516 < j)  { result := result + 1 }
+  if (j > 12345678910111213141516)  { result := result + 1 }
+  if (12345678910111213141516 == j) { result := result + 1 }
+  if (j != 12345678910111213141516) { result := result + 1 }
+  if (12345678910111213141516 <= j) { result := result + 1 }
+  if (j >= 12345678910111213141516) { result := result + 1 }
+  if (result == 9) { setverdict(pass) }  // Number of branches executed.
+  else { setverdict(fail) }
+  }
+}
+
+testcase bigIntBasicArithmetic() runs on intOper_comptype
+{
+  {
+  // Basic tests for add/subtract/multiply/divide/mod/rem.  Constant literals
+  // at first.  These are all handled by CP.
+  if (100000000000000000000 + 100000000000000000000 == 200000000000000000000) { setverdict(pass) } else { setverdict(fail, "1") }
+  if (100000000000000000000 + 0 == 100000000000000000000)   { setverdict(pass) } else { setverdict(fail, "2") }
+  if (0 + 100000000000000000000 == 100000000000000000000)   { setverdict(pass) } else { setverdict(fail, "3") }
+  if (100000000000000000000 - 100000000000000000000 == 0)   { setverdict(pass) } else { setverdict(fail, "4") }
+  if (100000000000000000000 - 0 == 100000000000000000000)   { setverdict(pass) } else { setverdict(fail, "5") }
+  if (0 - 100000000000000000000 == -100000000000000000000)  { setverdict(pass) } else { setverdict(fail, "6") }
+  if (100000000000000000000 * 100000000000000000000 == 10000000000000000000000000000000000000000)   { setverdict(pass) } else { setverdict(fail, "7") }
+  if (-100000000000000000000 * 100000000000000000000 == -10000000000000000000000000000000000000000) { setverdict(pass) } else { setverdict(fail, "7") }
+  if (-100000000000000000000 * -100000000000000000000 == 10000000000000000000000000000000000000000) { setverdict(pass) } else { setverdict(fail, "") }
+  if (100000000000000000000 * 0 == 0)                       { setverdict(pass) } else { setverdict(fail) }
+  if (0 * 100000000000000000000 == 0)                       { setverdict(pass) } else { setverdict(fail) }
+  if (100000000000000000000 / 100000000000000000000 == 1)   { setverdict(pass) } else { setverdict(fail) }
+  if (0 / 100000000000000000000 == 0)                       { setverdict(pass) } else { setverdict(fail) }
+  if (100000000000000000000 mod 100000000000000000000 == 0) { setverdict(pass) } else { setverdict(fail) }  // Same as rem.
+  if (0 mod 100000000000000000000 == 0)                     { setverdict(pass) } else { setverdict(fail) }
+  if (100000000000000000000 rem 100000000000000000000 == 0) { setverdict(pass) } else { setverdict(fail) }
+  if (0 rem 100000000000000000000 == 0)                     { setverdict(pass) } else { setverdict(fail) }
+  }
+  {
+  // Same as before with constants.
+  const integer i := 0, j := 100000000000000000000, k := 1
+  if (j + j == 200000000000000000000) { setverdict(pass) } else { setverdict(fail) }
+  if (j + i == j)   { setverdict(pass) } else { setverdict(fail) }
+  if (i + j == j)   { setverdict(pass) } else { setverdict(fail) }
+  if (j - j == i)   { setverdict(pass) } else { setverdict(fail) }
+  if (j - i == j)   { setverdict(pass) } else { setverdict(fail) }
+  if (i - j == -j)  { setverdict(pass) } else { setverdict(fail) }
+  if (j * j == 10000000000000000000000000000000000000000) { setverdict(pass) } else { setverdict(fail) }  // Ugly.
+  if (j * i == i)   { setverdict(pass) } else { setverdict(fail) }
+  if (i * j == i)   { setverdict(pass) } else { setverdict(fail) }
+  if (k * j == j)   { setverdict(pass) } else { setverdict(fail) }
+  if (k * -j == -j) { setverdict(pass) } else { setverdict(fail) }
+  if (-k * j == -j) { setverdict(pass) } else { setverdict(fail) }
+  if (-k * -j == j) { setverdict(pass) } else { setverdict(fail) }
+  if (j / j == 1)   { setverdict(pass) } else { setverdict(fail) }
+  if (i / j == i)   { setverdict(pass) } else { setverdict(fail) }
+  if (j mod j == i) { setverdict(pass) } else { setverdict(fail) }  // Same as rem.
+  if (i mod j == i) { setverdict(pass) } else { setverdict(fail) }
+  if (j rem j == i) { setverdict(pass) } else { setverdict(fail) }
+  if (i rem j == i) { setverdict(pass) } else { setverdict(fail) }
+  }
+  {
+  // With variables and constants mixed.  No CP.
+  var integer i := 0, j := 100000000000000000000, k := 1
+  if (100000000000000000000 + j == 200000000000000000000) { setverdict(pass) } else { setverdict(fail) }
+  if (j + i == 100000000000000000000)   { setverdict(pass) } else { setverdict(fail) }
+  if (i + 100000000000000000000 == j)   { setverdict(pass) } else { setverdict(fail) }
+  if (100000000000000000000 - j == 0)   { setverdict(pass) } else { setverdict(fail) }
+  if (j - i == 100000000000000000000)   { setverdict(pass) } else { setverdict(fail) }
+  if (i - 100000000000000000000 == -j)  { setverdict(pass) } else { setverdict(fail) }
+  if (100000000000000000000 * j == 10000000000000000000000000000000000000000)   { setverdict(pass) } else { setverdict(fail) }
+  if (100000000000000000000 * -j == -10000000000000000000000000000000000000000) { setverdict(pass) } else { setverdict(fail) }
+  if (-100000000000000000000 * j == -10000000000000000000000000000000000000000) { setverdict(pass) } else { setverdict(fail) }
+  if (j * 100000000000000000000 == 10000000000000000000000000000000000000000)   { setverdict(pass) } else { setverdict(fail) }
+  if (-j * 100000000000000000000 == -10000000000000000000000000000000000000000) { setverdict(pass) } else { setverdict(fail) }
+  if (j * -100000000000000000000 == -10000000000000000000000000000000000000000) { setverdict(pass) } else { setverdict(fail) }
+  if (i * 100000000000000000000 == 0)   { setverdict(pass) } else { setverdict(fail) }
+  if (j / 100000000000000000000 == k)   { setverdict(pass) } else { setverdict(fail) }
+  if (i / 100000000000000000000 == 0)   { setverdict(pass) } else { setverdict(fail) }
+  if (j mod 100000000000000000000 == i) { setverdict(pass) } else { setverdict(fail) }  // Same as rem.
+  if (i mod 100000000000000000001 == 0) { setverdict(pass) } else { setverdict(fail) }
+  if (100000000000000000000 rem j == i) { setverdict(pass) } else { setverdict(fail) }
+  if (i rem 100000000000000000000 == 0) { setverdict(pass) } else { setverdict(fail) }
+  }
+  {
+  var integer i := 4294967295, j := -4294967295, k := 2147483647, l := -2147483647
+  if ((i + i) / 4294967295 == 2)  { setverdict(pass) } else { setverdict(fail) }
+  if ((j + j) / -4294967295 == 2) { setverdict(pass) } else { setverdict(fail) }
+  if ((k + k) / 2147483647 == 2)  { setverdict(pass) } else { setverdict(fail) }
+  if ((l + l) / -2147483647 == 2) { setverdict(pass) } else { setverdict(fail) }
+  }
+  {
+  var integer i := -100000000000000000000, j := -100000000000000000000, k := i + j
+  const integer l := -100000000000000000000, m := -100000000000000000000, o := l + m
+  if (i + j == -200000000000000000000) { setverdict(pass) } else { setverdict(fail) }
+  if (k == -200000000000000000000)     { setverdict(pass) } else { setverdict(fail) }
+  if (-100000000000000000000 + -100000000000000000000 == k) { setverdict(pass) } else { setverdict(fail) }
+  if (-100000000000000000000 + -100000000000000000000 == o) { setverdict(pass) } else { setverdict(fail) }
+  if (-100000000000000000000 + -100000000000000000000 == -200000000000000000000) { setverdict(pass) } else { setverdict(fail) }
+  if (l + m == -200000000000000000000) { setverdict(pass) } else { setverdict(fail) }
+  if (o == -200000000000000000000)     { setverdict(pass) } else { setverdict(fail) }
+  }
+}
+
+//template rint1 myrint1 := { f1 := 260217910,  f2 := 1234567891011121314151617181920, f3 := 0, f4 := -260217910 }
+//template rint1 myrint2 := { f1 := 2147483648, f2 := -2147483648, f3 := 0, f4 := -1 }
+//template rint1 myrint3 := { 4294967296, -4294967296, 4294967295, -4294967295 }
+//template rint1 myrint4 := { 4294967297, -4294967297, 2147483648, -2147483648 }
+/*
+testcase bigIntTemplateSendRecv() runs on bigIntOper_comptype
+{
+  // Implicit `valueof' on sending with implicit matching.
+  connect(self:comp_port, self:comp_port)
+  timer T := 1.0
+  comp_port.send(myrint1); T.start; comp_port.receive(myrint1) { setverdict(pass) }; T.stop
+  comp_port.send(myrint2); T.start; comp_port.receive(myrint2) { setverdict(pass) }; T.stop
+  comp_port.send(myrint3); T.start; comp_port.receive(myrint3) { setverdict(pass) }; T.stop
+  comp_port.send(myrint4); T.start; comp_port.receive(myrint4) { setverdict(pass) }; T.stop
+  disconnect(self:comp_port, self:comp_port)
+}*/
+
+// For testing operator-() in compile-time/run-time on boundaries.
+testcase bigIntOnTheEdge() runs on intOper_comptype
+{
+  const integer LLONG_MIN := -9223372036854775808
+  const integer LLONG_MAX := 9223372036854775807
+  const integer INT_MIN := -2147483648
+  const integer INT_MAX := 2147483647
+  var integer llong_min_v := LLONG_MIN
+  var integer llong_max_v := LLONG_MAX
+  var integer int_min_v := INT_MIN
+  var integer int_max_v := INT_MAX
+  // Compile-time.
+  if (-LLONG_MIN == 9223372036854775808)  { setverdict(pass) } else { setverdict(fail, "1") }
+  if (-LLONG_MAX == -9223372036854775807) { setverdict(pass) } else { setverdict(fail, "2") }
+  if (-LLONG_MIN == LLONG_MAX + 1) { setverdict(pass) } else { setverdict(fail, "3") }
+  if (-LLONG_MAX == LLONG_MIN + 1) { setverdict(pass) } else { setverdict(fail, "4") }
+  if (-INT_MIN == 2147483648)  { setverdict(pass) } else { setverdict(fail, "5") }
+  if (-INT_MAX == -2147483647) { setverdict(pass) } else { setverdict(fail, "6") }
+  if (-INT_MIN == INT_MAX + 1) { setverdict(pass) } else { setverdict(fail, "7") }
+  if (-INT_MAX == INT_MIN + 1) { setverdict(pass) } else { setverdict(fail, "8") }
+  if (9223372036854775808 - 1 == LLONG_MAX) { setverdict(pass) } else { setverdict(fail, "9") }
+  if (-LLONG_MIN - 1 == LLONG_MAX) { setverdict(pass) } else { setverdict(fail, "10") }
+  // Run-time.
+  if (-llong_min_v == 9223372036854775808)  { setverdict(pass) } else { setverdict(fail, "11") }
+  if (-llong_max_v == -9223372036854775807) { setverdict(pass) } else { setverdict(fail, "12") }
+  if (-llong_min_v == llong_max_v + 1) { setverdict(pass) } else { setverdict(fail, "13") }
+  if (-llong_max_v == llong_min_v + 1) { setverdict(pass) } else { setverdict(fail, "14") }
+  if (-int_min_v == 2147483648)  { setverdict(pass) } else { setverdict(fail, "15") }
+  if (-int_max_v == -2147483647) { setverdict(pass) } else { setverdict(fail, "16") }
+  if (-int_min_v == int_max_v + 1) { setverdict(pass) } else { setverdict(fail, "17") }
+  if (-int_max_v == int_min_v + 1) { setverdict(pass) } else { setverdict(fail, "18") }
+  if (2147483648 - 1 == int_max_v) { setverdict(pass) } else { setverdict(fail, "19") }
+  if (-int_min_v - 1 == int_max_v) { setverdict(pass) } else { setverdict(fail, "20") }
+}
+
+//external function MyConverter() return boolean
+//
+//testcase bigIntLongLong() runs on intOper_comptype
+//{
+//  if (MyConverter()) { setverdict(pass) } else { setverdict(fail) }
+//}
+
+type component intOperSubtypes_comptype { }
+
+type integer myi1
+type integer myi2 (1, 2, 3)
+type integer myi3 (-infinity..0)
+type integer myi4 (-infinity..infinity)
+type integer myi5 (-infinity..infinity, 0, 1, 2, 3)
+type myi5 myi6
+type integer myi7 (2147483648, 4294967296, 8589934592)
+type integer myi8 (2147483648..8589934592)
+type integer myi9 (1, 2..c_myi1 + 3)
+type integer myi10 (1, str2int(log2str(valueof(t_myi1))) + 1, 3)
+type integer myi11 (-1, -0, 1)
+type integer myi12 (myi2, myi3)
+type myi12 myi13 (myi2)
+type myi4 myi14 (0..infinity)
+
+const myi1 c_myi1 := 1
+const myi2 c_myi2 := 1
+const myi3 c_myi3 := 0
+const myi4 c_myi4 := c_myi3
+const myi5 c_myi5 := c_myi4
+const myi6 c_myi6 := c_myi5
+const myi7 c_myi7 := 4294967296
+const myi8 c_myi8 := c_myi7
+const myi9 c_myi9 := 4
+const myi10 c_myi10 := c_myi1
+const myi12 c_myi11 := 0
+const myi13 c_myi12 := 1
+template myi1 t_myi1 := 1
+template myi2 t_myi2 := 1
+template myi3 t_myi3 := 0
+template myi4 t_myi4 := t_myi3
+template myi5 t_myi5 := t_myi4
+template myi6 t_myi6 := t_myi5
+template myi7 t_myi7 := 4294967296
+template myi8 t_myi8 := t_myi7
+template myi12 t_myi9 := 0
+template myi13 t_myi10 := 1
+
+function f_i1() return boolean {
+  var myi9 v_myi1 := 4
+  var myi10 v_myi2 := v_myi1
+  var template myi9 vt_myi1 := 4
+  var template myi10 vt_myi2 := vt_myi1
+  if (v_myi1 == valueof(vt_myi1) and valueof(vt_myi1) == c_myi1 and
+      v_myi2 == valueof(vt_myi2) and valueof(vt_myi2) == c_myi2) { return true }
+  else { return false }
+}
+
+testcase intSubtypes() runs on intOperSubtypes_comptype
+{
+  if (c_myi1 == c_myi2 and valueof(t_myi1) == valueof(t_myi2)) { setverdict(pass) }
+  else { setverdict(fail) }
+  var template myi1 vt_myi1 := 1
+  var template myi2 vt_myi2 := 1
+  var myi1 v_myi1 := 1
+  var myi2 v_myi2 := 1
+  if (v_myi1 == v_myi2 and valueof(vt_myi1) == valueof(vt_myi2)) { setverdict(pass) }
+  else { setverdict(fail) }
+  if (c_myi3 == c_myi4 and c_myi4 == c_myi5 and c_myi5 == c_myi6 and
+      valueof(t_myi3) == valueof(t_myi4) and valueof(t_myi4) == valueof(t_myi5) and
+      valueof(t_myi5) == valueof(t_myi6)) { setverdict(pass) }
+  else { setverdict(fail) }
+  var template myi3 vt_myi3 := 0
+  var template myi4 vt_myi4 := vt_myi3
+  var template myi5 vt_myi5 := vt_myi4
+  var template myi6 vt_myi6 := vt_myi5
+  var myi3 v_myi3 := 0
+  var myi4 v_myi4 := v_myi3
+  var myi5 v_myi5 := v_myi4
+  var myi6 v_myi6 := v_myi5
+  if (v_myi3 == v_myi4 and v_myi4 == v_myi5 and v_myi5 == v_myi6 and
+      valueof(vt_myi3) == valueof(vt_myi4) and valueof(vt_myi4) == valueof(vt_myi5) and
+      valueof(vt_myi5) == valueof(vt_myi6)) { setverdict(pass) }
+  else { setverdict(fail) }
+  if (c_myi7 == c_myi8 and valueof(t_myi7) == valueof(t_myi8)) { setverdict(pass) }
+  else { setverdict(fail) }
+  var template myi7 vt_myi7 := 4294967296
+  var template myi8 vt_myi8 := vt_myi7
+  var myi7 v_myi7 := 4294967296
+  var myi8 v_myi8 := v_myi7
+  if (v_myi7 == v_myi8 and valueof(vt_myi7) == valueof(vt_myi8)) { setverdict(pass) }
+  else { setverdict(fail) }
+}
+
+testcase intIsvalue() runs on intOper_comptype
+{
+  var integer i0, i1 := 1;
+  var template integer one_int := (13);
+  var template integer two_ints := (1,2);
+
+  if ( isvalue(i0) ) { setverdict(fail, "1"); } else { setverdict(pass); };
+  if ( isvalue(i1) ) { setverdict(pass); } else { setverdict(fail, "2"); };
+  if ( isvalue(TintOper_const1) ) { setverdict(pass); } else { setverdict(fail, "3"); };
+  if ( isvalue(one_int) ) { setverdict(pass); } else { setverdict(fail, "4"); };
+  if ( isvalue(two_ints) ) { setverdict(fail, "5"); } else { setverdict(pass); };
+
+  if ( isvalue(par_unbound) ) { setverdict(fail, "6"); } else { setverdict(pass); };
+  if ( isvalue(par_bound) ) { setverdict(pass); } else { setverdict(fail, "7"); };
+
+  if ( isvalue(i1 + 1) ) { setverdict(pass); } else { setverdict(fail, "8"); };
+}
+
+testcase intIsbound() runs on intOper_comptype
+{
+  var integer i0, i1 := 1;
+  var template integer one_int := (13);
+  var template integer two_ints := (1,2);
+
+  if ( isbound(i0) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isbound(i1) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isbound(TintOper_const1) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isbound(one_int) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isbound(two_ints) ) { setverdict(pass); } else { setverdict(fail); };
+
+  if ( isbound(par_unbound) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isbound(par_bound) ) { setverdict(pass); } else { setverdict(fail); };
+
+  if ( isbound(i1 + 1) ) { setverdict(pass); } else { setverdict(fail); };
+}
+
+testcase HO29687() runs on intOper_comptype {
+  log(log2str(integer:1));
+  setverdict(pass);
+}
+
+testcase HO29695() runs on intOper_comptype {
+  log(valueof(integer:1));
+  setverdict(pass);
+}
+
+testcase tc_simple_integer() runs on intOper_comptype {
+  var integer vl_i;
+  if(isbound(vl_i)){setverdict(fail)} else {setverdict(pass)}
+  vl_i:=5;
+  if(isbound(vl_i)) {setverdict(pass)} else {setverdict(fail)}
+
+  var template integer vtl_i :=*;
+  if(isbound( vtl_i )) {setverdict(pass)}else {setverdict(fail)};
+  vtl_i:=5;
+  if(isbound( vtl_i )) {setverdict(pass)}else {setverdict(fail)};
+}
+
+template integer t_i(integer i, integer j) :=i+j;
+
+testcase tc_runtimeExprEval() runs on intOper_comptype {
+  var template integer vt_i:= t_i(1,2);
+  var integer vl_i:=1, vl_j:=0;
+  if(isbound(vt_i)) {setverdict(pass)} else {setverdict(fail)};
+  if(isbound(t_i(1,2))) {setverdict(pass)} else {setverdict(fail)};
+  if(isbound(t_i(1,2*vl_i))) {setverdict(pass)} else {setverdict(fail)};
+  //if(isbound(t_i(1,2/vl_j))) {setverdict(pass)} else {setverdict(fail)}; //DTE
+}
+
+  testcase tc_simple_integer_unbound() runs on intOper_comptype {
+    var integer vl_i;
+    if(ispresent(vl_i)){setverdict(fail)} else {setverdict(pass)} //fail
+  }
+
+  testcase tc_simple_integer_value() runs on intOper_comptype {
+    var integer vl_i:=5;
+    if(ispresent(vl_i)) {setverdict(pass)} else {setverdict(fail)} //pass,  
+  }
+
+  testcase tc_simple_integer_templ_asterix() runs on intOper_comptype {
+    var template integer vtl_i :=*;
+    if(ispresent( vtl_i )) {setverdict(fail)}else {setverdict(pass)}; 
+  }
+
+  testcase tc_simple_integer_templ_qm() runs on intOper_comptype {
+    var template integer vtl_i :=?;
+    if(ispresent( vtl_i )) {setverdict(pass)}else {setverdict(fail)}; 
+  }
+
+  testcase tc_simple_integer_templ_value() runs on intOper_comptype {
+    var template integer vtl_i:=5;
+    if(ispresent( vtl_i )) {setverdict(pass)}else {setverdict(fail)}; 
+  }
+
+  testcase tc_runtimeExprEval_ispresent() runs on intOper_comptype {
+    var template integer vt_i:= t_i(1,2);
+    var integer vl_i:=1, vl_j:=0;
+    if(ispresent(vt_i)) {setverdict(pass)} else {setverdict(fail)};
+    if(ispresent(t_i(1,2))) {setverdict(pass)} else {setverdict(fail)};
+    if(ispresent(t_i(1,2*vl_i))) {setverdict(pass)} else {setverdict(fail)};
+    //if(ispresent(t_i(1,2/vl_j))) {setverdict(pass)} else {setverdict(fail)}; //DTE
+  }
+
+control {
+  log("executing TintOper");
+  const integer cl_1:=2;
+  var integer vl_1;
+
+  execute(intAssign());
+  execute(intConst());
+  execute(intCompEq());
+  execute(intCompNotEq());
+  execute(intCompLess());
+  execute(intCompLessEq());
+  execute(intCompGreat());
+  execute(intCompGreatEq());
+  execute(intAdd());
+  execute(intSubs());
+  execute(intMultipl());
+  execute(intDiv());
+  execute(intMod());
+  execute(intRem());
+  execute(intSubtypes());
+  /*
+  execute(intShiftRight1());
+  execute(intShiftRight2());
+  execute(intShiftRightSum());
+  execute(intShiftLeft1());
+  execute(intShiftLeft2());
+  execute(intShiftLeftSum());
+  */
+  /*execute(bigIntConst());
+  execute(bigIntVar());
+  execute(bigIntTemplate());
+  execute(bigIntVariableTemplate());
+  execute(bigIntEnumerated());
+  execute(bigIntRecord());*/
+  execute(bigIntLogicalOps());
+  execute(bigIntBasicArithmetic());
+  //execute(bigIntTemplateSendRecv());
+  execute(bigIntOnTheEdge());
+  //execute(bigIntLongLong());
+
+  execute(intIsvalue());
+  execute(intIsbound());
+
+  execute(HO29687());
+  execute(HO29695());
+  
+  execute(tc_simple_integer());
+  execute(tc_runtimeExprEval());
+  execute(tc_simple_integer_unbound());
+  execute(tc_simple_integer_value());
+  execute(tc_simple_integer_templ_asterix());
+  execute(tc_simple_integer_templ_qm());
+  execute(tc_simple_integer_templ_value());
+  execute(tc_runtimeExprEval_ispresent());
+}
+
+}
diff --git a/Regression_Test_java/src/TlostTimer.ttcn b/Regression_Test_java/src/TlostTimer.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..ce14815b4b965777b42b00126fe48994725c4755
--- /dev/null
+++ b/Regression_Test_java/src/TlostTimer.ttcn
@@ -0,0 +1,52 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Szabados, Kristof
+ *   Szabo, Janos Zoltan – initial implementation
+ *
+ ******************************************************************************/
+module TlostTimer {
+
+type component CT {
+  timer T1 := 1.0, T2 := 2.0;
+}
+
+testcase tc1() runs on CT
+{
+  T1.start;
+  T2.start;
+  T2.timeout;
+  if (T1.read != 0.0) { setverdict(fail); }
+  if (T1.running) { setverdict(fail); }
+  alt {
+    [] any timer.timeout { setverdict(pass); }
+    [else] { setverdict(fail); }
+  }
+}
+
+testcase tc2() runs on CT
+{
+  T1.start;
+  T2.start;
+  T2.timeout;
+  if (T1.running) { setverdict(fail); }
+  all timer.stop;
+  alt {
+    [] T1.timeout { setverdict(fail); }
+    [] any timer.timeout { setverdict(fail); }
+    [else] { setverdict(pass); }
+  }
+}
+
+control {
+  execute(tc1());
+  execute(tc2());
+}
+
+}
diff --git a/Regression_Test_java/src/TobjidOper.ttcn b/Regression_Test_java/src/TobjidOper.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..d313a4f51483e8362428ac3c3b2eb29c65813beb
--- /dev/null
+++ b/Regression_Test_java/src/TobjidOper.ttcn
@@ -0,0 +1,266 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Baranyi, Botond
+ *   Kovacs, Ferenc
+ *   Raduly, Csaba
+ *   Szabados, Kristof
+ *
+ ******************************************************************************/
+module TobjidOper {
+
+type component objidOper_comptype { }
+
+//external function enco(in objid oi) return octetstring
+//with { extension "prototype(convert) encode(BER:BER_ENCODE_DER)" }
+//
+//external function deco(in octetstring oi) return objid
+//with { extension "prototype(convert) decode(BER:BER_ACCEPT_ALL)" }
+
+type objid typedefbasic_myobjid;
+type objid MyObjids0 (objid{itu_t(0) identified_organization(4) etsi(0)})
+type objid MyObjids1 (objid{itu_t identified_organization etsi(0)})
+type objid MyObjids2 (objid{0 4 0})
+const integer c_etsi := 0
+template integer t_etsi := 0
+const objid itu_idOrg := objid{itu_t identified_organization}
+const objid c_etsiMobNet := objid{itu_t identified_organization etsi(0) mobile_domain(0) umts_Network(1)}
+const objid c_etsiNet := objid{itu_t identified_organization etsi(0) inDomain(1) in_Network(1)}
+type objid MyObjids3 (objid{itu_idOrg c_etsi})
+type objid MyObjids4 (objid{0 4 0 0}, objid{0 4 0 1})
+type MyObjids4 MyObjids5
+template MyObjids4 t_myobjids1 := objid{0 4 0 0}
+// These should be allowed as well:
+// type MyObjids MyNarrowerObjids (objid{0 4 0 0 1 0}, objid{0 4 1 1}, objid{0 4 1 3})
+// type objid MyObjidRange (objid{0 4 0 0}..objid{0 4 0 5})
+// But concatenation of object identifier doesn't seem to work at all...
+
+// Lots of '1' bits
+const objid c_bits := objid {
+  0
+
+  1
+  3
+  7
+  15
+  31
+  63
+  127
+  255
+
+  511
+  1023
+  2047
+  4095
+  8191
+  16383
+  32767
+  65535
+
+  131071
+  262143
+  524287
+  1048575
+  2097151
+  4194303
+  8388607
+  16777215
+
+  33554431
+  67108863
+  134217727
+  268435455
+  536870911
+  1073741823
+  2147483647
+  4294967295
+//  4294967296 is too big
+//  8589934592
+};
+
+// Powers of two
+const objid c_pow2 := objid {
+  1
+  2
+  4
+  8
+  16
+  32
+  64
+  128
+  256
+
+  512
+  1024
+  2048
+  4096
+  8192
+  16384
+  32768
+  65536
+
+  131072
+  262144
+  524288
+  1048576
+  2097152
+  4194304
+  8388608
+  16777216
+
+  33554432
+  67108864
+  134217728
+  268435456
+  536870912
+  1073741824
+  2147483648
+
+//  4294967296 is too big
+//  8589934592
+};
+
+const objid c_0_1_infinity // for small values of infinity
+   := objid { 0 1 4294967295 }
+
+const octetstring expected := '0606018FFFFFFF7F'O
+
+// encoding of { 0 1 70368744177663 } a.k.a. { 0 1 0x3FFFFFFFFFFF }
+const octetstring bigger  := '0608018FFFFFFFFFFF7F'O
+
+
+testcase objidSubtypes() runs on objidOper_comptype {
+  if (c_etsiMobNet != c_etsiNet) { setverdict(pass) }
+  else { setverdict(fail) }
+}
+
+//external function indexer(in objid o, in integer idx) return integer;
+
+//testcase encdec() runs on objidOper_comptype
+//{
+//  var octetstring os := enco(c_0_1_infinity);
+//  //action(os);
+//  if (os == expected) { setverdict(pass); }
+//  else { setverdict(fail, match(os, expected)); }
+//
+//  var objid oi := deco(expected);
+//  //action(oi);
+//  if (oi == c_0_1_infinity) { setverdict(pass); }
+//  else { setverdict(fail, match(oi, c_0_1_infinity)); }
+//
+//  // Decode the bigger objid. The value will overflow and it will be clamped
+//  // to 2**32-1 (4294967295) as long as objid is limited to 32bits.
+//  oi := deco(bigger);
+//  action(oi);
+//
+//  if (sizeof(oi) != sizeof(c_0_1_infinity)) {
+//    setverdict(fail, "Number of objid components: ",
+//      match(sizeof(oi), sizeof(c_0_1_infinity)))
+//  }
+//  else {
+//    // All components should look equal
+//    for (var integer i := 0; i < sizeof(oi); i := i + 1) {
+//      if (indexer(oi, i) == indexer(c_0_1_infinity, i)) { /*setverdict(pass);*/ }
+//      else {
+//        setverdict(fail, "Mismatch at ", i, ": ",
+//          match(indexer(oi, i), indexer(c_0_1_infinity, i)));
+//      }
+//    }
+//  }
+//  
+//  // However, the (decoded) oi has an overflow whereas c_0_1_infinity does not,
+//  // therefore they (should) compare as not equal.
+//  if (oi != c_0_1_infinity) { setverdict(pass, match(oi, c_0_1_infinity)); }
+//  else { setverdict(fail, match(oi, c_0_1_infinity)); }
+//
+//  os := enco(c_bits);
+//  oi := deco(os);
+//
+//  if (sizeof(oi) != sizeof(c_bits)) {
+//    setverdict(fail, "Number of objid components: ",
+//      match(sizeof(oi), sizeof(c_bits)))
+//  }
+//  else {
+//    // All components should look equal
+//    for (var integer i := 0; i < sizeof(oi); i := i + 1) {
+//      if (indexer(oi, i) == indexer(c_bits, i)) { /*setverdict(pass);*/ }
+//      else {
+//        setverdict(fail, "Mismatch at ", i, ": ",
+//          match(indexer(oi, i), indexer(c_bits, i)));
+//      }
+//    }
+//  }
+//
+//  os := enco(c_pow2);
+//  oi := deco(os);
+//
+//  if (sizeof(oi) != sizeof(c_pow2)) {
+//    setverdict(fail, "Number of objid components: ",
+//      match(sizeof(oi), sizeof(c_pow2)))
+//  }
+//  else {
+//    // All components should look equal
+//    for (var integer i := 0; i < sizeof(oi); i := i + 1) {
+//      if (indexer(oi, i) == indexer(c_pow2, i)) { /*setverdict(pass);*/ }
+//      else {
+//        setverdict(fail, "Mismatch at ", i, ": ",
+//          match(indexer(oi, i), indexer(c_pow2, i)));
+//      }
+//    }
+//  }
+//  
+//}
+
+testcase objidWithVars() runs on objidOper_comptype
+{
+  var integer v1 := 1;
+  var integer v2 := 20;
+  var integer v3 := 300;
+  var integer v4 := -87;
+  const integer c1 := 0;
+  var objid o1 := objid { c1 v1 };
+
+  if (o1 == objid { 0 1 }) { setverdict(pass); }
+  else { setverdict(fail, o1, " != ", objid { 0 1 }); }
+
+  if (objid { c1 3 v2 } == objid { 0 3 20 }) { setverdict(pass); }
+  else { setverdict(fail, objid { c1 3 v2 }, " != ", objid { 0 3 20 }); }
+
+  if (objid { c1 2 3 } == objid { 0 2 3 }) { setverdict(pass); }
+  else { setverdict(fail, objid { c1 2 3 }, " != ", objid { 0 2 3 }); }
+
+  var objid o2 := objid { 0 v1 };
+  if (o1 == o2) { setverdict(pass); }
+  else { setverdict(fail, o1, " != ", o2); }
+
+//  @try {
+//    var objid o_bad := objid { v1 v2 v3 v4 };
+//    setverdict(fail, "error expected when creating ", objid { v1 v2 v3 v4 });
+//  }
+//  @catch (msg) {
+//    if (match(msg, pattern "*Dynamic test case error: An OBJECT IDENTIFIER component cannot be negative")) { setverdict(pass); }
+//    else { setverdict(fail, "unexpected error: ", msg); }
+//  }
+
+  var template objid to1 := (objid { 0 1 6 }, objid { v1 6 v3 });
+
+  if (match(objid { 1 6 v3 }, to1)) { setverdict(pass); }
+  else { setverdict(fail, objid { 1 6 v3 }, " doesn't match ", to1); }
+
+  if (match(objid { 1 2 3 }, to1)) { setverdict(fail, objid { 1 2 3 }, " matches ", to1); }
+  else { setverdict(pass); }
+}
+
+control {
+  execute(objidSubtypes());
+//  execute(encdec());
+  execute(objidWithVars());
+}
+
+}
diff --git a/Regression_Test_java/src/ToctetstrOper.ttcn b/Regression_Test_java/src/ToctetstrOper.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..0ad60ed3d90c204ef7468b070f11f65580617f8b
--- /dev/null
+++ b/Regression_Test_java/src/ToctetstrOper.ttcn
@@ -0,0 +1,568 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Kovacs, Ferenc
+ *   Raduly, Csaba
+ *   Szabados, Kristof
+ *   Szabo, Janos Zoltan – initial implementation
+ *
+ ******************************************************************************/
+module ToctetstrOper
+{type component octetstrOper_comptype { };
+const octetstring ToctetstrOper_const1:='AA11'O;
+
+testcase octetstrAssign() runs on octetstrOper_comptype
+{ var octetstring x1:='0BF2'O;
+  var octetstring x2,x3,x4;
+  x4:='AA'O;
+  x2:='AB54'O;
+  x3:=''O;
+  x4:='AABB'O;
+  if (x1=='0BF2'O) {setverdict(pass);}	//at declaration
+     else {setverdict(fail);}
+  if (x2=='AB54'O) {setverdict(pass);}	//later
+     else {setverdict(fail);}
+  if (x3==''O) {setverdict(pass);}	//empty string
+     else {setverdict(fail);}
+  if (x4=='AABB'O) {setverdict(pass);}	//with different size
+     else {setverdict(fail);}
+}
+
+testcase octetstrAssignElem() runs on octetstrOper_comptype
+{ var octetstring x1,x2,x3,x4,x5,x6,x7;
+  x1:='AAAAAA'O;
+  x4:='777777'O;
+  x2:='BBBBBB'O;
+  x5:='AABBCC'O;
+  x6:='AABBCC'O;
+  x3:='66'O;
+  x3:=x5[1];
+  x1[1]:='0C'O;
+  x4[1]:=x2[2];
+  x7:='66'O;
+  x5[0]:=x7;
+  x6[3]:='DD'O;
+  if (x6[0]=='AA'O) {setverdict(pass);}	//accessing of an element
+   else {setverdict(fail);}
+  if (x3=='BB'O) {setverdict(pass);}		//change string to element
+   else {setverdict(fail);}
+  if (x1=='AA0CAA'O) {setverdict(pass);}	//change element to value
+   else {setverdict(fail);}
+  if (x4=='77BB77'O) {setverdict(pass);}	//change element to element
+   else {setverdict(fail);}
+  if (x5=='66BBCC'O) {setverdict(pass);}	//change element to string
+   else {setverdict(fail);}
+  if (x6=='AABBCCDD'O) {setverdict(pass);}	//adding element
+   else {setverdict(fail);}
+}
+
+testcase octetstrLengthof() runs on octetstrOper_comptype
+{ var octetstring x1:='AABB'O;
+  var octetstring x2,x3,x4,x5;
+  x2:='AABB'O;
+  x4:='AA'O;
+  x5:='AABB'O;
+  x3:=''O;
+  x4:='AABB'O;
+  x5[2]:='CC'O;
+  if (lengthof(x1)==2) {setverdict(pass);}	//at declaration
+     else {setverdict(fail);}
+  if (lengthof(x2)==2) {setverdict(pass);}	//later
+     else {setverdict(fail);}
+  if (lengthof(x3)==0) {setverdict(pass);}	//empty string
+     else {setverdict(fail);}
+  if (lengthof(x4)==2) {setverdict(pass);}	//change of size
+     else {setverdict(fail);}
+  if (lengthof(x5)==3) {setverdict(pass);}	//add element
+     else {setverdict(fail);}
+}
+
+testcase octetstrConst() runs on octetstrOper_comptype {
+const octetstring ToctetstrOper_const3:='DD22'O;
+if (ToctetstrOper_const1=='AA11'O) {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+if (ToctetstrOper_const3=='DD22'O) {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+}
+
+testcase octetstrComp_str_str() runs on octetstrOper_comptype
+{var octetstring x1,x2,x3;
+ x1:='A1B2'O;
+ x2:='A1B2'O;
+ x3:='A1B2C3'O;
+ if (x1==x2) {setverdict(pass);}   	//equality, equals
+   else {setverdict(fail);}
+ if (not(x3==x2)) {setverdict(pass);}   //equality, not equals
+   else {setverdict(fail);}
+ if (x1!=x3) {setverdict(pass);}  	//non-equality, not equals
+   else {setverdict(fail);}
+ if (not(x1!=x2)) {setverdict(pass);}  //non-equality, equals
+   else {setverdict(fail);}
+}
+
+testcase octetstrComp_el_str() runs on octetstrOper_comptype
+{var octetstring x1,x2,x3;
+ x1:='A1B2'O;
+ x2:='A1'O;
+ x3:='B2'O;
+ if (x1[1]==x3) {setverdict(pass);}	//equality, equals
+   else {setverdict(fail);}
+ if (not(x1[0]==x3)) {setverdict(pass);} //equality, not equals
+   else {setverdict(fail);}
+ if (x1[0]!=x3) {setverdict(pass);}	//non-equality, not equals
+   else {setverdict(fail);}
+ if (not(x1[1]!=x3)) {setverdict(pass);} //non-equality, equals
+   else {setverdict(fail);}
+}
+
+
+testcase octetstrComp_str_el() runs on octetstrOper_comptype
+{var octetstring x1,x2;
+ x1:='A1B2'O;
+ x2:='A1'O;
+ if (x2==x1[0]) {setverdict(pass);}	//equality, equals
+   else {setverdict(fail);}
+ if (not(x2==x1[1])) {setverdict(pass);}	//equality, not equals
+   else {setverdict(fail);}
+ if (x2!=x1[1]) {setverdict(pass);}	//non-equality, not equals
+   else {setverdict(fail);}
+ if (not(x2!=x1[0])) {setverdict(pass);}	//non-equality, equals
+   else {setverdict(fail);}
+}
+
+testcase octetstrComp_el_el() runs on octetstrOper_comptype
+{var octetstring x1,x2;
+ x1:='A1B2'O;
+ x2:='A1B2'O;
+ if (x1[1]==x2[1]) {setverdict(pass);}	//equality, equals
+   else {setverdict(fail);}
+ if (not(x1[0]==x2[1])) {setverdict(pass);}	//equality, not equals
+   else {setverdict(fail);}
+ if (x1[1]!=x2[0]) {setverdict(pass);}	//non-equality, not equals
+   else {setverdict(fail);}
+ if (not(x1[1]!=x2[1])) {setverdict(pass);}	//non-equality, equals
+   else {setverdict(fail);}
+}
+
+testcase octetstrConcat() runs on octetstrOper_comptype
+{var octetstring x1,x2,x3,x4,x5,x6;
+ x1:='A1B2'O;
+ x2:='C3D4'O;
+ x3:= x1 & x2;
+ x4:=x1&x2[1];
+ x5:=x1[1]&x2;
+ x6:=x1[0]&x2[1];
+ if ((x3=='A1B2C3D4'O)and(lengthof(x3)==4)) {setverdict(pass);}	//string&string
+   else {setverdict(fail);}
+ if ((x4=='A1B2D4'O)and(lengthof(x4)==3)) {setverdict(pass);}	//string&element
+   else {setverdict(fail);}
+ if ((x5=='B2C3D4'O)and(lengthof(x5)==3)) {setverdict(pass);}	//element&string
+   else {setverdict(fail);}
+ if ((x6=='A1D4'O)and(lengthof(x6)==2)) {setverdict(pass);}	//element&element
+   else {setverdict(fail);}
+}
+
+testcase octetstrNot_str() runs on octetstrOper_comptype
+{ var octetstring x1,x2;
+  x1:='0123456789ABCDEF'O;
+  x2:=not4b(x1);
+  if (x2=='FEDCBA9876543210'O) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase octetstrNot_el() runs on octetstrOper_comptype
+{ var octetstring x1,x2,x3;
+  x1:='A1B2C3'O;
+  x2:=not4b(x1[1]);
+  x3:=not4b(x1[2]);
+  if ((x2=='4D'O)and(x3=='3C'O)) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+
+testcase octetstrAnd_str_str() runs on octetstrOper_comptype
+{ var octetstring x1,x2,x3;
+  x1:='8DE9A3'O;
+  x2:='7352B6'O;
+  x3:=x1 and4b x2;
+  if (x3=='0140A2'O) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase octetstrAnd_el_str() runs on octetstrOper_comptype
+{ var octetstring x1,x2,x3,x4;
+  x1:='A3A3'O;
+  x2:='B6'O;
+  x3:=x1[0] and4b 'B6'O;
+  x4:=x1[0] and4b x2;
+  if (x3=='A2'O) {setverdict(pass);}	//element_value
+     else {setverdict(fail);}
+  if (x4=='A2'O) {setverdict(pass);}	//element_string
+     else {setverdict(fail);}
+}
+
+
+testcase octetstrAnd_str_el() runs on octetstrOper_comptype
+{ var octetstring x1,x2,x3,x4;
+  x1:='A3A3'O;
+  x2:='B6'O;
+  x3:='B6'O and4b x1[0];
+  x4:=x2 and4b x1[1];
+  if (x3=='A2'O) {setverdict(pass);}	//value_element
+     else {setverdict(fail);}
+  if (x4=='A2'O) {setverdict(pass);}	//string_element
+     else {setverdict(fail);}
+}
+
+testcase octetstrAnd_el_el() runs on octetstrOper_comptype
+{ var octetstring x1,x2,x3;
+  x1:='A3A3'O;
+  x2:='B6B6'O;
+  x3:=x2[0] and4b x1[0];
+  if (x3=='A2'O) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase octetstrOr_str_str() runs on octetstrOper_comptype
+{ var octetstring x1,x2,x3;
+  x1:='8DE9A3'O;
+  x2:='7352B6'O;
+  x3:=x1 or4b x2;
+  if (x3=='FFFBB7'O) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase octetstrOr_el_str() runs on octetstrOper_comptype
+{ var octetstring x1,x2,x3,x4;
+  x1:='A3A3'O;
+  x2:='B6'O;
+  x3:=x1[0] or4b 'B6'O;
+  x4:=x1[1] or4b x2;
+  if (x3=='B7'O) {setverdict(pass);}	//element_value
+     else {setverdict(fail);}
+  if (x4=='B7'O) {setverdict(pass);}	//element_string
+     else {setverdict(fail);}
+}
+
+testcase octetstrOr_str_el() runs on octetstrOper_comptype
+{ var octetstring x1,x2,x3,x4;
+  x1:='A3A3'O;
+  x2:='B6'O;
+  x3:='B6'O or4b x1[0];
+  x4:=x2 or4b x1[1];
+  if (x3=='B7'O) {setverdict(pass);}	//value_element
+     else {setverdict(fail);}
+  if (x4=='B7'O) {setverdict(pass);}	//string_element
+     else {setverdict(fail);}
+}
+
+testcase octetstrOr_el_el() runs on octetstrOper_comptype
+{ var octetstring x1,x2,x3;
+  x1:='3333'O;
+  x2:='B6B6'O;
+  x3:=x2[0] or4b x1[1];
+  if ((x3=='B7'O)) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+
+testcase octetstrXor_str_str() runs on octetstrOper_comptype
+{ var octetstring x1,x2,x3;
+  x1:='ACDE9833'O;
+  x2:='B8352765'O;
+  x3:=x1 xor4b x2;
+  if (x3=='14EBBF56'O) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase octetstrXor_el_str() runs on octetstrOper_comptype
+{ var octetstring x1,x2,x3,x4;
+  x1:='A3A3'O;
+  x2:='B6'O;
+  x3:=x1[0] xor4b 'B6'O;
+  x4:=x1[1] xor4b x2;
+  if (x3=='15'O) {setverdict(pass);}	//element_value
+     else {setverdict(fail);}
+  if (x4=='15'O) {setverdict(pass);}	//element_string
+     else {setverdict(fail);}
+
+}
+
+testcase octetstrXor_str_el() runs on octetstrOper_comptype
+{ var octetstring x1,x2,x3,x4;
+  x1:='C3C3'O;
+  x2:='86'O;
+  x3:='86'O xor4b x1[0];
+  x4:=x2 xor4b x1[1];
+  if (x3=='45'O) {setverdict(pass);}	//value_element
+     else {setverdict(fail);}
+  if (x4=='45'O) {setverdict(pass);}	//string_element
+     else {setverdict(fail);}
+}
+
+testcase octetstrXor_el_el() runs on octetstrOper_comptype
+{ var octetstring x1,x2,x3;
+  x1:='D3D3'O;
+  x2:='3636'O;
+  x3:=x2[0] xor4b x1[1];
+  if ((x3=='E5'O)) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase octetstrShiftRight1() runs on octetstrOper_comptype
+{ var octetstring x1,x2;
+  x1:='ABCDEF'O;
+  x2:=x1 >> 1;
+  if (x2=='00ABCD'O) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase octetstrShiftRight2() runs on octetstrOper_comptype
+{ var octetstring x1,x2;
+  x1:='ABCDEF'O;
+  x2:=x1 >> 2;
+  if (x2=='0000AB'O) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase octetstrShiftRightSum() runs on octetstrOper_comptype
+{ var octetstring x1,x2;
+  x1:='ABCDEF'O;
+  x2:=x1 >> (1+1);
+  if (x2=='0000AB'O) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase octetstrShiftRightEmpty() runs on octetstrOper_comptype
+{ var octetstring x1,x2;
+  x1:=''O;
+  x2:=x1 >> (1);
+  if (x2==''O) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+
+testcase octetstrShiftLeft1() runs on octetstrOper_comptype
+{ var octetstring x1,x2;
+  x1:='ABCDEF'O;
+  x2:=x1 << 1;
+  if (x2=='CDEF00'O) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase octetstrShiftLeft2() runs on octetstrOper_comptype
+{ var octetstring x1,x2;
+  x1:='ABCDEF'O;
+  x2:=x1 << 2;
+  if (x2=='EF0000'O) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase octetstrShiftLeftSum() runs on octetstrOper_comptype
+{ var octetstring x1,x2;
+  x1:='ABCDEF'O;
+  x2:=x1 << (1+1);
+  if (x2=='EF0000'O) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase octetstrShiftLeftEmpty() runs on octetstrOper_comptype
+{ var octetstring x1,x2;
+  x1:=''O;
+  x2:=x1 << (1);
+  if (x2==''O) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase octetstrRotateRight1() runs on octetstrOper_comptype
+{ var octetstring x1,x2;
+  x1:='ABCDEF'O;
+  x2:=x1 @> 1;
+  if (x2=='EFABCD'O) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase octetstrRotateRight2() runs on octetstrOper_comptype
+{ var octetstring x1,x2;
+  x1:='ABCDEF'O;
+  x2:=x1 @> 2;
+  if (x2=='CDEFAB'O) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase octetstrRotateRightSum() runs on octetstrOper_comptype
+{ var octetstring x1,x2;
+  x1:='ABCDEF'O;
+  x2:=x1 @> (1+1);
+  if (x2=='CDEFAB'O) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase octetstrRotateRightEmpty() runs on octetstrOper_comptype
+{ var octetstring x1,x2;
+  x1:=''O;
+  x2:=x1 @> (1);
+  if (x2==''O) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+
+testcase octetstrRotateLeft1() runs on octetstrOper_comptype
+{ var octetstring x1,x2;
+  x1:='ABCDEF'O;
+  x2:=x1 <@ 1;
+  if (x2=='CDEFAB'O) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase octetstrRotateLeft2() runs on octetstrOper_comptype
+{ var octetstring x1,x2;
+  x1:='ABCDEF'O;
+  x2:=x1 <@ 2;
+  if (x2=='EFABCD'O) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase octetstrRotateLeftSum() runs on octetstrOper_comptype
+{ var octetstring x1,x2;
+  x1:='ABCDEF'O;
+  x2:=x1 <@ (1+1);
+  if (x2=='EFABCD'O) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase octetstrRotateLeftEmpty() runs on octetstrOper_comptype
+{ var octetstring x1,x2;
+  x1:=''O;
+  x2:=x1 <@ (1);
+  if (x2==''O) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+const integer c_myval1 := 16
+type octetstring myostr1
+type octetstring myostr2 length(1)
+type octetstring myostr3 length(0..1)
+type octetstring myostr4 ('00'O, '01'O, '10'O, '11'O) length(1)
+// Extending restrictions shouldn't be allowed.
+type myostr4 myostr5 (int2oct(c_myval1, 1)) length(1)
+type octetstring myostr6 length(0..infinity)
+type octetstring myostr7 (''O, '00'O, '01'O)
+type octetstring myostr8 (myostr3, myostr4)
+
+const myostr8 c_myostr1 := '00'O
+
+template myostr8 t_myostr1 := '00'O
+template myostr6 t_myostr2 := '0011'O length(2)
+template myostr4 t_myostr3 := t_myostr1 length(1)
+
+function f_ostr1() return myostr6 {
+  var myostr3 v_myostr1 := '00'O
+  return v_myostr1 & '11'O
+}
+
+testcase octetstrSubtypes() runs on octetstrOper_comptype {
+  var template myostr2 vt_myostr1 := '00'O  // Length only.
+  var template myostr3 vt_myostr2 := ''O  // Length with range.
+  var template myostr4 vt_myostr3 := vt_myostr1  // Value list with length.
+  var template myostr7 vt_myostr4 := vt_myostr2  // Value list only.
+  var myostr2 v_myostr1 := '00'O
+  var myostr3 v_myostr2 := ''O
+  var myostr4 v_myostr3 := v_myostr1
+  var myostr7 v_myostr4 := v_myostr2
+
+  if (valueof(vt_myostr1) == v_myostr1 and v_myostr2 == valueof(vt_myostr2)) { setverdict(pass) }
+  else { setverdict(fail) }
+  if (valueof(vt_myostr3) == v_myostr3 and v_myostr4 == valueof(vt_myostr4)) { setverdict(pass) }
+  else { setverdict(fail) }
+  if (f_ostr1() == '0011'O and '00'O & '11'O == f_ostr1()) { setverdict(pass) }
+  else { setverdict(fail) }
+}
+
+testcase octetstrIsvalue() runs on octetstrOper_comptype{
+  var octetstring ostr0;
+  var octetstring ostr1 := '1234'O;
+  var template octetstring tostr;
+
+  if ( isvalue(ostr0) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(ostr1) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isvalue(tostr) ) { setverdict(fail); } else { setverdict(pass); };
+}
+
+testcase octetstrIsbound() runs on octetstrOper_comptype{
+  var octetstring ostr0;
+  var octetstring ostr1 := '1234'O;
+  var template octetstring tostr;
+
+  if ( isbound(ostr0) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isbound(ostr0[0]) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isbound(ostr1) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isbound(tostr) ) { setverdict(fail); } else { setverdict(pass); };
+}
+
+testcase tc_simple_octetstring_unbound() runs on octetstrOper_comptype {
+  var octetstring vl_o1;
+  if(ispresent(vl_o1)){setverdict(fail)} else {setverdict(pass)} //fail
+  var octetstring vl_o2:='ABBA'O;
+  if(ispresent(vl_o2)) {setverdict(pass)} else {setverdict(fail)} //not logged
+  var octetstring vl_o3;
+  if(isbound(vl_o3)){setverdict(fail)} else {setverdict(pass)}
+  vl_o3:='ABBA'O;
+  if(isbound(vl_o3)) {setverdict(pass)} else {setverdict(fail)}
+}
+
+control {
+  const octetstring cl_1:='AA11'O;
+  var octetstring vl_1;
+
+  execute(octetstrAssign());
+  execute(octetstrAssignElem());
+  execute(octetstrLengthof());
+  execute(octetstrConst());
+  execute(octetstrComp_str_str());
+  execute(octetstrComp_el_str());
+  execute(octetstrComp_str_el());
+  execute(octetstrComp_el_el());
+  execute(octetstrConcat());
+  execute(octetstrNot_str());
+  execute(octetstrNot_el());
+  execute(octetstrAnd_str_str());
+  execute(octetstrAnd_el_str());
+  execute(octetstrAnd_str_el());
+  execute(octetstrAnd_el_el());
+  execute(octetstrOr_str_str());
+  execute(octetstrOr_el_str());
+  execute(octetstrOr_str_el());
+  execute(octetstrOr_el_el());
+  execute(octetstrXor_str_str());
+  execute(octetstrXor_el_str());
+  execute(octetstrXor_str_el());
+  execute(octetstrXor_el_el());
+  execute(octetstrShiftRight1());
+  execute(octetstrShiftRight2());
+  execute(octetstrShiftRightSum());
+  execute(octetstrShiftRightEmpty());
+  execute(octetstrShiftLeft1());
+  execute(octetstrShiftLeft2());
+  execute(octetstrShiftLeftSum());
+  execute(octetstrShiftLeftEmpty());
+  execute(octetstrRotateRight1());
+  execute(octetstrRotateRight2());
+  execute(octetstrRotateRightSum());
+  execute(octetstrRotateRightEmpty());
+  execute(octetstrRotateLeft1());
+  execute(octetstrRotateLeft2());
+  execute(octetstrRotateLeftSum());
+  execute(octetstrRotateLeftEmpty());
+  execute(octetstrSubtypes());
+  execute(octetstrIsvalue());
+  execute(octetstrIsbound());
+  execute(tc_simple_octetstring_unbound());
+}
+}
diff --git a/Regression_Test_java/src/TrecofOper.ttcn b/Regression_Test_java/src/TrecofOper.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..03d906d5a51ae58d729e7ca4d6111372e6c9704c
--- /dev/null
+++ b/Regression_Test_java/src/TrecofOper.ttcn
@@ -0,0 +1,1426 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Baranyi, Botond
+ *   Beres, Szabolcs
+ *   Godar, Marton
+ *   Kovacs, Ferenc
+ *   Raduly, Csaba
+ *   Szabados, Kristof
+ *   Szabo, Janos Zoltan – initial implementation
+ *
+ ******************************************************************************/
+module TrecofOper {
+// ********** Type definitions  *********************
+type component recofOper_mycomp {};
+type enumerated recofOper_myenum {xx1,xx2,xx3};
+type record recofOper_trecord {
+	integer x1 optional,
+	float x2 };
+type record of octetstring recofOper_trecof;
+type set recofOper_tset {
+	integer x1,
+	float x2 optional };
+type set of charstring recofOper_tsetof;
+type union recofOper_tunion {
+	integer x1,
+	float x2 };
+type record of integer recofOper_myrecof1; 	// record of basic types
+type record of recofOper_myenum recofOper_myrecof2; // record of enum
+type record of recofOper_trecord recofOper_myrecof3;  // record of record
+type record of recofOper_trecof recofOper_myrecof4; // record of record of
+type record of recofOper_tset recofOper_myrecof5;  // record of set
+type record of recofOper_tsetof recofOper_myrecof6; // record of set of
+type record of recofOper_tunion recofOper_myrecof7; // record of union
+type record length (3)
+  of record length (3)
+  of record length (3) of integer threeD;
+// *************** Constanst ***********************
+const recofOper_trecord recofOper_temp1:={ x1:=omit, x2:=3.4 };
+const recofOper_trecof recofOper_temp2:={ 'AF12'O };
+const recofOper_tset recofOper_temp3:={ x1:=234, x2:=1.9};
+const recofOper_tsetof recofOper_temp4:={"f","8"};
+const recofOper_tunion recofOper_temp5:={ x2:=1.3 };
+const recofOper_myrecof1 recofOper_const1:={ 1,2 }	//record of basic types
+const recofOper_myrecof2 recofOper_const2:={ xx2, xx1 }
+const recofOper_myrecof3 recofOper_const4:={   //record of record
+  { x1:=1, x2:=1.2 },recofOper_temp1 };
+const recofOper_myrecof4 recofOper_const6:={   //record of record of
+ { '12AB'O, 'CD12'O },  recofOper_temp2 };
+const recofOper_myrecof5 recofOper_const8:={   //record of set
+ { x1:=2, x2:=1.3}, recofOper_temp3 };
+const recofOper_myrecof6 recofOper_const10:={   //record of set of
+ {"a","b"}, recofOper_temp4 }; //{"f","8"},
+const recofOper_myrecof7 recofOper_const12:={   //record of union
+ { x1 :=3 }, recofOper_temp5  }; //{ x2:=1.3 }
+
+testcase recofAssign() runs on recofOper_mycomp{
+var recofOper_myrecof1 x1:={ 12,34} 	//record of basic types
+var recofOper_myrecof1 x2,x3,x4;
+x2:={ 32, 12 };
+x3:={12};
+x3:={23,21};
+x4:={};
+if (x1[0]==12) {setverdict(pass);}	//at declaration
+     else {setverdict(fail);}
+if (x1[1]==34) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[0]==32) {setverdict(pass);}	//later
+     else {setverdict(fail);}
+if (x2[1]==12) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x3[0]==23) {setverdict(pass);}	//later, change size
+     else {setverdict(fail);}
+if (x3[1]==21) {setverdict(pass);}
+     else {setverdict(fail);}
+//if (x4=={}) {setverdict(pass);}	//empty record of
+//     else {setverdict(fail);}
+}
+
+testcase recofReAssign() runs on recofOper_mycomp
+{
+  var recofOper_myrecof1 x := { 1, 2, 3, 4 };
+  // assigning a new value that is shorter than the previous
+  x := { 1, 5, 3 };
+  if (sizeof(x) == 3) { setverdict(pass); }
+  else { setverdict(fail); }
+  if (x[0] == 1) { setverdict(pass); }
+  else { setverdict(fail); }
+  if (x[1] == 5) { setverdict(pass); }
+  else { setverdict(fail); }
+  if (x[2] == 3) { setverdict(pass); }
+  else { setverdict(fail); }
+  x := { 6 };
+  if (sizeof(x) == 1) { setverdict(pass); }
+  else { setverdict(fail); }
+  if (x[0] == 6) { setverdict(pass); }
+  x := { };
+  if (sizeof(x) == 0) { setverdict(pass); }
+  else { setverdict(fail); }
+}
+
+testcase recofAssignEnum() runs on recofOper_mycomp{
+var recofOper_myrecof2 x1:={ xx2 }	//record of enum
+var recofOper_myrecof2 x2;
+x2:={xx2,xx1};
+//at declaration
+if (x1[0]==xx2) {setverdict(pass);}
+     else {setverdict(fail);}
+//later
+if (x2[0]==xx2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[1]==xx1) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recofAssignRec() runs on recofOper_mycomp{
+var recofOper_trecord temp1:={ x1:=omit, x2:=3.4 };
+var recofOper_myrecof3 x1:={   //record of record
+ { x1:=1, x2:=1.2 }, temp1 };
+var recofOper_myrecof3 x2;
+x2:={ { x1:=1, x2:=1.2 }, temp1 };
+if (x1[0].x1==1) {setverdict(pass);}	//at declaration
+     else {setverdict(fail);}
+if (x1[0].x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1[1]==temp1) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[0].x1==1) {setverdict(pass);}	//later
+     else {setverdict(fail);}
+if (x2[0].x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(x2[1].x1))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[1].x2==3.4) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recofAssignRecof() runs on recofOper_mycomp{
+var recofOper_trecof temp2:={'AF12'O};
+var recofOper_myrecof4 x1:={   //record of record of
+ { '12AB'O, 'CD12'O }, temp2 };
+var recofOper_myrecof4 x2;
+x2:={ { '12AB'O, 'CD12'O }, temp2 };
+if (x1[0][0]=='12AB'O) {setverdict(pass);}	//at declaration
+     else {setverdict(fail);}
+if (x1[0][1]=='CD12'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1[1]==temp2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[0][0]=='12AB'O) {setverdict(pass);}	//later
+     else {setverdict(fail);}
+if (x2[0][1]=='CD12'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[1][0]=='AF12'O) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recofAssignSet() runs on recofOper_mycomp{
+var recofOper_tset temp1:={ x1:=2, x2:=omit };
+var recofOper_myrecof5 x1:={   //record of set
+ { x1:=1, x2:=1.2 }, temp1 };
+var recofOper_myrecof5 x2;
+x2:={ { x1:=1, x2:=1.2 }, temp1 };
+if (x1[0].x1==1) {setverdict(pass);}	//at declaration
+     else {setverdict(fail);}
+if (x1[0].x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1[1]==temp1) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[0].x1==1) {setverdict(pass);}	//later
+     else {setverdict(fail);}
+if (x2[0].x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[1].x1==2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(x2[1].x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recofAssignSetof() runs on recofOper_mycomp{
+var recofOper_tsetof temp2:={"a","7"};
+var recofOper_myrecof6 x1:={   //record of set of
+ { "1", "a" }, temp2 };
+var recofOper_myrecof6 x2;
+x2:={ { "1", "a" }, temp2 };
+if (x1[0][0]=="1") {setverdict(pass);}	//at declaration
+     else {setverdict(fail);}
+if (x1[0][1]=="a") {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1[1]==temp2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[0][0]=="1") {setverdict(pass);}	//later
+     else {setverdict(fail);}
+if (x2[0][1]=="a") {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[1][0]=="a") {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[1][1]=="7") {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recofAssignUnion() runs on recofOper_mycomp{
+var recofOper_tunion temp5 := {x2:=1.3}
+var recofOper_myrecof7 x1:={   //record of union
+ { x1 :=3 }, temp5  }; //{ x2:=1.3
+var recofOper_myrecof7 x2;
+x2:={ { x1 :=3 }, temp5 }; //{ x2:=1.3 }
+if (x1[0].x1==3) {setverdict(pass);}	//at declaration
+     else {setverdict(fail);}
+if (ischosen(x1[0].x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1[0].x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1[1]==temp5) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[0].x1==3) {setverdict(pass);}	//later
+     else {setverdict(fail);}
+if (ischosen(x2[0].x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2[0].x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[1].x2==1.3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x2[1].x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2[1].x1))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recofAssignElem() runs on recofOper_mycomp{
+var recofOper_myrecof1 x1,x2,x3,x4,x5;	//record of basic types
+x1:={ 3, 2 };
+x2:={ 1, 2 };
+x3:=x2;
+x4:=x2;
+x5:={2};
+x2[0]:=3;			//change element to value
+x3[0]:=x1[0];			//change element to element
+x4[2]:=2;			// add element
+x5[2]:=3;			// out of order
+if (x1[1]==2) {setverdict(pass);}	//accessing individual element
+     else {setverdict(fail);}
+if (x2[0]==3) {setverdict(pass);}	// change element to value
+     else {setverdict(fail);}
+if (x2[1]==2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x3[0]==3) {setverdict(pass);}	// change element to element
+     else {setverdict(fail);}
+if (x3[1]==2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x4[0]==1) {setverdict(pass);}	// add element
+     else {setverdict(fail);}
+if (x4[1]==2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x4[2]==2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x5[2]==3) {setverdict(pass);}	// out of order
+     else {setverdict(fail);}
+}
+
+testcase recofAssignElemEnum() runs on recofOper_mycomp{
+var recofOper_myrecof2 x1, x2,x3;	//record of enumerated
+x1:={ xx1, xx2 };
+x2:={xx1, xx2};
+x3:={};
+x1[0]:=xx3;			//change element
+x2[2]:=xx3;			// add element
+x3[2]:=xx3;			// out of order
+if (x1[0]==xx3) {setverdict(pass);}	// change element
+     else {setverdict(fail);}
+if (x1[1]==xx2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[0]==xx1) {setverdict(pass);}	// add element
+     else {setverdict(fail);}
+if (x2[1]==xx2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[2]==xx3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x3[2]==xx3) {setverdict(pass);}	// out of order
+     else {setverdict(fail);}
+}
+
+testcase recofAssignElemRec() runs on recofOper_mycomp{
+//var recofOper_trecord temp1:={ x1:=omit, x2:=3.4 };
+var recofOper_myrecof3 x1,x2,x3; 	//record of record
+x1:={   { x1:=1, x2:=1.2 }, { x1:=omit, x2:=3.4 } };
+x2:=x1;
+x1[0].x1:=2;
+//temp1.x1:=3;
+x1[1].x1:=3;
+x2[2]:= {x1:=2, x2:=1.3};		// add element
+x3[1]:= {x1:=2, x2:=1.3};		//out of order
+if (x1[0].x1==2) {setverdict(pass);}	// change element
+     else {setverdict(fail);}
+if (x1[0].x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1[1].x1==3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1[1].x2==3.4) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[0].x1==1) {setverdict(pass);}	//add element
+     else {setverdict(fail);}
+if (x2[0].x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(x2[1].x1))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[1].x2==3.4) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[2].x1==2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[2].x2==1.3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x3[1].x1==2) {setverdict(pass);}	   // out of order
+     else {setverdict(fail);}
+if (x3[1].x2==1.3) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+
+testcase recofAssignElemRecof() runs on recofOper_mycomp{
+var recofOper_myrecof4 x1,x2,x3;		 //record of record of
+x1:={  { '12AB'O, 'CD12'O }, { 'ABCD'O } };
+x2:=x1;
+x1[0][1]:='34AB'O;		//change element
+x2[2]:={ '1234'O};		//add element
+x3[2]:={'12CD'O};		//out of order
+if (x1[0][0]=='12AB'O) {setverdict(pass);}	// change element
+     else {setverdict(fail);}
+if (x1[0][1]=='34AB'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1[1][0]=='ABCD'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[0][0]=='12AB'O) {setverdict(pass);}	// add element
+     else {setverdict(fail);}
+if (x2[0][1]=='CD12'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[1][0]=='ABCD'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[2][0]=='1234'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x3[2][0]=='12CD'O) {setverdict(pass);}	//out of order
+     else {setverdict(fail);}}
+
+testcase recofAssignElemSet() runs on recofOper_mycomp{
+var recofOper_myrecof5 x1,x2,x3    	//record of set
+x1:={ { x1:=1, x2:=1.2 }, { x1:=2, x2:=omit }};
+x2:={ { x1:=1, x2:=1.2 }, { x1:=2, x2:=omit }};
+x1[0].x2:=3.4;				//change element
+x2[2]:={  x1:=2, x2:=1.3 };		// add element
+x3[2]:={  x1:=2, x2:=1.3 };		// out of order
+if (x1[0].x1==1) {setverdict(pass);}	//change element
+     else {setverdict(fail);}
+if (x1[0].x2==3.4) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1[1].x1==2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(x1[1].x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[0].x1==1) {setverdict(pass);}	//add element
+     else {setverdict(fail);}
+if (x2[0].x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[1].x1==2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(x2[1].x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[2].x1==2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[2].x2==1.3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x3[2].x1==2) {setverdict(pass);}	//out of order
+     else {setverdict(fail);}
+if (x3[2].x2==1.3) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recofAssignElemSetof() runs on recofOper_mycomp{
+var recofOper_tsetof temp2:={"a","7"};
+var recofOper_myrecof6 x1,x2,x3;   //record of set of
+x1:={ { "1" }, {"a","7"}};
+x2:={ { "1" }, {"a","7"}};
+x1[0][0]:="h";			// change element
+x2[2]:={"2"};			//add element
+x3[2]:={"2"};			//out of order
+if (x1[0][0]=="h") {setverdict(pass);}	  //change element
+     else {setverdict(fail);}
+if (x1[1][0]=="a") {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1[1][1]=="7") {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[0][0]=="1") {setverdict(pass);}	  //add element
+     else {setverdict(fail);}
+if (x2[1][0]=="a") {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[1][1]=="7") {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[2][0]=="2") {setverdict(pass);}
+     else {setverdict(fail);}
+if (x3[2][0]=="2") {setverdict(pass);}		// out of order
+     else {setverdict(fail);}
+}
+
+testcase recofAssignElemUnion() runs on recofOper_mycomp{
+var recofOper_tunion temp5 := {x2:=1.3}
+var recofOper_myrecof7 x1,x2,x3;   //record of union
+x1:={ {x1 :=3 }, {x2:=1.3} };
+x2:={ {x1 :=3 }, {x2:=1.3} };
+x1[0].x2:=3.4;				//change element
+x2[2]:={ x2:=1.4}; 			// add element
+x3[2]:={ x2:=1.4}; 			// out of order
+if (x1[0].x2==3.4) {setverdict(pass);}		//change element
+     else {setverdict(fail);}
+if (ischosen(x1[0].x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1[0].x1))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1[1].x2==1.3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x1[1].x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1[1].x1))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[0].x1==3) {setverdict(pass);}		//add element
+     else {setverdict(fail);}
+if (ischosen(x2[0].x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2[0].x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[1].x2==1.3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x2[1].x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2[1].x1))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[2].x2==1.4) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x2[2].x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2[2].x1))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x3[2].x2==1.4) {setverdict(pass);}		//out of order
+     else {setverdict(fail);}
+if (ischosen(x3[2].x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x3[2].x1))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recofConst() runs on recofOper_mycomp{
+const recofOper_myrecof1 const1:={1,2,3} //record of basic types
+if (recofOper_const1[0]==1) {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+if (recofOper_const1[1]==2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const1[0]==1) {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+if (const1[1]==2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const1[2]==3) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recofConstEnum() runs on recofOper_mycomp{
+const recofOper_myrecof2 const1:={xx1,xx2,xx3} //record of enumerated
+if (recofOper_const2[0]==xx2) {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+if (recofOper_const2[1]==xx1) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const1[0]==xx1) {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+if (const1[1]==xx2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const1[2]==xx3) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recofConstRec() runs on recofOper_mycomp{
+const recofOper_myrecof3 const4:={   //record of record
+ { x1:=1, x2:=1.2 }, recofOper_temp1 };
+if (recofOper_const4[0].x1==1) {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+if (recofOper_const4[0].x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (recofOper_const4[1]==recofOper_temp1) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const4[0].x1==1) {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+if (const4[0].x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const4[1]==recofOper_temp1) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recofConstRecof() runs on recofOper_mycomp{
+const recofOper_myrecof4 const6:={   //record of record of
+ { '12AB'O, 'CD12'O }, recofOper_temp2 };
+if (recofOper_const6[0][0]=='12AB'O) {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+if (recofOper_const6[0][1]=='CD12'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (recofOper_const6[1]==recofOper_temp2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const6[0][0]=='12AB'O) {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+if (const6[0][1]=='CD12'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const6[1]==recofOper_temp2) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recofConstSet() runs on recofOper_mycomp{
+const recofOper_myrecof5 const8:={   //record of set
+ { x1:=2, x2:=1.3}, recofOper_temp3 };
+if (recofOper_const8[0].x1==2) {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+if (recofOper_const8[0].x2==1.3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (recofOper_const8[1]==recofOper_temp3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const8[0].x1==2) {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+if (const8[0].x2==1.3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const8[1]==recofOper_temp3) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recofConstSetof() runs on recofOper_mycomp{
+const recofOper_myrecof6 const10:={   //record of set of
+ {"a","b"}, {"f","8"} };
+if (recofOper_const10[0][0]=="a") {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+if (recofOper_const10[0][1]=="b") {setverdict(pass);}
+     else {setverdict(fail);}
+if (recofOper_const10[1]==recofOper_temp4) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const10[0][0]=="a") {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+if (const10[0][1]=="b") {setverdict(pass);}
+     else {setverdict(fail);}
+if (const10[1][0]=="f") {setverdict(pass);}
+     else {setverdict(fail);}
+if (const10[1][1]=="8") {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recofConstUnion() runs on recofOper_mycomp{
+const recofOper_myrecof7 const12:={   //record of union
+ { x1 :=3 }, { x2:=1.3 } };
+if (recofOper_const12[0].x1==3) {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+if (ischosen(recofOper_const12[0].x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(recofOper_const12[0].x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (recofOper_const12[1]==recofOper_temp5) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const12[0].x1==3) {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+if (ischosen(const12[0].x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(const12[0].x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const12[1].x2==1.3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(const12[1].x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(const12[1].x1))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+
+testcase recofComp() runs on recofOper_mycomp{
+var recofOper_myrecof1 x1,x2,x3,x4; //record of basic type
+x1:={ 1,2,3 };
+x2:={ 1,2,3 };
+x3:={ 1,2 };
+x4:={3,1,2};
+if (x1==x2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1==x3)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1==x4)) {setverdict(pass);}	// out of order
+     else {setverdict(fail);}
+if (x1!=x3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1!=x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1!=x4) {setverdict(pass);}	// out of order
+     else {setverdict(fail);}
+}
+
+testcase recofCompEnum() runs on recofOper_mycomp{
+var recofOper_myrecof2 x1,x2,x3; 	// record of enumerated
+x1:={ xx1,xx2,xx3 };
+x2:={ xx1,xx2,xx3 };
+x3:={ xx1,xx2 };
+if (x1==x2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1==x3)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1!=x3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1!=x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recofCompRec() runs on recofOper_mycomp{
+var recofOper_myrecof3 x1,x2,x3;	// record of record
+x1 :={ { x1:=1, x2:=1.2 }, { x1:=omit, x2:=3.4 } };
+x2 :={ { x1:=1, x2:=1.2 }, { x1:=omit, x2:=3.4 } };
+x3 :={ { x1:=2, x2:=1.2 }, { x1:=omit, x2:=3.4 } };
+if (x1==x2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1==x3)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1!=x3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1!=x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+
+testcase recofCompRecof() runs on recofOper_mycomp{
+var recofOper_myrecof4 x1,x2,x3; //record of record of
+x1:={ { '12AB'O, 'CD12'O }, {'AF12'O} };
+x2:={ { '12AB'O, 'CD12'O }, {'AF12'O} };
+x3:={ { '12AB'O  }, {'AF12'O} };
+if (x1==x2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1==x3)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2!=x3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1!=x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recofCompSet() runs on recofOper_mycomp{
+var recofOper_tset temp1:={ x1:=2, x2:=omit };
+var recofOper_myrecof5 x1,x2,x3; //record of set
+x1:={ { x1:=1, x2:=1.2 }, temp1 };
+x2:={ { x2:=1.2, x1:=1 }, { x1:=2, x2:=omit }};
+x3:={ { x1:=1, x2:=1.2 } };
+if (x1==x2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x2==x3)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1!=x3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1!=x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recofCompSetof() runs on recofOper_mycomp{
+var recofOper_tsetof temp2:={"a","7"};
+var recofOper_myrecof6 x1,x2,x3;   //record of set of
+x1:={ { "1", "a" },  temp2 };
+x2:={ { "1", "a" }, {"a","7"} };
+x3:={ { "1", "a" } };
+if (x1==x2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x2==x3)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1!=x3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1!=x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recofCompUnion() runs on recofOper_mycomp{
+var recofOper_tunion temp5 := {x2:=1.3}
+var recofOper_myrecof7 x1,x2,x3; //record of union
+x1:={ { x1 :=3 }, { x2:=1.3 } };
+x2:={ { x1 :=3 }, temp5 }; //{ x2:=1.3 }
+x3:={ { x2 :=3.9 },temp5 }; //{ x2:=1.3 }
+if (x1==x2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1==x3)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2!=x3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1!=x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recofEmpty() runs on recofOper_mycomp{
+  var recofOper_myrecof1 vl_list := {}
+  if (vl_list == {}) {setverdict(pass)}
+  else {setverdict(fail)}
+  if ({} == vl_list) {setverdict(pass)}
+  else {setverdict(fail)}
+}
+
+testcase recofListOperator() runs on recofOper_mycomp{
+  var recofOper_myrecof1 x1;
+  var recofOper_myrecof1 x2,x3,x4,x5,x6;
+  var recofOper_myrecof1 res1, res2, res3, res4, res5;
+  x1:={1,2};
+  x2:={1,2};
+  x3:={1};
+  x4:={1};
+  x4[1]:=3;
+  x5:={};
+  x6[2]:=1;
+  res1 := x1 & x2;
+  res2 := x2 & x3;
+  res3 := x2 & x3 & x5;
+  res4 := x3 & x4;
+  res5 := x1 & {};
+  if (res1 == {1,2,1,2}) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (res2 == {1,2,1}) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (res3 == {1,2,1}) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (res4 == {1,1,3}) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (res5 == {1,2}) {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+testcase recofRotateOperators() runs on recofOper_mycomp{
+  var recofOper_myrecof1 x1:={1,2,3,4,5};
+  var recofOper_myrecof1 x2,x3,x4,x5,x6,x7;	//set of basic types
+  x2 := x1 <@ 1;
+  x3 := x1 <@ 10;
+  x4 := x1 <@ 3 <@ 2;
+  x5 := x1 @> 1;
+  x6 := x1 @> 10;
+  x7 := x1 @> 3 @> 2;
+  if (x2 == {2,3,4,5,1}) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x3 == x1) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x4 == x1) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x5 == {5,1,2,3,4}) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x6 == x1) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x7 == x1) {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+testcase recofLengthof() runs on recofOper_mycomp{
+  var recofOper_myrecof1 x1:={1,2};
+  var recofOper_myrecof1 x2,x3,x4,x5,x6;	//record of basic types
+  x2:={ 1, 2 };
+  x3:={1};
+  x4:={1};
+  x3:={1,2};								//change size by assignment
+  x4[1]:=3;									//change size by adding element
+  x5:={};									//empty record of
+  x6[2]:=1;									//out of order
+  if (lengthof(x1)==2) {setverdict(pass);}	//assignment at declaration
+  else {setverdict(fail);}
+  if (lengthof(x2)==2) {setverdict(pass);}	//assignment later
+  else {setverdict(fail);}
+  if (lengthof(x3)==2) {setverdict(pass);}	//change size by assignment
+  else {setverdict(fail);}
+  if (lengthof(x4)==2) {setverdict(pass);}	//change size by adding element
+  else {setverdict(fail);}
+  if (lengthof(x5)==0) {setverdict(pass);}	//empty record of
+  else {setverdict(fail);}
+  if (lengthof(x6)==3) {setverdict(pass);}	//out of order
+  else {setverdict(fail);}
+}
+
+testcase recofSizeof() runs on recofOper_mycomp{
+  var recofOper_myrecof1 x1:={1,2};
+  var recofOper_myrecof1 x2,x3,x4,x5,x6;	//record of basic types
+  x2:={ 1, 2 };
+  x3:={1};
+  x4:={1};
+  x3:={1,2};		//change size by assignment
+  x4[1]:=3;		//change size by adding element
+  x5:={};			//empty record of
+  x6[2]:=1;		//out of order
+  if (sizeof(x1)==2) {setverdict(pass);}	//assignment at declaration
+  else {setverdict(fail);}
+  if (sizeof(x2)==2) {setverdict(pass);}	//assignment later
+  else {setverdict(fail);}
+  if (sizeof(x3)==2) {setverdict(pass);}	//change size by assignment
+  else {setverdict(fail);}
+  if (sizeof(x4)==2) {setverdict(pass);}	//change size by adding element
+  else {setverdict(fail);}
+  if (sizeof(x5)==0) {setverdict(pass);}	//empty record of
+  else {setverdict(fail);}
+  if (sizeof(x6)==3) {setverdict(pass);}	//out of order
+  else {setverdict(fail);}
+}
+
+testcase recofReplace() runs on recofOper_mycomp{
+  var recofOper_myrecof1 x1:={1,2,3,4,5};
+  var recofOper_myrecof1 a:={8,8,8};
+  var recofOper_myrecof1 x2;
+  x2 := replace(x1,2,3,a);
+  if (x2 == {1,2,8,8,8}) {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+// TR: HS22809 - A null value is generated for empty constant arrays by the compiler,
+// this can make calling 'replace' ambiguous (since there's a 'replace' function generated for both the
+// array and its template.
+testcase recofReplaceEmpty() runs on recofOper_mycomp {
+  var recofOper_myrecof1 x1 := { 1, 2, 3 };
+  const recofOper_myrecof1 a := {};  
+  var recofOper_myrecof1 x2;
+  x2 := replace(x1, 0, 1, a);
+  if (x2 == { 2, 3 }) { setverdict(pass); }
+  else { setverdict(fail); }
+}
+
+testcase recofSubstr() runs on recofOper_mycomp{
+  var recofOper_myrecof1 x1:={1,2,3,4,5};
+  var recofOper_myrecof1 x2;
+  x2 := substr(x1,2,3);
+  if (x2 == {3,4,5}) {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+type record intrec { recofOper_myrecof1 a }
+type record of intrec intreclist
+
+testcase recofIsvalue() runs on recofOper_mycomp{
+  var recofOper_myrecof1 v_def;
+  var recofOper_myrecof1 v_empty := {-,-,-,-,-,-,-,-,-,-};
+  var recofOper_myrecof1 v_full := {1,2,3,4,5,6,7,8,9,10}
+
+  if ( isvalue(v_def) ) { setverdict(fail); }else { setverdict(pass); };
+  if ( isvalue(v_empty) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(v_empty[1]) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(v_empty[0]) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(v_full[1]) ) { setverdict(pass); } else { setverdict(fail); };
+
+  v_def[1] := 3;
+  if ( isvalue(v_def) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(v_def[1]) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isvalue(v_def[0]) ) { setverdict(fail); } else { setverdict(pass); };
+
+  v_empty[0] := 17; // not empty anymore
+  if ( isvalue(v_empty[0]) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isvalue(v_empty) ) { setverdict(fail); } else { setverdict(pass); };
+
+  template intreclist it1 := { { a := { 1, 2, 3 } } };
+  template intreclist it2 modifies it1 := { { a := { 1, 2, -, -, -, 100 } } };
+  template intrec itt1               := { a := { 1, 2, 3 } };
+  template intrec itt2 modifies itt1 := { a := { 1, 2, -, -, -, 100 } };
+  if (isvalue (it1)) {setverdict (pass);}
+  else {setverdict (fail);}
+
+  if (isvalue (it2)) { setverdict (fail);}
+  else { setverdict (pass);}
+
+  if (isvalue (itt1)) {setverdict (pass);}
+  else {setverdict ( fail );}
+
+  if (isvalue (itt2)) { setverdict (fail);}
+  else {setverdict (pass);}
+
+  const threeD d3 := {
+    {
+        { 1,2,3 },
+        { 1,2,3 },
+        { 1,2,3 }
+    },
+    {
+        { 1,2,3 },
+        { 1,2,3 },
+        { 1,2,3 }
+    },
+    {
+        { 1,2,3 },
+        { 1,2,3 },
+        { 1,2,3 }
+    }
+  }
+  var threeD nowhere := {
+  { {-,1,-},{-,1,-},{-,1,-} },
+  { {-,1,-},{-,-,-},{-,1,-} },
+  { {-,1,-},{-,1,-},{-,1,-} }
+
+  }
+  if ( isvalue(nowhere) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(nowhere[1]) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(nowhere[1][1]) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(nowhere[1][1][1]) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( ispresent(nowhere[1][1][1]) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(d3) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isvalue(d3[0]) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isvalue(d3[0][1]) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isvalue(d3[0][1][2]) ) { setverdict(pass); } else { setverdict(fail); };
+}
+
+testcase recofIsvalue2() runs on recofOper_mycomp{
+  var recofOper_myrecof1 v;
+  if ( isvalue(v) ) { setverdict(fail); } else { setverdict(pass); };
+
+  v[3] := 3;
+  if ( isvalue(v) ) { setverdict(fail); } else { setverdict(pass); };
+
+  v[2] := 2;
+  if ( isvalue(v) ) { setverdict(fail); } else { setverdict(pass); };
+
+  v[1] := 1;
+  if ( isvalue(v) ) { setverdict(fail); } else { setverdict(pass); };
+
+  v[0] := 0;
+  if ( isvalue(v) ) { setverdict(pass); } else { setverdict(fail); };
+
+  v[4] := 4;
+  if ( isvalue(v) ) { setverdict(pass); } else { setverdict(fail); };
+
+  v[6] := 6; // there is now a hole at 5
+  if ( isvalue(v) ) { setverdict(fail); } else { setverdict(pass); };
+}
+
+testcase recofIsbound() runs on recofOper_mycomp{
+  var recofOper_myrecof1 v_def;
+  var recofOper_myrecof1 v_empty := {-,-,-,-,-,-,-,-,-,-};
+  var recofOper_myrecof1 v_full := {1,2,3,4,5,6,7,8,9,10}
+
+  if ( isbound(v_def) ) { setverdict(fail); }else { setverdict(pass); };
+  if ( isbound(v_empty) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isbound(v_empty[1]) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isbound(v_empty[0]) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isbound(v_full[1]) ) { setverdict(pass); } else { setverdict(fail); };
+
+  v_def[1] := 3;
+  if ( isbound(v_def) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isbound(v_def[1]) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isbound(v_def[0]) ) { setverdict(fail); } else { setverdict(pass); };
+
+  v_empty[0] := 17; // not empty anymore
+  if ( isbound(v_empty[0]) ) { setverdict(pass); } else { setverdict(fail); };
+
+  template intreclist it1 := { { a := { 1, 2, 3 } } };
+  template intreclist it2 modifies it1 := { { a := { 1, 2, -, -, -, 100 } } };
+  template intrec itt1               := { a := { 1, 2, 3 } };
+  template intrec itt2 modifies itt1 := { a := { 1, 2, -, -, -, 100 } };
+  if (isbound (it1)) { setverdict(pass); } else { setverdict(fail); };
+  if (isbound (it2)) { setverdict(pass); } else { setverdict(fail); };
+  if (isbound (itt1)) { setverdict(pass); } else { setverdict(fail); };
+  if (isbound (itt2)) { setverdict(pass); } else { setverdict(fail); };
+
+  var  threeD d3_emtpy;
+  const threeD d3 := {
+    {
+        { 1,2,3 },
+        { 1,2,3 },
+        { 1,2,3 }
+    },
+    {
+        { 1,2,3 },
+        { 1,2,3 },
+        { 1,2,3 }
+    },
+    {
+        { 1,2,3 },
+        { 1,2,3 },
+        { 1,2,3 }
+    }
+  }
+  var threeD nowhere := {
+  { {-,1,-},{-,1,-},{-,1,-} },
+  { {-,1,-},{-,-,-},{-,1,-} },
+  { {-,1,-},{-,1,-},{-,1,-} }
+  }
+
+  if ( isbound(d3_emtpy) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isbound(d3_emtpy[0]) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isbound(d3_emtpy[0][1]) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isbound(d3_emtpy[0][1][2]) ) { setverdict(fail); } else { setverdict(pass); };
+  
+  if ( isbound(nowhere) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isbound(nowhere[1]) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isbound(nowhere[1][1]) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isbound(nowhere[1][1][1]) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isbound(d3) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isbound(d3[0]) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isbound(d3[0][1]) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isbound(d3[0][1][2]) ) { setverdict(pass); } else { setverdict(fail); };
+}
+
+testcase recofCompConst() runs on recofOper_mycomp{
+  const recofOper_myrecof1 c_r1 := { 1,2,3,4};
+  const recofOper_myrecof1 c_r2 := { 1,2,3,4};
+  const recofOper_myrecof1 c_r3 := { 4,3,2,1};
+  const recofOper_myrecof1 c_r4_ind := { [0] := 1, [1] := 2, [2] := 3, [3] := 4};
+  const recofOper_myrecof1 c_r5_ind := { [3] := 1, [1] := 2, [2] := 3, [0] := 4};
+  const recofOper_myrecof1 c_r6_ind := { [3] := 4, [1] := 2, [2] := 3, [0] := 1};  
+  const recofOper_myrecof1 c_r8_ind := { [0] := 1, [1] := 2, [2] := 3, [3] := 4};
+  
+  
+  var recofOper_myrecof1 vl_r7_ind := { [3] := 4, [1] := 2};
+
+  var recofOper_myrecof1 vl_r10 := { 1,2,3,4};
+  var recofOper_myrecof1 vl_r11 := { 1,2,3,4};
+  
+  if(c_r1 == c_r1) {setverdict(pass);}
+  else {setverdict(fail);}
+  
+  if(c_r1 == c_r2) {setverdict(pass);}
+  else {setverdict(fail);}
+
+  if(c_r1 == c_r4_ind) {setverdict(pass);}
+  else {setverdict(fail);}
+  
+  if(c_r4_ind == c_r4_ind) {setverdict(pass);}
+  else {setverdict(fail);}
+  
+  if(c_r1 == c_r6_ind) {setverdict(pass);}
+  else {setverdict(fail);}
+
+
+  if(c_r1 != vl_r7_ind) {setverdict(pass);}
+  else { setverdict(fail);}
+
+  if(c_r4_ind == c_r8_ind) {setverdict(pass); }
+  else {setverdict(fail);}
+
+  if(vl_r10 == vl_r11) {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+type record length(10) of integer MyRecordOfType10
+type record length(0..10) of integer MyRecordOfType0_10
+type record length(10..infinity) of integer MyRecordOfType10up
+type record length(0..10) of charstring StringArray length(12)
+type record of record of charstring StringArrayTwo length(12)
+type record of charstring MyRecof2 ("a", "aa", "aaa", "aaaa") length(2)
+type record length(2) of charstring MyRecof3 ("a", "aa", "aaa", "aaaa")
+type record length(2) of charstring MyRecof4 ("a", "aa", "aaa", "aaaa") length(2)
+// TODO: Add additional subtypes here.
+type MyRecof2 MyRecof5
+type MyRecof3 MyRecof6
+type MyRecof4 MyRecof7
+type MyRecof2 MyRecof8 ({"aa"})
+type record of integer MyRecof9 (1..10, 100)
+
+const MyRecof2 c_myrecof1 := {}
+const MyRecof2 c_myrecof2 := {"aa", "aa"}
+const MyRecof2 c_myrecof3 := {c_myrecof2[0], c_myrecof2[1]}
+const MyRecof3 c_myrecof4 := {"a", "aa"}
+const MyRecof3 c_myrecof5 := {c_myrecof4[0], c_myrecof4[1]}
+const MyRecof4 c_myrecof6 := {"aa", "aa"}
+const MyRecof4 c_myrecof7 := {c_myrecof6[0], c_myrecof6[1]}
+const MyRecof8 c_myrecof8 := {"aa"}
+const MyRecof9 c_myrecof9 := {1, 100}
+
+template MyRecof2 t_myrecof1 := {}
+template MyRecof2 t_myrecof2 := {"aa", "aa"}
+template MyRecof2 t_myrecof3 := c_myrecof2
+template MyRecof3 t_myrecof4 := {"a", "aa"}
+template MyRecof3 t_myrecof5 := c_myrecof5
+template MyRecof4 t_myrecof6 := {"aa", "aa"}
+template MyRecof4 t_myrecof7 := c_myrecof7
+template MyRecof8 t_myrecof8 := {"aa"}
+template MyRecof9 t_myrecof9 := {1, 100} length(2)
+
+testcase recofSubtype() runs on recofOper_mycomp {
+  var template MyRecordOfType10 vt_myrecof1 := { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }
+  var MyRecordOfType10 v_myrecof1 := { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }
+  if (substr(v_myrecof1, 0, 2) == substr(vt_myrecof1, 1, 2)) { setverdict(pass) }
+  else { setverdict(fail) }
+}
+
+type record of charstring ROC;
+type record of integer  ROI;
+type record MyRecord1 {
+  integer       i optional,
+  float         x optional,
+  charstring    c
+}
+
+type record of ROI ROROI;
+
+type union MyUnion1 {
+  ROC roc,
+  integer i,
+  ROI roi,
+  MyRecord1 r
+}
+
+type record MyRec2 {
+  ROC roc optional,
+  ROI roi optional,
+  MyUnion1 u optional, 
+  MyRecord1 r optional
+}
+
+type record of MyRec2 MyRecOf
+
+type record MyRec3 {
+  ROROI roroi optional,
+  MyRec2 r optional
+}
+
+const MyRec2 c_myrec2_1:={ 
+  roc:=omit,
+  roi:={},
+  u:={r:={ i:=1, x:=1.0, c:="one"}},
+  r:={ i:=1, x:=1.0, c:="one"}
+}
+
+const MyRec3 c_myrec3_1 := {
+  roroi:= { {1,2,3,4,5,6,7,8,9},{10} },
+  r:= omit
+}
+
+const MyRec3 c_myrec3_2 := {
+  roroi:= { {1,2,3,4,5,6,7,8,9},{10} },
+  r:= {
+    roc:={},
+    roi:={},
+    u:={i:=5},
+    r:=omit
+  }
+} 
+
+const MyRec3 c_myrec3_innerOmits := {
+  roroi:= { {1,2,3,4,5,6,7,8,9},{10} },
+  r:= {
+    roc:=omit,
+    roi:=omit,
+    u:=omit,
+    r:=omit
+  }
+} 
+
+testcase tc_recordOf_omit1() runs on recofOper_mycomp {
+  var MyRec2 vl_r1:=c_myrec2_1;
+  if(isbound(vl_r1.roc)){setverdict(pass)}else {setverdict(fail)};
+  var MyRec2 vl_r2:=c_myrec2_1;
+  if(isbound(vl_r2.roc[0])){setverdict(fail)}else {setverdict(pass)};
+  var MyRec2 vl_r3:=c_myrec2_1;
+  if(isbound(vl_r3.roi)){setverdict(pass)}else {setverdict(fail)};
+  var MyRec2 vl_r4:=c_myrec2_1;
+  if(isbound(vl_r4.roi[0])){setverdict(fail)}else {setverdict(pass)};
+  var MyRec2 vl_r5:=c_myrec2_1;
+  if(isbound(vl_r5.roi[90])){setverdict(fail)}else {setverdict(pass)};
+}
+
+testcase tc_recordOf_union() runs on recofOper_mycomp {
+  var MyRec2 vl_r:=c_myrec2_1;
+  if(isbound(vl_r.u)){setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vl_r.u.r)){setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vl_r.u.r.i)){setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vl_r.u.r.x)){setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vl_r.u.r.c)){setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vl_r.u.roi)){setverdict(fail)}else {setverdict(pass)};
+  if(isbound(vl_r.u.roi[3])){setverdict(fail)}else {setverdict(pass)};
+  if(isbound(vl_r.u.i)){setverdict(fail)}else {setverdict(pass)};
+  if(isbound(vl_r.u.roc)){setverdict(fail)}else {setverdict(pass)};
+  if(isbound(vl_r.u.roc[0])){setverdict(fail)}else {setverdict(pass)}; 
+}
+
+testcase tc_recordOf_recordOfRecordOfInt() runs on recofOper_mycomp {
+  var MyRec3 vl_r:=c_myrec3_1;
+  if(isbound(vl_r.roroi)){setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vl_r.roroi[0])){setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vl_r.roroi[1])){setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vl_r.roroi[2])){setverdict(fail)}else {setverdict(pass)};
+  if(isbound(vl_r.roroi[200])){setverdict(fail)}else {setverdict(pass)};
+  if(isbound(vl_r.roroi[0][0])){setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vl_r.roroi[0][8])){setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vl_r.roroi[0][9])){setverdict(fail)}else {setverdict(pass)};
+  if(isbound(vl_r.roroi[1][0])){setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vl_r.roroi[1][1])){setverdict(fail)}else {setverdict(pass)};
+  if(isbound(vl_r.roroi[2][0])){setverdict(fail)}else {setverdict(pass)};
+}
+
+testcase tc_recordOf_recordInRecord() runs on recofOper_mycomp {
+  var MyRec3 vl_r:=c_myrec3_2;
+  if(isbound(vl_r.r)) {setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vl_r.r.roc)) {setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vl_r.r.roi)) {setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vl_r.r.u)) {setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vl_r.r.u)) {setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vl_r.r.u.i)) {setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vl_r.r.r)) {setverdict(pass)}else {setverdict(fail)};  //fails!
+}
+
+testcase tc_recordOf_recordInRecord_innerOmits() runs on recofOper_mycomp {
+  var MyRec3 vl_r:=c_myrec3_innerOmits;
+  if(isbound(vl_r.roroi)) {setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vl_r.r)) {setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vl_r.r.roc)) {setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vl_r.r.roi)) {setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vl_r.r.u)) {setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vl_r.r.r)){setverdict(pass)}else {setverdict(fail)};
+}
+
+  testcase tc_recordOf_union_ispresent() runs on recofOper_mycomp {
+    var MyRec2 vl_r:=c_myrec2_1;
+    if(ispresent(vl_r.u)){setverdict(pass)}else {setverdict(fail)};
+    if(ispresent(vl_r.u.r)){setverdict(pass)}else {setverdict(fail)};
+    if(ispresent(vl_r.u.r.i)){setverdict(pass)}else {setverdict(fail)};
+    if(ispresent(vl_r.u.r.x)){setverdict(pass)}else {setverdict(fail)};
+    if(ispresent(vl_r.u.r.c)){setverdict(pass)}else {setverdict(fail)};
+    if(ispresent(vl_r.u.roi)){setverdict(fail)}else {setverdict(pass)};
+    if(ispresent(vl_r.u.roi[3])){setverdict(fail)}else {setverdict(pass)};
+    if(ispresent(vl_r.u.i)){setverdict(fail)}else {setverdict(pass)};
+    if(ispresent(vl_r.u.roc)){setverdict(fail)}else {setverdict(pass)};
+    if(ispresent(vl_r.u.roc[0])){setverdict(fail)}else {setverdict(pass)}; 
+  }
+
+  testcase tc_recordOf_recordOfRecordOfInt_ispresent() runs on recofOper_mycomp {
+    var MyRec3 vl_r:=c_myrec3_1;
+    if(ispresent(vl_r.roroi)){setverdict(pass)}else {setverdict(fail)};
+    if(ispresent(vl_r.roroi[0])){setverdict(pass)}else {setverdict(fail)};
+    if(ispresent(vl_r.roroi[1])){setverdict(pass)}else {setverdict(fail)};
+    if(ispresent(vl_r.roroi[2])){setverdict(fail)}else {setverdict(pass)};
+    if(ispresent(vl_r.roroi[200])){setverdict(fail)}else {setverdict(pass)};
+    if(ispresent(vl_r.roroi[0][0])){setverdict(pass)}else {setverdict(fail)};
+  }
+
+  testcase tc_recordOf_recordOfRecordOfInt2() runs on recofOper_mycomp {
+    var MyRec3 vl_r:=c_myrec3_1;
+    if(ispresent(vl_r.roroi[0][8])){setverdict(pass)}else {setverdict(fail)};
+    if(ispresent(vl_r.roroi[0][9])){setverdict(fail)}else {setverdict(pass)};
+    if(ispresent(vl_r.roroi[1][0])){setverdict(pass)}else {setverdict(fail)};
+    if(ispresent(vl_r.roroi[1][1])){setverdict(fail)}else {setverdict(pass)};
+    if(ispresent(vl_r.roroi[2][0])){setverdict(fail)}else {setverdict(pass)};
+  }
+
+  testcase tc_recordOf_recordInRecord_ispresent() runs on recofOper_mycomp {
+    var MyRec3 vl_r:=c_myrec3_2;
+    if(ispresent(vl_r.r)) {setverdict(pass)}else {setverdict(fail)};
+    if(ispresent(vl_r.r.roc)) {setverdict(pass)}else {setverdict(fail)};
+    if(ispresent(vl_r.r.roi)) {setverdict(pass)}else {setverdict(fail)};
+    if(ispresent(vl_r.r.u)) {setverdict(pass)}else {setverdict(fail)};
+    if(ispresent(vl_r.r.u)) {setverdict(pass)}else {setverdict(fail)};
+    if(ispresent(vl_r.r.u.i)) {setverdict(pass)}else {setverdict(fail)};
+  }
+
+  testcase tc_recordOf_recordInRecord2() runs on recofOper_mycomp {
+    var MyRec3 vl_r:=c_myrec3_2;
+    if(ispresent(vl_r.r.r)) {setverdict(fail)}else {setverdict(pass)}; 
+  }
+  
+  testcase tc_recordOf_recordInRecord_innerOmits_ispresent() runs on recofOper_mycomp {
+    var MyRec3 vl_r:=c_myrec3_innerOmits;
+    if(ispresent(vl_r.roroi)) {setverdict(pass)}else {setverdict(fail)};
+    if(ispresent(vl_r.r)) {setverdict(pass)}else {setverdict(fail)};
+    if(ispresent(vl_r.r.roc)) {setverdict(fail)}else {setverdict(pass)};
+    if(ispresent(vl_r.r.roi)) {setverdict(fail)}else {setverdict(pass)};
+    if(ispresent(vl_r.r.u)) {setverdict(fail)}else {setverdict(pass)};
+    if(ispresent(vl_r.r.r)){setverdict(fail)}else {setverdict(pass)};
+  }
+
+type record length(6) of integer MyArray6;
+
+//TR: HO84027
+testcase tc_sizeof_lengthof_roi_bugs() runs on recofOper_mycomp {
+  var template ROI vlt_roi :={}
+  var integer vl_array[6];  
+  var MyArray6 vl_array6;
+  var template MyArray6 vlt_array6;
+
+  vlt_roi[0]:=0;
+  vlt_roi[5]:=0;
+
+  vl_array[0]:=0;
+  vl_array[4]:=0;
+
+  vl_array6[0]:=0;
+  vl_array6[4]:=0;
+
+  vlt_array6[0]:=0;
+  vlt_array6[4]:=0;
+
+  if(sizeof(vlt_roi)==6)     { setverdict(pass) } else { setverdict(fail) };
+  if(lengthof(vlt_roi)==6)   { setverdict(pass) } else { setverdict(fail) };
+
+  if(sizeof(vl_array)==6)    { setverdict(pass) } else { setverdict(fail) };
+  if(lengthof(vl_array)==5)  { setverdict(pass) } else { setverdict(fail) };
+
+  if(sizeof(vl_array6)==5)   { setverdict(pass) } else { setverdict(fail) };
+  if(lengthof(vl_array6)==5) { setverdict(pass) } else { setverdict(fail) };
+  
+  if(sizeof(vlt_array6)==5)  { setverdict(pass) } else { setverdict(fail) };
+  if(lengthof(vlt_array6)==5){ setverdict(pass) } else { setverdict(fail) };
+}
+
+//testcase tc_sizeof_lengthof_standard1() runs on recofOper_mycomp {
+//  if(lengthof(bitstring : '010'B) == 3) { setverdict(pass)} else { setverdict(fail) };
+//  if(lengthof(hexstring : 'F3'H) == 2) { setverdict(pass)} else { setverdict(fail) };
+//  if(lengthof(octetstring : 'F2'O) == 1) { setverdict(pass)} else { setverdict(fail) };
+//  if(lengthof (universal charstring : "Length_of_Example")==17) { setverdict(pass)}else { setverdict(fail) };
+//  if(lengthof(charstring : "HELLO") == 5) { setverdict(pass)}else { setverdict(fail) };
+//  if(lengthof(octetstring : ('12'O, '34'O))==1){ setverdict(pass)}else { setverdict(fail) };
+//  if(lengthof('1??1'B)==4){ setverdict(pass)}else { setverdict(fail) };
+//  if(lengthof(universal charstring : ? length(8))==8 ) { setverdict(pass)}else { setverdict(fail) }; //DTE
+//  if(lengthof('1*F'H length (8)) ==8){ setverdict(pass)}else { setverdict(fail) };
+////  if(lengthof('00*FF'O length(1..2))==2) { setverdict(pass)}else { setverdict(fail) };
+//}
+
+type record length(0..10) of integer MyList;
+
+testcase tc_sizeof_lengthof_standard2() runs on recofOper_mycomp {
+  var MyList vl_MyListVar := { 0, 1, -, 2, - };
+  log("vl_MyListVar: ",vl_MyListVar);
+  if(lengthof(vl_MyListVar)==4) { setverdict(pass)}else { setverdict(fail) };
+}
+
+testcase tc_sizeof_lengthof_standard4() runs on recofOper_mycomp {
+  template ROI tr_roI3 := { 1, *, 10 } length(5) 
+  if(lengthof(tr_roI3)==5){ setverdict(pass)}else { setverdict(fail) };
+}
+
+testcase tc_sizeof_lengthof_standard6() runs on recofOper_mycomp {
+  template ROI tr_roI5 := { 1, 2, 3, * } length(1..3) 
+  if(lengthof(tr_roI5)==3) { setverdict(pass)}else { setverdict(fail) };
+}
+
+// test cases for bug 494614:
+// when initializing a record-of-record element with an empty value ('{}') through module parameters,
+// an actual unbound record element was created, instead of the usual null pointer used for unbound elements;
+// copying this empty record caused a dynamic test case error
+
+//modulepar recofOper_myrecof3 recofOper_mymodulepar; // initialized with value list notation
+//modulepar recofOper_myrecof3 recofOper_mymodulepar2; // initialized with assignment notation
+
+//testcase tc_empty_record_element() runs on recofOper_mycomp {
+//  var recofOper_myrecof3 copy := recofOper_mymodulepar;
+//  copy[0].x1 := omit; // this is where the record-of is actually copied, and where the DTE occured
+//  copy[0].x2 := 1.0;
+//  if (copy == { { omit, 1.0 } }) { setverdict(pass); }
+//  else { setverdict(fail); }
+//}
+//
+//testcase tc_empty_record_element2() runs on recofOper_mycomp {
+//  var recofOper_myrecof3 copy := recofOper_mymodulepar2;
+//  copy[0].x1 := omit; // this is where the record-of is actually copied, and where the DTE occured
+//  copy[0].x2 := 1.0;
+//  if (copy == { { omit, 1.0 } }) { setverdict(pass); }
+//  else { setverdict(fail); }
+//}
+
+control {
+  const recofOper_trecord cl_temp1:={ x1:=omit, x2:=3.4 }; // constants in the control part
+  const recofOper_trecof cl_temp2:={ 'AF12'O };
+  const recofOper_tset cl_temp3:={ x1:=234, x2:=1.9};
+  const recofOper_tsetof cl_temp4:={"f","8"};
+  const recofOper_tunion cl_temp5:={ x2:=1.3 };
+  const recofOper_trecord vl_temp1:={ x1:=omit, x2:=3.4 }; // variables in the control part
+  const recofOper_trecof vl_temp2:={ 'AF12'O };
+  const recofOper_tset vl_temp3:={ x1:=234, x2:=1.9};
+  const recofOper_tsetof vl_temp4:={"f","8"};
+  const recofOper_tunion vl_temp5:={ x2:=1.3 };
+
+  execute(recofAssign());
+  execute(recofReAssign());
+  execute(recofAssignEnum());
+  execute(recofAssignRec());
+  execute(recofAssignRecof());
+  execute(recofAssignSet());
+  execute(recofAssignSetof());
+  execute(recofAssignUnion());
+  execute(recofAssignElem());
+  execute(recofAssignElemEnum());
+  execute(recofAssignElemRec());
+  execute(recofAssignElemRecof());
+  execute(recofAssignElemSet());
+  execute(recofAssignElemSetof());
+  execute(recofAssignElemUnion());
+  execute(recofConst());
+  execute(recofConstEnum());
+  execute(recofConstRec());
+  execute(recofConstRecof());
+  execute(recofConstSet());
+  execute(recofConstSetof());
+  execute(recofConstUnion());
+  execute(recofComp());
+  execute(recofCompConst());
+  execute(recofCompEnum());
+  execute(recofCompRec());
+  execute(recofCompRecof());
+  execute(recofCompSet());
+  execute(recofCompSetof());
+  execute(recofCompUnion());  
+  execute(recofEmpty());
+
+  execute(recofListOperator());
+  execute(recofRotateOperators());
+  execute(recofLengthof());
+  execute(recofSizeof());
+  execute(recofReplace());
+  execute(recofReplaceEmpty());
+  execute(recofSubstr());
+  execute(recofIsvalue());
+  execute(recofIsvalue2());
+  execute(recofIsbound());
+
+  execute(recofSubtype());
+  
+  execute(tc_recordOf_omit1());
+  execute(tc_recordOf_union());
+  execute(tc_recordOf_recordOfRecordOfInt());
+  execute(tc_recordOf_recordInRecord());
+  execute(tc_recordOf_recordInRecord_innerOmits());
+  execute(tc_recordOf_union_ispresent());
+  execute(tc_recordOf_recordOfRecordOfInt_ispresent());
+  execute(tc_recordOf_recordOfRecordOfInt2());
+  execute(tc_recordOf_recordInRecord_ispresent());
+  execute(tc_recordOf_recordInRecord2());
+  execute(tc_recordOf_recordInRecord_innerOmits_ispresent());
+  execute(tc_sizeof_lengthof_roi_bugs());
+//  execute(tc_sizeof_lengthof_standard1());
+  execute(tc_sizeof_lengthof_standard2());
+  execute(tc_sizeof_lengthof_standard4());
+  execute(tc_sizeof_lengthof_standard6());
+  
+//  execute(tc_empty_record_element());
+//  execute(tc_empty_record_element2());
+}
+
+}
diff --git a/Regression_Test_java/src/TrecordOper.ttcn b/Regression_Test_java/src/TrecordOper.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..0ebc838203c4598dad7efddfd674a0904dfbf093
--- /dev/null
+++ b/Regression_Test_java/src/TrecordOper.ttcn
@@ -0,0 +1,2405 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Baranyi, Botond
+ *   Beres, Szabolcs
+ *   Kovacs, Ferenc
+ *   Raduly, Csaba
+ *   Szabados, Kristof
+ *   Szabo, Janos Zoltan – initial implementation
+ *
+ ******************************************************************************/
+module TrecordOper {
+// ********** Type definitions  *********************
+type component recordOper_mycomp {};
+type enumerated recordOper_myenum {xx1,xx2,xx3};
+type record recordOper_empty {};
+type record recordOper_trecord {
+	integer x1 optional,
+	float x2 };
+type record of octetstring recordOper_trecof;
+type set recordOper_tset {
+	integer x1,
+	float x2 optional };
+type set of charstring recordOper_tsetof;
+type union recordOper_tunion {
+	integer x1,
+	float x2 };
+type record recordOper_myrec1 {	// record from basic types
+	integer x1,
+	float x2,
+	recordOper_myenum x3 };
+type record recordOper_myrec2 {	// record from basic types, with optional field
+	integer x1,
+	float x2,
+	recordOper_myenum x3,
+	integer x4 optional };
+type record recordOper_myrec3 {	 // record from record, with optional field
+	recordOper_trecord x1,
+	recordOper_trecord x2 optional
+	};
+type record recordOper_myrec4 {	 // record from record of, with optional field
+	recordOper_trecof x1,
+	recordOper_trecof x2 optional
+	};
+type record recordOper_myrec5 {	 // record from set, with optional field
+	recordOper_tset x1,
+	recordOper_tset x2 optional
+	};
+type record recordOper_myrec6 {	 // record from set of, with optional field
+	recordOper_tsetof x1,
+	recordOper_tsetof x2 optional
+	};
+type record recordOper_myrec7 {	 // record from union, with optional field
+	recordOper_tunion x1,
+	recordOper_tunion x2 optional
+	};
+type record typedefrecordComp_myrec { // testing complex content
+	recordOper_trecord x1,
+	recordOper_trecof x2,
+	recordOper_tset x3,
+	recordOper_tsetof x4 optional,
+	recordOper_tunion x5,
+	integer x6[3]
+};
+type record recordOper_myrec8{
+	integer f1 optional,
+	charstring f2 optional
+	};
+type record recordOper_myrec9 { // test for the assignment of optional fields
+  integer f1 optional,
+  integer f2 optional
+};
+// *************** Constanst ***********************
+const recordOper_trecord recordOper_temp1:={ x1:=omit, x2:=3.4 };
+const recordOper_trecof recordOper_temp2:={ 'AF12'O };
+const recordOper_tset recordOper_temp3:={ x1:=234, x2:=1.9};
+const recordOper_tsetof recordOper_temp4:={"f","8"};
+const recordOper_tunion recordOper_temp5:={ x2:=1.3 };
+const recordOper_myrec1 recordOper_const1:={	//record with basic types
+x1:=1,
+x2:=1.2,
+x3:=xx2 };
+const recordOper_myrec2 recordOper_const2:={	//record with basic types, with optional field
+x1:=1,
+x2:=1.2,
+x3:=xx2,
+x4:=2 };
+const recordOper_myrec2 recordOper_const3:={	//record with basic types, with omited field
+x1:=1,
+x2:=1.2,
+x3:=xx2,
+x4:=omit };
+const recordOper_myrec3 recordOper_const4:={   //record from record
+ x1:={ x1:=1, x2:=1.2 },
+ x2:=recordOper_temp1
+};
+const recordOper_myrec3 recordOper_const5:={   //record from record, with omited field
+ x1:={ x1:=1, x2:=1.2 },
+ x2:=omit
+};
+const recordOper_myrec4 recordOper_const6:={   //record from record of
+ x1:={ '12AB'O, 'CD12'O },
+ x2:=recordOper_temp2
+};
+const recordOper_myrec4 recordOper_const7:={   //record from record of, with omited field
+ x1:={ '12AB'O, 'CD12'O },
+ x2:=omit
+};
+const recordOper_myrec5 recordOper_const8:={   //record from set
+ x1:={ x1:=2, x2:=1.3},
+ x2:=recordOper_temp3
+};
+const recordOper_myrec5 recordOper_const9:={   //record from set, with omited field
+ x1:={ x1:=2, x2:=1.3},
+ x2:=omit
+};
+const recordOper_myrec6 recordOper_const10:={   //record from set of
+ x1:={"a","b"},
+ x2:=recordOper_temp4  //{"f","8"},
+};
+const recordOper_myrec6 recordOper_const11:={   //record from set of, with omited field
+ x1:={"a","b"},
+ x2:=omit
+};
+const recordOper_myrec7 recordOper_const12:={   //record from union
+ x1:={ x1 :=3 },
+ x2:=recordOper_temp5  //{ x2:=1.3 }
+};
+const recordOper_myrec7 recordOper_const13:={   //record from union, with omited field
+ x1:={ x1 :=3 },
+ x2:=omit
+};
+const typedefrecordComp_myrec recordOper_const14 := {  // complex record
+  x1 := { x1:=omit, x2:=3.4 },
+  x2 := { 'AF12'O },
+  x3 := { x1:=234, x2:=1.9},
+  x4 := {"f","8"},
+  x5 := { x2:=1.3 },
+  x6 := {1,2,3}
+}
+
+testcase recordAssign() runs on recordOper_mycomp{
+var recordOper_myrec1 x1:={	//record with basic types
+x1:=1,
+x2:=1.2,
+x3:=xx2 };
+var recordOper_myrec1 x2;
+  x2:={ x1:=1, x2:=1.2, x3:=xx2 };
+var recordOper_myrec1 x3 := {};
+if (x1.x1==1) {setverdict(pass);}	//at declaration
+     else {setverdict(fail);}
+if (x1.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1.x3==xx2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.x1==1) {setverdict(pass);}	//later
+     else {setverdict(fail);}
+if (x2.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.x3==xx2) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+// test some incomplete assignment cases.
+testcase recordAssignIncomplete() runs on recordOper_mycomp{
+var recordOper_myrec1 x1:={ x1:=1, x2:=1.2};
+  if(x1.x1==1) {setverdict(pass);}
+  else {setverdict(fail);}
+  if(x1.x2==1.2) {setverdict(pass);}
+  else {setverdict(fail);}
+  if(not(isbound(x1.x3))) {setverdict(pass);}
+  else {setverdict(fail);}
+
+x1 := {2, -, -};
+  if(x1.x1==2) {setverdict(pass);}
+  else {setverdict(fail);}
+  if(x1.x2==1.2) {setverdict(pass);}
+  else {setverdict(fail);}
+  if(not(isbound(x1.x3))) {setverdict(pass);}
+  else {setverdict(fail);}
+
+x1:= { x1 := -, x2:=2.2, x3 := -};
+  if(x1.x1==2) {setverdict(pass);}
+  else {setverdict(fail);}
+  if(x1.x2==2.2) {setverdict(pass);}
+  else {setverdict(fail);}
+  if(not(isbound(x1.x3))) {setverdict(pass);}
+  else {setverdict(fail);}
+
+x1:= { x2:=3.2};
+  if(x1.x1==2) {setverdict(pass);}
+  else {setverdict(fail);}
+  if(x1.x2==3.2) {setverdict(pass);}
+  else {setverdict(fail);}
+  if(not(isbound(x1.x3))) {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+testcase recordAssignOpt() runs on recordOper_mycomp{
+var integer inttemp:=2;
+var recordOper_myrec2 x1:={	//record with basic types, with optional field
+x1:=1,
+x2:=1.2,
+x3:=xx2,
+x4:=inttemp};  //2
+var recordOper_myrec2 x2:={	//record with basic types, with omited field
+x1:=1,
+x2:=1.2,
+x3:=xx2,
+x4:=omit };
+var recordOper_myrec2 x3, x4;
+x3:={	//record with basic types, with optional field
+x1:=1,
+x2:=1.2,
+x3:=xx2,
+x4:=inttemp };   //2
+x4:={	//record with basic types, with omited field
+x1:=1,
+x2:=1.2,
+x3:=xx2,
+x4:=omit };
+//at declaration, with optional field
+if (x1.x1==1) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1.x3==xx2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1.x4==2) {setverdict(pass);}
+     else {setverdict(fail);}
+//at declaration, with omited field
+if (x2.x1==1) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.x3==xx2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(x2.x4))) {setverdict(pass);}
+     else {setverdict(fail);}
+//later, with optional field
+if (x3.x1==1) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x3.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x3.x3==xx2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x3.x4==2) {setverdict(pass);}
+     else {setverdict(fail);}
+//later, with optional field
+if (x4.x1==1) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x4.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x4.x3==xx2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(x4.x4))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recordAssignRec() runs on recordOper_mycomp{
+var recordOper_trecord temp1:={ x1:=omit, x2:=3.4 };
+var recordOper_myrec3 x1:={   //record from record
+ x1:={ x1:=1, x2:=1.2 },
+ x2:=temp1
+};
+var recordOper_myrec3 x2:={   //record from record, with omited field
+ x1:={ x1:=1, x2:=1.2 },
+ x2:=omit
+};
+var recordOper_myrec3 x3,x4;
+x3:={   //record from record
+ x1:={ x1:=1, x2:=1.2 },
+ x2:=temp1
+};
+x4:={   //record from record, with omited field
+ x1:={ x1:=1, x2:=1.2 },
+ x2:=omit
+};
+if (x1.x1.x1==1) {setverdict(pass);}	//at declaration
+     else {setverdict(fail);}
+if (x1.x1.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1.x2==temp1) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.x1.x1==1) {setverdict(pass);}	//at declaration, omit
+     else {setverdict(fail);}
+if (x2.x1.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(x2.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x3.x1.x1==1) {setverdict(pass);}	//later
+     else {setverdict(fail);}
+if (x3.x1.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x3.x2==temp1) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x4.x1.x1==1) {setverdict(pass);}	//later, omit
+     else {setverdict(fail);}
+if (x4.x1.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(x4.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recordAssignRecof() runs on recordOper_mycomp{
+var recordOper_trecof temp2:={'AF12'O};
+var recordOper_myrec4 x1:={   //record from record of
+ x1:={ '12AB'O, 'CD12'O },
+ x2:=temp2
+};
+var recordOper_myrec4 x2:={   //record from record of, with omited field
+ x1:={ '12AB'O, 'CD12'O },
+ x2:=omit
+};
+var recordOper_myrec4 x3,x4
+x3:={   //record from record of
+ x1:={ '12AB'O, 'CD12'O },
+ x2:=temp2
+};
+x4:={   //record from record of, with omited field
+ x1:={ '12AB'O, 'CD12'O },
+ x2:=omit
+};
+if (x1.x1[0]=='12AB'O) {setverdict(pass);}	//at declaration
+     else {setverdict(fail);}
+if (x1.x1[1]=='CD12'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1.x2==temp2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.x1[0]=='12AB'O) {setverdict(pass);}	//at declaration, omit
+     else {setverdict(fail);}
+if (x2.x1[1]=='CD12'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(x2.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x3.x1[0]=='12AB'O) {setverdict(pass);}	//later
+     else {setverdict(fail);}
+if (x3.x1[1]=='CD12'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x3.x2==temp2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x4.x1[0]=='12AB'O) {setverdict(pass);}	//later, omit
+     else {setverdict(fail);}
+if (x4.x1[1]=='CD12'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(x4.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recordAssignSet() runs on recordOper_mycomp{
+var recordOper_tset temp1:={ x1:=2, x2:=omit };
+var recordOper_myrec5 x1:={   //record from set
+ x1:={ x1:=1, x2:=1.2 },
+ x2:=temp1
+};
+var recordOper_myrec5 x2:={   //record from set, with omited field
+ x1:={ x1:=1, x2:=1.2 },
+ x2:=omit
+};
+var recordOper_myrec5 x3,x4;
+x3:={   //record from set
+ x1:={ x1:=1, x2:=1.2 },
+ x2:=temp1
+};
+x4:={   //record from set, with omited field
+ x1:={ x1:=1, x2:=1.2 },
+ x2:=omit
+};
+if (x1.x1.x1==1) {setverdict(pass);}	//at declaration
+     else {setverdict(fail);}
+if (x1.x1.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1.x2==temp1) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.x1.x1==1) {setverdict(pass);}	//at declaration, omit
+     else {setverdict(fail);}
+if (x2.x1.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(x2.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x3.x1.x1==1) {setverdict(pass);}	//later
+     else {setverdict(fail);}
+if (x3.x1.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x3.x2==temp1) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x4.x1.x1==1) {setverdict(pass);}	//later, omit
+     else {setverdict(fail);}
+if (x4.x1.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(x4.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recordAssignSetof() runs on recordOper_mycomp{
+var recordOper_tsetof temp2:={"a","7"};
+var recordOper_myrec6 x1:={   //record from set of
+ x1:={ "1", "a" },
+ x2:=temp2
+};
+var recordOper_myrec6 x2:={   //record from set of, with omited field
+ x1:={ "1", "a" },
+ x2:=omit
+};
+var recordOper_myrec6 x3,x4
+x3:={   //record from set of
+ x1:={ "1", "a" },
+ x2:=temp2
+};
+x4:={   //record from set of, with omited field
+ x1:={ "1","a" },
+ x2:=omit
+};
+if (x1.x1[0]=="1") {setverdict(pass);}	//at declaration
+     else {setverdict(fail);}
+if (x1.x1[1]=="a") {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1.x2==temp2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.x1[0]=="1") {setverdict(pass);}	//at declaration, omit
+     else {setverdict(fail);}
+if (x2.x1[1]=="a") {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(x2.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x3.x1[0]=="1") {setverdict(pass);}	//later
+     else {setverdict(fail);}
+if (x3.x1[1]=="a") {setverdict(pass);}
+     else {setverdict(fail);}
+if (x3.x2==temp2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x4.x1[0]=="1") {setverdict(pass);}	//later, omit
+     else {setverdict(fail);}
+if (x4.x1[1]=="a") {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(x4.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recordAssignUnion() runs on recordOper_mycomp{
+var recordOper_tunion temp5 := {x2:=1.3}
+var recordOper_myrec7 x1:={   //record from union
+ x1:={ x1 :=3 },
+ x2:=temp5  //{ x2:=1.3 }
+};
+var recordOper_myrec7 x2:={   //record from union, with omited field
+ x1:={ x1 :=3 },
+ x2:=omit
+};
+var recordOper_myrec7 x3,x4;
+x3:={   //record from union
+ x1:={ x1 :=3 },
+ x2:=temp5  //{ x2:=1.3 }
+};
+x4:={   //record from union, with omited field
+ x1:={ x1 :=3 },
+ x2:=omit
+};
+if (x1.x1.x1==3) {setverdict(pass);}	//at declaration
+     else {setverdict(fail);}
+if (ischosen(x1.x1.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1.x1.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1.x2==temp5) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.x1.x1==3) {setverdict(pass);}	//at declaration, omit
+     else {setverdict(fail);}
+if (ischosen(x2.x1.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2.x1.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(x2.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x3.x1.x1==3) {setverdict(pass);}	//later
+     else {setverdict(fail);}
+if (ischosen(x3.x1.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x3.x1.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x3.x2==temp5) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x4.x1.x1==3) {setverdict(pass);}	//later, omit
+     else {setverdict(fail);}
+if (ischosen(x4.x1.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x4.x1.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(x4.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recordAssignElem() runs on recordOper_mycomp{
+var recordOper_myrec1 x1:={	//record with basic types
+x1:=1,
+x2:=1.2,
+x3:=xx2 };
+x1.x2:=3.4;
+if (x1.x1==1) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1.x2==3.4) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1.x3==xx2) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+
+testcase recordAssignElemOpt() runs on recordOper_mycomp{
+var integer inttemp:=2;
+var recordOper_myrec2 x1:={	//record with basic types
+x1:=1,
+x2:=1.2,
+x3:=xx2,
+x4:=omit } ;  //2
+var recordOper_myrec2 x2, x3, x4;
+x2:=x1;
+x3:={x1:=1, x2:=1.2, x3:=xx2, x4:=inttemp };
+x4:=x2;
+x1.x1:=2;			//not optional field
+x2.x4:=3;			//optional field; omited-> value
+x3.x4:=3;			//optional field; value-> value
+x4.x4:=omit;			//optional field; value -> omited
+//change not optional field
+if (x1.x1==2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1.x3==xx2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(x1.x4))) {setverdict(pass);}
+     else {setverdict(fail);}
+//omited -> value
+if (x2.x1==1) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.x3==xx2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.x4==3) {setverdict(pass);}
+     else {setverdict(fail);}
+//optional field; value-> value
+if (x3.x1==1) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x3.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x3.x3==xx2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x3.x4==3) {setverdict(pass);}
+     else {setverdict(fail);}
+//optional field; value -> omited
+if (x4.x1==1) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x4.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x4.x3==xx2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(x4.x4))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recordAssignElemRec() runs on recordOper_mycomp{
+var recordOper_trecord temp1:={ x1:=omit, x2:=3.4 };
+var recordOper_myrec3 x1;
+x1:={   //record from record
+ x1:={ x1:=1, x2:=1.2 },
+ x2:=temp1
+};
+x1.x1.x1:=2;
+//temp1.x1:=3;
+//x1.x2:=temp1;
+if (x1.x1.x1==2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1.x1.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1.x2==temp1) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+
+testcase recordAssignElemRecof() runs on recordOper_mycomp{
+var recordOper_trecof temp2:={'AF12'O};
+var recordOper_myrec4 x1:={   //record from record of
+ x1:={ '12AB'O, 'CD12'O },
+ x2:=temp2
+};
+x1.x1[1]:='34AB'O;
+if (x1.x1[0]=='12AB'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1.x1[1]=='34AB'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1.x2==temp2) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recordAssignElemSet() runs on recordOper_mycomp{
+var recordOper_tset temp1:={ x1:=2, x2:=omit };
+var recordOper_myrec5 x1:={   //record from set
+ x1:={ x1:=1, x2:=1.2 },
+ x2:=temp1
+};
+x1.x1.x2:=3.4;
+if (x1.x1.x1==1) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1.x1.x2==3.4) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1.x2==temp1) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recordAssignElemSetof() runs on recordOper_mycomp{
+var recordOper_tsetof temp2:={"a","7"};
+var recordOper_myrec6 x1:={   //record from set of
+ x1:={ "1", "a" },
+ x2:=temp2
+};
+x1.x1[0]:="h";
+if (x1.x1[0]=="h") {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1.x1[1]=="a") {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1.x2==temp2) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recordAssignElemUnion() runs on recordOper_mycomp{
+var recordOper_tunion temp5 := {x2:=1.3}
+var recordOper_myrec7 x1:={   //record from union
+ x1:={ x1 :=3 },
+ x2:=temp5  //{ x2:=1.3 }
+};
+x1.x1.x2:=3.4;
+if (x1.x1.x2==3.4) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x1.x1.x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1.x1.x1))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1.x2==temp5) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recordSizeof() runs on recordOper_mycomp{
+var integer inttemp:=2;
+var recordOper_myrec2 x1:={	//record with basic types, with optional field
+x1:=1,
+x2:=1.2,
+x3:=xx2,
+x4:=inttemp};  //2
+var recordOper_myrec2 x2:={	//record with basic types, with omited field
+x1:=1,
+x2:=1.2,
+x3:=xx2,
+x4:=omit };
+var recordOper_myrec2 x3, x4;
+x3:={	//record with basic types, with optional field
+x1:=1,
+x2:=1.2,
+x3:=xx2,
+x4:=inttemp };   //2
+x4:={	//record with basic types, with omited field
+x1:=1,
+x2:=1.2,
+x3:=xx2,
+x4:=omit };
+var recordOper_myrec4 x5;
+x5.x1 := { '12AB'O, '12AB'O};
+x5.x2 := { '12AB'O, '12AB'O, '12AB'O};
+if (sizeof(x1)==4) {setverdict(pass);} //at declaration, with optional field
+     else {setverdict(fail);}
+if (sizeof(x2)==3) {setverdict(pass);}	//at declaration, with omited field
+     else {setverdict(fail);}
+if (sizeof(x3)==4) {setverdict(pass);}	//later, with optional field
+     else {setverdict(fail);}
+if (sizeof(x4)==3) {setverdict(pass);}	//testcase, with optional field
+     else {setverdict(fail);}
+if (sizeof(x5.x1)==2 and sizeof(x5.x2) == 3) {setverdict(pass);}	//testcase, with optional field
+     else {setverdict(fail);}
+}
+
+testcase recordConst() runs on recordOper_mycomp{
+const recordOper_myrec1 const1:={	//record with basic types
+x1:=1,
+x2:=1.2,
+x3:=xx2 };
+if (recordOper_const1.x1==1) {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+if (recordOper_const1.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (recordOper_const1.x3==xx2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const1.x1==1) {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+if (const1.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const1.x3==xx2) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recordConstOpt() runs on recordOper_mycomp{
+const recordOper_myrec2 const2:={	//record with basic types, with optional field
+x1:=1,
+x2:=1.2,
+x3:=xx2,
+x4:=2 };
+const recordOper_myrec2 const3:={	//record with basic types, with omited field
+x1:=1,
+x2:=1.2,
+x3:=xx2,
+x4:=omit };
+//definition part, with optional field
+if (recordOper_const2.x1==1) {setverdict(pass);}
+     else {setverdict(fail);}
+if (recordOper_const2.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (recordOper_const2.x3==xx2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (recordOper_const2.x4==2) {setverdict(pass);}
+     else {setverdict(fail);}
+//definition part, with omited field
+if (recordOper_const3.x1==1) {setverdict(pass);}
+     else {setverdict(fail);}
+if (recordOper_const3.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (recordOper_const3.x3==xx2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(recordOper_const3.x4))) {setverdict(pass);}
+     else {setverdict(fail);}
+//testcase, with optional field
+if (const2.x1==1) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const2.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const2.x3==xx2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const2.x4==2) {setverdict(pass);}
+     else {setverdict(fail);}
+//testcase, with omited field
+if (const3.x1==1) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const3.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const3.x3==xx2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(const3.x4))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recordConstRec() runs on recordOper_mycomp{
+const recordOper_myrec3 const4:={   //record from record
+ x1:={ x1:=1, x2:=1.2 },
+ x2:=recordOper_temp1
+};
+const recordOper_myrec3 const5:={   //record from record, with omited field
+ x1:={ x1:=1, x2:=1.2 },
+ x2:=omit
+};
+if (recordOper_const4.x1.x1==1) {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+if (recordOper_const4.x1.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (recordOper_const4.x2==recordOper_temp1) {setverdict(pass);}
+     else {setverdict(fail);}
+if (recordOper_const5.x1.x1==1) {setverdict(pass);}	//definition part, omit
+     else {setverdict(fail);}
+if (recordOper_const5.x1.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(recordOper_const5.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const4.x1.x1==1) {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+if (const4.x1.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const4.x2==recordOper_temp1) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const5.x1.x1==1) {setverdict(pass);}	//testcase, omit
+     else {setverdict(fail);}
+if (const5.x1.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(const5.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recordConstRecof() runs on recordOper_mycomp{
+const recordOper_myrec4 const6:={   //record from record of
+ x1:={ '12AB'O, 'CD12'O },
+ x2:=recordOper_temp2
+};
+const recordOper_myrec4 const7:={   //record from record of, with omited field
+ x1:={ '12AB'O, 'CD12'O },
+ x2:=omit
+};
+if (recordOper_const6.x1[0]=='12AB'O) {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+if (recordOper_const6.x1[1]=='CD12'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (recordOper_const6.x2==recordOper_temp2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (recordOper_const7.x1[0]=='12AB'O) {setverdict(pass);}	//definition part, omit
+     else {setverdict(fail);}
+if (recordOper_const7.x1[1]=='CD12'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(recordOper_const7.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const6.x1[0]=='12AB'O) {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+if (const6.x1[1]=='CD12'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const6.x2==recordOper_temp2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const7.x1[0]=='12AB'O) {setverdict(pass);}	//testcase, omit
+     else {setverdict(fail);}
+if (const7.x1[1]=='CD12'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(const7.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recordConstSet() runs on recordOper_mycomp{
+const recordOper_myrec5 const8:={   //record from set
+ x1:={ x1:=2, x2:=1.3},
+ x2:=recordOper_temp3
+};
+const recordOper_myrec5 const9:={   //record from set, with omited field
+ x1:={ x1:=2, x2:=omit},
+ x2:=omit
+};
+if (recordOper_const8.x1.x1==2) {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+if (recordOper_const8.x1.x2==1.3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (recordOper_const8.x2==recordOper_temp3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (recordOper_const9.x1.x1==2) {setverdict(pass);}	//definition part, omit
+     else {setverdict(fail);}
+if (recordOper_const9.x1.x2==1.3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(recordOper_const9.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const8.x1.x1==2) {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+if (const8.x1.x2==1.3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const8.x2==recordOper_temp3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const9.x1.x1==2) {setverdict(pass);}	//testcase, omit
+     else {setverdict(fail);}
+if (not(ispresent(const9.x1.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(const9.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recordConstSetof() runs on recordOper_mycomp{
+const recordOper_myrec6 const10:={   //record from set of
+ x1:={"a","b"},
+ x2:=recordOper_temp4  //{"f","8"},
+};
+const recordOper_myrec6 const11:={   //record from set of, with omited field
+ x1:={"a","b"},
+ x2:=omit
+};
+if (recordOper_const10.x1[0]=="a") {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+if (recordOper_const10.x1[1]=="b") {setverdict(pass);}
+     else {setverdict(fail);}
+if (recordOper_const10.x2==recordOper_temp4) {setverdict(pass);}
+     else {setverdict(fail);}
+if (recordOper_const11.x1[0]=="a") {setverdict(pass);}	//definition part, omit
+     else {setverdict(fail);}
+if (recordOper_const11.x1[1]=="b") {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(recordOper_const11.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const10.x1[0]=="a") {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+if (const10.x1[1]=="b") {setverdict(pass);}
+     else {setverdict(fail);}
+if (const10.x2==recordOper_temp4) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const11.x1[0]=="a") {setverdict(pass);}	//testcase, omit
+     else {setverdict(fail);}
+if (const11.x1[1]=="b") {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(const11.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recordConstUnion() runs on recordOper_mycomp{
+const recordOper_myrec7 const12:={   //record from union
+ x1:={ x1 :=3 },
+ x2:=recordOper_temp5  //{ x2:=1.3 }
+};
+const recordOper_myrec7 const13:={   //record from union, with omited field
+ x1:={ x1 :=3 },
+ x2:=omit
+};
+if (recordOper_const12.x1.x1==3) {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+if (ischosen(recordOper_const12.x1.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(recordOper_const12.x1.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (recordOper_const12.x2==recordOper_temp5) {setverdict(pass);}
+     else {setverdict(fail);}
+if (recordOper_const13.x1.x1==3) {setverdict(pass);}	//definition part, omit
+     else {setverdict(fail);}
+if (ischosen(recordOper_const13.x1.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(recordOper_const13.x1.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(recordOper_const13.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const12.x1.x1==3) {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+if (ischosen(const12.x1.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(const12.x1.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const12.x2==recordOper_temp5) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const13.x1.x1==3) {setverdict(pass);}	//testcase, omit
+     else {setverdict(fail);}
+if (ischosen(const13.x1.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(const13.x1.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(const13.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recordComp() runs on recordOper_mycomp{
+var recordOper_myrec1 x1,x2,x3; // record with basic types
+x1:={ x1:=1, x2:=1.2, x3:=xx2 };
+x2:={ x1:=1, x2:=1.2, x3:=xx2 };
+x3:={ x1:=1, x2:=1.24, x3:=xx2 }
+if (x1==x2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1==x3)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1!=x3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1!=x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+
+testcase recordCompOpt() runs on recordOper_mycomp{
+var integer inttemp:=2;		// record with basic types and optional field
+var recordOper_myrec2 x1,x2,x3;
+x1 :={	x1:=1, x2:=1.2, x3:=xx2, x4:=inttemp };  //inntemp=2
+x2:= { x1:=1, x2:=1.2, x3:=xx2, x4:=omit };
+x3:= { x1:=1, x2:=1.2, x3:=xx2, x4:=omit };
+if (x2==x3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1==x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1!=x3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x2!=x3)) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recordCompOptField() runs on recordOper_mycomp
+{
+  const recordOper_trecord c1 := { x1 := omit, x2 := 0.0 };
+  const recordOper_trecord c2 := { x1 := 1, x2 := 0.0 };
+  const integer ci := 1;
+  var recordOper_trecord v := { x1 := omit };
+  var integer i := 1;
+  if (c1.x1 == omit and c1.x1 != 1 and /*c1.x1 != i and*/ c1.x1 != ci and c1.x1 == c1.x1 and
+      omit == c1.x1 and 1 != c1.x1 and /*i != c1.x1 and*/ ci != c1.x1 and not c1.x1 != c1.x1)
+    { setverdict(pass); }
+  else { setverdict(fail); }
+  if (c2.x1 != omit and c2.x1 == 1 and c2.x1 == i and c2.x1 == ci and c2.x1 == c2.x1 and
+      omit != c2.x1 and 1 == c2.x1 and i == c2.x1 and ci == c2.x1 and not c2.x1 != c2.x1)
+    { setverdict(pass); }
+  else { setverdict(fail); }
+  if (v.x1 == omit and v.x1 != 1 and v.x1 != i and v.x1 == v.x1 and
+      omit == v.x1 and 1 != v.x1 and i != v.x1 and not v.x1 != v.x1)
+    { setverdict(pass); }
+  else { setverdict(fail); }
+  v.x1 := 1;
+  if (v.x1 != omit and v.x1 == 1 and v.x1 == i and v.x1 == v.x1 and
+      omit != v.x1 and 1 == v.x1 and i == v.x1 and not v.x1 != v.x1)
+    { setverdict(pass); }
+  else { setverdict(fail); }
+}
+
+testcase recordCompRec() runs on recordOper_mycomp{
+var recordOper_trecord temp1:={ x1:=omit, x2:=3.4 };  // record with record
+var recordOper_myrec3 x1,x2,x3;
+x1 :={
+ x1:={ x1:=1, x2:=1.2 },
+ x2:=temp1
+};
+x2 :={
+ x1:={ x1:=1, x2:=1.2 },
+ x2:=temp1
+};
+x3 :={
+ x1:={ x1:=2, x2:=1.2 },
+ x2:=temp1
+};
+if (x1==x2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1==x3)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1!=x3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1!=x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+
+testcase recordCompRecof() runs on recordOper_mycomp{
+var recordOper_trecof temp2:={'AF12'O};
+var recordOper_myrec4 x1,x2,x3;
+x1:={   //record from record of
+ x1:={ '12AB'O, 'CD12'O },
+ x2:=temp2
+};
+x2:={   //record from record of
+ x1:={ '12AB'O, 'CD12'O },
+ x2:=temp2
+};
+x3:={   //record from record of
+ x1:={ '12AB'O },
+ x2:=temp2
+};
+if (x1==x2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1==x3)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2!=x3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1!=x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recordCompSet() runs on recordOper_mycomp{
+var recordOper_tset temp1:={ x1:=2, x2:=omit };
+var recordOper_myrec5 x1,x2,x3; //record from set
+x1:={
+ x1:={ x1:=1, x2:=1.2 },
+ x2:=temp1
+};
+x2:={
+ x1:={ x1:=1, x2:=1.2 },
+ x2:=temp1
+};
+x3:={
+ x1:={ x1:=4, x2:=1.2 },
+ x2:=temp1
+};
+if (x1==x2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x2==x3)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1!=x3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1!=x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recordCompSetof() runs on recordOper_mycomp{
+var recordOper_tsetof temp2:={"a","7"};
+var recordOper_myrec6 x1,x2,x3;  //record from set of
+x1:={
+ x1:={ "1", "a" },
+ x2:=temp2
+};
+x2:={
+ x1:={ "1", "a" },
+ x2:=temp2
+};
+x3:={
+ x1:={ "1", "a", "k" },
+ x2:=temp2
+};
+if (x1==x2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x2==x3)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1!=x3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1!=x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recordCompUnion() runs on recordOper_mycomp{
+var recordOper_tunion temp5 := {x2:=1.3};	//record from union
+var recordOper_myrec7 x1,x2,x3;
+x1:={
+ x1:={ x1 :=3 },
+ x2:=temp5  //{ x2:=1.3 }
+};
+x2:={
+ x1:={ x1 :=3 },
+ x2:=temp5  //{ x2:=1.3 }
+};
+x3:={
+ x1:={ x2 :=3.9 },
+ x2:=temp5  //{ x2:=1.3 }
+};
+if (x1==x2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1==x3)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2!=x3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1!=x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+// Example from CR 5262.  No need to list all fields explicitly in the further
+// restricted type: `type myrecr1 myrecr2 ({ "", "" }, { "", "" })'.
+type record myrec1 {
+  integer f1 (0..255),
+  charstring f2,
+  charstring f3 optional
+}
+type myrec1 myrec2 ({1, "", ""}, {2, "", ""}, {f1 := 3, f2 := "", f3 := omit})
+type record MyRecordTypeWithSubtypedFields {
+  integer field1 (1..100),
+  charstring field2 length(2..255)
+}
+type myrec1 myrec3 (myrec2, {1, "", ""})
+
+const myrec2 c_myrec1 := {1, "", ""}
+
+template myrec2 t_myrec1 := c_myrec1
+
+function f_rec1() return MyRecordTypeWithSubtypedFields {
+  return { 2, "aaa" }
+}
+
+testcase recordSubtypes() runs on recordOper_mycomp {
+  var template MyRecordTypeWithSubtypedFields vt_myrec1 := {100, "hello"}
+  var MyRecordTypeWithSubtypedFields v_myrec1 := {field1 := 100, field2 := "hello"}
+  var myrec2 v_myrec2 := valueof(modifies t_myrec1 := {f1 := 2})
+  if (match(valueof(v_myrec1), vt_myrec1)) { setverdict(pass) }
+  else { setverdict(fail) }
+  if ({ 2, "aaa" } == f_rec1() and f_rec1() == { 2, "aaa" }) { setverdict(pass) }
+  else { setverdict(fail) }
+  // FATAL_ERROR() with R8B: `if (valueof(MyRecordTypeWithSubtypedFields:{ 1, "hello" }) == valueof(v_myrec1)) { setverdict(pass) }'.
+}
+
+testcase recordIsvalue() runs on recordOper_mycomp{
+  var recordOper_empty v1;
+  var recordOper_trecord vs2_def;
+  var recordOper_trecord v2;
+  v2.x1 := 42;
+
+  if ( isvalue(v1) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(vs2_def) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(v2) ) { setverdict(fail); } else { setverdict(pass); };
+
+  var recordOper_trecord vs2_part := { -, 1.0 };
+  if ( isvalue(vs2_part) ) { setverdict(fail); } else { setverdict(pass); };
+  vs2_part.x1 := omit;
+  if ( isvalue(vs2_part) ) { setverdict(pass); } else { setverdict(fail); };
+
+  var recordOper_trecord vs2_om := { omit, - };
+  if ( isvalue(vs2_om) ) { setverdict(fail); } else { setverdict(pass); };
+  vs2_om.x2 := 33.0;
+  if ( isvalue(vs2_om) ) { setverdict(pass); } else { setverdict(fail); };
+}
+
+testcase recordIsbound() runs on recordOper_mycomp{
+  var recordOper_empty v1;
+  var recordOper_trecord vs2_def;
+  var recordOper_trecord v2;
+  v2.x1 := 42;
+
+  if ( isbound(v1) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isbound(vs2_def) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isbound(vs2_def.x1) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isbound(vs2_def.x2) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isbound(v2) ) { setverdict(pass); } else { setverdict(fail); };
+
+  var recordOper_trecord vs2_part := { -, 1.0 };
+  if ( isbound(vs2_part) ) { setverdict(pass); } else { setverdict(fail); };
+  vs2_part.x1 := omit;
+  if ( isbound(vs2_part) ) { setverdict(pass); } else { setverdict(fail); };
+
+  var recordOper_trecord vs2_om := { omit, - };
+  if ( isbound(vs2_om) ) { setverdict(pass); } else { setverdict(fail); };
+  vs2_om.x2 := 33.0;
+  if ( isbound(vs2_om) ) { setverdict(pass); } else { setverdict(fail); };
+}
+
+type set AllRec {
+  recordOper_myrec8 r1,
+  recordOper_myrec8 r2 optional
+}
+template recordOper_myrec8 t_MyRec := { f1 := *, f2 := * };
+const recordOper_myrec8 c1_MyRec := { f1 := 5, f2 := omit };
+const recordOper_myrec8 c2_MyRec := { f1 := omit, f2 := "omit" };
+const AllRec c_AllRec := { r1 := c1_MyRec, r2 := c2_MyRec }
+// This function is called from testcase recordIsvalue2
+function f_isvalue_record(in recordOper_myrec8 p1_MyRec, in recordOper_myrec8 p2_MyRec, in AllRec p_AllRec, in template recordOper_myrec8 pt_MyRec) runs on recordOper_mycomp
+{
+  var recordOper_myrec8 v1_MyRec;
+  var recordOper_myrec8 v2_MyRec;
+  var template recordOper_myrec8 vt_MyRec;
+  var AllRec v_AllRec;
+  template integer ti := 5 ifpresent;
+  template recordOper_myrec8 rrr1 := { 11, "true" }
+  template recordOper_myrec8 rrr2 := { 11, "true" } ifpresent;
+  template recordOper_myrec8 rrr3 := { 11, "true" ifpresent}
+
+  if ( isvalue(v1_MyRec) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(vt_MyRec) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(v_AllRec) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(v_AllRec.r1) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(v_AllRec.r2) ) { setverdict(fail); } else { setverdict(pass); };
+
+  v1_MyRec := c1_MyRec;
+  v_AllRec := { r1 := c1_MyRec, r2 := c2_MyRec };
+
+  if ( isvalue(v1_MyRec) ) {setverdict(pass); } else { setverdict(fail); };
+  if ( isvalue(v_AllRec.r1) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isvalue(c1_MyRec) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isvalue(c_AllRec.r1) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isvalue(p1_MyRec) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isvalue(p_AllRec.r1) ) { setverdict(pass); } else { setverdict(fail); };
+
+  if ( isvalue(v1_MyRec .f1) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isvalue(v_AllRec.r1.f1) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isvalue(c1_MyRec .f1) ) { setverdict(pass); } else {  setverdict(fail); };
+  if ( isvalue(c_AllRec.r1.f1) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isvalue(p1_MyRec .f1) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isvalue(p_AllRec.r1.f1) ) { setverdict(pass); } else { setverdict(fail); };
+
+  if ( isvalue(v1_MyRec .f2) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(v_AllRec.r1.f2) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(c1_MyRec .f2) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(c_AllRec.r1.f2) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(p1_MyRec .f2) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(p_AllRec.r1.f2) ) { setverdict(fail); } else { setverdict(pass); };
+
+  v2_MyRec := c2_MyRec; //{ f1 := omit, f2 := "omit" };
+
+  if ( isvalue(v2_MyRec) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isvalue(v_AllRec.r2) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isvalue(c2_MyRec) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isvalue(c_AllRec.r2) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isvalue(p2_MyRec) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isvalue(p_AllRec.r2) ) { setverdict(pass); } else { setverdict(fail); };
+
+  if ( isvalue(v2_MyRec .f1) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(v_AllRec.r2.f1) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(p2_MyRec .f1) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(p_AllRec.r2.f1) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(c2_MyRec .f1) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(c_AllRec.r2.f1) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(v2_MyRec .f2) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isvalue(v_AllRec.r2.f2) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isvalue(p2_MyRec .f2) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isvalue(p_AllRec.r2.f2) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isvalue(c2_MyRec .f2) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isvalue(c_AllRec.r2.f2) ) { setverdict(pass); } else { setverdict(fail); };
+
+  v1_MyRec := { f1 := omit, f2 := omit };
+
+  if ( isvalue(v1_MyRec) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isvalue(v1_MyRec.f1) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(v1_MyRec.f2) ) { setverdict(fail); } else { setverdict(pass); };
+  // can't modify c1_MyRec or p1_MyRec
+
+/************** templates ***************/
+
+  vt_MyRec := { f1 := 5, f2 := omit };
+
+  if ( isvalue(vt_MyRec) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isvalue(vt_MyRec.f1) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isvalue(vt_MyRec.f2) ) { setverdict(fail); } else { setverdict(pass); };
+
+  vt_MyRec := { f1 := omit, f2 := "five" };
+
+  if ( isvalue(vt_MyRec) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isvalue(vt_MyRec.f1) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(vt_MyRec.f2) ) { setverdict(pass); } else { setverdict(fail); };
+
+  vt_MyRec := { f1 := ?, f2 := "5" };
+
+  if ( isvalue(vt_MyRec) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(vt_MyRec.f1) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(vt_MyRec.f2) ) { setverdict(pass); } else { setverdict(fail); };
+
+  vt_MyRec := { f1 := 5, f2 := * };
+
+  if ( isvalue(vt_MyRec) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(vt_MyRec.f1) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isvalue(vt_MyRec.f2) ) { setverdict(fail); } else { setverdict(pass); };
+
+  vt_MyRec := { f1 := ?, f2 := * };
+
+  if ( isvalue(vt_MyRec) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(vt_MyRec.f1) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(vt_MyRec.f2) ) { setverdict(fail); } else { setverdict(pass); };
+
+  if ( isvalue(pt_MyRec) ) { setverdict(pass); } else { setverdict(fail); }; // the fields are omit, but the record is bound
+  if ( isvalue(pt_MyRec.f1) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(pt_MyRec.f2) ) { setverdict(fail); } else { setverdict(pass); };
+
+  //so here it is expanded instead
+  if ( isvalue(modifies vt_MyRec := { f1:=1, f2:="2" }) ) { setverdict(pass); } else {setverdict(fail, modifies vt_MyRec := { f1:=1, f2:="2" }, " should be bound"); };
+
+  if ( isvalue(t_MyRec) ) { setverdict(fail); } else { setverdict(pass); };
+
+  //testing ifpresent
+  if ( isvalue(ti) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(rrr1) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isvalue(rrr2) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(rrr3) ) { setverdict(fail); } else { setverdict(pass); };
+}
+
+testcase recordIsvalue2() runs on recordOper_mycomp
+{
+  var recordOper_myrec8 x1_MyRec := { f1 := 5, f2 := omit };
+  var recordOper_myrec8 x2_MyRec := { f1 := omit, f2 := "omit" };
+  var template recordOper_myrec8 xt_MyRec := { f1 := omit, f2 := omit };
+  var AllRec x_AllRec := { r1 := x1_MyRec, r2 := x2_MyRec }
+  f_isvalue_record(x1_MyRec, x2_MyRec, x_AllRec, xt_MyRec) ;
+}
+
+    type record of integer IntegerList
+    type record Ctx{
+      IntegerList appData
+    }
+
+testcase CR_TR00016681() runs on recordOper_mycomp
+{
+  var Ctx vu;
+  // appData field: Unbound record of
+  // isvalue:false, isbound:false
+  if (isvalue(vu.appData)) { setverdict(fail); } else { setverdict(pass); }
+  if (isbound(vu.appData)) { setverdict(fail); } else { setverdict(pass); }
+  //lengthof(v1.appData) -> Dynamic Testcase Error
+
+  // The enclosing record: isbound === isvalue
+  if (isvalue(vu)) { setverdict (fail); } else { setverdict(pass); }
+  if (isbound(vu)) { setverdict (fail); } else { setverdict(pass); }
+
+  var Ctx v0 := {{}}
+  // appData field: 0-length record of
+  // isvalue: true, isbound:true
+  if (not isvalue(v0.appData)) { setverdict (fail); }
+  if (isbound(v0.appData)) { setverdict (pass); }
+  else { setverdict(fail); }
+
+  // The enclosing record: isbound === isvalue
+  if (isvalue(v0)) { setverdict (pass); } else { setverdict(fail); }
+  if (isbound(v0)) { setverdict (pass); } else { setverdict(fail); }
+
+  if (lengthof(v0.appData) == 0) { setverdict(pass); }
+  else { setverdict(fail); }
+
+  // appData field: 3-length with gaps
+  // isvalue: false, isbound:true
+  var Ctx v3 := { appData := { 1, -, 2 } }
+  if (isvalue(v3.appData)) { setverdict (fail); }
+  if (isbound(v3.appData)) { setverdict (pass); }
+  else { setverdict(fail); }
+
+  if (lengthof(v3.appData) == 3) { setverdict(pass); }
+  else { setverdict(fail); }
+
+  var integer i;
+  if (isbound(i)) { setverdict (fail); } else { setverdict(pass); }
+  if (isvalue(i)) { setverdict (fail); } else { setverdict(pass); }
+  i := 42;
+  if (isvalue(i)) { setverdict (pass); } else { setverdict(fail); }
+  if (isbound(i)) { setverdict (pass); } else { setverdict(fail); }
+}
+
+const MyRec2_2 c_myrec2_part:={ 
+  roc:={},
+  roi:={10,9,8},
+  u:={ r:={ /*i:=1,*/ x:=1.0, c:="one"}},
+  r:={ i:=1, x:=1.0, c:="one"}
+}  
+
+const MyRec2_2 c_myrec2_1:={ 
+  roc:=omit,
+  roi:={},
+  u:={r:={ i:=1, x:=1.0, c:="one"}},
+  r:={ i:=1, x:=1.0, c:="one"}
+}
+
+type record MyRec2_2{
+  ROC roc optional,
+  ROI roi optional,
+  MyUnion1 u optional, 
+  MyRecord1 r optional
+}
+
+type record of charstring ROC;
+type record of integer  ROI;
+type record MyRecord1 {
+  integer       i optional,
+  float         x optional,
+  charstring    c
+}
+
+type union MyUnion1 {
+  ROC roc,
+  integer i,
+  ROI roi,
+  MyRecord1 r
+}
+
+testcase tc_record_completlyInit() runs on recordOper_mycomp {
+  var MyRec2_2 vl_r1:=c_myrec2_1;
+  if(isbound(vl_r1)){setverdict(pass)}else {setverdict(fail)};
+  var MyRec2_2 vl_r2:=c_myrec2_part;
+  if(isbound(vl_r2)){setverdict(pass)}else {setverdict(fail)};
+  var MyRec2_2 vl_r3:=c_myrec2_part;
+  if(isbound(vl_r3)){setverdict(pass)}else {setverdict(fail)};
+  var MyRec2_2 vl_r4:=c_myrec2_part;
+  if(isbound(vl_r4.roc)){setverdict(pass)}else {setverdict(fail)};
+  var MyRec2_2 vl_r5:=c_myrec2_part;
+  if(isbound(vl_r5.roi)){setverdict(pass)}else {setverdict(fail)};
+  var MyRec2_2 vl_r6:=c_myrec2_part;
+  if(isbound(vl_r6.u)){setverdict(pass)}else {setverdict(fail)};
+  var MyRec2_2 vl_r7:=c_myrec2_part;
+  if(isbound(vl_r7.u.r)){setverdict(pass)}else {setverdict(fail)};
+  var MyRec2_2 vl_r8:=c_myrec2_part;
+  if(isbound(vl_r8.u.r.i)){setverdict(fail)}else {setverdict(pass)};
+  var MyRec2_2 vl_r9:=c_myrec2_part;
+  if(isbound(vl_r9.u.r.x)){setverdict(pass)}else {setverdict(fail)};
+  var MyRec2_2 vl_r10:=c_myrec2_part;
+  if(isbound(vl_r10.u.r.c)){setverdict(pass)}else {setverdict(fail)};
+  var MyRec2_2 vl_r11:=c_myrec2_part;
+  if(isbound(vl_r11.u.i)){setverdict(fail)}else {setverdict(pass)};
+}
+
+testcase tc_record_partiallyInit12() runs on recordOper_mycomp {
+  var MyRec2_2 vl_r:={ r:={i:=5}}
+  if(isbound(vl_r.r)){setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vl_r.r.i)){setverdict(pass)}else {setverdict(fail)};
+}
+
+testcase tc_record_partiallyInit13() runs on recordOper_mycomp {
+  var MyRec2_2 vl_r:={ r:={i:=5,x:=-,c:= -}} 
+  if(isbound(vl_r)){setverdict(pass)}else {setverdict(fail)}; 
+  if(isbound(vl_r.r)){setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vl_r.r.i)){setverdict(pass)}else {setverdict(fail)};
+}
+
+  testcase tc_record_unbound() runs on recordOper_mycomp {
+    var template MyRec2_2 vtl_rec2;
+    if(ispresent(vtl_rec2)) {setverdict(fail)}else {setverdict(pass)};
+  }
+
+  testcase tc_record_completlyInit_ispresent() runs on recordOper_mycomp {
+    var MyRec2_2 vl_r1:=c_myrec2_1;
+    if(ispresent(vl_r1)){setverdict(pass)}else {setverdict(fail)};
+    var MyRec2_2 vl_r2:=c_myrec2_part;
+    if(ispresent(vl_r2)){setverdict(pass)}else {setverdict(fail)};
+    var MyRec2_2 vl_r3:=c_myrec2_part;
+    if(ispresent(vl_r3.roc)){setverdict(pass)}else {setverdict(fail)};
+    var MyRec2_2 vl_r4:=c_myrec2_part;
+    if(ispresent(vl_r4.roi)){setverdict(pass)}else {setverdict(fail)};
+    var MyRec2_2 vl_r5:=c_myrec2_part;
+    if(ispresent(vl_r5.u)){setverdict(pass)}else {setverdict(fail)};
+    var MyRec2_2 vl_r6:=c_myrec2_part;
+    if(ispresent(vl_r6.u.r)){setverdict(pass)}else {setverdict(fail)};
+    var MyRec2_2 vl_r7:=c_myrec2_part;
+    if(ispresent(vl_r7.u.r.i)){setverdict(fail)}else {setverdict(pass)};
+    var MyRec2_2 vl_r8:=c_myrec2_part;
+    if(ispresent(vl_r8.u.r.x)){setverdict(pass)}else {setverdict(fail)};
+    var MyRec2_2 vl_r9:=c_myrec2_part;
+    if(ispresent(vl_r9.u.r.c)){setverdict(pass)}else {setverdict(fail)};
+    var MyRec2_2 vl_r10:=c_myrec2_part;
+    if(ispresent(vl_r10.u.i)){setverdict(fail)}else {setverdict(pass)};
+  }
+
+  testcase tc_record_partiallyInit12_ispresent() runs on recordOper_mycomp {
+    var MyRec2_2 vl_r:={ r:={i:=5}}
+    if(ispresent(vl_r.r)){setverdict(pass)}else {setverdict(fail)};
+    if(ispresent(vl_r.r.i)){setverdict(pass)}else {setverdict(fail)};
+  }
+
+  testcase tc_record_partiallyInit13_ispresent() runs on recordOper_mycomp {
+    var MyRec2_2 vl_r:={ r:={i:=5,x:=-,c:= -}} 
+    if(ispresent(vl_r)){setverdict(pass)}else {setverdict(fail)}; 
+    if(ispresent(vl_r.r)){setverdict(pass)}else {setverdict(fail)};
+    if(ispresent(vl_r.r.i)){setverdict(pass)}else {setverdict(fail)};
+  }
+
+  testcase tc_record_omit() runs on recordOper_mycomp {
+    var MyRec2_2 vl_r:={omit, omit, omit, omit} 
+    if(ispresent(vl_r)){setverdict(pass)}else {setverdict(fail)}; 
+    if(ispresent(vl_r.roc)){setverdict(fail)}else {setverdict(pass)};
+    if(ispresent(vl_r.roi)){setverdict(fail)}else {setverdict(pass)};
+    if(ispresent(vl_r.u)){setverdict(fail)}else {setverdict(pass)};
+    if(ispresent(vl_r.u.r)){setverdict(fail)}else {setverdict(pass)};
+    if(ispresent(vl_r.u.r.i)){setverdict(fail)}else {setverdict(pass)};
+    if(ispresent(vl_r.u.r.x)){setverdict(fail)}else {setverdict(pass)};
+    if(ispresent(vl_r.u.r.c)){setverdict(fail)}else {setverdict(pass)};
+    if(ispresent(vl_r.r)){setverdict(fail)}else {setverdict(pass)};
+    if(ispresent(vl_r.r.i)){setverdict(fail)}else {setverdict(pass)};
+    if(ispresent(vl_r.r.x)){setverdict(fail)}else {setverdict(pass)};
+    if(ispresent(vl_r.r.c)){setverdict(fail)}else {setverdict(pass)};
+  }
+
+  testcase tc_record_omit2() runs on recordOper_mycomp {
+    var MyRec2_2 vl_r:={roc:=omit, roi:=omit,u:= omit,r:= omit} 
+    if(ispresent(vl_r)){setverdict(pass)}else {setverdict(fail)}; 
+    if(ispresent(vl_r.roc)){setverdict(fail)}else {setverdict(pass)};
+    if(ispresent(vl_r.roi)){setverdict(fail)}else {setverdict(pass)};
+    if(ispresent(vl_r.u)){setverdict(fail)}else {setverdict(pass)};
+    if(ispresent(vl_r.u.r)){setverdict(fail)}else {setverdict(pass)};
+    if(ispresent(vl_r.u.r.i)){setverdict(fail)}else {setverdict(pass)};
+    if(ispresent(vl_r.u.r.x)){setverdict(fail)}else {setverdict(pass)};
+    if(ispresent(vl_r.u.r.c)){setverdict(fail)}else {setverdict(pass)};
+    if(ispresent(vl_r.r)){setverdict(fail)}else {setverdict(pass)};
+    if(ispresent(vl_r.r.i)){setverdict(fail)}else {setverdict(pass)};
+    if(ispresent(vl_r.r.x)){setverdict(fail)}else {setverdict(pass)};
+    if(ispresent(vl_r.r.c)){setverdict(fail)}else {setverdict(pass)};
+  }
+
+  testcase tc_record_omit_HQ51693() runs on recordOper_mycomp {
+    var recordOper_myrec9 r1 := {omit, omit};
+    r1.f1 := r1.f2;
+    if(ispresent(r1.f1) or ispresent(r1.f2)){setverdict(fail)}else {setverdict(pass)}; 
+  }
+
+  testcase tc_recordOf_omit() runs on recordOper_mycomp {
+    var MyRec2_2 vl_r:=c_myrec2_1;
+    if(ispresent(vl_r.roc)){setverdict(fail)}else {setverdict(pass)};
+    if(ispresent(vl_r.roc[0])){setverdict(fail)}else {setverdict(pass)};
+    if(ispresent(vl_r.roi)){setverdict(pass)}else {setverdict(fail)};
+    if(ispresent(vl_r.roi[0])){setverdict(fail)}else {setverdict(pass)};
+    if(ispresent(vl_r.roi[90])){setverdict(fail)}else {setverdict(pass)};
+  }
+
+
+  
+
+
+ //##########################################################################//
+
+   type record ExampleType {
+    integer a,
+    boolean b 
+  }  
+
+  template ExampleType exampleTemplate1 := {
+    a := 4,
+    b := false
+  }
+
+  testcase tc_rec_template() runs on recordOper_mycomp {
+
+    if (isbound(exampleTemplate1)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (ispresent(exampleTemplate1)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (isbound(exampleTemplate1.a)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (ispresent(exampleTemplate1.a)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+  }
+
+//###########################################################################//
+
+  template ExampleType exampleTemplate2(template boolean MyBoolTemplate := false, template integer MyintTemplate := 1) := {
+    a := MyintTemplate, 
+    b := MyBoolTemplate
+  }
+
+  testcase tc_rec_template_param() runs on recordOper_mycomp {
+
+    if (isbound(exampleTemplate2)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (ispresent(exampleTemplate2)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (isbound(exampleTemplate2.a)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (ispresent(exampleTemplate2.a)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (isbound(exampleTemplate2(true))) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (ispresent(exampleTemplate2(true))) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (isbound(exampleTemplate2(true).a)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (ispresent(exampleTemplate2(true).a)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (isbound(exampleTemplate2(true, 3))) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (ispresent(exampleTemplate2(true, 3))) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (isbound(exampleTemplate2(true, 3).a)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (ispresent(exampleTemplate2(true, 3).a)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+  }
+
+//###########################################################################//
+
+  template ExampleType exampleTemplate3(template boolean MyBoolTemplate := false, template integer MyintTemplate := 1) modifies exampleTemplate2 := {
+    a := MyintTemplate,
+    b := MyBoolTemplate
+  }
+
+    testcase tc_rec_template_param_modifies() runs on recordOper_mycomp {
+
+    if (isbound(exampleTemplate3)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (ispresent(exampleTemplate3)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (isbound(exampleTemplate3.a)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (ispresent(exampleTemplate3.a)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (isbound(exampleTemplate3(true))) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (ispresent(exampleTemplate3(true))) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (isbound(exampleTemplate3(true).a)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (ispresent(exampleTemplate3(true).a)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (isbound(exampleTemplate3(true, 3))) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (ispresent(exampleTemplate3(true, 3))) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (isbound(exampleTemplate3(true, 3).a)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (ispresent(exampleTemplate3(true, 3).a)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+  }
+
+//###########################################################################//
+
+  type record ExampleType2 {
+    integer a,
+    ExampleType t
+  }
+
+
+  template ExampleType2 exampleEmbTemplate1 := {
+    a := 4,
+    t := {3, true}
+  }
+
+  testcase tc_emb_rec_template() runs on recordOper_mycomp {
+
+    if (isbound(exampleEmbTemplate1)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (ispresent(exampleEmbTemplate1)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (isbound(exampleEmbTemplate1.t)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (ispresent(exampleEmbTemplate1.t)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (isbound(exampleEmbTemplate1.t.a)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (ispresent(exampleEmbTemplate1.t.a)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+  }
+
+//###########################################################################//
+
+  template ExampleType2 exampleEmbTemplate2(template boolean MyBoolTemplate := false, template integer MyintTemplate := 1) := {
+    a := MyintTemplate, 
+    t := {MyintTemplate, MyBoolTemplate}
+  }
+
+  testcase tc_emb_rec_template_param() runs on recordOper_mycomp {
+
+    if (isbound(exampleEmbTemplate2)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (ispresent(exampleEmbTemplate2)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (isbound(exampleEmbTemplate2.t)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (ispresent(exampleEmbTemplate2.t)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (isbound(exampleEmbTemplate2.t.a)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (ispresent(exampleEmbTemplate2.t.a)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (isbound(exampleEmbTemplate2(true))) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (ispresent(exampleEmbTemplate2(true))) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (isbound(exampleEmbTemplate2(true).t)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (ispresent(exampleEmbTemplate2(true).t)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (isbound(exampleEmbTemplate2(true).t.a)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (ispresent(exampleEmbTemplate2(true).t.a)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (isbound(exampleEmbTemplate2(true, 3))) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (ispresent(exampleEmbTemplate2(true, 3))) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (isbound(exampleEmbTemplate2(true, 3).t)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (ispresent(exampleEmbTemplate2(true, 3).t)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (isbound(exampleEmbTemplate2(true, 3).t.a)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (ispresent(exampleEmbTemplate2(true, 3).t.a)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+  }
+
+//###########################################################################//
+
+  template ExampleType2 exampleEmbTemplate3(template boolean MyBoolTemplate := false, template integer MyintTemplate := 1) modifies exampleEmbTemplate2 := {
+    a := MyintTemplate,
+    t := {MyintTemplate, MyBoolTemplate}
+  }
+
+  testcase tc_emb_rec_template_param_modifies() runs on recordOper_mycomp {
+
+    if (isbound(exampleEmbTemplate3)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (ispresent(exampleEmbTemplate3)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (isbound(exampleEmbTemplate3.t)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (ispresent(exampleEmbTemplate3.t)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (isbound(exampleEmbTemplate3.t.a)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (ispresent(exampleEmbTemplate3.t.a)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (isbound(exampleEmbTemplate3(true))) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (ispresent(exampleEmbTemplate3(true))) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (isbound(exampleEmbTemplate3(true).t)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (ispresent(exampleEmbTemplate3(true).t)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (isbound(exampleEmbTemplate3(true).t.a)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (ispresent(exampleEmbTemplate3(true).t.a)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (isbound(exampleEmbTemplate3(true, 3))) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (ispresent(exampleEmbTemplate3(true, 3))) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (isbound(exampleEmbTemplate3(true, 3).t)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (ispresent(exampleEmbTemplate3(true, 3).t)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (isbound(exampleEmbTemplate3(true, 3).t.a)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (ispresent(exampleEmbTemplate3(true, 3).t.a)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+  }
+
+//###########################################################################//
+
+template anytype exampleAnyTypeTemplate1 := {
+  ExampleType := {2, false}
+}
+
+testcase tc_anytype_rec_template() runs on recordOper_mycomp {
+
+    if (isbound(exampleAnyTypeTemplate1)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (ispresent(exampleAnyTypeTemplate1)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (isbound(exampleAnyTypeTemplate1.ExampleType)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (ispresent(exampleAnyTypeTemplate1.ExampleType)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (isbound(exampleAnyTypeTemplate1.ExampleType.a)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (ispresent(exampleAnyTypeTemplate1.ExampleType.a)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+  }
+
+  template anytype exampleAnyTypeTemplate2(template boolean MyBoolTemplate := false, template integer MyintTemplate := 1) := {
+    ExampleType := {MyintTemplate, MyBoolTemplate}
+  }
+
+  testcase tc_anytype_rec_template_param() runs on recordOper_mycomp {
+
+    if (isbound(exampleAnyTypeTemplate2)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (ispresent(exampleAnyTypeTemplate2)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (isbound(exampleAnyTypeTemplate2.ExampleType)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (ispresent(exampleAnyTypeTemplate2.ExampleType)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (isbound(exampleAnyTypeTemplate2.ExampleType.a)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (ispresent(exampleAnyTypeTemplate2.ExampleType.a)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (isbound(exampleAnyTypeTemplate2(true))) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (ispresent(exampleAnyTypeTemplate2(true))) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (isbound(exampleAnyTypeTemplate2(true).ExampleType)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (ispresent(exampleAnyTypeTemplate2(true).ExampleType)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (isbound(exampleAnyTypeTemplate2(true).ExampleType.a)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (ispresent(exampleAnyTypeTemplate2(true).ExampleType.a)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (isbound(exampleAnyTypeTemplate2(true, 3))) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (ispresent(exampleAnyTypeTemplate2(true, 3))) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (isbound(exampleAnyTypeTemplate2(true, 3).ExampleType)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (ispresent(exampleAnyTypeTemplate2(true, 3).ExampleType)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (isbound(exampleAnyTypeTemplate2(true, 3).ExampleType.a)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (ispresent(exampleAnyTypeTemplate2(true, 3).ExampleType.a)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+  }
+
+  template anytype exampleAnyTypeTemplate3(template boolean MyBoolTemplate := false, template integer MyintTemplate := 1) modifies exampleAnyTypeTemplate2 := {
+    ExampleType := {MyintTemplate, MyBoolTemplate}
+  }
+
+  testcase tc_anytype_rec_template_param_modifies() runs on recordOper_mycomp {
+
+    if (isbound(exampleAnyTypeTemplate3)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (ispresent(exampleAnyTypeTemplate3)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (isbound(exampleAnyTypeTemplate3.ExampleType)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (ispresent(exampleAnyTypeTemplate3.ExampleType)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (isbound(exampleAnyTypeTemplate3.ExampleType.a)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (ispresent(exampleAnyTypeTemplate3.ExampleType.a)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (isbound(exampleAnyTypeTemplate3(true))) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (ispresent(exampleAnyTypeTemplate3(true))) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (isbound(exampleAnyTypeTemplate3(true).ExampleType)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (ispresent(exampleAnyTypeTemplate3(true).ExampleType)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (isbound(exampleAnyTypeTemplate3(true).ExampleType.a)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (ispresent(exampleAnyTypeTemplate3(true).ExampleType.a)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (isbound(exampleAnyTypeTemplate3(true, 3))) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (ispresent(exampleAnyTypeTemplate3(true, 3))) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (isbound(exampleAnyTypeTemplate3(true, 3).ExampleType)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (ispresent(exampleAnyTypeTemplate3(true, 3).ExampleType)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (isbound(exampleAnyTypeTemplate3(true, 3).ExampleType.a)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+
+    if (ispresent(exampleAnyTypeTemplate3(true, 3).ExampleType.a)) {
+      setverdict(pass);
+    } else {
+      setverdict(fail);
+    }
+  }
+
+
+//###########################################################################//
+    
+control {
+ const recordOper_trecord cl_temp1:={ x1:=omit, x2:=3.4 }; // can constants be declared in the control part
+ const recordOper_trecof cl_temp2:={ 'AF12'O };
+ const recordOper_tset cl_temp3:={ x1:=234, x2:=1.9};
+ const recordOper_tsetof cl_temp4:={"f","8"};
+ const recordOper_tunion cl_temp5:={ x2:=1.3 };
+ const typedefrecordComp_myrec cl_const14 := {  // complex record
+  x1 := { x1:=omit, x2:=3.4 },
+  x2 := { 'AF12'O },
+  x3 := { x1:=234, x2:=1.9},
+  x4 := {"f","8"},
+  x5 := { x2:=1.3 },
+  x6 := {1,2,3}
+ }
+ var recordOper_trecord vl_temp1; // can variables be declared in the control part
+ var recordOper_trecof vl_temp2;
+ var recordOper_tset vl_temp3;
+ var recordOper_tsetof vl_temp4;
+ var recordOper_tunion vl_temp5;
+ var typedefrecordComp_myrec vl_const14;
+
+ execute(recordAssign());
+ execute(recordAssignIncomplete());
+ execute(recordAssignOpt());
+ execute(recordAssignRec());
+ execute(recordAssignRecof());
+ execute(recordAssignSet());
+ execute(recordAssignSetof());
+ execute(recordAssignUnion());
+ execute(recordAssignElem());
+ execute(recordAssignElemOpt());
+ execute(recordAssignElemRec());
+ execute(recordAssignElemRecof());
+ execute(recordAssignElemSet());
+ execute(recordAssignElemSetof());
+ execute(recordAssignElemUnion());
+ execute(recordSizeof());
+ execute(recordConst());
+ execute(recordConstOpt());
+ execute(recordConstRec());
+ execute(recordConstRecof());
+ execute(recordConstSet());
+ execute(recordConstSetof());
+ execute(recordConstUnion());
+ execute(recordComp());
+ execute(recordCompOpt());
+ execute(recordCompOptField());
+ execute(recordCompRec());
+ execute(recordCompRecof());
+ execute(recordCompSet());
+ execute(recordCompSetof());
+ execute(recordCompUnion());
+ execute(recordSubtypes());
+ execute(recordIsvalue());
+ execute(recordIsbound());
+ execute(recordIsvalue2());
+
+ execute(CR_TR00016681());
+ 
+ execute(tc_record_completlyInit());
+ execute(tc_record_partiallyInit12());
+ execute(tc_record_partiallyInit13());
+ execute(tc_record_unbound());
+ execute(tc_record_completlyInit_ispresent());
+ execute(tc_record_partiallyInit12_ispresent());
+ execute(tc_record_partiallyInit13_ispresent());
+ execute(tc_record_omit());
+ execute(tc_record_omit2());
+ execute(tc_record_omit_HQ51693());
+ execute(tc_recordOf_omit());
+
+ execute(tc_rec_template());
+ execute(tc_rec_template_param());
+ execute(tc_rec_template_param_modifies());
+
+ execute(tc_emb_rec_template());
+ execute(tc_emb_rec_template_param());
+ execute(tc_emb_rec_template_param_modifies());
+
+ execute(tc_anytype_rec_template());
+ execute(tc_anytype_rec_template_param());
+ execute(tc_anytype_rec_template_param_modifies());
+}
+}
+with {
+  extension "anytype ExampleType"
+}
\ No newline at end of file
diff --git a/Regression_Test_java/src/TsetOper.ttcn b/Regression_Test_java/src/TsetOper.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..90201d605efd2503941d430e36d1e92ad5c81534
--- /dev/null
+++ b/Regression_Test_java/src/TsetOper.ttcn
@@ -0,0 +1,1193 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Kovacs, Ferenc
+ *   Raduly, Csaba
+ *   Szabados, Kristof
+ *   Szabo, Janos Zoltan – initial implementation
+ *
+ ******************************************************************************/
+module TsetOper {
+// ********** Type definitions  *********************
+type component setOper_mycomp {};
+type set typedefset_empty {};
+type enumerated setOper_myenum {xx1,xx2,xx3};
+type record setOper_trecord {
+	integer x1 optional,
+	float x2 };
+type record of octetstring setOper_trecof;
+type set setOper_tset {
+	integer x1,
+	float x2 optional };
+type set of charstring setOper_tsetof;
+type union setOper_tunion {
+	integer x1,
+	float x2 };
+type set setOper_myset1 {	// set from basic types
+	integer x1,
+	float x2,
+	setOper_myenum x3 };
+type set setOper_myset2 {	// set from basic types, with optional field
+	integer x1,
+	float x2,
+	setOper_myenum x3,
+	integer x4 optional };
+type set setOper_myset3 {	 // set from record, with optional field
+	setOper_trecord x1,
+	setOper_trecord x2 optional
+	};
+type set setOper_myset4 {	 // set from record of, with optional field
+	setOper_trecof x1,
+	setOper_trecof x2 optional
+	};
+type set setOper_myset5 {	 // set from set, with optional field
+	setOper_tset x1,
+	setOper_tset x2 optional
+	};
+type set setOper_myset6 {	 // set from set of, with optional field
+	setOper_tsetof x1,
+	setOper_tsetof x2 optional
+	};
+type set setOper_myset7 {	 // set from union, with optional field
+	setOper_tunion x1,
+	setOper_tunion x2 optional
+	};
+type set typedefsetComp_myset {
+	setOper_trecord x1,
+	setOper_trecof x2,
+	setOper_tset x3,
+	setOper_tsetof x4 optional,
+	setOper_tunion x5,
+	integer x6[3]
+	};
+// *************** Constanst ***********************
+const setOper_trecord setOper_temp1:={ x1:=omit, x2:=3.4 };
+const setOper_trecof setOper_temp2:={ 'AF12'O };
+const setOper_tset setOper_temp3:={ x1:=234, x2:=1.9};
+const setOper_tsetof setOper_temp4:={"f","8"};
+const setOper_tunion setOper_temp5:={ x2:=1.3 };
+const setOper_myset1 setOper_const1:={	//set with basic types
+x1:=1,
+x2:=1.2,
+x3:=xx2 };
+const setOper_myset2 setOper_const2:={	//set with basic types, with optional field
+x1:=1,
+x2:=1.2,
+x3:=xx2,
+x4:=2 };
+const setOper_myset2 setOper_const3:={	//set with basic types, with omited field
+x1:=1,
+x2:=1.2,
+x3:=xx2,
+x4:=omit };
+const setOper_myset3 setOper_const4:={   //set from record
+ x1:={ x1:=1, x2:=1.2 },
+ x2:=setOper_temp1
+};
+const setOper_myset3 setOper_const5:={   //set from record, with omited field
+ x1:={ x1:=1, x2:=1.2 },
+ x2:=omit
+};
+const setOper_myset4 setOper_const6:={   //set from record of
+ x1:={ '12AB'O, 'CD12'O },
+ x2:=setOper_temp2
+};
+const setOper_myset4 setOper_const7:={   //set from record of, with omited field
+ x1:={ '12AB'O, 'CD12'O },
+ x2:=omit
+};
+const setOper_myset5 setOper_const8:={   //set from set
+ x1:={ x1:=2, x2:=1.3},
+ x2:=setOper_temp3
+};
+const setOper_myset5 setOper_const9:={   //set from set, with omited field
+ x1:={ x1:=2, x2:=1.3},
+ x2:=omit
+};
+const setOper_myset6 setOper_const10:={   //set from set of
+ x1:={"a","b"},
+ x2:=setOper_temp4  //{"f","8"},
+};
+const setOper_myset6 setOper_const11:={   //set from set of, with omited field
+ x1:={"a","b"},
+ x2:=omit
+};
+const setOper_myset7 setOper_const12:={   //set from union
+ x1:={ x1 :=3 },
+ x2:=setOper_temp5  //{ x2:=1.3 }
+};
+const setOper_myset7 setOper_const13:={   //set from union, with omited field
+ x1:={ x1 :=3 },
+ x2:=omit
+};
+const typedefsetComp_myset setOper_const14 := { // complex set
+  x1 := { x1:=omit, x2:=3.4 },
+  x2 := { 'AF12'O },
+  x3 := { x1:=234, x2:=1.9},
+  x4 := {"f","8"},
+  x5 := { x2:=1.3 },
+  x6 := {1,2,3}
+}
+
+testcase setAssign() runs on setOper_mycomp{
+var setOper_myset1 x1:={	//set with basic types
+x1:=1,
+x2:=1.2,
+x3:=xx2 };
+var setOper_myset1 x2,x3;
+x2:={ x1:=1, x2:=1.2, x3:=xx2 };
+x3:={ x2:=1.2, x1:=1,  x3:=xx2 };
+if (x1.x1==1) {setverdict(pass);}	//at declaration
+     else {setverdict(fail);}
+if (x1.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1.x3==xx2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.x1==1) {setverdict(pass);}	//later
+     else {setverdict(fail);}
+if (x2.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.x3==xx2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x3.x1==1) {setverdict(pass);}	//out of order
+     else {setverdict(fail);}
+if (x3.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x3.x3==xx2) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase setAssignOpt() runs on setOper_mycomp{
+var integer inttemp:=2;
+var setOper_myset2 x1:={	//set with basic types, with optional field
+  x1:=1,
+  x2:=1.2,
+  x3:=xx2,
+  x4:=inttemp};  //2
+var setOper_myset2 x2:={	//set with basic types, with omited field
+  x1:=1,
+  x2:=1.2,
+  x3:=xx2,
+  x4:=omit };
+var setOper_myset2 x3, x4;
+x3:={	//set with basic types, with optional field
+  x1:=1,
+  x2:=1.2,
+  x3:=xx2,
+  x4:=inttemp };   //2
+x4:={	//set with basic types, with omited field
+  x1:=1,
+  x2:=1.2,
+  x3:=xx2,
+  x4:=omit };
+//at declaration, with optional field
+if (x1.x1==1) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1.x3==xx2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1.x4==2) {setverdict(pass);}
+     else {setverdict(fail);}
+//at declaration, with omited field
+if (x2.x1==1) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.x3==xx2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(x2.x4))) {setverdict(pass);}
+     else {setverdict(fail);}
+//later, with optional field
+if (x3.x1==1) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x3.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x3.x3==xx2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x3.x4==2) {setverdict(pass);}
+     else {setverdict(fail);}
+//later, with optional field
+if (x4.x1==1) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x4.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x4.x3==xx2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(x4.x4))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase setAssignRec() runs on setOper_mycomp{
+var setOper_trecord temp1:={ x1:=omit, x2:=3.4 };
+var setOper_myset3 x1:={   //set from record
+ x1:={ x1:=1, x2:=1.2 },
+ x2:=temp1
+};
+var setOper_myset3 x2:={   //set from record, with omited field
+ x1:={ x1:=1, x2:=1.2 },
+ x2:=omit
+};
+var setOper_myset3 x3,x4;
+x3:={   //set from record
+ x1:={ x1:=1, x2:=1.2 },
+ x2:=temp1
+};
+x4:={   //set from record, with omited field
+ x1:={ x1:=1, x2:=1.2 },
+ x2:=omit
+};
+if (x1.x1.x1==1) {setverdict(pass);}	//at declaration
+     else {setverdict(fail);}
+if (x1.x1.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1.x2==temp1) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.x1.x1==1) {setverdict(pass);}	//at declaration, omit
+     else {setverdict(fail);}
+if (x2.x1.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(x2.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x3.x1.x1==1) {setverdict(pass);}	//later
+     else {setverdict(fail);}
+if (x3.x1.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x3.x2==temp1) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x4.x1.x1==1) {setverdict(pass);}	//later, omit
+     else {setverdict(fail);}
+if (x4.x1.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(x4.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase setAssignRecof() runs on setOper_mycomp{
+var setOper_trecof temp2:={'AF12'O};
+var setOper_myset4 x1:={   //set from record of
+ x1:={ '12AB'O, 'CD12'O },
+ x2:=temp2
+};
+var setOper_myset4 x2:={   //set from record of, with omited field
+ x1:={ '12AB'O, 'CD12'O },
+ x2:=omit
+};
+var setOper_myset4 x3,x4
+x3:={   //set from record of
+ x1:={ '12AB'O, 'CD12'O },
+ x2:=temp2
+};
+x4:={   //set from record of, with omited field
+ x1:={ '12AB'O, 'CD12'O },
+ x2:=omit
+};
+if (x1.x1[0]=='12AB'O) {setverdict(pass);}	//at declaration
+     else {setverdict(fail);}
+if (x1.x1[1]=='CD12'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1.x2==temp2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.x1[0]=='12AB'O) {setverdict(pass);}	//at declaration, omit
+     else {setverdict(fail);}
+if (x2.x1[1]=='CD12'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(x2.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x3.x1[0]=='12AB'O) {setverdict(pass);}	//later
+     else {setverdict(fail);}
+if (x3.x1[1]=='CD12'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x3.x2==temp2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x4.x1[0]=='12AB'O) {setverdict(pass);}	//later, omit
+     else {setverdict(fail);}
+if (x4.x1[1]=='CD12'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(x4.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase setAssignSet() runs on setOper_mycomp{
+var setOper_tset temp1:={ x1:=2, x2:=omit };
+var setOper_myset5 x1:={   //set from set
+ x1:={ x1:=1, x2:=1.2 },
+ x2:=temp1
+};
+var setOper_myset5 x2:={   //set from set, with omited field
+ x1:={ x1:=1, x2:=1.2 },
+ x2:=omit
+};
+var setOper_myset5 x3,x4;
+x3:={   //set from set
+ x1:={ x1:=1, x2:=1.2 },
+ x2:=temp1
+};
+x4:={   //set from set, with omited field
+ x1:={ x1:=1, x2:=1.2 },
+ x2:=omit
+};
+if (x1.x1.x1==1) {setverdict(pass);}	//at declaration
+     else {setverdict(fail);}
+if (x1.x1.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1.x2==temp1) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.x1.x1==1) {setverdict(pass);}	//at declaration, omit
+     else {setverdict(fail);}
+if (x2.x1.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(x2.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x3.x1.x1==1) {setverdict(pass);}	//later
+     else {setverdict(fail);}
+if (x3.x1.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x3.x2==temp1) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x4.x1.x1==1) {setverdict(pass);}	//later, omit
+     else {setverdict(fail);}
+if (x4.x1.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(x4.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase setAssignSetof() runs on setOper_mycomp{
+var setOper_tsetof temp2:={"a","7"};
+var setOper_myset6 x1:={   //set from set of
+ x1:={ "1", "a" },
+ x2:=temp2
+};
+var setOper_myset6 x2:={   //set from set of, with omited field
+ x1:={ "1", "a" },
+ x2:=omit
+};
+var setOper_myset6 x3,x4
+x3:={   			//set from set of
+ x1:={ "1", "a" },
+ x2:=temp2
+};
+x4:={   		//set from set of, with omited field
+ x1:={ "1","a" },
+ x2:=omit
+};
+if (x1.x1[0]=="1") {setverdict(pass);}	//at declaration
+     else {setverdict(fail);}
+if (x1.x1[1]=="a") {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1.x2==temp2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.x1[0]=="1") {setverdict(pass);}	//at declaration, omit
+     else {setverdict(fail);}
+if (x2.x1[1]=="a") {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(x2.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x3.x1[0]=="1") {setverdict(pass);}	//later
+     else {setverdict(fail);}
+if (x3.x1[1]=="a") {setverdict(pass);}
+     else {setverdict(fail);}
+if (x3.x2==temp2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x4.x1[0]=="1") {setverdict(pass);}	//later, omit
+     else {setverdict(fail);}
+if (x4.x1[1]=="a") {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(x4.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase setAssignUnion() runs on setOper_mycomp{
+var setOper_tunion temp5 := {x2:=1.3}
+var setOper_myset7 x1:={   //set from union
+ x1:={ x1 :=3 },
+ x2:=temp5  //{ x2:=1.3 }
+};
+var setOper_myset7 x2:={   //set from union, with omited field
+ x1:={ x1 :=3 },
+ x2:=omit
+};
+var setOper_myset7 x3,x4;
+x3:={   //set from union
+ x1:={ x1 :=3 },
+ x2:=temp5  //{ x2:=1.3 }
+};
+x4:={   //set from union, with omited field
+ x1:={ x1 :=3 },
+ x2:=omit
+};
+if (x1.x1.x1==3) {setverdict(pass);}	//at declaration
+     else {setverdict(fail);}
+if (ischosen(x1.x1.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1.x1.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1.x2==temp5) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.x1.x1==3) {setverdict(pass);}	//at declaration, omit
+     else {setverdict(fail);}
+if (ischosen(x2.x1.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2.x1.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(x2.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x3.x1.x1==3) {setverdict(pass);}	//later
+     else {setverdict(fail);}
+if (ischosen(x3.x1.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x3.x1.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x3.x2==temp5) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x4.x1.x1==3) {setverdict(pass);}	//later, omit
+     else {setverdict(fail);}
+if (ischosen(x4.x1.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x4.x1.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(x4.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase setAssignElem() runs on setOper_mycomp{
+var setOper_myset1 x1:={	//set with basic types
+x1:=1,
+x2:=1.2,
+x3:=xx2 };
+x1.x2:=3.4;
+if (x1.x1==1) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1.x2==3.4) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1.x3==xx2) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+
+testcase setAssignElemOpt() runs on setOper_mycomp{
+var integer inttemp:=2;
+var setOper_myset2 x1:={	//set with basic types
+x1:=1,
+x2:=1.2,
+x3:=xx2,
+x4:=omit } ;  //2
+var setOper_myset2 x2, x3, x4;
+x2:=x1;
+x3:={x1:=1, x2:=1.2, x3:=xx2, x4:=inttemp };
+x4:=x3;
+x1.x1:=2;			//not optional field
+x2.x4:=3;			//optional field; omited-> value
+x3.x4:=3;			//optional field; value-> value
+x4.x4:=omit;			//optional field; value -> omited
+//not optional field
+if (x1.x1==2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1.x3==xx2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(x1.x4))) {setverdict(pass);}
+     else {setverdict(fail);}
+//optional field, omited -> value
+if (x2.x1==1) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.x3==xx2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.x4==3) {setverdict(pass);}
+     else {setverdict(fail);}
+//optional field; value-> value
+if (x3.x1==1) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x3.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x3.x3==xx2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x3.x4==3) {setverdict(pass);}
+     else {setverdict(fail);}
+//optional field; value -> omited
+if (x4.x1==1) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x4.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x4.x3==xx2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(x4.x4))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase setAssignElemRec() runs on setOper_mycomp{
+var setOper_trecord temp1:={ x1:=omit, x2:=3.4 };
+var setOper_myset3 x1;
+x1:={   //set from record
+ x1:={ x1:=1, x2:=1.2 },
+ x2:=temp1
+};
+x1.x1.x1:=2;
+temp1.x1:=3;
+x1.x2:=temp1;
+if (x1.x1.x1==2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1.x1.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1.x2==temp1) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+
+testcase setAssignElemRecof() runs on setOper_mycomp{
+var setOper_trecof temp2:={'AF12'O};
+var setOper_myset4 x1:={   //set from record of
+ x1:={ '12AB'O, 'CD12'O },
+ x2:=temp2
+};
+x1.x1[1]:='34AB'O;
+if (x1.x1[0]=='12AB'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1.x1[1]=='34AB'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1.x2==temp2) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase setAssignElemSet() runs on setOper_mycomp{
+var setOper_tset temp1:={ x1:=2, x2:=omit };
+var setOper_myset5 x1:={   //set from set
+ x1:={ x1:=1, x2:=1.2 },
+ x2:=temp1
+};
+x1.x1.x2:=3.4;
+if (x1.x1.x1==1) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1.x1.x2==3.4) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1.x2==temp1) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase setAssignElemSetof() runs on setOper_mycomp{
+var setOper_tsetof temp2:={"a","7"};
+var setOper_myset6 x1:={   //set from set of
+ x1:={ "1", "a" },
+ x2:=temp2
+};
+x1.x1[0]:="h";
+if (x1.x1[0]=="h") {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1.x1[1]=="a") {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1.x2==temp2) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase setAssignElemUnion() runs on setOper_mycomp{
+var setOper_tunion temp5 := {x2:=1.3}
+var setOper_myset7 x1:={   //set from union
+ x1:={ x1 :=3 },
+ x2:=temp5  //{ x2:=1.3 }
+};
+x1.x1.x2:=3.4;
+if (x1.x1.x2==3.4) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x1.x1.x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1.x1.x1))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1.x2==temp5) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase setSizeof() runs on setOper_mycomp{
+var integer inttemp:=2;
+var setOper_myset2 x1:={	//set with basic types, with optional field
+x1:=1,
+x2:=1.2,
+x3:=xx2,
+x4:=inttemp};  //2
+var setOper_myset2 x2:={	//set with basic types, with omited field
+x1:=1,
+x2:=1.2,
+x3:=xx2,
+x4:=omit };
+var setOper_myset2 x3, x4;
+x3:={				//set with basic types, with optional field
+x1:=1,
+x2:=1.2,
+x3:=xx2,
+x4:=inttemp };   //2
+x4:={				//set with basic types, with omited field
+x1:=1,
+x2:=1.2,
+x3:=xx2,
+x4:=omit };
+//if (sizeof(x1)==4) {setverdict(pass);} //at declaration, with optional field
+//     else {setverdict(fail);}
+//if (sizeof(x2)==3) {setverdict(pass);}	//at declaration, with omited field
+//     else {setverdict(fail);}
+//if (sizeof(x3)==4) {setverdict(pass);}	//later, with optional field
+//     else {setverdict(fail);}
+//if (sizeof(x4)==3) {setverdict(pass);}	//testcase, with optional field
+//     else {setverdict(fail);}
+//if (sizeof(setOper_myset2)==4) {setverdict(pass);}	// size of type
+//     else {setverdict(fail);}
+}
+
+testcase setConst() runs on setOper_mycomp{
+const setOper_myset1 const1:={	//set with basic types
+x1:=1,
+x2:=1.2,
+x3:=xx2 };
+if (setOper_const1.x1==1) {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+if (setOper_const1.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (setOper_const1.x3==xx2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const1.x1==1) {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+if (const1.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const1.x3==xx2) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase setConstOpt() runs on setOper_mycomp{
+const setOper_myset2 const2:={	//set with basic types, with optional field
+x1:=1,
+x2:=1.2,
+x3:=xx2,
+x4:=2 };
+const setOper_myset2 const3:={	//set with basic types, with omited field
+x1:=1,
+x2:=1.2,
+x3:=xx2,
+x4:=omit };
+//definition part, with optional field
+if (setOper_const2.x1==1) {setverdict(pass);}
+     else {setverdict(fail);}
+if (setOper_const2.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (setOper_const2.x3==xx2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (setOper_const2.x4==2) {setverdict(pass);}
+     else {setverdict(fail);}
+//definition part, with omited field
+if (setOper_const3.x1==1) {setverdict(pass);}
+     else {setverdict(fail);}
+if (setOper_const3.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (setOper_const3.x3==xx2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(setOper_const3.x4))) {setverdict(pass);}
+     else {setverdict(fail);}
+//testcase, with optional field
+if (const2.x1==1) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const2.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const2.x3==xx2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const2.x4==2) {setverdict(pass);}
+     else {setverdict(fail);}
+//testcase, with optional field
+if (const3.x1==1) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const3.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const3.x3==xx2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(const3.x4))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase setConstRec() runs on setOper_mycomp{
+const setOper_myset3 const4:={   //set from record
+ x1:={ x1:=1, x2:=1.2 },
+ x2:=setOper_temp1
+};
+const setOper_myset3 const5:={   //set from record, with omited field
+ x1:={ x1:=1, x2:=1.2 },
+ x2:=omit
+};
+if (setOper_const4.x1.x1==1) {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+if (setOper_const4.x1.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (setOper_const4.x2==setOper_temp1) {setverdict(pass);}
+     else {setverdict(fail);}
+if (setOper_const5.x1.x1==1) {setverdict(pass);}	//definition part, omit
+     else {setverdict(fail);}
+if (setOper_const5.x1.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(setOper_const5.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const4.x1.x1==1) {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+if (const4.x1.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const4.x2==setOper_temp1) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const5.x1.x1==1) {setverdict(pass);}	//testcase part, omit
+     else {setverdict(fail);}
+if (const5.x1.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(const5.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase setConstRecof() runs on setOper_mycomp{
+const setOper_myset4 const6:={   //set from record of
+ x1:={ '12AB'O, 'CD12'O },
+ x2:=setOper_temp2
+};
+const setOper_myset4 const7:={   //set from record of, with omited field
+ x1:={ '12AB'O, 'CD12'O },
+ x2:=omit
+};
+if (setOper_const6.x1[0]=='12AB'O) {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+if (setOper_const6.x1[1]=='CD12'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (setOper_const6.x2==setOper_temp2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (setOper_const7.x1[0]=='12AB'O) {setverdict(pass);}	//definition part, omit
+     else {setverdict(fail);}
+if (setOper_const7.x1[1]=='CD12'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(setOper_const7.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const6.x1[0]=='12AB'O) {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+if (const6.x1[1]=='CD12'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const6.x2==setOper_temp2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const7.x1[0]=='12AB'O) {setverdict(pass);}	//testcase part, omit
+     else {setverdict(fail);}
+if (const7.x1[1]=='CD12'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(const7.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase setConstSet() runs on setOper_mycomp{
+const setOper_myset5 const8:={   //set from set
+ x1:={ x1:=2, x2:=1.3},
+ x2:=setOper_temp3
+};
+const setOper_myset5 const9:={   //set from set, with omited field
+ x1:={ x1:=2, x2:=omit},
+ x2:=omit
+};
+if (setOper_const8.x1.x1==2) {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+if (setOper_const8.x1.x2==1.3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (setOper_const8.x2==setOper_temp3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (setOper_const9.x1.x1==2) {setverdict(pass);}	//definition part, omit
+     else {setverdict(fail);}
+if (setOper_const9.x1.x2==1.3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(setOper_const9.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const8.x1.x1==2) {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+if (const8.x1.x2==1.3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const8.x2==setOper_temp3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const9.x1.x1==2) {setverdict(pass);}	//testcase part, omit
+     else {setverdict(fail);}
+if (not(ispresent(const9.x1.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(const9.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase setConstSetof() runs on setOper_mycomp{
+const setOper_myset6 const10:={   //set from set of
+ x1:={"a","b"},
+ x2:=setOper_temp4  //{"f","8"},
+};
+const setOper_myset6 const11:={   //set from set of, with omited field
+ x1:={"a","b"},
+ x2:=omit
+};
+if (setOper_const10.x1[0]=="a") {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+if (setOper_const10.x1[1]=="b") {setverdict(pass);}
+     else {setverdict(fail);}
+if (setOper_const10.x2==setOper_temp4) {setverdict(pass);}
+     else {setverdict(fail);}
+if (setOper_const11.x1[0]=="a") {setverdict(pass);}	//definition part, omit
+     else {setverdict(fail);}
+if (setOper_const11.x1[1]=="b") {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(setOper_const11.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const10.x1[0]=="a") {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+if (const10.x1[1]=="b") {setverdict(pass);}
+     else {setverdict(fail);}
+if (const10.x2==setOper_temp4) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const11.x1[0]=="a") {setverdict(pass);}	//testcase part, omit
+     else {setverdict(fail);}
+if (const11.x1[1]=="b") {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(const11.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase setConstUnion() runs on setOper_mycomp{
+const setOper_myset7 const12:={   //set from union
+ x1:={ x1 :=3 },
+ x2:=setOper_temp5  //{ x2:=1.3 }
+};
+const setOper_myset7 const13:={   //set from union, with omited field
+ x1:={ x1 :=3 },
+ x2:=omit
+};
+if (setOper_const12.x1.x1==3) {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+if (setOper_const12.x2==setOper_temp5) {setverdict(pass);}
+     else {setverdict(fail);}
+if (setOper_const13.x1.x1==3) {setverdict(pass);}	//definition part, omit
+     else {setverdict(fail);}
+if (not(ispresent(setOper_const13.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const12.x1.x1==3) {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+if (const12.x2==setOper_temp5) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const13.x1.x1==3) {setverdict(pass);}	//testcase part, omit
+     else {setverdict(fail);}
+if (not(ispresent(const13.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+
+testcase setComp() runs on setOper_mycomp{
+var setOper_myset1 x1,x2,x3,x4;
+x1:={ x1:=1, x2:=1.2, x3:=xx2 };
+x2:={ x1:=1, x2:=1.2, x3:=xx2 };
+x3:={ x1:=1, x2:=1.24, x3:=xx2 };
+x4:={ x2:=1.2, x1:=1, x3:=xx2 };
+if (x1==x2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1==x3)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1!=x3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1!=x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x4==x2) {setverdict(pass);}	//out of order
+     else {setverdict(fail);}
+if (not(x4==x3)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x4!=x3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x4!=x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+
+testcase setCompOpt() runs on setOper_mycomp{
+var integer inttemp:=2;	// set with basic types with optional field
+var setOper_myset2 x1,x2,x3;
+x1 :={	x1:=1, x2:=1.2, x3:=xx2, x4:=inttemp };  //inntemp=2
+x2:= { x1:=1, x2:=1.2, x3:=xx2, x4:=omit };
+x3:= { x1:=1, x2:=1.2, x3:=xx2, x4:=omit };
+if (x2==x3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1==x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1!=x3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x2!=x3)) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase setCompRec() runs on setOper_mycomp{
+var setOper_trecord temp1:={ x1:=omit, x2:=3.4 }; // set with record
+var setOper_myset3 x1,x2,x3;
+x1 :={
+ x1:={ x1:=1, x2:=1.2 },
+ x2:=temp1
+};
+x2 :={
+ x1:={ x1:=1, x2:=1.2 },
+ x2:=temp1
+};
+x3 :={
+ x1:={ x1:=2, x2:=1.2 },
+ x2:=temp1
+};
+if (x1==x2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1==x3)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1!=x3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1!=x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+
+testcase setCompRecof() runs on setOper_mycomp{
+var setOper_trecof temp2:={'AF12'O};
+var setOper_myset4 x1,x2,x3;
+x1:={   				//set from record of
+ x1:={ '12AB'O, 'CD12'O },
+ x2:=temp2
+};
+x2:={
+ x1:={ '12AB'O, 'CD12'O },
+ x2:=temp2
+};
+x3:={
+ x1:={ '12AB'O },
+ x2:=temp2
+};
+if (x1==x2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1==x3)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2!=x3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1!=x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase setCompSet() runs on setOper_mycomp{
+var setOper_tset temp1:={ x1:=2, x2:=omit };
+var setOper_myset5 x1,x2,x3
+x1:={   				//set from set
+ x1:={ x1:=1, x2:=1.2 },
+ x2:=temp1
+};
+x2:={
+ x1:={ x1:=1, x2:=1.2 },
+ x2:=temp1
+};
+x3:={
+ x1:={ x1:=4, x2:=1.2 },
+ x2:=temp1
+};
+if (x1==x2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x2==x3)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1!=x3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1!=x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase setCompSetof() runs on setOper_mycomp{
+var setOper_tsetof temp2:={"a","7"};
+var setOper_myset6 x1,x2,x3;
+x1:={   				//set from set of
+ x1:={ "1", "a" },
+ x2:=temp2
+};
+x2:={
+ x1:={ "1", "a" },
+ x2:=temp2
+};
+x3:={
+ x1:={ "1", "a", "k" },
+ x2:=temp2
+};
+if (x1==x2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x2==x3)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1!=x3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1!=x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase setCompUnion() runs on setOper_mycomp{
+var setOper_tunion temp5 := {x2:=1.3}
+var setOper_myset7 x1,x2,x3;
+x1:={   				//set from union
+ x1:={ x1 :=3 },
+ x2:=temp5  //{ x2:=1.3 }
+};
+x2:={
+ x1:={ x1 :=3 },
+ x2:=temp5  //{ x2:=1.3 }
+};
+x3:={
+ x1:={ x2 :=3.9 },
+ x2:=temp5  //{ x2:=1.3 }
+};
+if (x1==x2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1==x3)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2!=x3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1!=x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+type set myset1 {
+  integer f1 (0..255),
+  charstring f2 length(0..255)
+}
+type myset1 myset2 ({f1 := 0, f2 := ""})
+type myset1 myset3
+type myset1 myset4 ({f1 := c_mysetlen1, f2 := "hello"}, {f1 := c_mysetlen2, f2 := "world"})
+
+const integer c_mysetlen1 := 255
+const integer c_mysetlen2 := c_mysetlen1
+const myset4 c_myset1 := {f1 := 255, f2 := "world"}
+
+template myset4 t_myset1 := {f1 := 255, f2 := "hello"}
+// The following line shouldn't work.  Delete it later.
+template myset4 t_myset2 modifies t_myset1 := {f1 := 1, f2 := ""}
+
+function f_set1() return myset2 { return {f1 := 0, f2 := ""} }
+
+function f_set2() return boolean {
+  var integer v_i1 := 100
+  var charstring v_s1 := "abc"
+  var myset4 v_myset1 := valueof(t_myset1)
+  // It doesn't work yet: `var myset4 v_myset2 := {f1 := v_i1, f2 := v_s1}'.  Replace
+  // the test later.
+  var myset4 v_myset2 := valueof(modifies t_myset1 := {f2 := ""})
+  var myset4 v_myarr1[3] := {c_myset1, {f1 := 255, f2 := "he" & "llo"}, valueof(t_myset1)}
+  if (v_myset1 != v_myarr1[2]) { return false }
+  else {
+    log(v_myset1)
+    log(v_myarr1)
+    if (v_myset1.f1 == v_myarr1[0].f1 and v_myset2.f1 == v_myarr1[1].f1 and 255 == v_myarr1[2].f1 and
+        v_myset1.f2 != v_myarr1[0].f2 and v_myset2.f2 != v_myarr1[1].f2 and "hello" == v_myarr1[2].f2) {
+      return true
+    }
+    return false
+  }
+}
+
+testcase setSubtypes() runs on setOper_mycomp {
+  var template myset1 vt_myset1 := { f1 := 0, f2 := "" }
+  var myset1 v_myset1 := { f1 := valueof(vt_myset1.f1), f2 := valueof(vt_myset1.f2) }
+
+  if (f_set1() == v_myset1 and valueof(vt_myset1) == f_set1()) { setverdict(pass) }
+  else { setverdict(fail) }
+  if (f_set2()) { setverdict(pass) }
+  else { setverdict(fail) }
+}
+
+testcase setIsvalue() runs on setOper_mycomp{
+  var typedefset_empty v1;
+  var setOper_trecord vs2_def;
+  var setOper_trecord v2;
+  v2.x1 := 42;
+
+  if ( isvalue(v1) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(vs2_def) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(v2) ) { setverdict(fail); } else { setverdict(pass); };
+
+  var setOper_trecord vs2_part := { -, 1.0 };
+  if ( isvalue(vs2_part) ) { setverdict(fail); } else { setverdict(pass); };
+  vs2_part.x1 := omit;
+  if ( isvalue(vs2_part) ) { setverdict(pass); } else { setverdict(fail); };
+
+  var setOper_trecord vs2_om := { omit, - };
+  if ( isvalue(vs2_om) ) { setverdict(fail); } else { setverdict(pass); };
+  vs2_om.x2 := 33.0;
+  if ( isvalue(vs2_om) ) { setverdict(pass); } else { setverdict(fail); };
+}
+
+testcase setIsbound() runs on setOper_mycomp{
+  var typedefset_empty v1;
+  var setOper_trecord vs2_def;
+  var setOper_trecord v2;
+  v2.x1 := 42;
+
+  if ( isbound(v1) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isbound(vs2_def) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isbound(vs2_def.x1) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isbound(vs2_def.x2) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isbound(v2) ) { setverdict(pass); } else { setverdict(fail); };
+
+  var setOper_trecord vs2_part := { -, 1.0 };
+  if ( isbound(vs2_part) ) { setverdict(pass); } else { setverdict(fail); };
+  vs2_part.x1 := omit;
+  if ( isbound(vs2_part) ) { setverdict(pass); } else { setverdict(fail); };
+
+  var setOper_trecord vs2_om := { omit, - };
+  if ( isbound(vs2_om) ) { setverdict(pass); } else { setverdict(fail); };
+  vs2_om.x2 := 33.0;
+  if ( isbound(vs2_om) ) { setverdict(pass); } else { setverdict(fail); };
+}
+
+control {
+ const setOper_trecord cl_temp1:={ x1:=omit, x2:=3.4 }; //constant in control part
+ const setOper_trecof cl_temp2:={ 'AF12'O };
+ const setOper_tset cl_temp3:={ x1:=234, x2:=1.9};
+ const setOper_tsetof cl_temp4:={"f","8"};
+ const setOper_tunion cl_temp5:={ x2:=1.3 };
+ const typedefsetComp_myset cl_const14 := {
+  x1 := { x1:=omit, x2:=3.4 },
+  x2 := { 'AF12'O },
+  x3 := { x1:=234, x2:=1.9},
+  x4 := {"f","8"},
+  x5 := { x2:=1.3 },
+  x6 := {1,2,3}
+ }
+ var setOper_trecord vl_temp1; //variable in control part
+ var setOper_trecof vl_temp2;
+ var setOper_tset vl_temp3;
+ var setOper_tsetof vl_temp4;
+ var setOper_tunion vl_temp5;
+ var typedefsetComp_myset vl_const14;
+
+ execute(setAssign());
+ execute(setAssignOpt());
+ execute(setAssignRec());
+ execute(setAssignRecof());
+ execute(setAssignSet());
+ execute(setAssignSetof());
+ execute(setAssignUnion());
+ execute(setAssignElem());
+ execute(setAssignElemOpt());
+ execute(setAssignElemRec());
+ execute(setAssignElemRecof());
+ execute(setAssignElemSet());
+ execute(setAssignElemSetof());
+ execute(setAssignElemUnion());
+// execute(setSizeof());
+ execute(setConst());
+ execute(setConstOpt());
+ execute(setConstRec());
+ execute(setConstRecof());
+ execute(setConstSet());
+ execute(setConstSetof());
+ execute(setConstUnion());
+ execute(setComp());
+ execute(setCompOpt());
+ execute(setCompRec());
+ execute(setCompRecof());
+ execute(setCompSet());
+ execute(setCompSetof());
+ execute(setCompUnion());
+ execute(setSubtypes());
+ execute(setIsvalue());
+ execute(setIsbound());
+}
+}
diff --git a/Regression_Test_java/src/TsetofMatch.ttcn b/Regression_Test_java/src/TsetofMatch.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..dc71d68670ced14806a8875ab4b385edaaa247b3
--- /dev/null
+++ b/Regression_Test_java/src/TsetofMatch.ttcn
@@ -0,0 +1,625 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   
+ *   Balasko, Jeno
+ *   Forstner, Matyas
+ *   Raduly, Csaba
+ *   Szabados, Kristof
+ *   Szabo, Janos Zoltan – initial implementation
+ *
+ ******************************************************************************/
+module TsetofMatch {
+// Type definitions
+
+type component my_comp {};
+type enumerated my_enum {amstel, buckler, coronita, desperados};
+type record of integer recordof_int;
+//type union my_union {
+//	int x1,
+//	recordof_int x2
+//};
+
+type set of integer setof_int; // set of basic type
+type set of my_enum setof_enum; // set of enum
+//type set of my_union setof_union; // set of union
+type set of recordof_int setof_recordof; // set of record of
+type set of setof_int setof_setof; // recursive set of
+
+// Constants
+
+const recordof_int record_element1:={4,3,2};
+
+const setof_int setof_const1:={1,2,3,4,5};
+const setof_enum setof_const2:={amstel, coronita};
+//const setof_union setof_const3:={{1,{1,2,3}}, {9,{4}}};
+const setof_recordof setof_const4:={record_element1, {5,4,3}, {2}};
+const setof_setof setof_const5:={{0,1}, setof_const1, {1}};
+
+// Templates
+
+template setof_int setof_temp1 := {1,2,3,4};
+template setof_enum setof_temp2 := {amstel, buckler, ?};
+template setof_enum setof_temp3 := {?, buckler, ?, buckler};
+template setof_int setof_temp4 := {*};
+template setof_int setof_temp5 := {1, *, 3};
+template setof_recordof setof_temp6 := {*, {1,2}, {3}, *};
+template setof_setof setof_temp7 := {{?,1}, {7,3}, ?, {5,*}};
+template setof_setof setof_temp8 := {{1,*}, * length (4)};
+template setof_int setof_temp9 := ({1},{2,?},{(3,4,5),?,?});
+template setof_setof setof_temp10 := {* length(2), * length(3), *};
+
+// Testcases - non-template part
+
+testcase setofIntAssign() runs on my_comp {
+var setof_int x1:= {25, 13, 37};
+var setof_int x2, x3, x4;
+x2:={32,12};
+x3:={11};
+x3:={11,22};
+x4:={};
+
+if (x1[0]==25) {setverdict(pass);} // at declaration
+ else {setverdict(fail);}
+if (x1[1]==13) {setverdict(pass);}
+ else {setverdict(fail);}
+if (x2[0]==32) {setverdict(pass);} // later
+ else {setverdict(fail);}
+if (x2[1]==12) {setverdict(pass);}
+ else {setverdict(fail);}
+if (x3[0]==11) {setverdict(pass);} // after changing size
+ else {setverdict(fail);}
+if (x3[1]==22) {setverdict(pass);}
+ else {setverdict(fail);}
+if (sizeof(x4)==0) {setverdict(pass);} // empty set of
+ else {setverdict(fail);}
+}
+
+testcase setofIntEq() runs on my_comp {
+// setof_int setof_const1:={1,2,3,4,5};
+var setof_int x1, x2, x3, x4, x5, x6, x7, x8, x9, x10;
+x1 := {1, 2, 3, 4, 5};
+x2 := {1, 3, 2, 5, 4};
+x3 := {4, 3, 2, 1, 5};
+x4 := {5, 1, 4, 3, 2};
+x5 := {3, 4, 5, 2, 1};
+x6 := {1, 2, 3, 4, 4};
+x7 := {1, 1, 1, 1, 1};
+x8 := {1, 2, 3, 4, 5, 6};
+x9:= {1, 4, 3, 2};
+//equality - the same order
+if (x1==setof_const1) {setverdict(pass);}
+ else {setverdict(fail);}
+//equality - other order
+if (x2==setof_const1) {setverdict(pass);}
+ else {setverdict(fail);}
+if (x3==setof_const1) {setverdict(pass);}
+ else {setverdict(fail);}
+if (x4==setof_const1) {setverdict(pass);}
+ else {setverdict(fail);}
+if (x5==setof_const1) {setverdict(pass);}
+ else {setverdict(fail);}
+//non-equality - unmatched elements
+if (x6!=setof_const1) {setverdict(pass);}
+ else {setverdict(fail);}
+if (x7!=setof_const1) {setverdict(pass);}
+ else {setverdict(fail);}
+//non-equality - too many elements
+if (x8!=setof_const1) {setverdict(pass);}
+ else {setverdict(fail);}
+//non-equality - too few elements
+if (x9!=setof_const1) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase setofSetofEq() runs on my_comp {
+var setof_setof x1, x2, x3, x4, x5, x6, x7;
+x1 := {{1,2},{3,4}};
+x2 := {{1,2},{3,4}};
+x3 := {{3,4},{1,2}};
+x4 := {{2,1},{4,3}};
+x5 := {{2,1},{4,3},{1,2}};
+x6 := {{4,1},{3,2}};
+x7 := {{1},{2,4}};
+//equality - in same order
+if (x2==x1) {setverdict(pass);}
+ else {setverdict(fail);}
+//equality - different orders
+if (x3==x1) {setverdict(pass);}
+ else {setverdict(fail);}
+if (x4==x1) {setverdict(pass);}
+ else {setverdict(fail);}
+//non-equality - too many elements
+if (x5!=x1) {setverdict(pass);}
+ else {setverdict(fail);}
+//non-equality - elements not matching
+if (x6!=x1) {setverdict(pass);}
+ else {setverdict(fail);}
+//non-equality - elements size not proper
+if (x7!=x1) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+// Testcases - template part
+
+testcase tsetofIntSpecValueMatch() runs on my_comp {
+//template setof_int setof_temp1 := {1,2,3,4};
+var setof_int x1, x2, x3, x4, x5, x6, x7, x8, x9, x10;
+x1 := {1, 2, 3, 4}
+x2 := {1, 3, 2, 4}
+x3 := {4, 3, 2, 1}
+x4 := {2, 1, 4, 3}
+x5 := {3, 4, 1, 2}
+x6 := {1, 2, 3}
+x7 := {1, 2, 3, 4, 5}
+x8 := {4, 3, 2, 2}
+x9 := {1, 1, 4, 3}
+x10 := {3, 5, 1, 2}
+//match - in same order
+if (match(x1,setof_temp1)) {setverdict(pass);}
+ else {setverdict(fail);}
+//match - in different orders
+if (match(x2,setof_temp1)) {setverdict(pass);}
+ else {setverdict(fail);}
+if (match(x3,setof_temp1)) {setverdict(pass);}
+ else {setverdict(fail);}
+if (match(x4,setof_temp1)) {setverdict(pass);}
+ else {setverdict(fail);}
+if (match(x5,setof_temp1)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: too few elements
+if (not(match(x6,setof_temp1))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: too many elements
+if (not(match(x7,setof_temp1))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: two different elements only match one
+if (not(match(x8,setof_temp1))) {setverdict(pass);}
+ else {setverdict(fail);}
+if (not(match(x9,setof_temp1))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: unmatched element
+if (not(match(x10,setof_temp1))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase tsetofEnumAnyValueMatch() runs on my_comp {
+//template setof_enum setof_temp2 := {amstel, buckler, ?};
+//template setof_enum setof_temp3 := {?, buckler, ?, buckler};
+var setof_enum x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12;
+x1 := {amstel, buckler, coronita}
+x2 := {buckler, coronita, amstel}
+x3 := {buckler, buckler, amstel}
+x4 := {buckler, amstel, amstel}
+x5 := {buckler, amstel, desperados}
+x6 := {amstel, amstel, buckler, buckler}
+x7 := {buckler, coronita, buckler, amstel}
+x8 := {amstel, buckler}
+x9 := {buckler, coronita, buckler}
+x10 := {buckler, buckler, buckler}
+x11 := {coronita, amstel, amstel}
+x12 := {amstel, buckler, coronita, desperados}
+//match - in same order
+if (match(x1,setof_temp2)) {setverdict(pass);}
+ else {setverdict(fail);}
+//match - in other orders
+if (match(x2,setof_temp2)) {setverdict(pass);}
+ else {setverdict(fail);}
+if (match(x3,setof_temp2)) {setverdict(pass);}
+ else {setverdict(fail);}
+if (match(x4,setof_temp2)) {setverdict(pass);}
+ else {setverdict(fail);}
+if (match(x5,setof_temp2)) {setverdict(pass);}
+ else {setverdict(fail);}
+if (match(x6,setof_temp3)) {setverdict(pass);}
+ else {setverdict(fail);}
+if (match(x7,setof_temp3)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match - too many elements
+if (match(x6,setof_temp2)) {setverdict(fail);}
+ else {setverdict(pass);}
+//no match - too few elements
+if (match(x8,setof_temp2)) {setverdict(fail);}
+ else {setverdict(pass);}
+//no match - element unmatched
+if (match(x9,setof_temp2)) {setverdict(fail);}
+ else {setverdict(pass);}
+if (match(x10,setof_temp2)) {setverdict(fail);}
+ else {setverdict(pass);}
+if (match(x11,setof_temp2)) {setverdict(fail);}
+ else {setverdict(pass);}
+if (match(x12,setof_temp3)) {setverdict(fail);}
+ else {setverdict(pass);}
+}
+
+testcase tsetofIntAnyorNoneMatch() runs on my_comp {
+//template setof_int setof_temp4 := {*};
+//template setof_int setof_temp5 := {1, *, 3};
+var setof_int x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10;
+//x0 := {omit}
+x1 := {}
+x2 := {1}
+x3 := {2}
+x4 := {2, 1}
+x5 := {3, 2, 1}
+x6 := {1, 3}
+x7 := {3, 1}
+x8 := {1, 2, 3}
+x9 := {3, 2, 1}
+x10 := {4, 3, 2, 1}
+  //match - matches everything
+  /*
+if (match(x0,setof_temp4)) {setverdict(pass);}
+ else {setverdict(fail);}
+  */
+if (match(x1,setof_temp4)) {setverdict(pass);}
+ else {setverdict(fail);}
+if (match(x2,setof_temp4)) {setverdict(pass);}
+ else {setverdict(fail);}
+if (match(x3,setof_temp4)) {setverdict(pass);}
+ else {setverdict(fail);}
+if (match(x4,setof_temp4)) {setverdict(pass);}
+ else {setverdict(fail);}
+if (match(x5,setof_temp4)) {setverdict(pass);}
+ else {setverdict(fail);}
+//match - in same and reverse order
+if (match(x6,setof_temp5)) {setverdict(pass);}
+ else {setverdict(fail);}
+if (match(x7,setof_temp5)) {setverdict(pass);}
+ else {setverdict(fail);}
+//match - with one or more anyvalues
+if (match(x8,setof_temp5)) {setverdict(pass);}
+ else {setverdict(fail);}
+if (match(x9,setof_temp5)) {setverdict(pass);}
+ else {setverdict(fail);}
+if (match(x10,setof_temp5)) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase tsetofRecordofAnyorNoneMatch() runs on my_comp {
+// setof_recordof setof_temp6 := {*, {1,2}, {3}, *};
+var setof_recordof x1, x2, x3, x4, x5, x6, x7;
+x1 := {{1,2},{3}};
+x2 := {{3},{1,2}};
+x3 := {{2,1},{3}};
+x4 := {{1,2},{3},{1,2}};
+x5 := {{1,2,3},{1},{2},{3},{1,2},{2,3},{1,3}};
+x6 := {{1,2,3},{3},{2,3},{1,3},{3,3}};
+x7 := {{1,2}};
+//match in both order
+if (match(x1,setof_temp6)) {setverdict(pass);}
+ else {setverdict(fail);}
+if (match(x2,setof_temp6)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match - wrong order in the record
+if (not(match(x3,setof_temp6))) {setverdict(pass);}
+ else {setverdict(fail);}
+//match - use anyornone values
+if (match(x4,setof_temp6)) {setverdict(pass);}
+ else {setverdict(fail);}
+if (match(x5,setof_temp6)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match - no match for one of the elements
+if (not(match(x6,setof_temp6))) {setverdict(pass);}
+ else {setverdict(fail);}
+if (not(match(x7,setof_temp6))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase tsetofSetofMatch() runs on my_comp {
+// setof_setof setof_temp7 := {{?,1}, {7,3}, ?, {5,*}};
+var setof_setof x1, x2, x3, x4, x5;
+x1 := {{1,1},{7,3},{8,9},{5}};
+x2 := {{7,6,5},{1,0},{3,7},{11}};
+x3 := {{5,7,3},{7,3},{},{1,5}};
+x4 := {{7,3},{1,2},{5}};
+x5 := {{1,1,1},{3,7},{2,3},{5,5}};
+//match - in the same order
+if (match(x1,setof_temp7)) {setverdict(pass);}
+ else {setverdict(fail);}
+//match - in different order
+if (match(x2,setof_temp7)) {setverdict(pass);}
+ else {setverdict(fail);}
+if (match(x3,setof_temp7)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: too few elements
+if (not(match(x4,setof_temp7))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: first element unmatched
+if (not(match(x5,setof_temp7))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase tsetofSetofLengthMatch1() runs on my_comp {
+//template setof_setof setof_temp8 := {{1,*}, * length (4)};
+// Note: the interpretation of the asterisk with length restriction is
+// unspecified in the standard.
+// In our interpretation the asterisk matches exactly one element if it has
+// extra matching attributes (e.g. length restriction).
+// That is, * length(4) and ? length(4) are treated as equivalents.
+var setof_setof x1, x2, x3, x4, x5, x6, x7, x8;
+x1 := {{1},{1,1,1,1}};
+x2 := {{1,2,3,4},{5,1}};
+x3 := {{1,2,3},{1,2,3,4},{4,3,2,1}};
+x4 := {{5,1}};
+x5 := {{2,3,4,5}};
+x6 := {{1},{1,2},{1,2,3,4}};
+x8 := {{1},{1,2,3,4},{1,2}};
+x7 := {{1},{1,2}};
+//match - in same order
+if (match(x1,setof_temp8)) {setverdict(pass);}
+ else {setverdict(fail);}
+//match - in different order
+if (match(x2,setof_temp8)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match - multiple fixed length elements
+if (not match(x3,setof_temp8)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match - no fixed length elements
+if (not match(x4,setof_temp8)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: element unmatched
+if (not match(x5,setof_temp8)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match - element of wrong length
+if (not(match(x6,setof_temp8))) {setverdict(pass);}
+ else {setverdict(fail);}
+if (not(match(x8,setof_temp8))) {setverdict(pass);}
+ else {setverdict(fail);}
+if (not(match(x7,setof_temp8))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase tsetofIntValueListMatch() runs on my_comp {
+//template setof_int setof_temp9 := ({1},{2,?},{3..5,?,?});
+var setof_int x1, x2, x3, x4, x5, x6, x7, x8, x9, x10;
+x1 := {1};
+x2 := {2,5};
+x3 := {3,3,3};
+x4 := {1,2,3};
+x5 := {2,1};
+x6 := {2};
+x7 := {1,2,6};
+x8 := {1,3};
+x9 := {1,2,2};
+x10 := {1,2,3,4};
+//match
+if (match(x1,setof_temp9)) {setverdict(pass);}
+ else {setverdict(fail);}
+if (match(x2,setof_temp9)) {setverdict(pass);}
+ else {setverdict(fail);}
+if (match(x3,setof_temp9)) {setverdict(pass);}
+ else {setverdict(fail);}
+if (match(x4,setof_temp9)) {setverdict(pass);}
+ else {setverdict(fail);}
+if (match(x5,setof_temp9)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match
+if (not(match(x6,setof_temp9))) {setverdict(pass);}
+ else {setverdict(fail);}
+if (not(match(x7,setof_temp9))) {setverdict(pass);}
+ else {setverdict(fail);}
+if (not(match(x8,setof_temp9))) {setverdict(pass);}
+ else {setverdict(fail);}
+if (not(match(x9,setof_temp9))) {setverdict(pass);}
+ else {setverdict(fail);}
+if (not(match(x10,setof_temp9))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase tsetofSetofLengthMatch2() runs on my_comp {
+//template setof_setof setof_temp10 := {* length(2), * length(3), *};
+// See the note for testcase tsetofSetofLengthMatch1
+var setof_setof x1, x2, x3, x4, x5;
+x1 := {};
+x2 := {{1,2},{2,3},{1,2,3}};
+x3 := {{1}, {1,2}};
+x4 := {{1,2,3},{4,3}};
+x5 := {{},{}};
+//no match - empty set
+if (not match(x1,setof_temp10)) {setverdict(pass);}
+ else {setverdict(fail);}
+//match - lengths are ok
+if (match(x2,setof_temp10)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: length too short
+if (not(match(x3,setof_temp10))) {setverdict(pass);}
+ else {setverdict(fail);}
+//match: lengths are ok
+if (match(x4,setof_temp10)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: lengths are zero
+if (not(match(x5,setof_temp10))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+ testcase tsetofSuperset1() runs on my_comp {
+   template setof_int t1 := superset(1, 2, 3);
+   template setof_int t2 := superset(5, 4, 3, 2, 1);
+   template setof_int t3 := superset(5, 4, 3, 2, 1, 6);
+   template setof_int t4 := superset(5, 4, 3, 2, 1, ?);
+   template setof_int t5 := superset(5, 4, 3, 2, ?);
+   template setof_int t6 := superset(?, 5, 4, 3, 2);
+   template setof_int t7 := superset(?, 5, 4, 3, 2, *);
+   template setof_int t8 := superset(?, 5, 4, 3, *);
+   template setof_int t9 := superset(5, 4, 3, 2, 1, ?, *);
+   template setof_int t1a := superset(1, 7, 2, 3);
+   template setof_int t2a := superset(5, 4, 7, 3, 2, 1);
+   template setof_int t3a := superset(5, 4, 3, 7, 2, 1, 6);
+   template setof_int t4a := superset(5, 7, 4, 3, 2, 1, ?);
+   template setof_int t5a := superset(5, 4, 3, 2, ?, 7);
+   template setof_int t6a := superset(?, 5, 7, 4, 3, 2);
+   template setof_int t7a := superset(7, ?, 5, 4, 3, 2, *);
+   template setof_int t8a := superset(?, 5, 4, 7, 3, *);
+   template setof_int t9a := superset(5, 4, 3, 2, 7, 1, ?, *);
+   template setof_int t10 := superset(?, ?, ?, ?, ?, ?);
+   template setof_int t11 := superset(?, ?, ?, ?, ?);
+
+   if(match(setof_const1, t1)) {setverdict(pass);}
+   else {setverdict(fail);}
+   if(match(setof_const1, t2)) {setverdict(pass);}
+   else {setverdict(fail);}
+   if(not match(setof_const1, t3)) {setverdict(pass);}
+   else {setverdict(fail);}
+   if(not match(setof_const1, t4)) {setverdict(pass);}
+   else {setverdict(fail);}
+   if(match(setof_const1, t5)) {setverdict(pass);}
+   else {setverdict(fail);}
+   if(match(setof_const1, t6)) {setverdict(pass);}
+   else {setverdict(fail);}
+   if(match(setof_const1, t7)) {setverdict(pass);}
+   else {setverdict(fail);}
+   if(match(setof_const1, t8)) {setverdict(pass);}
+   else {setverdict(fail);}
+   if(not match(setof_const1, t9)) {setverdict(pass);}
+   else {setverdict(fail);}
+
+   if(not match(setof_const1, t1a)) {setverdict(pass);}
+   else {setverdict(fail);}
+   if(not match(setof_const1, t2a)) {setverdict(pass);}
+   else {setverdict(fail);}
+   if(not match(setof_const1, t3a)) {setverdict(pass);}
+   else {setverdict(fail);}
+   if(not match(setof_const1, t4a)) {setverdict(pass);}
+   else {setverdict(fail);}
+   if(not match(setof_const1, t5a)) {setverdict(pass);}
+   else {setverdict(fail);}
+   if(not match(setof_const1, t6a)) {setverdict(pass);}
+   else {setverdict(fail);}
+   if(not match(setof_const1, t7a)) {setverdict(pass);}
+   else {setverdict(fail);}
+   if(not match(setof_const1, t8a)) {setverdict(pass);}
+   else {setverdict(fail);}
+   if(not match(setof_const1, t9a)) {setverdict(pass);}
+   else {setverdict(fail);}
+
+   if(not match(setof_const1, t10)) {setverdict(pass);}
+   else {setverdict(fail);}
+   if(match(setof_const1, t11)) {setverdict(pass);}
+   else {setverdict(fail);}
+
+   /* --- */
+
+   template setof_setof tt1 := superset(t1);
+   template setof_setof tt2 := superset(t2, superset(1));
+   template setof_setof tt3 := superset(t5, superset(1), superset(1));
+   template setof_setof tt4 := superset(t6, superset(1), superset(1, 0));
+   template setof_setof tt5 := superset(t7, superset(1), superset(1, 2));
+   template setof_setof tt6 := superset(t7, superset(1), t3);
+
+   if(match(setof_const5, tt1)) {setverdict(pass);}
+   else {setverdict(fail);}
+   if(match(setof_const5, tt2)) {setverdict(pass);}
+   else {setverdict(fail);}
+   if(match(setof_const5, tt3)) {setverdict(pass);}
+   else {setverdict(fail);}
+   if(match(setof_const5, tt4)) {setverdict(pass);}
+   else {setverdict(fail);}
+   if(not match(setof_const5, tt5)) {setverdict(pass);}
+   else {setverdict(fail);}
+   if(not match(setof_const5, tt6)) {setverdict(pass);}
+   else {setverdict(fail);}
+ }
+
+ testcase tsetofSuperset2() runs on my_comp {
+   template setof_enum t1 := superset(buckler);
+   template setof_enum t2 := superset(coronita);
+   template setof_enum t3 := superset(coronita, buckler);
+   template setof_enum t4 := superset(coronita, amstel);
+
+   if(not match(setof_const2, t1)) {setverdict(pass);}
+   else {setverdict(fail);}
+   if(match(setof_const2, t2)) {setverdict(pass);}
+   else {setverdict(fail);}
+   if(not match(setof_const2, t3)) {setverdict(pass);}
+   else {setverdict(fail);}
+   if(match(setof_const2, t4)) {setverdict(pass);}
+   else {setverdict(fail);}
+ }
+
+ testcase tsetofSubset1() runs on my_comp {
+   template setof_int t1 := subset(1, 2, 3);
+   template setof_int t2 := subset(1, 2, 3, 4, 5, 6);
+   template setof_int t3 := subset(6, 5, 4, 3, 2, 1);
+   template setof_int t4 := subset(?);
+   template setof_int t5 := subset(*);
+   template setof_int t6 := subset(?, ?, ?, ?);
+   template setof_int t7 := subset(?, ?, ?, ?, ?);
+   template setof_int t8 := subset(?, ?, ?, ?, ?, ?);
+   template setof_int t9 := subset(?, ?, ?, ?, *);
+   template setof_int t10 := subset(2, 3, 4, 5, 6);
+   template setof_int t11 := subset(2, 3, 4, 5, 6, ?);
+   template setof_int t12 := subset(2, 3, 4, 5, 6, *);
+   template setof_int t13 := subset(3, 4, 5, 6, ?);
+
+   if(not match(setof_const1, t1)) {setverdict(pass);}
+   else {setverdict(fail);}
+   if(match(setof_const1, t2)) {setverdict(pass);}
+   else {setverdict(fail);}
+   if(match(setof_const1, t3)) {setverdict(pass);}
+   else {setverdict(fail);}
+   if(not match(setof_const1, t4)) {setverdict(pass);}
+   else {setverdict(fail);}
+   if(match(setof_const1, t5)) {setverdict(pass);}
+   else {setverdict(fail);}
+   if(not match(setof_const1, t6)) {setverdict(pass);}
+   else {setverdict(fail);}
+   if(match(setof_const1, t7)) {setverdict(pass);}
+   else {setverdict(fail);}
+   if(match(setof_const1, t8)) {setverdict(pass);}
+   else {setverdict(fail);}
+   if(match(setof_const1, t9)) {setverdict(pass);}
+   else {setverdict(fail);}
+   if(not match(setof_const1, t10)) {setverdict(pass);}
+   else {setverdict(fail);}
+   if(match(setof_const1, t11)) {setverdict(pass);}
+   else {setverdict(fail);}
+   if(match(setof_const1, t12)) {setverdict(pass);}
+   else {setverdict(fail);}
+   if(not match(setof_const1, t13)) {setverdict(pass);}
+   else {setverdict(fail);}
+ }
+
+ testcase tsetofSubset2() runs on my_comp {
+   template setof_enum t1 := subset(buckler);
+   template setof_enum t2 := subset(coronita);
+   template setof_enum t3 := subset(coronita, buckler);
+   template setof_enum t4 := subset(coronita, amstel);
+   template setof_enum t5 := subset(coronita, buckler, amstel);
+
+   if(not match(setof_const2, t1)) {setverdict(pass);}
+   else {setverdict(fail);}
+   if(not match(setof_const2, t2)) {setverdict(pass);}
+   else {setverdict(fail);}
+   if(not match(setof_const2, t3)) {setverdict(pass);}
+   else {setverdict(fail);}
+   if(match(setof_const2, t4)) {setverdict(pass);}
+   else {setverdict(fail);}
+   if(match(setof_const2, t5)) {setverdict(pass);}
+   else {setverdict(fail);}
+ }
+
+control {
+execute(setofIntAssign());
+execute(setofIntEq());
+execute(setofSetofEq());
+
+execute(tsetofIntSpecValueMatch());
+execute(tsetofEnumAnyValueMatch());
+execute(tsetofIntAnyorNoneMatch());
+execute(tsetofRecordofAnyorNoneMatch());
+execute(tsetofSetofMatch());
+execute(tsetofSetofLengthMatch1());
+execute(tsetofIntValueListMatch());
+execute(tsetofSetofLengthMatch2());
+ execute(tsetofSuperset1());
+ execute(tsetofSuperset2());
+ execute(tsetofSubset1());
+ execute(tsetofSubset2());
+}
+}
diff --git a/Regression_Test_java/src/TsetofOper.ttcn b/Regression_Test_java/src/TsetofOper.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..c2cd405e74d57ebecc109a045637c19e2a57af55
--- /dev/null
+++ b/Regression_Test_java/src/TsetofOper.ttcn
@@ -0,0 +1,1098 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Beres, Szabolcs
+ *   Godar, Marton
+ *   Kovacs, Ferenc
+ *   Raduly, Csaba
+ *   Szabados, Kristof
+ *   Szabo, Janos Zoltan – initial implementation
+ *
+ ******************************************************************************/
+module TsetofOper {
+// ********** Type definitions  *********************
+type component setofOper_mycomp {};
+type enumerated setofOper_myenum {xx1,xx2,xx3};
+type record setofOper_trecord {
+  integer x1 optional,
+  float x2 };
+type record of octetstring setofOper_trecof;
+type set setofOper_tset {
+  integer x1,
+  float x2 optional };
+type set of charstring setofOper_tsetof;
+type union setofOper_tunion {
+  integer x1,
+  float x2 };
+type set of integer setofOper_mysetof1; 	// set of basic types
+type set of setofOper_myenum setofOper_mysetof2; // set of enum
+type set of setofOper_trecord setofOper_mysetof3;  // set of record
+type set of setofOper_trecof setofOper_mysetof4; // set of record of
+type set of setofOper_tset setofOper_mysetof5;  // set of set
+type set of setofOper_tsetof setofOper_mysetof6; // set of set of
+type set of setofOper_tunion setofOper_mysetof7; // set of union
+// *************** Constanst ***********************
+const setofOper_trecord setofOper_temp1:={ x1:=omit, x2:=3.4 };
+const setofOper_trecof setofOper_temp2:={ 'AF12'O };
+const setofOper_tset setofOper_temp3:={ x1:=234, x2:=1.9};
+const setofOper_tsetof setofOper_temp4:={"f","8"};
+const setofOper_tunion setofOper_temp5:={ x2:=1.3 };
+const setofOper_mysetof1 setofOper_const1:={ 1,2 }	//set of basic types
+const setofOper_mysetof2 setofOper_const2:={ xx2, xx1 }
+const setofOper_mysetof3 setofOper_const4:={   //set of record
+  { x1:=1, x2:=1.2 },setofOper_temp1 };
+const setofOper_mysetof4 setofOper_const6:={   //set of record of
+  { '12AB'O, 'CD12'O },  setofOper_temp2 };
+const setofOper_mysetof5 setofOper_const8:={   //set of set
+  { x1:=2, x2:=1.3}, setofOper_temp3 };
+const setofOper_mysetof6 setofOper_const10:={   //set of set of
+  {"a","b"}, setofOper_temp4 }; //{"f","8"},
+const setofOper_mysetof7 setofOper_const12:={   //set of union
+  { x1 :=3 }, setofOper_temp5  }; //{ x2:=1.3 }
+
+testcase setofAssign() runs on setofOper_mycomp{
+  var setofOper_mysetof1 x1:={ 12,34} 	//set of basic types
+  var setofOper_mysetof1 x2,x3,x4;
+  x2:={ 32, 12 };
+  x3:={32};
+  x3:={32,12};
+  x4:={};
+  if (x1[0]==12) {setverdict(pass);}	//at declaration
+  else {setverdict(fail);}
+  if (x1[1]==34) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x2[0]==32) {setverdict(pass);}	//later
+  else {setverdict(fail);}
+  if (x2[1]==12) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x3[0]==32) {setverdict(pass);}	//later, change of size
+  else {setverdict(fail);}
+  if (x3[1]==12) {setverdict(pass);}
+  else {setverdict(fail);}
+  //if (x4=={}) {setverdict(pass);}		// empty set of
+  //     else {setverdict(fail);}
+}
+
+testcase setofAssignEnum() runs on setofOper_mycomp{
+  var setofOper_mysetof2 x1:={ xx2 }	//set of enum
+  var setofOper_mysetof2 x2;
+  x2:={xx2,xx1};
+  //at declaration
+  if (x1[0]==xx2) {setverdict(pass);}
+  else {setverdict(fail);}
+  //later
+  if (x2[0]==xx2) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x2[1]==xx1) {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+testcase setofAssignRec() runs on setofOper_mycomp{
+  var setofOper_trecord temp1:={ x1:=omit, x2:=3.4 };
+  var setofOper_mysetof3 x1:={   //set of record
+    { x1:=1, x2:=1.2 }, temp1 };
+  var setofOper_mysetof3 x2;
+  x2:={ { x1:=1, x2:=1.2 }, temp1 };
+  if (x1[0].x1==1) {setverdict(pass);}	//at declaration
+  else {setverdict(fail);}
+  if (x1[0].x2==1.2) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x1[1]==temp1) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x2[0].x1==1) {setverdict(pass);}	//later
+  else {setverdict(fail);}
+  if (x2[0].x2==1.2) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (not(ispresent(x2[1].x1))) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x2[1].x2==3.4) {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+testcase setofAssignRecof() runs on setofOper_mycomp{
+  var setofOper_trecof temp2:={'AF12'O};
+  var setofOper_mysetof4 x1:={   //set of record of
+    { '12AB'O, 'CD12'O }, temp2 };
+  var setofOper_mysetof4 x2;
+  x2:={ { '12AB'O, 'CD12'O }, temp2 };
+  if (x1[0][0]=='12AB'O) {setverdict(pass);}	//at declaration
+  else {setverdict(fail);}
+  if (x1[0][1]=='CD12'O) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x1[1]==temp2) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x2[0][0]=='12AB'O) {setverdict(pass);}	//later
+  else {setverdict(fail);}
+  if (x2[0][1]=='CD12'O) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x2[1][0]=='AF12'O) {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+testcase setofAssignSet() runs on setofOper_mycomp{
+  var setofOper_tset temp1:={ x1:=2, x2:=omit };
+  var setofOper_mysetof5 x1:={   //set of set
+    { x1:=1, x2:=1.2 }, temp1 };
+  var setofOper_mysetof5 x2;
+  x2:={ { x1:=1, x2:=1.2 }, temp1 };
+  if (x1[0].x1==1) {setverdict(pass);}	//at declaration
+  else {setverdict(fail);}
+  if (x1[0].x2==1.2) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x1[1]==temp1) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x2[0].x1==1) {setverdict(pass);}	//later
+  else {setverdict(fail);}
+  if (x2[0].x2==1.2) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x2[1].x1==2) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (not(ispresent(x2[1].x2))) {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+testcase setofAssignSetof() runs on setofOper_mycomp{
+  var setofOper_tsetof temp2:={"a","7"};
+  var setofOper_mysetof6 x1:={   //set of set of
+    { "1", "a" }, temp2 };
+  var setofOper_mysetof6 x2;
+  x2:={ { "1", "a" }, temp2 };
+  if (x1[0][0]=="1") {setverdict(pass);}	//at declaration
+  else {setverdict(fail);}
+  if (x1[0][1]=="a") {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x1[1]==temp2) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x2[0][0]=="1") {setverdict(pass);}	//later
+  else {setverdict(fail);}
+  if (x2[0][1]=="a") {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x2[1][0]=="a") {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x2[1][1]=="7") {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+testcase setofAssignUnion() runs on setofOper_mycomp{
+  var setofOper_tunion temp5 := {x2:=1.3}
+  var setofOper_mysetof7 x1:={   //set of union
+    { x1 :=3 }, temp5  }; //{ x2:=1.3
+  var setofOper_mysetof7 x2;
+  x2:={ { x1 :=3 }, temp5 }; //{ x2:=1.3 }
+  if (x1[0].x1==3) {setverdict(pass);}	//at declaration
+  else {setverdict(fail);}
+  if (ischosen(x1[0].x1)) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (not(ischosen(x1[0].x2))) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x1[1]==temp5) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x2[0].x1==3) {setverdict(pass);}	//later
+  else {setverdict(fail);}
+  if (ischosen(x2[0].x1)) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (not(ischosen(x2[0].x2))) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x2[1].x2==1.3) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (ischosen(x2[1].x2)) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (not(ischosen(x2[1].x1))) {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+testcase setofAssignElem() runs on setofOper_mycomp{
+  var setofOper_mysetof1 x1,x2,x3,x4,x5;	//set of basic types
+  x1:={ 3, 2 };
+  x2:={ 1, 2 };
+  x3:=x2;
+  x4:=x2;
+  x5:={2};
+  x2[0]:=3;			//change element to value
+  x3[0]:=x1[0];			//change element to element
+  x4[2]:=2;			// add element
+  x5[2]:=3;			// out of order
+  if (x1[1]==2) {setverdict(pass);}	//accessing individual element
+  else {setverdict(fail);}
+  if (x2[0]==3) {setverdict(pass);}	// change element to value
+  else {setverdict(fail);}
+  if (x2[1]==2) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x3[0]==3) {setverdict(pass);}	// change element to element
+  else {setverdict(fail);}
+  if (x3[1]==2) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x4[0]==1) {setverdict(pass);}	// add element
+  else {setverdict(fail);}
+  if (x4[1]==2) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x4[2]==2) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x5[2]==3) {setverdict(pass);}	// out of order
+  else {setverdict(fail);}
+}
+
+testcase setofAssignElemEnum() runs on setofOper_mycomp{
+  var setofOper_mysetof2 x1:={ xx1, xx2 };	//set of enumerated
+  var setofOper_mysetof2 x2, x3;
+  x2:={ xx1, xx2 }
+  x1[0]:=xx3;			//change element
+  x2[2]:=xx3;			// add element
+  x3[2]:=xx3;			// out of order
+  if (x1[0]==xx3) {setverdict(pass);}	// change element
+  else {setverdict(fail);}
+  if (x1[1]==xx2) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x2[0]==xx1) {setverdict(pass);}	// add element
+  else {setverdict(fail);}
+  if (x2[1]==xx2) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x2[2]==xx3) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x3[2]==xx3) {setverdict(pass);}	// out of order
+  else {setverdict(fail);}
+}
+
+testcase setofAssignElemRec() runs on setofOper_mycomp{
+  var setofOper_mysetof3 x1,x2,x3; 	//set of record
+  x1:={   { x1:=1, x2:=1.2 }, { x1:=omit, x2:=3.4 } };
+  x2:=x1;
+  x1[0].x1:=2;
+  //temp1.x1:=3;
+  x1[1].x1:=3;
+  x2[2]:= {x1:=2, x2:=1.3};		// add element
+  x3[1]:= {x1:=2, x2:=1.3};		//out of order
+  if (x1[0].x1==2) {setverdict(pass);}	// change element
+  else {setverdict(fail);}
+  if (x1[0].x2==1.2) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x1[1].x1==3) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x1[1].x2==3.4) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x2[0].x1==1) {setverdict(pass);}	//add element
+  else {setverdict(fail);}
+  if (x2[0].x2==1.2) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (not(ispresent(x2[1].x1))) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x2[1].x2==3.4) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x2[2].x1==2) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x2[2].x2==1.3) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x3[1].x1==2) {setverdict(pass);}	   // out of order
+  else {setverdict(fail);}
+  if (x3[1].x2==1.3) {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+
+testcase setofAssignElemRecof() runs on setofOper_mycomp{
+  var setofOper_mysetof4 x1,x2,x3;		 //set of record of
+  x1:={  { '12AB'O, 'CD12'O }, { 'ABCD'O } };
+  x2:=x1;
+  x1[0][1]:='34AB'O;		//change element
+  x2[2]:={ '1234'O};		//add element
+  x3[2]:={'12CD'O};		//out of order
+  if (x1[0][0]=='12AB'O) {setverdict(pass);}	// change element
+  else {setverdict(fail);}
+  if (x1[0][1]=='34AB'O) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x1[1][0]=='ABCD'O) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x2[0][0]=='12AB'O) {setverdict(pass);}	// add element
+  else {setverdict(fail);}
+  if (x2[0][1]=='CD12'O) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x2[1][0]=='ABCD'O) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x2[2][0]=='1234'O) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x3[2][0]=='12CD'O) {setverdict(pass);}	//out of order
+  else {setverdict(fail);}
+}
+
+testcase setofAssignElemSet() runs on setofOper_mycomp{
+  var setofOper_mysetof5 x1,x2,x3    		//set of set
+  x1:={ { x1:=1, x2:=1.2 }, { x1:=2, x2:=omit }};
+  x2:={ { x1:=1, x2:=1.2 }, { x1:=2, x2:=omit }};
+  x1[0].x2:=3.4;				//change element
+  x2[2]:={  x1:=2, x2:=1.3 };		// add element
+  x3[2]:={  x1:=2, x2:=1.3 };		// out of order
+  if (x1[0].x1==1) {setverdict(pass);}	//change element
+  else {setverdict(fail);}
+  if (x1[0].x2==3.4) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x1[1].x1==2) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (not(ispresent(x1[1].x2))) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x2[0].x1==1) {setverdict(pass);}	//add element
+  else {setverdict(fail);}
+  if (x2[0].x2==1.2) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x2[1].x1==2) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (not(ispresent(x2[1].x2))) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x2[2].x1==2) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x2[2].x2==1.3) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x3[2].x1==2) {setverdict(pass);}	//out of order
+  else {setverdict(fail);}
+  if (x3[2].x2==1.3) {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+testcase setofAssignElemSetof() runs on setofOper_mycomp{
+  var setofOper_tsetof temp2:={"a","7"};
+  var setofOper_mysetof6 x1,x2,x3;   //set of set of
+  x1:={ { "1" }, {"a","7"}};
+  x2:={ { "1" }, {"a","7"}};
+  x1[0][0]:="h";			// change element
+  x2[2]:={"2"};			//add element
+  x3[2]:={"2"};			//out of order
+  if (x1[0][0]=="h") {setverdict(pass);}	  //change element
+  else {setverdict(fail);}
+  if (x1[1][0]=="a") {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x1[1][1]=="7") {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x2[0][0]=="1") {setverdict(pass);}	  //add element
+  else {setverdict(fail);}
+  if (x2[1][0]=="a") {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x2[1][1]=="7") {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x2[2][0]=="2") {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x3[2][0]=="2") {setverdict(pass);}		// out of order
+  else {setverdict(fail);}
+}
+
+testcase setofAssignElemUnion() runs on setofOper_mycomp{
+  var setofOper_tunion temp5 := {x2:=1.3}
+  var setofOper_mysetof7 x1,x2,x3;   //set of union
+  x1:={ {x1 :=3 }, {x2:=1.3} };
+  x2:={ {x1 :=3 }, {x2:=1.3} };
+  x1[0].x2:=3.4;			//change element
+  x2[2]:={ x2:=1.4};	 	// add element
+  x3[2]:={ x2:=1.4}; 		// out of order
+  if (x1[0].x2==3.4) {setverdict(pass);}		//change element
+  else {setverdict(fail);}
+  if (ischosen(x1[0].x2)) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (not(ischosen(x1[0].x1))) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x1[1].x2==1.3) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (ischosen(x1[1].x2)) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (not(ischosen(x1[1].x1))) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x2[0].x1==3) {setverdict(pass);}		//add element
+  else {setverdict(fail);}
+  if (ischosen(x2[0].x1)) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (not(ischosen(x2[0].x2))) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x2[1].x2==1.3) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (ischosen(x2[1].x2)) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (not(ischosen(x2[1].x1))) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x2[2].x2==1.4) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (ischosen(x2[2].x2)) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (not(ischosen(x2[2].x1))) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x3[2].x2==1.4) {setverdict(pass);}		//out of order
+  else {setverdict(fail);}
+  if (ischosen(x3[2].x2)) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (not(ischosen(x3[2].x1))) {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+testcase setofConst() runs on setofOper_mycomp{
+  const setofOper_mysetof1 const1:={1,2,3} //set of basic types
+  if (setofOper_const1[0]==1) {setverdict(pass);}	//definition part
+  else {setverdict(fail);}
+  if (setofOper_const1[1]==2) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (const1[0]==1) {setverdict(pass);}	//testcase
+  else {setverdict(fail);}
+  if (const1[1]==2) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (const1[2]==3) {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+testcase setofConstEnum() runs on setofOper_mycomp{
+  const setofOper_mysetof2 const1:={xx1,xx2,xx3} //set of enumerated
+  if (setofOper_const2[0]==xx2) {setverdict(pass);}	//definition part
+  else {setverdict(fail);}
+  if (setofOper_const2[1]==xx1) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (const1[0]==xx1) {setverdict(pass);}	//testcase
+  else {setverdict(fail);}
+  if (const1[1]==xx2) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (const1[2]==xx3) {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+testcase setofConstRec() runs on setofOper_mycomp{
+  const setofOper_mysetof3 const4:={   //set of record
+    { x1:=1, x2:=1.2 }, setofOper_temp1 };
+  if (setofOper_const4[0].x1==1) {setverdict(pass);}	//definition part
+  else {setverdict(fail);}
+  if (setofOper_const4[0].x2==1.2) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (setofOper_const4[1]==setofOper_temp1) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (const4[0].x1==1) {setverdict(pass);}	//testcase
+  else {setverdict(fail);}
+  if (const4[0].x2==1.2) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (const4[1]==setofOper_temp1) {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+testcase setofConstRecof() runs on setofOper_mycomp{
+  const setofOper_mysetof4 const6:={   //set of record of
+    { '12AB'O, 'CD12'O }, setofOper_temp2 };
+  if (setofOper_const6[0][0]=='12AB'O) {setverdict(pass);}	//definition part
+  else {setverdict(fail);}
+  if (setofOper_const6[0][1]=='CD12'O) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (setofOper_const6[1]==setofOper_temp2) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (const6[0][0]=='12AB'O) {setverdict(pass);}	//testcase
+  else {setverdict(fail);}
+  if (const6[0][1]=='CD12'O) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (const6[1]==setofOper_temp2) {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+testcase setofConstSet() runs on setofOper_mycomp{
+  const setofOper_mysetof5 const8:={   //set of set
+    { x1:=2, x2:=1.3}, setofOper_temp3 };
+  if (setofOper_const8[0].x1==2) {setverdict(pass);}	//definition part
+  else {setverdict(fail);}
+  if (setofOper_const8[0].x2==1.3) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (setofOper_const8[1]==setofOper_temp3) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (const8[0].x1==2) {setverdict(pass);}	//testcase
+  else {setverdict(fail);}
+  if (const8[0].x2==1.3) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (const8[1]==setofOper_temp3) {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+testcase setofConstSetof() runs on setofOper_mycomp{
+  const setofOper_mysetof6 const10:={   //set of set of
+    {"a","b"}, {"f","8"} };
+  if (setofOper_const10[0][0]=="a") {setverdict(pass);}	//definition part
+  else {setverdict(fail);}
+  if (setofOper_const10[0][1]=="b") {setverdict(pass);}
+  else {setverdict(fail);}
+  if (setofOper_const10[1]==setofOper_temp4) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (const10[0][0]=="a") {setverdict(pass);}	//testcase
+  else {setverdict(fail);}
+  if (const10[0][1]=="b") {setverdict(pass);}
+  else {setverdict(fail);}
+  if (const10[1][0]=="f") {setverdict(pass);}
+  else {setverdict(fail);}
+  if (const10[1][1]=="8") {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+testcase setofConstUnion() runs on setofOper_mycomp{
+  const setofOper_mysetof7 const12:={   //set of union
+    { x1 :=3 }, { x2:=1.3 } };
+  if (setofOper_const12[0].x1==3) {setverdict(pass);}	//definition part
+  else {setverdict(fail);}
+  if (ischosen(setofOper_const12[0].x1)) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (not(ischosen(setofOper_const12[0].x2))) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (setofOper_const12[1]==setofOper_temp5) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (const12[0].x1==3) {setverdict(pass);}	//testcase
+  else {setverdict(fail);}
+  if (ischosen(const12[0].x1)) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (not(ischosen(const12[0].x2))) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (const12[1].x2==1.3) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (ischosen(const12[1].x2)) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (not(ischosen(const12[1].x1))) {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+testcase setofConstComp() runs on setofOper_mycomp{
+  const setofOper_mysetof1 x1:={ 1,2,3 };
+  const setofOper_mysetof1 x2:={ 1,2,3 };
+  const setofOper_mysetof1 x3:={ 1,2 };
+  const setofOper_mysetof1 x4:={ 3,1,2 };
+  if (x1==x2) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (not(x1==x3)) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x4==x2) {setverdict(pass);}	// out of order
+  else {setverdict(fail);}
+  if (x1!=x3) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (not(x1!=x2)) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (not(x4!=x2)) {setverdict(pass);}	// out of order
+  else {setverdict(fail);}
+}
+
+testcase setofComp() runs on setofOper_mycomp{
+  var setofOper_mysetof1 x1,x2,x3,x4; //set of basic types
+  x1:={ 1,2,3 };
+  x2:={ 1,2,3 };
+  x3:={ 1,2 };
+  x4:={ 3,1,2 };
+  if (x1==x2) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (not(x1==x3)) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x4==x2) {setverdict(pass);}	// out of order
+  else {setverdict(fail);}
+  if (x1!=x3) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (not(x1!=x2)) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (not(x4!=x2)) {setverdict(pass);}	// out of order
+  else {setverdict(fail);}
+}
+
+testcase setofCompEnum() runs on setofOper_mycomp{
+  var setofOper_mysetof2 x1,x2,x3,x4;	//set of enumerated
+  x1:={ xx1,xx2,xx3 };
+  x2:={ xx1,xx2,xx3 };
+  x3:={ xx1,xx2 };
+  x4:={xx3,xx2,xx1};
+  if (x1==x2) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (not(x1==x3)) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x4==x2) {setverdict(pass);}	//out of order
+  else {setverdict(fail);}
+  if (x1!=x3) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (not(x1!=x2)) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (not(x4!=x2)) {setverdict(pass);}	// out of order
+  else {setverdict(fail);}
+}
+
+testcase setofCompRec() runs on setofOper_mycomp{
+  var setofOper_mysetof3 x1,x2,x3,x4;	// set of record
+  x1 :={ { x1:=1, x2:=1.2 }, { x1:=omit, x2:=3.4 } };
+  x2 :={ { x1:=1, x2:=1.2 }, { x1:=omit, x2:=3.4 } };
+  x3 :={ { x1:=2, x2:=1.2 }, { x1:=omit, x2:=3.4 } };
+  x4 :={ { x1:=omit, x2:=3.4 }, { x1:=1, x2:=1.2 } };
+  if (x1==x2) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (not(x1==x3)) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x4==x2) {setverdict(pass);}	//out of order
+  else {setverdict(fail);}
+  if (x1!=x3) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (not(x1!=x2)) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (not(x4!=x2)) {setverdict(pass);}	// out of order
+  else {setverdict(fail);}
+}
+
+
+testcase setofCompRecof() runs on setofOper_mycomp{
+  var setofOper_mysetof4 x1,x2,x3,x4; //set of record of
+  x1:={ { '12AB'O, 'CD12'O }, {'AF12'O} };
+  x2:={ { '12AB'O, 'CD12'O }, {'AF12'O} };
+  x3:={ { '12AB'O  }, {'AF12'O} };
+  x4:={ {'AF12'O}, { '12AB'O, 'CD12'O } };
+  if (x1==x2) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (not(x1==x3)) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x4==x2) {setverdict(pass);}	//out of order
+  else {setverdict(fail);}
+  if (x2!=x3) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (not(x1!=x2)) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (not(x4!=x2)) {setverdict(pass);}	//out of order
+  else {setverdict(fail);}
+}
+
+testcase setofCompSet() runs on setofOper_mycomp{
+  var setofOper_tset temp1:={ x1:=2, x2:=omit };
+  var setofOper_mysetof5 x1,x2,x3,x4; //set of set
+  x1:={ { x1:=1, x2:=1.2 }, { x1:=2, x2:=omit } };
+  x2:={ { x2:=1.2, x1:=1 }, { x1:=2, x2:=omit }};
+  x3:={ { x1:=1, x2:=1.2 } };
+  x4:={ { x1:=2, x2:=omit }, { x2:=1.2, x1:=1 } };
+  if (x1==x2) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (not(x2==x3)) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x4==x2) {setverdict(pass);}	//out of order
+  else {setverdict(fail);}
+  if (x1!=x3) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (not(x1!=x2)) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (not(x4!=x2)) {setverdict(pass);}	//out of order
+  else {setverdict(fail);}
+}
+
+testcase setofCompSetof() runs on setofOper_mycomp{
+  var setofOper_tsetof temp2:={"a","7"};
+  var setofOper_mysetof6 x1,x2,x3,x4;   //set of set of
+  x1:={ { "1", "a" },  temp2 };
+  x2:={ { "1", "a" }, {"a","7"} };
+  x3:={ { "1", "a" } };
+  x4:={ {"a","7"}, { "1", "a" } };
+  if (x1==x2) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (not(x2==x3)) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x4==x2) {setverdict(pass);}	//out of order
+  else {setverdict(fail);}
+  if (x1!=x3) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (not(x1!=x2)) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (not(x4!=x2)) {setverdict(pass);}	// out of order
+  else {setverdict(fail);}
+}
+
+testcase setofCompUnion() runs on setofOper_mycomp{
+  var setofOper_tunion temp5 := {x2:=1.3}
+  var setofOper_mysetof7 x1,x2,x3,x4; //set of union
+  x1:={ { x1 :=3 }, { x2:=1.3 } };
+  x2:={ { x1 :=3 }, temp5 }; //{ x2:=1.3 }
+  x3:={ { x2 :=3.9 },temp5 }; //{ x2:=1.3 }
+  x4:={ { x2:=1.3 }, { x1 :=3 } };
+  if (x1==x2) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (not(x1==x3)) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x4==x2) {setverdict(pass);}	//out of order
+  else {setverdict(fail);}
+  if (x2!=x3) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (not(x1!=x2)) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (not(x4!=x2)) {setverdict(pass);}	//out of order
+  else {setverdict(fail);}
+}
+
+//TR HP50388:
+testcase setofCompUnbound() runs on setofOper_mycomp{
+  var setofOper_mysetof1 x1,x2,x3,x4;
+  x1 := {[3] := 4};
+  x2 := {[3] := 4};
+  x3 := {-,-,-,4};
+  x4 := {-,4,-,-};
+  if (x1 == x2) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x1 == x3) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x1 == x4) {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+testcase setofListOperator() runs on setofOper_mycomp{
+  var setofOper_mysetof1 x1:={1,2};
+  var setofOper_mysetof1 x2,x3,x4,x5,x6;	//set of basic types
+  var setofOper_mysetof1 res1, res2, res3, res4, res5;
+  x2:={ 1, 2 };
+  x3:={1};
+  x4:={1};
+  x4[1]:=3;
+  x5:={};
+  x6[2]:=1;
+  res1 := x1 & x2;
+  res2 := x1 & x3;
+  res3 := x2 & x3 & x5;
+  res4 := x3 & x4;
+  res5 := x1 & {};
+  if (res1 == {1,2,1,2}) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (res2 == {1,2,1}) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (res3 == {1,2,1}) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (res4 == {1,1,3}) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (res5 == {1,2}) {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+testcase setofRotateOperators() runs on setofOper_mycomp{
+  var setofOper_mysetof1 x1:={1,2,3,4,5};
+  var setofOper_mysetof1 x2,x3,x4,x5,x6,x7;	//set of basic types
+  x2 := x1 <@ 1;
+  x3 := x1 <@ 10;
+  x4 := x1 <@ 3 <@ 2;
+  x5 := x1 @> 1;
+  x6 := x1 @> 10;
+  x7 := x1 @> 3 @> 2;
+  if (x2 == x1) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x3 == x1) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x4 == x1) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x5 == x1) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x6 == x1) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x7 == x1) {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+testcase setofLengthof() runs on setofOper_mycomp{
+// lengthof returns the sequential number of the last initialized element of the set of list type
+  var setofOper_mysetof1 x1:={1,2};
+  var setofOper_mysetof1 x2,x3,x4,x5,x6;	//set of basic types
+  x2:={ 1, 2 };
+  x3:={1};
+  x4:={1};
+  x3:={1,2};								//change size by assignment
+  x4[1]:=3;									//change size by adding element
+  x5:={};									//empty set of
+  x6[2]:=1;									//out of order
+  if (lengthof(x1)==2) {setverdict(pass);}	//assignment at declaration
+  else {setverdict(fail);}
+  if (lengthof(x2)==2) {setverdict(pass);}	//assignment later
+  else {setverdict(fail);}
+  if (lengthof(x3)==2) {setverdict(pass);}	//change size by assignment
+  else {setverdict(fail);}
+  if (lengthof(x4)==2) {setverdict(pass);}	//change size by adding element
+  else {setverdict(fail);}
+  if (lengthof(x5)==0) {setverdict(pass);}	//empty set of
+  else {setverdict(fail);}
+  if (lengthof(x6)==3) {setverdict(pass);}	//out of order
+  else {setverdict(fail);}
+}
+
+testcase setofSizeof() runs on setofOper_mycomp{
+  var setofOper_mysetof1 x1:={1,2};
+  var setofOper_mysetof1 x2,x3,x4,x5,x6;	//set of basic types
+  x2:={ 1, 2 };
+  x3:={1};
+  x4:={1};
+  x3:={1,2};		//change size by assignment
+  x4[1]:=3;		//change size by adding element
+  x5:={};			//empty set of
+  x6[2]:=1;		//out of order
+  if (sizeof(x1)==2) {setverdict(pass);}	//assignment at declaration
+  else {setverdict(fail);}
+  if (sizeof(x2)==2) {setverdict(pass);}	//assignment later
+  else {setverdict(fail);}
+  if (sizeof(x3)==2) {setverdict(pass);}	//change size by assignment
+  else {setverdict(fail);}
+  if (sizeof(x4)==2) {setverdict(pass);}	//change size by adding element
+  else {setverdict(fail);}
+  if (sizeof(x5)==0) {setverdict(pass);}	//empty set of
+  else {setverdict(fail);}
+  if (sizeof(x6)==3) {setverdict(pass);}	//out of order
+  else {setverdict(fail);}
+}
+
+testcase setofReplace() runs on setofOper_mycomp{
+  var setofOper_mysetof1 x1:={1,2,3,4,5};
+  var setofOper_mysetof1 a:={8,8,8};
+  var setofOper_mysetof1 x2;
+  x2 := replace(x1,2,3,a);
+  if (x2 == {1,2,8,8,8}) {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+testcase setofSubstr() runs on setofOper_mycomp{
+  var setofOper_mysetof1 x1:={1,2,3,4,5};
+  var setofOper_mysetof1 x2;
+  x2 := substr(x1,2,3);
+  if (x2 == {3,4,5}) {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+type record intsetrec { setofOper_mysetof1 a }
+type set of intsetrec intsetreclist
+
+testcase setofIsvalue() runs on setofOper_mycomp {
+  var setofOper_mysetof1 v_def;
+  var setofOper_mysetof1 v_empty := {-,-,-,-,-,-,-,-,-,-};
+  var setofOper_mysetof1 v_full := {1,2,3,4,5,6,7,8,9,10}
+
+  if ( isvalue(v_def) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(v_empty) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(v_empty[1]) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(v_empty[0]) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(v_full) ) { setverdict(pass); } else { setverdict(fail); };
+
+  v_def[1] := 3;
+
+  if ( isvalue(v_def[1]) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isvalue(v_def[0]) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(v_def) ) { setverdict(fail); } else { setverdict(pass); };
+
+
+  template intsetreclist ist1 := { { a := { 1, 2, 3 } } };
+  template intsetreclist ist2 modifies ist1 := { { a := { 1, 2, -, -, -, 100 } } }
+  template intsetrec istt1                := { a := { 1, 2, 3 } }
+  template intsetrec istt2 modifies istt1 := { a := { 1, 2, -, -, -, 100 } }
+
+  if (isvalue (ist1)) { setverdict ( pass );
+  } else { setverdict ( fail ); }
+  if (isvalue (ist2)) { setverdict ( fail ); }
+  else { setverdict(pass); }
+  if (isvalue (istt1)) { setverdict ( pass );}
+  else { setverdict ( fail ); }
+  if (isvalue (istt2)) { setverdict ( fail ); }
+  else { setverdict(pass); }
+}
+
+testcase setofIsvalue2() runs on setofOper_mycomp {
+  var setofOper_mysetof1 v;
+  if ( isvalue(v) ) { setverdict(fail); } else { setverdict(pass); };
+
+  v[3] := 3;
+  if ( isvalue(v) ) { setverdict(fail); } else { setverdict(pass); };
+
+  v[2] := 2;
+  if ( isvalue(v) ) { setverdict(fail); } else { setverdict(pass); };
+
+  v[1] := 1;
+  if ( isvalue(v) ) { setverdict(fail); } else { setverdict(pass); };
+
+  v[0] := 0;
+  if ( isvalue(v) ) { setverdict(pass); } else { setverdict(fail); };
+
+  v[4] := 4;
+  if ( isvalue(v) ) { setverdict(pass); } else { setverdict(fail); };
+
+  v[6] := 6; // there is now a hole at 5
+  if ( isvalue(v) ) { setverdict(fail); } else { setverdict(pass); };
+}
+
+testcase setofIsbound() runs on setofOper_mycomp {
+  var setofOper_mysetof1 v_def;
+  var setofOper_mysetof1 v_empty := {-,-,-,-,-,-,-,-,-,-};
+  var setofOper_mysetof1 v_full := {1,2,3,4,5,6,7,8,9,10}
+
+  if ( isbound(v_def) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isbound(v_def[0]) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isbound(v_empty) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isbound(v_empty[1]) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isbound(v_empty[0]) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isbound(v_full) ) { setverdict(pass); } else { setverdict(fail); };
+
+  v_def[1] := 3;
+
+  if ( isbound(v_def) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isbound(v_def[1]) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isbound(v_def[0]) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isbound(v_def[10]) ) { setverdict(fail); } else { setverdict(pass); };
+
+
+  template intsetreclist ist1 := { { a := { 1, 2, 3 } } };
+  template intsetreclist ist2 modifies ist1 := { { a := { 1, 2, -, -, -, 100 } } }
+  template intsetrec istt1                := { a := { 1, 2, 3 } }
+  template intsetrec istt2 modifies istt1 := { a := { 1, 2, -, -, -, 100 } }
+
+  if (isbound (ist1)) { setverdict(pass); } else { setverdict(fail); };
+  if (isbound (ist2)) { setverdict(pass); } else { setverdict(fail); };
+  if (isbound (istt1)) { setverdict(pass); } else { setverdict(fail); };
+  if (isbound (istt2)) { setverdict(pass); } else { setverdict(fail); };
+}
+
+testcase setofCompConst() runs on setofOper_mycomp{
+  const setofOper_mysetof1 c_s1 := {1,2,3,4};
+  const setofOper_mysetof1 c_s2 := {4,3,2,1};
+  const setofOper_mysetof1 c_s3 := {1,3,2,4};
+  const setofOper_mysetof1 c_s4 := {1,2,3,4,5};
+  const setofOper_mysetof1 c_s5 := {0,1,2,3,4};
+  const setofOper_mysetof1 c_s6 := {0,1,2,3,4,5}
+  
+  const setofOper_mysetof1 c_s1_ind := {[0] := 1,[1] := 2,[2] := 3, [3] := 4};
+  const setofOper_mysetof1 c_s2_ind := {[0] := 1,[3] := 4,[2] := 3, [1] := 2};  
+  const setofOper_mysetof1 c_s3_ind := {[0] := 2,[3] := 1,[2] := 3, [1] := 4};
+  
+  var setofOper_mysetof1 vl_s1 := {1,2,3,4};
+  
+  if(c_s1 == c_s1) {setverdict(pass);}
+  else {setverdict(fail);}
+  
+  if(c_s1 == {1,2,3,4}) {setverdict(pass);}
+  else {setverdict(fail);}
+  
+  if(c_s1 == {[0] := 1,[1] := 2,[2] := 3, [3] := 4}) {setverdict(pass);}
+  else {setverdict(fail);}
+  
+  if(c_s1 == c_s1_ind)  {setverdict(pass);}
+  else {setverdict(fail);}
+  
+  if(c_s1_ind == c_s2_ind)  {setverdict(pass);}
+  else {setverdict(fail);}
+  
+  if(c_s1_ind == c_s3_ind)  {setverdict(pass);}
+  else {setverdict(fail);}
+  
+  if(c_s1 == c_s3_ind)  {setverdict(pass);}
+  else {setverdict(fail);}
+  
+  if(c_s2_ind == c_s3_ind)  {setverdict(pass);}
+  else {setverdict(fail);}
+  
+  if(c_s1 == vl_s1) {setverdict(pass);}
+  else {setverdict(fail);}
+  
+  if(c_s1 == c_s2) {setverdict(pass);}
+  else {setverdict(fail);}
+  
+  if(c_s1 == c_s3) {setverdict(pass);}
+  else {setverdict(fail);}
+
+  if(c_s1 != c_s4) {setverdict(pass);}
+  else {setverdict(fail);}
+
+  if(c_s1 != c_s5) {setverdict(pass);}
+  else {setverdict(fail);}
+  
+  if(c_s1 != c_s6) {setverdict(pass);}
+  else {setverdict(fail);}
+  
+  if(c_s5 != c_s6) {setverdict(pass);}
+  else {setverdict(fail);}
+
+}
+
+type set length(5) of set length(6) of charstring StringSetArray length(12)
+type set length(4) of charstring MySetof1 length(2)
+type set of charstring MySetof2 ("a", "aa", "aaa", "aaaa") length(2)
+type set length(2) of charstring MySetof3 ("a", "aa", "aaa", "aaaa")
+type set length(2) of charstring MySetof4 ("a", "aa", "aaa", "aaaa") length(2)
+// TODO: Add additional subtypes here.
+type MySetof2 MySetof5
+type MySetof3 MySetof6
+type MySetof4 MySetof7
+type set of record { charstring id length(2), charstring val length(2) } GenericParameters1
+type GenericParameters1[-] GenericParameters2 ({"aa", "aa"})
+type GenericParameters1[-] GenericParameters3 ({"aa", "aa"})
+// FATAL_ERROR() with R8B: `const GenericParameters1[-] c_pars1 := {c_mysetof6[0], valueof(t_mysetof7[0])}'.
+// Possibly the same FATAL_ERROR(): `template MySetof2 t_mysetof8 := {"aa", t_mysetof7[0]} length(2)'.
+// `MySetof2' doesn't have a subtype? `type MySetof2 MySetof8 (MySetof2)'
+type MySetof3 MySetof8 (MySetof3, MySetof3, MySetof3)
+
+const MySetof2 c_mysetof1 := {}
+const MySetof2 c_mysetof2 := {"aa", "aa"}
+const MySetof2 c_mysetof3 := {c_mysetof2[0], c_mysetof2[1]}
+const MySetof3 c_mysetof4 := {"a", "aa"}
+const MySetof3 c_mysetof5 := {c_mysetof4[0], c_mysetof4[1]}
+const MySetof4 c_mysetof6 := {"aa", "aa"}
+const MySetof4 c_mysetof7 := {c_mysetof6[0], c_mysetof6[1]}
+
+template MySetof2 t_mysetof1 := {}
+template MySetof2 t_mysetof2 := {"aa", "aa"}
+template MySetof2 t_mysetof3 := c_mysetof2
+template MySetof3 t_mysetof4 := {"a", "aa"}
+template MySetof3 t_mysetof5 := c_mysetof5
+template MySetof4 t_mysetof6 := {"aa", "aa"}
+template MySetof4 t_mysetof7 := c_mysetof7
+template MySetof2 t_mysetof8 := {"aa", c_mysetof7[0]} length(2)
+template MySetof8 t_mysetof9 := {"aa" & "aa", "aa"}
+
+//testcase setofSubtypes() runs on setofOper_mycomp {
+//  var template MySetof1 vt_mysetof1 := {"AA", "AB", "BA", "BB"}
+//  var MySetof1 v_mysetof1 := {"AA", "AB", "BA", "BB"}
+//  // TITAN compiles this.
+//  if (substr(v_mysetof1, 0, 2) == {"AA", "AB"} and {"BA", "BB"} == substr(valueof(vt_mysetof1), 2, 2)) { setverdict(pass) }
+//  else { setverdict(fail) }
+//}
+
+control {
+  const setofOper_trecord cl_temp1:={ x1:=omit, x2:=3.4 }; //constant in control part
+  const setofOper_trecof cl_temp2:={ 'AF12'O };
+  const setofOper_tset cl_temp3:={ x1:=234, x2:=1.9};
+  const setofOper_tsetof cl_temp4:={"f","8"};
+  const setofOper_tunion cl_temp5:={ x2:=1.3 };
+  var setofOper_trecord vl_temp1; //variable in control part
+  var setofOper_trecof vl_temp2;
+  var setofOper_tset vl_temp3;
+  var setofOper_tsetof vl_temp4;
+  var setofOper_tunion vl_temp5;
+
+  execute(setofAssign());
+  execute(setofAssignEnum());
+  execute(setofAssignRec());
+  execute(setofAssignRecof());
+  execute(setofAssignSet());
+  execute(setofAssignSetof());
+  execute(setofAssignUnion());
+  execute(setofAssignElem());
+  execute(setofAssignElemEnum());
+  execute(setofAssignElemRec());
+  execute(setofAssignElemRecof());
+  execute(setofAssignElemSet());
+  execute(setofAssignElemSetof());
+  execute(setofAssignElemUnion());
+  execute(setofConst());
+  execute(setofConstEnum());
+  execute(setofConstRec());
+  execute(setofConstRecof());
+  execute(setofConstSet());
+  execute(setofConstSetof());
+  execute(setofConstUnion());
+  execute(setofConstComp());
+  execute(setofComp());
+  execute(setofCompConst());
+  execute(setofCompEnum());
+  execute(setofCompRec());
+  execute(setofCompRecof());
+  execute(setofCompSet());
+  execute(setofCompSetof());
+  execute(setofCompUnion());  
+  execute(setofCompUnbound());
+  execute(setofListOperator());
+  execute(setofRotateOperators());
+  execute(setofLengthof());
+  execute(setofSizeof());
+  execute(setofReplace());
+  execute(setofSubstr());
+  execute(setofIsvalue());
+  execute(setofIsvalue2());
+  execute(setofIsbound());
+
+
+//  execute(setofSubtypes());
+  
+  
+}
+
+}
diff --git a/Regression_Test_java/src/TtemplateAnytype.ttcn b/Regression_Test_java/src/TtemplateAnytype.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..52298785ecc27d2743582f171132ebec102c55d6
--- /dev/null
+++ b/Regression_Test_java/src/TtemplateAnytype.ttcn
@@ -0,0 +1,185 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Raduly, Csaba
+ *   Szabados, Kristof
+ *
+ ******************************************************************************/
+module TtemplateAnytype {
+type component templateAnytype_mycomp {};
+type anytype templateAnytype_myAnytype /*{
+ integer f1,
+ float f2 }*/;
+type record templateAnytype_rec {
+ templateAnytype_myAnytype x1,
+ templateAnytype_myAnytype x2,
+ templateAnytype_myAnytype x3 optional };
+template templateAnytype_rec templateAnytype_tSpec :={ //specific values
+ x1:={float:=1.2},
+ x2:={integer:=2},
+ x3:={integer:=3} };
+template templateAnytype_rec templateAnytype_tList :={ //specific value and value list
+ x1:={float:=1.2},
+ x2:=({integer:=2},{integer:=3},{float:=1.2}),
+ x3:={integer:=3} };
+template templateAnytype_rec templateAnytype_tComp :={ //specific value and compl. list
+ x1:={float:=1.2},
+ x2:=complement ({integer:=2},{float:=1.2},{integer:=6}),
+ x3:={integer:=3} };
+template templateAnytype_rec templateAnytype_tOmit :={ //omitting values
+ x1:={float:=1.2},
+ x2:={integer:=2},
+ x3:=omit } ;
+template templateAnytype_rec templateAnytype_tAny :={ //specific and any value
+ x1:={float:=1.2},
+ x2:={integer:=2},
+ x3:=? } ;
+template templateAnytype_rec templateAnytype_tAnyorNone :={ //specific and AnyorNone value
+ x1:={float:=1.2},
+ x2:={integer:=2},
+ x3:=* };
+template templateAnytype_rec templateAnytype_tIfpresent :={ //specific value and ifpresent
+ x1:={float:=1.2},
+ x2:={integer:=2},
+ x3:={integer:=3} ifpresent };
+
+testcase templateAnytypeSpec() runs on templateAnytype_mycomp {
+var templateAnytype_myAnytype temp:={integer:=3};
+var templateAnytype_rec x1,x2;		//specific value
+x1:={ x1:={float:=1.2},  x2:={integer:=2},  x3:=temp };
+x2:={ x1:={float:=1.3},  x2:={integer:=2},  x3:=temp };
+//match
+if (match(x1,templateAnytype_tSpec)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match
+if (not(match(x2,templateAnytype_tSpec))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateAnytypeList() runs on templateAnytype_mycomp {
+var templateAnytype_myAnytype temp:={integer:=3};
+var templateAnytype_rec x1,x2,x3;		//value list
+x1:={ x1:={float:=1.2},  x2:={integer:=3},  x3:=temp };
+x2:={ x1:={float:=1.2},  x2:={integer:=7},  x3:=temp };
+x3:={ x1:={integer:=8},  x2:={integer:=3},  x3:=temp };
+//match
+if (match(x1,templateAnytype_tList)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: out of list
+if (not(match(x2,templateAnytype_tList))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateAnytype_tList))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateAnytypeComp() runs on templateAnytype_mycomp {
+var templateAnytype_myAnytype temp:={integer:=3};
+var templateAnytype_rec x1,x2,x3;		//complemented list
+x1:={ x1:={float:=1.2},  x2:={integer:=7},  x3:=temp };
+x2:={ x1:={float:=1.2},  x2:={integer:=6},  x3:=temp };
+x3:={ x1:={float:=1.3},  x2:={integer:=7},  x3:=temp };
+//match
+if (match(x1,templateAnytype_tComp)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: in the list
+if (not(match(x2,templateAnytype_tComp))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateAnytype_tComp))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateAnytypeOmit() runs on templateAnytype_mycomp {
+var templateAnytype_myAnytype temp:={integer:=3};
+var templateAnytype_rec x1,x2,x3;		//omitting value
+x1:={ x1:={float:=1.2},  x2:={integer:=2},  x3:=omit };
+x2:={ x1:={float:=1.2},  x2:={integer:=2},  x3:=temp };
+x3:={ x1:={integer:=2},  x2:={integer:=2},  x3:=omit };
+//match
+if (match(x1,templateAnytype_tOmit)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: not omitted
+if (not(match(x2,templateAnytype_tOmit))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateAnytype_tOmit))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateAnytypeAny() runs on templateAnytype_mycomp {
+var templateAnytype_myAnytype temp:={integer:=3};
+var templateAnytype_rec x1,x2,x3;		//any value
+x1:={ x1:={float:=1.2},  x2:={integer:=2},  x3:=temp };
+x2:={ x1:={float:=1.2},  x2:={integer:=2},  x3:=omit };
+x3:={ x1:={integer:=2},  x2:={integer:=2},  x3:=temp };
+//match
+if (match(x1,templateAnytype_tAny)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: field omitted
+if (not(match(x2,templateAnytype_tAny))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateAnytype_tAny))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateAnytypeAnyorNone() runs on templateAnytype_mycomp {
+var templateAnytype_myAnytype temp:={integer:=3};
+var templateAnytype_rec x1,x2,x3;		//AnyorNone value
+x1:={ x1:={float:=1.2},  x2:={integer:=2},  x3:=omit };
+x2:={ x1:={float:=1.2},  x2:={integer:=2},  x3:=temp };
+x3:={ x1:={integer:=2},  x2:={integer:=2},  x3:=omit };
+//match: omitted
+if (match(x1,templateAnytype_tAnyorNone)) {setverdict(pass);}
+ else {setverdict(fail);}
+//match: value
+if (match(x2,templateAnytype_tAnyorNone)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateAnytype_tAnyorNone))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateAnytypeIfpresent() runs on templateAnytype_mycomp {
+var templateAnytype_myAnytype temp1:={integer:=3};	//ifpresent
+var templateAnytype_myAnytype temp2:={integer:=4};
+var templateAnytype_rec x1,x2,x3,x4;
+x1:={ x1:={float:=1.2},  x2:={integer:=2},  x3:=temp1 };
+x2:={ x1:={float:=1.2},  x2:={integer:=2},  x3:=omit };
+x3:={ x1:={float:=1.2},  x2:={integer:=2},  x3:=temp2 };
+x4:={ x1:={float:=1.4},  x2:={integer:=2},  x3:=omit };
+//match: present and match
+if (match(x1,templateAnytype_tIfpresent)) {setverdict(pass);}
+ else {setverdict(fail);}
+//match: not present
+if (match(x2,templateAnytype_tIfpresent)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: present and not match
+if (not(match(x3,templateAnytype_tIfpresent))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x4,templateAnytype_tIfpresent))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+control {
+ execute(templateAnytypeSpec());
+ execute(templateAnytypeList());
+ execute(templateAnytypeComp());
+ execute(templateAnytypeOmit());
+ execute(templateAnytypeAny());
+ execute(templateAnytypeAnyorNone());
+ execute(templateAnytypeIfpresent());
+
+}
+}
+with {
+  extension "anytype integer, float"
+}
diff --git a/Regression_Test_java/src/TtemplateBitstr.ttcn b/Regression_Test_java/src/TtemplateBitstr.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..67004ec5982e0b7f3b6012abdac5dab04a6c0af7
--- /dev/null
+++ b/Regression_Test_java/src/TtemplateBitstr.ttcn
@@ -0,0 +1,476 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Baranyi, Botond
+ *   Balasko, Jeno
+ *   Kovacs, Ferenc
+ *   Raduly, Csaba
+ *   Szabados, Kristof
+ *   Szabo, Janos Zoltan – initial implementation
+ *
+ ******************************************************************************/
+module TtemplateBitstr {
+type component templateBitstr_mycomp {};
+type record templateBitstr_rec {
+ bitstring x1,
+ bitstring x2,
+ bitstring x3 optional
+}
+with {
+  encode "JSON";
+  variant(x1) "JSON: name as first";
+  variant(x2) "JSON: name as second";
+  variant(x3) "JSON: name as third";
+}
+
+type record decmatch_rec {
+  integer i,
+  charstring s
+}
+with {
+  encode "JSON";
+}
+
+type record of integer decmatch_list
+with {
+  encode "XML";
+  variant "list";
+}
+
+//type union decmatch_uni {
+//  integer i,
+//  charstring s
+//}
+//with {
+//  encode "RAW";
+//  variant(i) "FIELDLENGTH(16)";
+//}
+
+
+template templateBitstr_rec templateBitstr_tSpec :={ //specific values
+ x1:='001'B,
+ x2:='010'B,
+ x3:='100'B };
+template templateBitstr_rec templateBitstr_tList :={ //specific value and value list
+ x1:='001'B,
+ x2:=('010'B,'011'B,'1100'B),
+ x3:='100'B };
+template templateBitstr_rec templateBitstr_tComp :={ //specific value and compl. list
+ x1:='001'B,
+ x2:=complement ('11'B,'00'B,'1000'B),
+ x3:='100'B };
+template templateBitstr_rec templateBitstr_tOmit :={ //omitting values
+ x1:='001'B,
+ x2:='010'B,
+ x3:=omit } ;
+template templateBitstr_rec templateBitstr_tAny :={ //specific and any value
+ x1:='001'B,
+ x2:='010'B,
+ x3:=? } ;
+template templateBitstr_rec templateBitstr_tAnyorNone :={ //specific and AnyorNone value
+ x1:='001'B,
+ x2:='010'B,
+ x3:=* };
+template templateBitstr_rec templateBitstr_tLength1 :={ //specific value and fix length
+ x1:='001'B,
+ x2:='010'B,
+ x3:=* length(3) };
+template templateBitstr_rec templateBitstr_tLength2 :={ //specific value and length (range)
+ x1:='001'B,
+ x2:='010'B,
+ x3:=? length(2..4) };
+template templateBitstr_rec templateBitstr_tLength3 :={ //specific value and length (range, infinity)
+ x1:='001'B,
+ x2:='010'B,
+ x3:=? length(2..infinity) };
+template templateBitstr_rec templateBitstr_tIfpresent :={ //specific value and ifpresent
+ x1:='001'B,
+ x2:='010'B,
+ x3:='100'B ifpresent };
+template templateBitstr_rec templateBitstr_tLengthIfp :={ //specific value and fix length and ifpresent
+ x1:='001'B,
+ x2:='010'B,
+ x3:= ? length(3) ifpresent};
+template templateBitstr_rec templateBitstr_tAnyEl :={ //specific value and any element inside value
+ x1:='001'B,
+ x2:='010'B,
+ x3:='10?'B } ;
+template templateBitstr_rec templateBitstr_tAnyorNoneEl :={ //specific value and Any number of elements or none inside value
+ x1:='001'B,
+ x2:='010'B,
+ x3:='10*'B };
+
+ template bitstring t_param1(templateBitstr_rec par) := substr(par.x1, 0, 1); // parameterised template
+ 
+//template decmatch_uni decmatch_tUnion := { i := ? };
+
+template decmatch_rec decmatch_tRecord := { i := (0..infinity), s := ? };
+
+//template templateBitstr_rec templateBitstr_tDecmatch := { // decoded content match
+//  x1 := decmatch decmatch_list: { (1..10), (11..20), (21..30) },
+//  x2 := decmatch decmatch_tUnion,
+//  x3 := decmatch modifies decmatch_tRecord := { s := "abc" }
+//};
+//
+//template templateBitstr_rec templateBitstr_tDecmatchSelfRef := { // decoded content match with self-reference
+//  x1 := '1011'B,
+//  x2 := decmatch templateBitstr_tDecmatchSelfRef.x1,
+//  x3 := decmatch templateBitstr_rec: { x1 := templateBitstr_tDecmatchSelfRef.x1, x2 := ?, x3 := * }
+//};
+
+testcase templateBitstrSpec() runs on templateBitstr_mycomp {
+var templateBitstr_rec x1,x2;		//specific value
+x1:={ x1:='001'B,  x2:='010'B,  x3:='100'B };
+x2:={ x1:='00'B,  x2:='010'B,  x3:='100'B };
+//match
+if (match(x1,templateBitstr_tSpec)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match
+if (not(match(x2,templateBitstr_tSpec))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateBitstrList() runs on templateBitstr_mycomp {
+var templateBitstr_rec x1,x2,x3;		//value list
+x1:={ x1:='001'B,  x2:='010'B,  x3:='100'B };
+x2:={ x1:='001'B,  x2:='00'B,  x3:='100'B };
+x3:={ x1:='1'B,  x2:='010'B,  x3:='100'B };
+//match
+if (match(x1,templateBitstr_tList)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: out of list
+if (not(match(x2,templateBitstr_tList))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateBitstr_tList))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateBitstrComp() runs on templateBitstr_mycomp {
+var templateBitstr_rec x1,x2,x3;		//complemented list
+x1:={ x1:='001'B,  x2:='010'B,  x3:='100'B };
+x2:={ x1:='001'B,  x2:='11'B,  x3:='100'B };
+x3:={ x1:='11'B,  x2:='010'B,  x3:='100'B };
+//match
+if (match(x1,templateBitstr_tComp)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: in the list
+if (not(match(x2,templateBitstr_tComp))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateBitstr_tComp))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateBitstrOmit() runs on templateBitstr_mycomp {
+var templateBitstr_rec x1,x2,x3;		//omitting value
+x1:={ x1:='001'B,  x2:='010'B,  x3:=omit };
+x2:={ x1:='001'B,  x2:='010'B,  x3:='000'B };
+x3:={ x1:='00'B,  x2:='010'B,  x3:=omit };
+//match
+if (match(x1,templateBitstr_tOmit)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: not omitted
+if (not(match(x2,templateBitstr_tOmit))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateBitstr_tOmit))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateBitstrAny() runs on templateBitstr_mycomp {
+var templateBitstr_rec x1,x2,x3;		//any value
+x1:={ x1:='001'B,  x2:='010'B,  x3:='111'B };
+x2:={ x1:='001'B,  x2:='010'B,  x3:=omit };
+x3:={ x1:='0'B,  x2:='010'B,  x3:='10'B };
+//match
+if (match(x1,templateBitstr_tAny)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: field omitted
+if (not(match(x2,templateBitstr_tAny))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateBitstr_tAny))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateBitstrAnyorNone() runs on templateBitstr_mycomp {
+var templateBitstr_rec x1,x2,x3;		//AnyorNone value
+x1:={ x1:='001'B,  x2:='010'B,  x3:=omit };
+x2:={ x1:='001'B,  x2:='010'B,  x3:='100'B };
+x3:={ x1:='1'B,  x2:='010'B,  x3:=omit };
+//match: omitted
+if (match(x1,templateBitstr_tAnyorNone)) {setverdict(pass);}
+ else {setverdict(fail);}
+//match: value
+if (match(x2,templateBitstr_tAnyorNone)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateBitstr_tAnyorNone))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateBitstrLength1() runs on templateBitstr_mycomp {
+var templateBitstr_rec x1,x2,x3,x4;		//length (fix)
+x1:={ x1:='001'B,  x2:='010'B,  x3:='111'B };
+x2:={ x1:='001'B,  x2:='010'B,  x3:=omit };
+x3:={ x1:='001'B,  x2:='010'B,  x3:='10'B };
+x4:={ x1:='0010'B,  x2:='010'B,  x3:='111'B };
+//match: proper length
+if (match(x1,templateBitstr_tLength1)) {setverdict(pass);}
+ else {setverdict(fail);}
+//match: omitted
+if (match(x2,templateBitstr_tLength1)) {setverdict(pass);}
+ else {setverdict(fail);}
+// no match: not proper length
+if (not(match(x3,templateBitstr_tLength1))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x4,templateBitstr_tLength1))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateBitstrLength2() runs on templateBitstr_mycomp {
+var templateBitstr_rec x1,x2,x3;		//length (range)
+x1:={ x1:='001'B,  x2:='010'B,  x3:='111'B };
+x2:={ x1:='001'B,  x2:='010'B,  x3:='1'B };
+x3:={ x1:='0010'B,  x2:='010'B,  x3:='111'B };
+//match
+if (match(x1,templateBitstr_tLength2)) {setverdict(pass);}
+ else {setverdict(fail);}
+// no match: not proper length
+if (not(match(x2,templateBitstr_tLength2))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateBitstr_tLength2))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateBitstrLength3() runs on templateBitstr_mycomp {
+var templateBitstr_rec x1,x2,x3;		//length (range, infinity)
+x1:={ x1:='001'B,  x2:='010'B,  x3:='111'B };
+x2:={ x1:='001'B,  x2:='010'B,  x3:='1'B };
+x3:={ x1:='0010'B,  x2:='010'B,  x3:='111'B };
+//match
+if (match(x1,templateBitstr_tLength3)) {setverdict(pass);}
+ else {setverdict(fail);}
+// no match: not proper length
+if (not(match(x2,templateBitstr_tLength3))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateBitstr_tLength3))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateBitstrIfpresent() runs on templateBitstr_mycomp {
+var templateBitstr_rec x1,x2,x3,x4;		//ifpresent
+x1:={ x1:='001'B,  x2:='010'B,  x3:='100'B };
+x2:={ x1:='001'B,  x2:='010'B,  x3:=omit };
+x3:={ x1:='001'B,  x2:='010'B,  x3:='000'B };
+x4:={ x1:='00'B,  x2:='010'B,  x3:=omit };
+//match: present and match
+if (match(x1,templateBitstr_tIfpresent)) {setverdict(pass);}
+ else {setverdict(fail);}
+//match: not present
+if (match(x2,templateBitstr_tIfpresent)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: present and not match
+if (not(match(x3,templateBitstr_tIfpresent))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x4,templateBitstr_tIfpresent))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateBitstrLengthIfp() runs on templateBitstr_mycomp {
+var templateBitstr_rec x1,x2,x3,x4;	      //length (fix), ifpresent
+x1:={ x1:='001'B,  x2:='010'B,  x3:='111'B };
+x2:={ x1:='001'B,  x2:='010'B,  x3:=omit };
+x3:={ x1:='001'B,  x2:='010'B,  x3:='10'B };
+x4:={ x1:='0010'B,  x2:='010'B,  x3:='111'B };
+//match: proper length
+if (match(x1,templateBitstr_tLengthIfp)) {setverdict(pass);}
+ else {setverdict(fail);}
+//match: omitted
+if (match(x2,templateBitstr_tLengthIfp)) {setverdict(pass);}
+ else {setverdict(fail);}
+// no match: not proper length
+if (not(match(x3,templateBitstr_tLengthIfp))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x4,templateBitstr_tLengthIfp))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateBitstrAnyEl() runs on templateBitstr_mycomp {
+var templateBitstr_rec x1,x2,x3,x4,x5;  	      //any element
+x1:={ x1:='001'B,  x2:='010'B,  x3:='101'B };
+x2:={ x1:='001'B,  x2:='010'B,  x3:='10'B };
+x3:={ x1:='001'B,  x2:='010'B,  x3:='1000'B };
+x4:={ x1:='001'B,  x2:='010'B,  x3:='001'B };
+x5:={ x1:='0'B,  x2:='010'B,  x3:='101'B };
+//match
+if (match(x1,templateBitstr_tAnyEl)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: no element
+if (not(match(x2,templateBitstr_tAnyEl))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: two element
+if (not(match(x3,templateBitstr_tAnyEl))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: wrong element
+if (not(match(x4,templateBitstr_tAnyEl))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x5,templateBitstr_tAnyEl))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateBitstrAnyorNoneEl() runs on templateBitstr_mycomp {
+var templateBitstr_rec x1,x2,x3,x4,x5;  	      //Any number of elements or none
+x1:={ x1:='001'B,  x2:='010'B,  x3:='10'B };
+x2:={ x1:='001'B,  x2:='010'B,  x3:='100'B };
+x3:={ x1:='001'B,  x2:='010'B,  x3:='1011'B };
+x4:={ x1:='001'B,  x2:='010'B,  x3:='110'B };
+x5:={ x1:='1'B,  x2:='010'B,  x3:='100'B };
+//match: no element
+if (match(x1,templateBitstr_tAnyorNoneEl)) {setverdict(pass);}
+ else {setverdict(fail);}
+//match: one element
+if (match(x2,templateBitstr_tAnyorNoneEl)) {setverdict(pass);}
+ else {setverdict(fail);}
+//match: two element
+if (match(x3,templateBitstr_tAnyorNoneEl)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other element
+if (not(match(x4,templateBitstr_tAnyorNoneEl))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x5,templateBitstr_tAnyorNoneEl))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase CR_TR00018474() runs on templateBitstr_mycomp {
+  // Indexing of string template variables.
+  var template bitstring vtb1 := '0011110000'B
+  var template bitstring vtb2 := '0*?1'B  // It's a pattern, cannot be indexed, runtime error.
+  vtb1[0] := '1'B
+  if (match('1011110000'B, vtb1)) { setverdict(pass) } else { setverdict(fail) }
+  vtb1[0] := '1'B  // Indexed assignment notation cannot be used here.
+  vtb1[1] := '0'B  // Still works, nothing special.
+  if (match('1011110000'B, vtb1)) { setverdict(pass) } else { setverdict(fail) }
+}
+
+//testcase templateBitstrDecmatch() runs on templateBitstr_mycomp {
+//  var decmatch_rec bad_rec, good_rec;
+//  bad_rec := { i := 11, s := "xyz" };
+//  good_rec := { i := 3, s := "abc" };
+//  var decmatch_list bad_list, good_list;
+//  bad_list := { 4, 7, 10 };
+//  good_list := { 2, 15, 28 };
+//  var decmatch_uni bad_uni, good_uni;
+//  bad_uni := { s := "five" };
+//  good_uni := { i := 5 };
+//  var bitstring bad_rec_enc, good_rec_enc, bad_list_enc, good_list_enc, bad_uni_enc, good_uni_enc;
+//  bad_rec_enc := encvalue(bad_rec);
+//  good_rec_enc := encvalue(good_rec);
+//  bad_list_enc := encvalue(bad_list);
+//  good_list_enc := encvalue(good_list);
+//  bad_uni_enc := encvalue(bad_uni);
+//  good_uni_enc := encvalue(good_uni);
+//  var templateBitstr_rec r1, r2, r3, r4, r5;
+//  r1 := { x1 := good_list_enc, x2 := good_uni_enc, x3 := good_rec_enc };
+//  r2 := { x1 := bad_list_enc,  x2 := good_uni_enc, x3 := good_rec_enc };
+//  r3 := { x1 := good_list_enc, x2 := bad_uni_enc,  x3 := good_rec_enc };
+//  r4 := { x1 := good_list_enc, x2 := good_uni_enc, x3 := bad_rec_enc  };
+//  r5 := { x1 := good_list_enc, x2 := good_uni_enc, x3 := '11110011'B  };
+//  // match: all 3 are good
+//  if (match(r1, templateBitstr_tDecmatch)) { setverdict(pass); }
+//  else { setverdict(fail, 1); }
+//  // no match: decoded list does not match
+//  if (not match(r2, templateBitstr_tDecmatch)) { setverdict(pass); }
+//  else { setverdict(fail, 2); }
+//  // no match: decoded union does not match
+//  if (not match(r3, templateBitstr_tDecmatch)) { setverdict(pass); }
+//  else { setverdict(fail, 3); }
+//  // no match: decoded record does not match
+//  if (not match(r4, templateBitstr_tDecmatch)) { setverdict(pass); }
+//  else { setverdict(fail, 4); }
+//  // no match: x3 is not a valid encoded record value
+//  if (not match(r5, templateBitstr_tDecmatch)) { setverdict(pass); }
+//  else { setverdict(fail, 5); }
+//  // match r1 with the same template declared as an in-line template
+//  if (match(r1, templateBitstr_rec: {
+//    x1 := decmatch decmatch_list: { (1..10), (11..20), (21..30) },
+//    x2 := decmatch decmatch_tUnion,
+//    x3 := decmatch modifies decmatch_tRecord := { s := "abc" }
+//  })) { setverdict(pass); }
+//  else { setverdict(fail, 6); }
+//}
+
+//external function ef_enc_rec_x1(in templateBitstr_rec.x1 x) return octetstring
+//with { extension "prototype(convert) encode(JSON)" }
+//
+//testcase templateBitstrDecmatchSelfRef() runs on templateBitstr_mycomp {
+//  // global self-referencing template
+//  var templateBitstr_rec.x1 bad_bs, good_bs;
+//  bad_bs := '11'B;
+//  good_bs := '1011'B;
+//  var templateBitstr_rec bad_rec, good_rec;
+//  bad_rec := { x1 := '01'B, x2 := '10'B, x3 := '11'B };
+//  good_rec := { x1 := '1011'B, x2 := '10'B, x3 := '11'B };
+//  var bitstring bad_bs_enc, good_bs_enc, bad_rec_enc, good_rec_enc;
+//  bad_bs_enc := oct2bit(ef_enc_rec_x1(bad_bs));
+//  good_bs_enc := oct2bit(ef_enc_rec_x1(good_bs));
+//  bad_rec_enc := encvalue(bad_rec);
+//  good_rec_enc := encvalue(good_rec);
+//  var templateBitstr_rec r1, r2, r3;
+//  r1 := { x1 := '1011'B, x2 := good_bs_enc, x3 := good_rec_enc };
+//  r2 := { x1 := '1011'B, x2 := bad_bs_enc,  x3 := good_rec_enc };
+//  r3 := { x1 := '1011'B, x2 := good_bs_enc, x3 := bad_rec_enc  };
+//  // match: all 2 are good
+//  if (match(r1, templateBitstr_tDecmatchSelfRef)) { setverdict(pass); }
+//  else { setverdict(fail, 1); }
+//  // no match: decoded octetstring does not match
+//  if (not match(r2, templateBitstr_tDecmatchSelfRef)) { setverdict(pass); }
+//  else { setverdict(fail, 2); }
+//  // no match: decoded record does not match
+//  if (not match(r3, templateBitstr_tDecmatchSelfRef)) { setverdict(pass); }
+//  else { setverdict(fail, 3); }
+//  
+//  // local self-referencing template
+//  var template templateBitstr_rec t := { x1 := '1011'B, x2 := ?, x3 := ? };
+//  t.x1 := decmatch t;
+//  var templateBitstr_rec r4, r5;
+//  r4 := { x1 := good_rec_enc, x2 := '10'B, x3 := '11'B };
+//  r5 := { x1 := bad_rec_enc,  x2 := '10'B, x3 := '11'B };
+//  if (match(r4, t)) { setverdict(pass); }
+//  else { setverdict(fail, 4); }
+//  if (not match(r5, t)) { setverdict(pass); }
+//  else { setverdict(fail, 5); }
+//}
+
+control {
+ execute(templateBitstrSpec());
+ execute(templateBitstrList());
+ execute(templateBitstrComp());
+ execute(templateBitstrOmit());
+ execute(templateBitstrAny());
+ execute(templateBitstrAnyorNone());
+ execute(templateBitstrLength1());
+ execute(templateBitstrLength2());
+ execute(templateBitstrLength3());
+ execute(templateBitstrIfpresent());
+ execute(templateBitstrLengthIfp());
+ execute(templateBitstrAnyEl());
+ execute(templateBitstrAnyorNoneEl());
+ execute(CR_TR00018474());
+// execute(templateBitstrDecmatch());
+// execute(templateBitstrDecmatchSelfRef());
+}
+}
diff --git a/Regression_Test_java/src/TtemplateBool.ttcn b/Regression_Test_java/src/TtemplateBool.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..8a2add8b9ee749175f7c297a0bce2cfcfa6e4baa
--- /dev/null
+++ b/Regression_Test_java/src/TtemplateBool.ttcn
@@ -0,0 +1,172 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Raduly, Csaba
+ *   Szabados, Kristof
+ *   Szabo, Janos Zoltan – initial implementation
+ *
+ ******************************************************************************/
+module TtemplateBool {
+type component templateBool_mycomp {};
+type record templateBool_rec {
+ boolean x1,
+ boolean x2,
+ boolean x3 optional };
+template templateBool_rec templateBool_tSpec :={ //specific values
+ x1:=true,
+ x2:=false,
+ x3:=false };
+template templateBool_rec templateBool_tList :={ //specific value and value list
+ x1:=true,
+ x2:=(false),
+ x3:=false };
+template templateBool_rec templateBool_tComp :={ //specific value and compl. list
+ x1:=true,
+ x2:=complement (true),
+ x3:=false };
+template templateBool_rec templateBool_tOmit :={ //omitting values
+ x1:=true,
+ x2:=false,
+ x3:=omit } ;
+template templateBool_rec templateBool_tAny :={ //specific and any value
+ x1:=true,
+ x2:=false,
+ x3:=? } ;
+template templateBool_rec templateBool_tAnyorNone :={ //specific and AnyorNone value
+ x1:=true,
+ x2:=false,
+ x3:=* };
+template templateBool_rec templateBool_tIfpresent :={ //specific value and ifpresent
+ x1:=true,
+ x2:=false,
+ x3:=false ifpresent };
+
+testcase templateBoolSpec() runs on templateBool_mycomp {
+var templateBool_rec x1,x2;		//specific value
+x1:={ x1:=true,  x2:=false,  x3:=false };
+x2:={ x1:=true,  x2:=true,  x3:=false };
+//match
+if (match(x1,templateBool_tSpec)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match
+if (not(match(x2,templateBool_tSpec))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateBoolList() runs on templateBool_mycomp {
+var templateBool_rec x1,x2,x3;		//value list
+x1:={ x1:=true,  x2:=false,  x3:=false };
+x2:={ x1:=true,  x2:=true,  x3:=false };
+x3:={ x1:=false,  x2:=false,  x3:=false };
+//match
+if (match(x1,templateBool_tList)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: out of list
+if (not(match(x2,templateBool_tList))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateBool_tList))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateBoolComp() runs on templateBool_mycomp {
+var templateBool_rec x1,x2,x3;		//complemented list
+x1:={ x1:=true,  x2:=false,  x3:=false };
+x2:={ x1:=true,  x2:=true,  x3:=false };
+x3:={ x1:=false,  x2:=false,  x3:=false };
+//match
+if (match(x1,templateBool_tComp)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: in the list
+if (not(match(x2,templateBool_tComp))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateBool_tComp))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateBoolOmit() runs on templateBool_mycomp {
+var templateBool_rec x1,x2,x3;		//omitting value
+x1:={ x1:=true,  x2:=false,  x3:=omit };
+x2:={ x1:=true,  x2:=false,  x3:=true };
+x3:={ x1:=false,  x2:=false,  x3:=omit };
+//match
+if (match(x1,templateBool_tOmit)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: not omitted
+if (not(match(x2,templateBool_tOmit))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateBool_tOmit))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateBoolAny() runs on templateBool_mycomp {
+var templateBool_rec x1,x2,x3;		//any value
+x1:={ x1:=true,  x2:=false,  x3:=false };
+x2:={ x1:=true,  x2:=false,  x3:=omit };
+x3:={ x1:=false,  x2:=false,  x3:=false };
+//match
+if (match(x1,templateBool_tAny)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: field omitted
+if (not(match(x2,templateBool_tAny))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateBool_tAny))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateBoolAnyorNone() runs on templateBool_mycomp {
+var templateBool_rec x1,x2,x3;		//AnyorNone value
+x1:={ x1:=true,  x2:=false,  x3:=omit };
+x2:={ x1:=true,  x2:=false,  x3:=true };
+x3:={ x1:=false,  x2:=false,  x3:=omit };
+//match: omitted
+if (match(x1,templateBool_tAnyorNone)) {setverdict(pass);}
+ else {setverdict(fail);}
+//match: value
+if (match(x2,templateBool_tAnyorNone)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateBool_tAnyorNone))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateBoolIfpresent() runs on templateBool_mycomp {
+var templateBool_rec x1,x2,x3,x4;		//ifpresent
+x1:={ x1:=true,  x2:=false,  x3:=false };
+x2:={ x1:=true,  x2:=false,  x3:=omit };
+x3:={ x1:=true,  x2:=false,  x3:=true };
+x4:={ x1:=false,  x2:=false,  x3:=omit };
+//match: present and match
+if (match(x1,templateBool_tIfpresent)) {setverdict(pass);}
+ else {setverdict(fail);}
+//match: not present
+if (match(x2,templateBool_tIfpresent)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: present and not match
+if (not(match(x3,templateBool_tIfpresent))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x4,templateBool_tIfpresent))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+control {
+ execute(templateBoolSpec());
+ execute(templateBoolList());
+ execute(templateBoolComp());
+ execute(templateBoolOmit());
+ execute(templateBoolAny());
+ execute(templateBoolAnyorNone());
+ execute(templateBoolIfpresent());
+
+}
+}
diff --git a/Regression_Test_java/src/TtemplateChar.ttcn b/Regression_Test_java/src/TtemplateChar.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..3c636467f509f75d0505516dfa349d8f9231d7cb
--- /dev/null
+++ b/Regression_Test_java/src/TtemplateChar.ttcn
@@ -0,0 +1,255 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Raduly, Csaba
+ *   Szabados, Kristof
+ *   Szabo, Janos Zoltan – initial implementation
+ *
+ ******************************************************************************/
+module TtemplateChar {
+type component templateChar_mycomp {};
+type record templateChar_rec {
+ char x1,
+ char x2,
+ char x3 optional };
+template templateChar_rec templateChar_tSpec :={ //specific values
+ x1:="a",
+ x2:="b",
+ x3:="c" };
+template templateChar_rec templateChar_tList :={ //specific value and value list
+ x1:="a",
+ x2:=("a","b","k"),
+ x3:="c" };
+template templateChar_rec templateChar_tComp :={ //specific value and compl. list
+ x1:="a",
+ x2:=complement ("b","2","l"),
+ x3:="c" };
+template templateChar_rec templateChar_tOmit :={ //omitting values
+ x1:="a",
+ x2:="b",
+ x3:=omit } ;
+template templateChar_rec templateChar_tAny :={ //specific and any value
+ x1:="a",
+ x2:="b",
+ x3:=? } ;
+template templateChar_rec templateChar_tAnyorNone :={ //specific and AnyorNone value
+ x1:="a",
+ x2:="b",
+ x3:=* };
+template templateChar_rec templateChar_tRange1 :={ //specific value and Range
+ x1:="a",
+ x2:=("a" .."h"),
+ x3:="c" };
+template templateChar_rec templateChar_tRange2 :={ //specific value and Range
+ x1:="a",
+ x2:=("a" .. "h"),
+ x3:="c" };
+template templateChar_rec templateChar_tRange3 :={ //specific value and Range
+ x1:="a",
+ x2:=("k" .. int2char(127)),
+ x3:="c" };
+template templateChar_rec templateChar_tRange4 :={ //specific value and Range
+ x1:="a",
+ x2:=(int2char(0) .. "k"),
+ x3:="c" };
+template templateChar_rec templateChar_tIfpresent :={ //specific value and ifpresent
+ x1:="a",
+ x2:="b",
+ x3:="c" ifpresent };
+
+testcase templateCharSpec() runs on templateChar_mycomp {
+var templateChar_rec x1,x2;		//specific value
+x1:={ x1:="a",  x2:="b",  x3:="c" };
+x2:={ x1:="k",  x2:="b",  x3:="c" };
+//match
+if (match(x1,templateChar_tSpec)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match
+if (not(match(x2,templateChar_tSpec))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateCharList() runs on templateChar_mycomp {
+var templateChar_rec x1,x2,x3;		//value list
+x1:={ x1:="a",  x2:="b",  x3:="c" };
+x2:={ x1:="a",  x2:="h",  x3:="c" };
+x3:={ x1:="k",  x2:="b",  x3:="c" };
+//match
+if (match(x1,templateChar_tList)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: out of list
+if (not(match(x2,templateChar_tList))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateChar_tList))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateCharComp() runs on templateChar_mycomp {
+var templateChar_rec x1,x2,x3;		//complemented list
+x1:={ x1:="a",  x2:="c",  x3:="c" };
+x2:={ x1:="a",  x2:="2",  x3:="c" };
+x3:={ x1:="k",  x2:="c",  x3:="c" };
+//match
+if (match(x1,templateChar_tComp)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: in the list
+if (not(match(x2,templateChar_tComp))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateChar_tComp))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateCharOmit() runs on templateChar_mycomp {
+var templateChar_rec x1,x2,x3;		//omitting value
+x1:={ x1:="a",  x2:="b",  x3:=omit };
+x2:={ x1:="a",  x2:="b",  x3:="o" };
+x3:={ x1:="l",  x2:="b",  x3:=omit };
+//match
+if (match(x1,templateChar_tOmit)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: not omitted
+if (not(match(x2,templateChar_tOmit))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateChar_tOmit))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateCharAny() runs on templateChar_mycomp {
+var templateChar_rec x1,x2,x3;		//any value
+x1:={ x1:="a",  x2:="b",  x3:="l" };
+x2:={ x1:="a",  x2:="b",  x3:=omit };
+x3:={ x1:="k",  x2:="b",  x3:="l" };
+//match
+if (match(x1,templateChar_tAny)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: field omitted
+if (not(match(x2,templateChar_tAny))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateChar_tAny))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateCharAnyorNone() runs on templateChar_mycomp {
+var templateChar_rec x1,x2,x3;		//AnyorNone value
+x1:={ x1:="a",  x2:="b",  x3:=omit };
+x2:={ x1:="a",  x2:="b",  x3:="m" };
+x3:={ x1:="p",  x2:="b",  x3:=omit };
+//match: omitted
+if (match(x1,templateChar_tAnyorNone)) {setverdict(pass);}
+ else {setverdict(fail);}
+//match: value
+if (match(x2,templateChar_tAnyorNone)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateChar_tAnyorNone))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateCharRange1() runs on templateChar_mycomp {
+var templateChar_rec x1,x2,x3;		//Range ( .. )
+x1:={ x1:="a",  x2:="d",  x3:="c" };
+x2:={ x1:="a",  x2:="p",  x3:="c" };
+x3:={ x1:="l",  x2:="d",  x3:="c" };
+//match
+if (match(x1,templateChar_tRange1)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: out of range
+if (not(match(x2,templateChar_tRange1))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateChar_tRange1))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateCharRange2() runs on templateChar_mycomp {
+var templateChar_rec x1,x2,x3;		//Range ( to )
+x1:={ x1:="a",  x2:="d",  x3:="c" };
+x2:={ x1:="a",  x2:="p",  x3:="c" };
+x3:={ x1:="l",  x2:="d",  x3:="c" };
+//match
+if (match(x1,templateChar_tRange2)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: out of range
+if (not(match(x2,templateChar_tRange2))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateChar_tRange2))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateCharRange3() runs on templateChar_mycomp {
+var templateChar_rec x1,x2,x3;		//Range, with infinity
+x1:={ x1:="a",  x2:="p",  x3:="c" };
+x2:={ x1:="a",  x2:="d",  x3:="c" };
+x3:={ x1:="l",  x2:="p",  x3:="c" };
+//match
+if (match(x1,templateChar_tRange3)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: out of range
+if (not(match(x2,templateChar_tRange3))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateChar_tRange3))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateCharRange4() runs on templateChar_mycomp {
+var templateChar_rec x1,x2,x3;		//Range with - infinity
+x1:={ x1:="a",  x2:="d",  x3:="c" };
+x2:={ x1:="a",  x2:="p",  x3:="c" };
+x3:={ x1:="l",  x2:="d",  x3:="c" };
+//match
+if (match(x1,templateChar_tRange4)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: out of range
+if (not(match(x2,templateChar_tRange4))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateChar_tRange4))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateCharIfpresent() runs on templateChar_mycomp {
+var templateChar_rec x1,x2,x3,x4;		//ifpresent
+x1:={ x1:="a",  x2:="b",  x3:="c" };
+x2:={ x1:="a",  x2:="b",  x3:=omit };
+x3:={ x1:="a",  x2:="b",  x3:="k" };
+x4:={ x1:="c",  x2:="b",  x3:=omit };
+//match: present and match
+if (match(x1,templateChar_tIfpresent)) {setverdict(pass);}
+ else {setverdict(fail);}
+//match: not present
+if (match(x2,templateChar_tIfpresent)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: present and not match
+if (not(match(x3,templateChar_tIfpresent))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x4,templateChar_tIfpresent))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+control {
+ execute(templateCharSpec());
+ execute(templateCharList());
+ execute(templateCharComp());
+ execute(templateCharOmit());
+ execute(templateCharAny());
+ execute(templateCharAnyorNone());
+ execute(templateCharRange1());
+ execute(templateCharRange2());
+ execute(templateCharRange3());
+ execute(templateCharRange4());
+ execute(templateCharIfpresent());
+}
+}
diff --git a/Regression_Test_java/src/TtemplateEnum.ttcn b/Regression_Test_java/src/TtemplateEnum.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..95f61376ff68f64ebfeb4a0f17711d59a67d6110
--- /dev/null
+++ b/Regression_Test_java/src/TtemplateEnum.ttcn
@@ -0,0 +1,172 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Raduly, Csaba
+ *   Szabados, Kristof
+ *   Szabo, Janos Zoltan – initial implementation
+ *
+ ******************************************************************************/
+module TtemplateEnum {
+type component templateEnum_mycomp {};
+type enumerated templateEnum_myenum {xx1,xx2,xx3,xx4,xx5,xx6,xx7};
+type record templateEnum_rec {
+ templateEnum_myenum x1,
+ templateEnum_myenum x2,
+ templateEnum_myenum x3 optional };
+template templateEnum_rec templateEnum_tSpec :={ //specific values
+ x1:=xx1,
+ x2:=xx2,
+ x3:=xx3 };
+template templateEnum_rec templateEnum_tList :={ //specific value and value list
+ x1:=xx1,
+ x2:=(xx2,xx3,xx6),
+ x3:=xx3 };
+template templateEnum_rec templateEnum_tComp :={ //specific value and compl. list
+ x1:=xx1,
+ x2:=complement (xx2,xx3,xx6),
+ x3:=xx3 };
+template templateEnum_rec templateEnum_tOmit :={ //omitting values
+ x1:=xx1,
+ x2:=xx2,
+ x3:=omit } ;
+template templateEnum_rec templateEnum_tAny :={ //specific and any value
+ x1:=xx1,
+ x2:=xx2,
+ x3:=? } ;
+template templateEnum_rec templateEnum_tAnyorNone :={ //specific and AnyorNone value
+ x1:=xx1,
+ x2:=xx2,
+ x3:=* };
+template templateEnum_rec templateEnum_tIfpresent :={ //specific value and ifpresent
+ x1:=xx1,
+ x2:=xx2,
+ x3:=xx3 ifpresent };
+
+testcase templateEnumSpec() runs on templateEnum_mycomp {
+var templateEnum_rec x1,x2;		//specific value
+x1:={ x1:=xx1,  x2:=xx2,  x3:=xx3 };
+x2:={ x1:=xx2,  x2:=xx2,  x3:=xx3 };
+//match
+if (match(x1,templateEnum_tSpec)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match
+if (not(match(x2,templateEnum_tSpec))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateEnumList() runs on templateEnum_mycomp {
+var templateEnum_rec x1,x2,x3;		//value list
+x1:={ x1:=xx1,  x2:=xx6,  x3:=xx3 };
+x2:={ x1:=xx1,  x2:=xx7,  x3:=xx3 };
+x3:={ x1:=xx2,  x2:=xx6,  x3:=xx3 };
+//match
+if (match(x1,templateEnum_tList)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: out of list
+if (not(match(x2,templateEnum_tList))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateEnum_tList))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateEnumComp() runs on templateEnum_mycomp {
+var templateEnum_rec x1,x2,x3;		//complemented list
+x1:={ x1:=xx1,  x2:=xx7,  x3:=xx3 };
+x2:={ x1:=xx1,  x2:=xx6,  x3:=xx3 };
+x3:={ x1:=xx2,  x2:=xx7,  x3:=xx3 };
+//match
+if (match(x1,templateEnum_tComp)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: in the list
+if (not(match(x2,templateEnum_tComp))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateEnum_tComp))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateEnumOmit() runs on templateEnum_mycomp {
+var templateEnum_rec x1,x2,x3;		//omitting value
+x1:={ x1:=xx1,  x2:=xx2,  x3:=omit };
+x2:={ x1:=xx1,  x2:=xx2,  x3:=xx3 };
+x3:={ x1:=xx2,  x2:=xx2,  x3:=omit };
+//match
+if (match(x1,templateEnum_tOmit)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: not omitted
+if (not(match(x2,templateEnum_tOmit))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateEnum_tOmit))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateEnumAny() runs on templateEnum_mycomp {
+var templateEnum_rec x1,x2,x3;		//any value
+x1:={ x1:=xx1,  x2:=xx2,  x3:=xx3 };
+x2:={ x1:=xx2,  x2:=xx2,  x3:=xx3 };
+x3:={ x1:=xx1,  x2:=xx2,  x3:=omit };
+//match
+if (match(x1,templateEnum_tAny)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: field omitted
+if (not(match(x2,templateEnum_tAny))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateEnum_tAny))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateEnumAnyorNone() runs on templateEnum_mycomp {
+var templateEnum_rec x1,x2,x3;		//AnyorNone value
+x1:={ x1:=xx1,  x2:=xx2,  x3:=omit };
+x2:={ x1:=xx1,  x2:=xx2,  x3:=xx3 };
+x3:={ x1:=xx2,  x2:=xx2,  x3:=omit };
+//match: omitted
+if (match(x1,templateEnum_tAnyorNone)) {setverdict(pass);}
+ else {setverdict(fail);}
+//match: value
+if (match(x2,templateEnum_tAnyorNone)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateEnum_tAnyorNone))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateEnumIfpresent() runs on templateEnum_mycomp {
+var templateEnum_rec x1,x2,x3,x4;		//ifpresent
+x1:={ x1:=xx1,  x2:=xx2,  x3:=xx3 };
+x2:={ x1:=xx1,  x2:=xx2,  x3:=omit };
+x3:={ x1:=xx2,  x2:=xx2,  x3:=omit };
+x4:={ x1:=xx1,  x2:=xx2,  x3:=xx4 };
+//match: present and match
+if (match(x1,templateEnum_tIfpresent)) {setverdict(pass);}
+ else {setverdict(fail);}
+//match: not present
+if (match(x2,templateEnum_tIfpresent)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: present and not match
+if (not(match(x3,templateEnum_tIfpresent))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x4,templateEnum_tIfpresent))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+control {
+ execute(templateEnumSpec());
+ execute(templateEnumList());
+ execute(templateEnumComp());
+ execute(templateEnumOmit());
+ execute(templateEnumAny());
+ execute(templateEnumAnyorNone());
+ execute(templateEnumIfpresent());
+}
+}
diff --git a/Regression_Test_java/src/TtemplateFloat.ttcn b/Regression_Test_java/src/TtemplateFloat.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..21dc6f79d01e9f7afbdead54cc1036e134a8c408
--- /dev/null
+++ b/Regression_Test_java/src/TtemplateFloat.ttcn
@@ -0,0 +1,275 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Baranyi, Botond
+ *   Raduly, Csaba
+ *   Szabo, Janos Zoltan – initial implementation
+ *
+ ******************************************************************************/
+module TtemplateFloat {
+type component templateFloat_mycomp {};
+type record templateFloat_rec {
+ float x1,
+ float x2,
+ float x3 optional };
+template templateFloat_rec templateFloat_tSpec :={ //specific values
+ x1:=1.1,
+ x2:=2.1,
+ x3:=3.1 };
+template templateFloat_rec templateFloat_tList :={ //specific value and value list
+ x1:=1.1,
+ x2:=(2.1,3.1,6.1),
+ x3:=3.1 };
+template templateFloat_rec templateFloat_tComp :={ //specific value and compl. list
+ x1:=1.1,
+ x2:=complement (2.1,3.1,6.1),
+ x3:=3.1 };
+template templateFloat_rec templateFloat_tOmit :={ //omitting values
+ x1:=1.1,
+ x2:=2.1,
+ x3:=omit } ;
+template templateFloat_rec templateFloat_tAny :={ //specific and any value
+ x1:=1.1,
+ x2:=2.1,
+ x3:=? } ;
+template templateFloat_rec templateFloat_tAnyorNone :={ //specific and AnyorNone value
+ x1:=1.1,
+ x2:=2.1,
+ x3:=* };
+template templateFloat_rec templateFloat_tRange1 :={ //specific value and Range
+ x1:=1.1,
+ x2:=(2.1 ..4.1),
+ x3:=3.1 };
+template templateFloat_rec templateFloat_tRange2 :={ //specific value and Range
+ x1:=1.1,
+ x2:=(2.1 .. 4.1),
+ x3:=3.1 };
+template templateFloat_rec templateFloat_tRange3 :={ //specific value and Range
+ x1:=1.1,
+ x2:=(2.1 .. infinity),
+ x3:=3.1 };
+template templateFloat_rec templateFloat_tRange4 :={ //specific value and Range
+ x1:=1.1,
+ x2:=(-infinity .. 4.1),
+ x3:=3.1 };
+template templateFloat_rec templateFloat_tIfpresent :={ //specific value and ifpresent
+ x1:=1.1,
+ x2:=2.1,
+ x3:=3.1 ifpresent };
+ 
+template float templateFloat_tNaN := not_a_number;
+template float templateFloat_tPosInf := infinity;
+template float templateFloat_tNegInf := -infinity;
+
+testcase templateFloatSpec() runs on templateFloat_mycomp {
+var templateFloat_rec x1,x2;		//specific value
+x1:={ x1:=1.1,  x2:=2.1,  x3:=3.1 };
+x2:={ x1:=2.1,  x2:=2.1,  x3:=3.1 };
+//match
+if (match(x1,templateFloat_tSpec)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match
+if (not(match(x2,templateFloat_tSpec))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateFloatList() runs on templateFloat_mycomp {
+var templateFloat_rec x1,x2,x3;		//value list
+x1:={ x1:=1.1,  x2:=6.1,  x3:=3.1 };
+x2:={ x1:=1.1,  x2:=7.1,  x3:=3.1 };
+x3:={ x1:=2.1,  x2:=6.1,  x3:=3.1 };
+//match
+if (match(x1,templateFloat_tList)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: out of list
+if (not(match(x2,templateFloat_tList))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateFloat_tList))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateFloatComp() runs on templateFloat_mycomp {
+var templateFloat_rec x1,x2,x3;		//complemented list
+x1:={ x1:=1.1,  x2:=7.1,  x3:=3.1 };
+x2:={ x1:=1.1,  x2:=6.1,  x3:=3.1 };
+x3:={ x1:=2.1,  x2:=7.1,  x3:=3.1 };
+//match
+if (match(x1,templateFloat_tComp)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: in the list
+if (not(match(x2,templateFloat_tComp))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateFloat_tComp))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateFloatOmit() runs on templateFloat_mycomp {
+var templateFloat_rec x1,x2,x3;		//omitting value
+x1:={ x1:=1.1,  x2:=2.1,  x3:=omit };
+x2:={ x1:=1.1,  x2:=2.1,  x3:=3.1 };
+x3:={ x1:=2.1,  x2:=2.1,  x3:=omit };
+//match
+if (match(x1,templateFloat_tOmit)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: not omitted
+if (not(match(x2,templateFloat_tOmit))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateFloat_tOmit))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateFloatAny() runs on templateFloat_mycomp {
+var templateFloat_rec x1,x2,x3;		//any value
+x1:={ x1:=1.1,  x2:=2.1,  x3:=3.1 };
+x2:={ x1:=1.1,  x2:=2.1,  x3:=omit };
+x3:={ x1:=2.1,  x2:=2.1,  x3:=3.1 };
+//match
+if (match(x1,templateFloat_tAny)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: field omitted
+if (not(match(x2,templateFloat_tAny))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateFloat_tAny))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateFloatAnyorNone() runs on templateFloat_mycomp {
+var templateFloat_rec x1,x2,x3;		//AnyorNone value
+x1:={ x1:=1.1,  x2:=2.1,  x3:=omit };
+x2:={ x1:=1.1,  x2:=2.1,  x3:=3.1 };
+x3:={ x1:=2.1,  x2:=2.1,  x3:=omit };
+//match: omitted
+if (match(x1,templateFloat_tAnyorNone)) {setverdict(pass);}
+ else {setverdict(fail);}
+//match: value
+if (match(x2,templateFloat_tAnyorNone)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateFloat_tAnyorNone))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateFloatRange1() runs on templateFloat_mycomp {
+var templateFloat_rec x1,x2,x3;		//Range ( .. )
+x1:={ x1:=1.1,  x2:=2.1,  x3:=3.1 };
+x2:={ x1:=1.1,  x2:=5.1,  x3:=3.1 };
+x3:={ x1:=2.1,  x2:=2.1,  x3:=3.1 };
+//match
+if (match(x1,templateFloat_tRange1)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: out of range
+if (not(match(x2,templateFloat_tRange1))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateFloat_tRange1))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateFloatRange2() runs on templateFloat_mycomp {
+var templateFloat_rec x1,x2,x3;		//Range ( to )
+x1:={ x1:=1.1,  x2:=2.1,  x3:=3.1 };
+x2:={ x1:=1.1,  x2:=5.1,  x3:=3.1 };
+x3:={ x1:=2.1,  x2:=2.1,  x3:=3.1 };
+//match
+if (match(x1,templateFloat_tRange2)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: out of range
+if (not(match(x2,templateFloat_tRange2))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateFloat_tRange2))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateFloatRange3() runs on templateFloat_mycomp {
+var templateFloat_rec x1,x2,x3;		//Range, with infinity
+x1:={ x1:=1.1,  x2:=8.1,  x3:=3.1 };
+x2:={ x1:=1.1,  x2:=-5.1,  x3:=3.1 };
+x3:={ x1:=2.1,  x2:=2.1,  x3:=3.1 };
+//match
+if (match(x1,templateFloat_tRange3)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: out of range
+if (not(match(x2,templateFloat_tRange3))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateFloat_tRange3))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateFloatRange4() runs on templateFloat_mycomp {
+var templateFloat_rec x1,x2,x3;		//Range with - infinity
+x1:={ x1:=1.1,  x2:=-2.1,  x3:=3.1 };
+x2:={ x1:=1.1,  x2:=5.1,  x3:=3.1 };
+x3:={ x1:=2.1,  x2:=2.1,  x3:=3.1 };
+//match
+if (match(x1,templateFloat_tRange4)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: out of range
+if (not(match(x2,templateFloat_tRange4))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateFloat_tRange4))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateFloatIfpresent() runs on templateFloat_mycomp {
+var templateFloat_rec x1,x2,x3,x4;		//ifpresent
+x1:={ x1:=1.1,  x2:=2.1,  x3:=3.1 };
+x2:={ x1:=1.1,  x2:=2.1,  x3:=omit };
+x3:={ x1:=1.1,  x2:=2.1,  x3:=4.1 };
+x4:={ x1:=2.1,  x2:=2.1,  x3:=omit };
+//match: present and match
+if (match(x1,templateFloat_tIfpresent)) {setverdict(pass);}
+ else {setverdict(fail);}
+//match: not present
+if (match(x2,templateFloat_tIfpresent)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: present and not match
+if (not(match(x3,templateFloat_tIfpresent))) {setverdict(pass);}
+ else {setverdict(fail);}
+////no match: other field
+if (not(match(x4,templateFloat_tIfpresent))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateFloatSpecialValues() runs on templateFloat_mycomp {
+  var float v_nan := not_a_number;
+  var float v_pos_inf := infinity;
+  var float v_neg_inf := -infinity;
+  
+  if (match(v_nan, templateFloat_tNaN)) { setverdict(pass); }
+  else { setverdict(fail, "not_a_number should match itself"); }
+  
+  if (match(v_pos_inf, templateFloat_tPosInf)) { setverdict(pass); }
+  else { setverdict(fail, "infinity should match itself"); }
+  
+  if (match(v_neg_inf, templateFloat_tNegInf)) { setverdict(pass); }
+  else { setverdict(fail, "-infinity should match itself"); }
+}
+
+control {
+ execute(templateFloatSpec());
+ execute(templateFloatList());
+ execute(templateFloatComp());
+ execute(templateFloatOmit());
+ execute(templateFloatAny());
+ execute(templateFloatAnyorNone());
+ execute(templateFloatRange1());
+ execute(templateFloatRange2());
+ execute(templateFloatRange3());
+ execute(templateFloatRange4());
+ execute(templateFloatIfpresent());
+ execute(templateFloatSpecialValues());
+}
+}
diff --git a/Regression_Test_java/src/TtemplateInt.ttcn b/Regression_Test_java/src/TtemplateInt.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..de423b5f1a41aeb722e2e3f4b3a0558fb8b600d1
--- /dev/null
+++ b/Regression_Test_java/src/TtemplateInt.ttcn
@@ -0,0 +1,397 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Baranyi, Botond
+ *   Kovacs, Ferenc
+ *   Raduly, Csaba
+ *   Szabados, Kristof
+ *   Szabo, Janos Zoltan – initial implementation
+ *
+ ******************************************************************************/
+module TtemplateInt {
+
+import from ImportedTemplates all;
+
+type component templateInt_mycomp {};
+type record templateInt_rec {
+ integer x1,
+ integer x2,
+ integer x3 optional };
+type integer templateInt_subtype (0..1457664);
+ 
+template templateInt_rec templateInt_tSpec :={ //specific values
+ x1:=1,
+ x2:=2,
+ x3:=3 };
+template templateInt_rec templateInt_tList :={ //specific value and value list
+ x1:=1,
+ x2:=(2,3,6),
+ x3:=3 };
+template templateInt_rec templateInt_tComp :={ //specific value and compl. list
+ x1:=1,
+ x2:=complement (2,3,6),
+ x3:=3 };
+template templateInt_rec templateInt_tOmit :={ //omitting values
+ x1:=1,
+ x2:=2,
+ x3:=omit } ;
+template templateInt_rec templateInt_tAny :={ //specific and any value
+ x1:=1,
+ x2:=2,
+ x3:=? } ;
+template templateInt_rec templateInt_tAnyorNone :={ //specific and AnyorNone value
+ x1:=1,
+ x2:=2,
+ x3:=* };
+template templateInt_rec templateInt_tRange1 :={ //specific value and Range
+ x1:=1,
+ x2:=(2 ..4),
+ x3:=3 };
+template templateInt_rec templateInt_tRange2 :={ //specific value and Range
+ x1:=1,
+ x2:=(2 .. 4),
+ x3:=3 };
+template templateInt_rec templateInt_tRange3 :={ //specific value and Range
+ x1:=1,
+ x2:=(2 .. infinity),
+ x3:=3 };
+template templateInt_rec templateInt_tRange4 :={ //specific value and Range
+ x1:=1,
+ x2:=(-infinity .. 4),
+ x3:=3 };
+template templateInt_rec templateInt_tIfpresent :={ //specific value and ifpresent
+ x1:=1,
+ x2:=2,
+ x3:=3 ifpresent };
+
+testcase templateIntSpec() runs on templateInt_mycomp {
+var templateInt_rec x1,x2;		//specific value
+x1:={ x1:=1,  x2:=2,  x3:=3 };
+x2:={ x1:=2,  x2:=2,  x3:=3 };
+//match
+if (match(x1,templateInt_tSpec)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match
+if (not(match(x2,templateInt_tSpec))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateIntList() runs on templateInt_mycomp {
+var templateInt_rec x1,x2,x3;		//value list
+x1:={ x1:=1,  x2:=6,  x3:=3 };
+x2:={ x1:=1,  x2:=7,  x3:=3 };
+x3:={ x1:=2,  x2:=6,  x3:=3 };
+//match
+if (match(x1,templateInt_tList)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: out of list
+if (not(match(x2,templateInt_tList))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateInt_tList))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateIntComp() runs on templateInt_mycomp {
+var templateInt_rec x1,x2,x3;		//complemented list
+x1:={ x1:=1,  x2:=7,  x3:=3 };
+x2:={ x1:=1,  x2:=6,  x3:=3 };
+x3:={ x1:=2,  x2:=7,  x3:=3 };
+//match
+if (match(x1,templateInt_tComp)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: in the list
+if (not(match(x2,templateInt_tComp))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateInt_tComp))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateIntOmit() runs on templateInt_mycomp {
+var templateInt_rec x1,x2,x3;		//omitting value
+x1:={ x1:=1,  x2:=2,  x3:=omit };
+x2:={ x1:=1,  x2:=2,  x3:=3 };
+x3:={ x1:=2,  x2:=2,  x3:=omit };
+//match
+if (match(x1,templateInt_tOmit)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: not omitted
+if (not(match(x2,templateInt_tOmit))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateInt_tOmit))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateIntAny() runs on templateInt_mycomp {
+var templateInt_rec x1,x2,x3;		//any value
+x1:={ x1:=1,  x2:=2,  x3:=3 };
+x2:={ x1:=1,  x2:=2,  x3:=omit };
+x3:={ x1:=2,  x2:=2,  x3:=3 };
+//match
+if (match(x1,templateInt_tAny)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: field omitted
+if (not(match(x2,templateInt_tAny))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateInt_tAny))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateIntAnyorNone() runs on templateInt_mycomp {
+var templateInt_rec x1,x2,x3;		//AnyorNone value
+x1:={ x1:=1,  x2:=2,  x3:=omit };
+x2:={ x1:=1,  x2:=2,  x3:=3 };
+x3:={ x1:=2,  x2:=2,  x3:=omit };
+//match: omitted
+if (match(x1,templateInt_tAnyorNone)) {setverdict(pass);}
+ else {setverdict(fail);}
+//match: value
+if (match(x2,templateInt_tAnyorNone)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateInt_tAnyorNone))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateIntRange1() runs on templateInt_mycomp {
+var templateInt_rec x1,x2,x3;		//Range (x .. y)
+x1:={ x1:=1,  x2:=2,  x3:=3 };
+x2:={ x1:=1,  x2:=5,  x3:=3 };
+x3:={ x1:=2,  x2:=2,  x3:=3 };
+//match
+if (match(x1,templateInt_tRange1)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: out of range
+if (not(match(x2,templateInt_tRange1))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateInt_tRange1))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateIntRange2() runs on templateInt_mycomp {
+var templateInt_rec x1,x2,x3;		//Range (x to y)
+x1:={ x1:=1,  x2:=2,  x3:=3 };
+x2:={ x1:=1,  x2:=5,  x3:=3 };
+x3:={ x1:=2,  x2:=2,  x3:=3 };
+//match
+if (match(x1,templateInt_tRange2)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: out of range
+if (not(match(x2,templateInt_tRange2))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateInt_tRange2))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateIntRange3() runs on templateInt_mycomp {
+var templateInt_rec x1,x2,x3;		//Range, with infinity
+x1:={ x1:=1,  x2:=8,  x3:=3 };
+x2:={ x1:=1,  x2:=-5,  x3:=3 };
+x3:={ x1:=2,  x2:=2,  x3:=3 };
+//match
+if (match(x1,templateInt_tRange3)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: out of range
+if (not(match(x2,templateInt_tRange3))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateInt_tRange3))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateIntRange4() runs on templateInt_mycomp {
+var templateInt_rec x1,x2,x3;		//Range with - infinity
+x1:={ x1:=1,  x2:=-2,  x3:=3 };
+x2:={ x1:=1,  x2:=5,  x3:=3 };
+x3:={ x1:=2,  x2:=2,  x3:=3 };
+//match
+if (match(x1,templateInt_tRange4)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: out of range
+if (not(match(x2,templateInt_tRange4))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateInt_tRange4))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateIntIfpresent() runs on templateInt_mycomp {
+var templateInt_rec x1,x2,x3,x4;		//ifpresent
+x1:={ x1:=1,  x2:=2,  x3:=3 };
+x2:={ x1:=1,  x2:=2,  x3:=omit };
+x3:={ x1:=1,  x2:=2,  x3:=4 };
+x4:={ x1:=2,  x2:=2,  x3:=omit };
+//match: present and match
+if (match(x1,templateInt_tIfpresent)) {setverdict(pass);}
+ else {setverdict(fail);}
+//match: not present
+if (match(x2,templateInt_tIfpresent)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: present and not match
+if (not(match(x3,templateInt_tIfpresent))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x4,templateInt_tIfpresent))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+// Types for TR_HJ94652.
+type record TR_HJ94652_myrec {
+  integer myrecint
+}
+
+template TR_HJ94652_myrec TR_HJ94652_mytemp(integer myint) := {
+  myrecint := (myint - 100 .. myint)
+}
+
+type record of TR_HJ94652_myrec TR_HJ94652_mylist
+
+testcase TR_HJ94652() runs on templateInt_mycomp {
+  // INTEGER_template::copy_template() was not implemented correctly for
+  // VALUE_RANGE templates.
+  var template TR_HJ94652_mylist myownlist := { }
+  for (var integer i := 1; i <= 3; i := i + 1) {
+    myownlist[i] := TR_HJ94652_mytemp(i * 100)
+  }
+  for (var integer i := 1; i <= 3; i := i + 1) {
+    var charstring s1 := log2str(myownlist[i])
+    var charstring s2 := log2str(TR_HJ94652_mytemp(i * 100))
+    if (s1 == s2) { setverdict(pass) }
+    else { setverdict(fail) }
+  }
+}
+
+testcase templateIntSubtype() runs on templateInt_mycomp {
+  // this tests the use of inline templates (value ranges)
+  // with subtypes and variables
+  var templateInt_subtype x := 312;
+  var templateInt_subtype lower_limit := 100;
+  var templateInt_subtype upper_limit := 65535;
+  if (not match(x, templateInt_subtype:(0..upper_limit))) { // TR: artf602477
+    setverdict(fail);
+  }
+  if (not match(x, integer:(100..upper_limit))) {
+    setverdict(fail);
+  }
+  if (not match(312, templateInt_subtype:(100..upper_limit))) {
+    setverdict(fail);
+  }
+  if (not match(x, templateInt_subtype:(100..65535))) {
+    setverdict(fail);
+  }
+  if (not match(x, templateInt_subtype:(lower_limit..65535))) {
+    setverdict(fail);
+  }
+  if (not match(x, templateInt_subtype:(lower_limit..upper_limit))) {
+    setverdict(fail);
+  }
+  setverdict(pass);
+}
+
+// test case: using a parameterized template with no actual parameters (using default values)
+// before its declaration
+template integer tReverse := tPard;
+
+template integer tPard(integer p := 6) := p;
+
+testcase templateIntReverseOrder() runs on templateInt_mycomp {
+  var template integer vtExpected := 6;
+  if (log2str(tReverse) == log2str(vtExpected)) {
+    setverdict(pass);
+  }
+  else {
+    setverdict(fail, "Expected: ", vtExpected, ", got: ", tReverse);
+  }
+}
+
+// same test, but the parameterized template is passed as a parameter to
+// an imported parameterized template
+template integer tReverse2 := tImported(tPard2);
+
+template integer tPard2(integer p := 4) := p;
+
+testcase templateIntReverseOrderImported() runs on templateInt_mycomp {
+  var template integer vtExpected := 4;
+  if (log2str(tReverse2) == log2str(vtExpected)) {
+    setverdict(pass);
+  }
+  else {
+    setverdict(fail, "Expected: ", vtExpected, ", got: ", tReverse2);
+  }
+}
+
+// same as the previous test, but with a non-parameterized template
+template integer tReverse3 := tImported(tNonPard);
+
+template integer tNonPard := (1, 2);
+
+testcase templateIntReverseOrderImported2() runs on templateInt_mycomp {
+  var template integer vtExpected := (1, 2);
+  if (log2str(tReverse3) == log2str(vtExpected)) {
+    setverdict(pass);
+  }
+  else {
+    setverdict(fail, "Expected: ", vtExpected, ", got: ", tReverse3);
+  }
+}
+
+template integer IntTemplateParam(template integer i := 3) := i;
+
+testcase templateIntParam() runs on templateInt_mycomp {
+  if (ispresent(IntTemplateParam)) {
+    setverdict(pass);
+  } else {
+    setverdict(fail);
+  }
+
+  if (ispresent(IntTemplateParam(2))) {
+    setverdict(pass);
+  } else {
+    setverdict(fail);
+  }
+
+  if (isbound(IntTemplateParam)) {
+    setverdict(pass);
+  } else {
+    setverdict(fail);
+  }
+
+  if (isbound(IntTemplateParam(2))) {
+    setverdict(pass);
+  } else {
+    setverdict(fail);
+  }
+}
+
+
+control {
+ execute(templateIntSpec());
+ execute(templateIntList());
+ execute(templateIntComp());
+ execute(templateIntOmit());
+ execute(templateIntAny());
+ execute(templateIntAnyorNone());
+ execute(templateIntRange1());
+ execute(templateIntRange2());
+ execute(templateIntRange3());
+ execute(templateIntRange4());
+ execute(templateIntIfpresent());
+ execute(TR_HJ94652());
+ execute(templateIntSubtype());
+ execute(templateIntReverseOrder());
+ execute(templateIntReverseOrderImported());
+ execute(templateIntReverseOrderImported2());
+ execute(templateIntParam());
+}
+}
diff --git a/Regression_Test_java/src/TtemplateRec.ttcn b/Regression_Test_java/src/TtemplateRec.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..e1e48e2edb61c12cd79a6afa6714a689a6da4cff
--- /dev/null
+++ b/Regression_Test_java/src/TtemplateRec.ttcn
@@ -0,0 +1,696 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Baranyi, Botond
+ *   Delic, Adam
+ *   Kovacs, Ferenc
+ *   Raduly, Csaba
+ *   Szabados, Kristof
+ *   Szabo, Janos Zoltan – initial implementation
+ *
+ ******************************************************************************/
+module TtemplateRec {
+
+type record RP {
+  record of record {
+  integer i optional,
+  charstring s
+  } inner
+}
+
+type record SR { // simple record
+  integer i
+}
+
+template RP t_r_all_omit := { { { omit, "omit" } } }
+
+
+type component templateRec_mycomp {};
+type record templateRec_myrec {
+ integer f1,
+ float f2 };
+type record templateRec_rec {
+ templateRec_myrec x1,
+ templateRec_myrec x2,
+ templateRec_myrec x3 optional };
+template templateRec_rec templateRec_tSpec :={ //specific values
+ x1:={f1:=1,f2:=1.2},
+ x2:={f1:=2,f2:=1.2},
+ x3:={f1:=3,f2:=1.2} };
+template templateRec_rec templateRec_tList :={ //specific value and value list
+ x1:={f1:=1,f2:=1.2},
+ x2:=({f1:=2,f2:=1.2},{f1:=3,f2:=1.2},{f1:=6,f2:=1.2}),
+ x3:={f1:=3,f2:=1.2} };
+template templateRec_rec templateRec_tComp :={ //specific value and compl. list
+ x1:={f1:=1,f2:=1.2},
+ x2:=complement ({f1:=2,f2:=1.2},{f1:=3,f2:=1.2},{f1:=6,f2:=1.2}),
+ x3:={f1:=3,f2:=1.2} };
+template templateRec_rec templateRec_tOmit :={ //omitting values
+ x1:={f1:=1,f2:=1.2},
+ x2:={f1:=2,f2:=1.2},
+ x3:=omit } ;
+template templateRec_rec templateRec_tAny :={ //specific and any value
+ x1:={f1:=1,f2:=1.2},
+ x2:={f1:=2,f2:=1.2},
+ x3:=? } ;
+template templateRec_rec templateRec_tAnyorNone :={ //specific and AnyorNone value
+ x1:={f1:=1,f2:=1.2},
+ x2:={f1:=2,f2:=1.2},
+ x3:=* };
+template templateRec_rec templateRec_tIfpresent :={ //specific value and ifpresent
+ x1:={f1:=1,f2:=1.2},
+ x2:={f1:=2,f2:=1.2},
+ x3:={f1:=3,f2:=1.2} ifpresent };
+
+testcase pasu() runs on templateRec_mycomp
+{
+  template integer v_timeUnit              := 60;
+  
+  var template SR t_sr := { 13 }
+  t_sr.i := v_timeUnit;
+
+  template RP v_r modifies t_r_all_omit := {{{
+    i := v_timeUnit
+  }}}
+  setverdict(pass); // if it compiles, that's enough
+}
+
+testcase templateRecSpec() runs on templateRec_mycomp {
+var templateRec_myrec temp:={f1:=3,f2:=1.2};
+var templateRec_rec x1,x2;		//specific value
+x1:={ x1:={f1:=1,f2:=1.2},  x2:={f1:=2,f2:=1.2},  x3:=temp };
+x2:={ x1:={f1:=2,f2:=1.2},  x2:={f1:=2,f2:=1.2},  x3:=temp };
+//match
+if (match(x1,templateRec_tSpec)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match
+if (not(match(x2,templateRec_tSpec))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateRecList() runs on templateRec_mycomp {
+var templateRec_myrec temp:={f1:=3,f2:=1.2};
+var templateRec_rec x1,x2,x3;		//value list
+x1:={ x1:={f1:=1,f2:=1.2},  x2:={f1:=6,f2:=1.2},  x3:=temp };
+x2:={ x1:={f1:=1,f2:=1.2},  x2:={f1:=7,f2:=1.2},  x3:=temp };
+x3:={ x1:={f1:=8,f2:=1.2},  x2:={f1:=6,f2:=1.2},  x3:=temp };
+//match
+if (match(x1,templateRec_tList)) {setverdict(pass);}
+ else {setverdict(fail, 1);}
+//no match: out of list
+if (not(match(x2,templateRec_tList))) {setverdict(pass);}
+ else {setverdict(fail, 2);}
+//no match: other field
+if (not(match(x3,templateRec_tList))) {setverdict(pass);}
+ else {setverdict(fail, 3);}
+}
+
+testcase templateRecComp() runs on templateRec_mycomp {
+var templateRec_myrec temp:={f1:=3,f2:=1.2};
+var templateRec_rec x1,x2,x3;		//complemented list
+x1:={ x1:={f1:=1,f2:=1.2},  x2:={f1:=7,f2:=1.2},  x3:=temp };
+x2:={ x1:={f1:=1,f2:=1.2},  x2:={f1:=6,f2:=1.2},  x3:=temp };
+x3:={ x1:={f1:=2,f2:=1.2},  x2:={f1:=7,f2:=1.2},  x3:=temp };
+//match
+if (match(x1,templateRec_tComp)) {setverdict(pass);}
+ else {setverdict(fail, 1);}
+//no match: in the list
+if (not(match(x2,templateRec_tComp))) {setverdict(pass);}
+ else {setverdict(fail, 2);}
+//no match: other field
+if (not(match(x3,templateRec_tComp))) {setverdict(pass);}
+ else {setverdict(fail, 3);}
+}
+
+testcase templateRecOmit() runs on templateRec_mycomp {
+var templateRec_myrec temp:={f1:=3,f2:=1.2};
+var templateRec_rec x1,x2,x3;		//omitting value
+x1:={ x1:={f1:=1,f2:=1.2},  x2:={f1:=2,f2:=1.2},  x3:=omit };
+x2:={ x1:={f1:=1,f2:=1.2},  x2:={f1:=2,f2:=1.2},  x3:=temp };
+x3:={ x1:={f1:=2,f2:=1.2},  x2:={f1:=2,f2:=1.2},  x3:=omit };
+//match
+if (match(x1,templateRec_tOmit)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: not omitted
+if (not(match(x2,templateRec_tOmit))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateRec_tOmit))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateRecAny() runs on templateRec_mycomp {
+var templateRec_myrec temp:={f1:=3,f2:=1.2};
+var templateRec_rec x1,x2,x3;		//any value
+x1:={ x1:={f1:=1,f2:=1.2},  x2:={f1:=2,f2:=1.2},  x3:=temp };
+x2:={ x1:={f1:=1,f2:=1.2},  x2:={f1:=2,f2:=1.2},  x3:=omit };
+x3:={ x1:={f1:=2,f2:=1.2},  x2:={f1:=2,f2:=1.2},  x3:=temp };
+//match
+if (match(x1,templateRec_tAny)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: field omitted
+if (not(match(x2,templateRec_tAny))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateRec_tAny))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateRecAnyorNone() runs on templateRec_mycomp {
+var templateRec_myrec temp:={f1:=3,f2:=1.2};
+var templateRec_rec x1,x2,x3;		//AnyorNone value
+x1:={ x1:={f1:=1,f2:=1.2},  x2:={f1:=2,f2:=1.2},  x3:=omit };
+x2:={ x1:={f1:=1,f2:=1.2},  x2:={f1:=2,f2:=1.2},  x3:=temp };
+x3:={ x1:={f1:=2,f2:=1.2},  x2:={f1:=2,f2:=1.2},  x3:=omit };
+//match: omitted
+if (match(x1,templateRec_tAnyorNone)) {setverdict(pass);}
+ else {setverdict(fail);}
+//match: value
+if (match(x2,templateRec_tAnyorNone)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateRec_tAnyorNone))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateRecIfpresent() runs on templateRec_mycomp {
+var templateRec_myrec temp1:={f1:=3,f2:=1.2};	//ifpresent
+var templateRec_myrec temp2:={f1:=4,f2:=1.2};
+var templateRec_rec x1,x2,x3,x4;
+x1:={ x1:={f1:=1,f2:=1.2},  x2:={f1:=2,f2:=1.2},  x3:=temp1 };
+x2:={ x1:={f1:=1,f2:=1.2},  x2:={f1:=2,f2:=1.2},  x3:=omit };
+x3:={ x1:={f1:=1,f2:=1.2},  x2:={f1:=2,f2:=1.2},  x3:=temp2 };
+x4:={ x1:={f1:=2,f2:=1.2},  x2:={f1:=2,f2:=1.2},  x3:=omit };
+//match: present and match
+if (match(x1,templateRec_tIfpresent)) {setverdict(pass);}
+else {setverdict(fail);}
+//match: not present
+if (match(x2,templateRec_tIfpresent)) {setverdict(pass);}
+else {setverdict(fail);}
+//no match: present and not match
+if (not(match(x3,templateRec_tIfpresent))) {setverdict(pass);}
+else {setverdict(fail);}
+//no match: other field
+if (not(match(x4,templateRec_tIfpresent))) {setverdict(pass);}
+else {setverdict(fail);}
+}
+
+
+type record R
+{
+    integer i,
+    charstring str optional
+}
+const R cr := { 1, omit }
+template R tRrec1 := { 1 , omit }
+template R tRrec2 := { 1, complement ( omit, "a" ) }
+template R tRrec3 := { 1, ( omit, "a" ) }
+template R tr := { i := 1, str := ( omit , omit ) }
+template R tr2 := { i := 1, str := complement( omit , omit ) }
+template R trc := cr; // HQ46602
+
+// Note: this tests legacy behavior and requires the -M compiler option!
+testcase MTTSM00015947() runs on templateRec_mycomp
+{
+  if (not match(cr, tRrec1)) { setverdict(fail); }
+  if (match(cr, tRrec2)) { setverdict(fail); }
+  if (not match(cr, tRrec3)) { setverdict(fail); }
+  if (ispresent(tr.str)) { setverdict(fail); }
+  if (ispresent(trc.str)) { setverdict(fail); }
+  if (not ispresent(tr2.str)) { setverdict(fail); }
+  setverdict(pass);
+}
+
+import from TtemplateRecAsn all
+template AmbiguousAnyRec t_AAR := { ''O }
+const AmbiguousAnyRec c_AAR := { ''O }
+testcase tc_HM39698() runs on templateRec_mycomp
+{
+  var template AmbiguousAnyRec vt_AAR := { ''O }
+  var AmbiguousAnyRec v_AAR := { ''O }
+  log(t_AAR)
+  log(c_AAR)
+  log(vt_AAR)
+  log(v_AAR)
+  // It's good, if we reach this point...
+  setverdict(pass)
+}
+
+testcase tc_valueof_governor_segfault() runs on templateRec_mycomp
+{
+  var templateRec_myrec mr := valueof({f1 := 1, f2 := 2.0})
+  setverdict(pass)
+}
+
+// Parametrized template reference without `()'.
+template R tmr(in integer i := 1) := { i := i, str := omit }
+testcase tc_HO49372() runs on templateRec_mycomp
+{
+  log(tmr)
+  setverdict(pass)
+}
+
+type record MyRecord 
+{ 
+    integer int, 
+    boolean deleted 
+} 
+testcase tc_HO69658() runs on templateRec_mycomp
+{
+var template MyRecord vl_myrecord; 
+vl_myrecord.int := 0; 
+
+var template MyRecord vl_myrecordAgain := vl_myrecord; 
+vl_myrecordAgain.deleted := false; 
+
+log("Now assignment finish");
+log("Print record:",vl_myrecordAgain);
+// It's good, if we reach this point...
+if (log2str(vl_myrecordAgain)=="{ int := 0, deleted := false }") {setverdict(pass)}else{setverdict(fail)}
+}
+
+type record MyRec2{
+  ROC roc optional,
+  ROI roi optional,
+  MyUnion1 u optional, 
+  MyRecord1 r optional
+}
+
+type record of charstring ROC;
+type record of integer  ROI;
+type record MyRecord1 {
+  integer       i optional,
+  float         x optional,
+  charstring    c
+}
+
+type union MyUnion1 {
+  ROC roc,
+  integer i,
+  ROI roi,
+  MyRecord1 r
+}
+
+  type union MyUnion_OneOption {
+    integer i
+  }
+
+  type record MyRec4 {
+    MyUnion_OneOption u,
+    integer i
+  }
+
+testcase tc_record_withJoker1() runs on templateRec_mycomp {
+  var template MyRec2 vtl_rec2_j;
+  if(isbound(vtl_rec2_j)) {setverdict(fail)}else {setverdict(pass)};
+  vtl_rec2_j:={
+    roc:=*
+  }
+  if(isbound(vtl_rec2_j)) {setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vtl_rec2_j.roc)) {setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vtl_rec2_j.roc[0])) {setverdict(fail)}else {setverdict(pass)};
+}
+testcase tc_record_withJoker2() runs on templateRec_mycomp {
+  var template MyRec2 vtl_rec2_j; 
+  vtl_rec2_j:={
+    roc:={ ?,? }
+  }
+  if(isbound(vtl_rec2_j)) {setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vtl_rec2_j.roc)) {setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vtl_rec2_j.roc[0])){setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vtl_rec2_j.roc[1])){setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vtl_rec2_j.roc[10])){setverdict(fail)}else {setverdict(pass)};
+  if(isbound(vtl_rec2_j.roi)){setverdict(fail)}else {setverdict(pass)};
+  if(isbound(vtl_rec2_j.u)){setverdict(fail)}else {setverdict(pass)};
+  if(isbound(vtl_rec2_j.r)){setverdict(fail)}else {setverdict(pass)};
+}
+
+testcase tc_record_withJoker3() runs on templateRec_mycomp {
+  var template MyRec2 vtl_rec2_j; 
+  vtl_rec2_j:={
+    u := *
+  }
+  if(isbound(vtl_rec2_j)) {setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vtl_rec2_j.roc)){setverdict(fail)}else {setverdict(pass)};
+  if(isbound(vtl_rec2_j.roi)){setverdict(fail)}else {setverdict(pass)};
+  if(isbound(vtl_rec2_j.u)){setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vtl_rec2_j.u.i)){setverdict(fail)}else {setverdict(pass)};
+}
+
+testcase tc_record_withJoker4() runs on templateRec_mycomp {
+  var template MyRec2 vtl_rec2_j; 
+  vtl_rec2_j:={
+    roc:=omit,
+    u:={i:=?}
+  }
+  if(isbound(vtl_rec2_j)) {setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vtl_rec2_j.roc)){setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vtl_rec2_j.roi)){setverdict(fail)}else {setverdict(pass)};
+  if(isbound(vtl_rec2_j.u)){setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vtl_rec2_j.u.i)){setverdict(pass)}else {setverdict(fail)};
+}
+
+testcase tc_record_withJoker5() runs on templateRec_mycomp {
+  var template MyRec2 vtl_rec2_j; 
+  vtl_rec2_j:={
+    r:= ?
+  }
+  if(isbound(vtl_rec2_j)) {setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vtl_rec2_j.roc)){setverdict(fail)}else {setverdict(pass)};
+  if(isbound(vtl_rec2_j.roi)){setverdict(fail)}else {setverdict(pass)};
+  if(isbound(vtl_rec2_j.u)){setverdict(fail)}else {setverdict(pass)};
+  if(isbound(vtl_rec2_j.u.i)){setverdict(fail)}else {setverdict(pass)};
+  if(isbound(vtl_rec2_j.r)) {setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vtl_rec2_j.r.i)) {setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vtl_rec2_j.r.x)) {setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vtl_rec2_j.r.c)) {setverdict(pass)}else {setverdict(fail)};
+}
+
+testcase tc_record_withJoker6() runs on templateRec_mycomp {
+  var template MyRec2 vtl_rec2_j; 
+  vtl_rec2_j:={
+    r:= *
+  }
+  if(isbound(vtl_rec2_j)) {setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vtl_rec2_j.roc)){setverdict(fail)}else {setverdict(pass)};
+  if(isbound(vtl_rec2_j.roi)){setverdict(fail)}else {setverdict(pass)};
+  if(isbound(vtl_rec2_j.u)){setverdict(fail)}else {setverdict(pass)};
+  if(isbound(vtl_rec2_j.u.i)){setverdict(fail)}else {setverdict(pass)};
+  if(isbound(vtl_rec2_j.r)) {setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vtl_rec2_j.r.i)) {setverdict(fail)}else {setverdict(pass)};
+  if(isbound(vtl_rec2_j.r.x)) {setverdict(fail)}else {setverdict(pass)};
+  if(isbound(vtl_rec2_j.r.c)) {setverdict(fail)}else {setverdict(pass)};
+}
+
+group g_TR_HO72812 {
+  type record MyRecord_HO72812
+  {
+    record {
+      boolean innerField1 optional,
+      integer innerField2 optional
+    } field1 optional,
+    integer field2
+  }
+  testcase tc_record_TR_HO72813() runs on templateRec_mycomp {
+    var MyRecord_HO72812 vl_MyRecord := { field1 := {}, field2 := 5 };  
+    if(isbound(vl_MyRecord)) {setverdict(pass)} else {setverdict(fail)}
+    if(isbound(vl_MyRecord.field1)) {setverdict(fail)} else {setverdict(pass)}
+    if(isbound(vl_MyRecord.field2)) {setverdict(pass)} else {setverdict(fail)}
+    vl_MyRecord.field1 := omit
+    if(isbound(vl_MyRecord.field1)) {setverdict(pass)} else {setverdict(fail)} 
+    if(isbound(vl_MyRecord.field1.innerField1)) {setverdict(fail)} else {setverdict(pass)}
+    if(isbound(vl_MyRecord.field1.innerField1)) {setverdict(fail)} else {setverdict(pass)} 
+    if(ispresent(vl_MyRecord.field1)) {setverdict(fail)} else {setverdict(pass)} 
+    
+    vl_MyRecord := { field1 := {innerField1:=true, innerField2:=1 } }
+    if(isbound(vl_MyRecord.field1)) {setverdict(pass)} else {setverdict(fail)}
+    if(isbound(vl_MyRecord.field1.innerField1)) {setverdict(pass)} else {setverdict(fail)}
+    if(isbound(vl_MyRecord.field1.innerField2)) {setverdict(pass)} else {setverdict(fail)}
+  }
+      testcase tc_record_TR_HO72813_ip() runs on templateRec_mycomp {
+      var MyRecord_HO72812 vl_MyRecord := { field1 := {}, field2 := 5 }; 
+      if(ispresent(vl_MyRecord)) {setverdict(pass)} else {setverdict(fail)}
+      if(ispresent(vl_MyRecord.field1)) {setverdict(fail)} else {setverdict(pass)}  //according to ethgry
+      if(ispresent(vl_MyRecord.field2)) {setverdict(pass)} else {setverdict(fail)}  
+    }
+
+    testcase tc_record_TR_HO72813_innerFields() runs on templateRec_mycomp {
+      var MyRecord_HO72812 vl_MyRecord := { field1 := {}, field2 := 5 }; 
+      if(ispresent(vl_MyRecord.field1.innerField1)) {setverdict(fail)} else {setverdict(pass)}
+      if(ispresent(vl_MyRecord.field1.innerField2)) {setverdict(fail)} else {setverdict(pass)}
+    }
+
+    testcase tc_record_TR_HO72813_partlyInitialized() runs on templateRec_mycomp {
+      var MyRecord_HO72812 vl_MyRecord := { field1 := {innerField1:=true}, field2 := 5 };
+      if(ispresent(vl_MyRecord.field1)) {setverdict(pass)} else {setverdict(fail)} ;
+      if(ispresent(vl_MyRecord.field1.innerField1)) {setverdict(pass)} else {setverdict(fail)};
+      if(ispresent(vl_MyRecord.field1.innerField2)) {setverdict(fail)} else {setverdict(pass)} ; //DTE???
+    }
+
+    testcase tc_record_TR_HO72813_omit() runs on templateRec_mycomp {
+      var MyRecord_HO72812 vl_MyRecord := { field1 := {innerField1:=true}, field2 := 5 }    
+      vl_MyRecord.field1 := omit;
+      if(ispresent(vl_MyRecord.field1)) {setverdict(fail)} else {setverdict(pass)}     
+      if(ispresent(vl_MyRecord.field1.innerField1)) {setverdict(fail)} else {setverdict(pass)};
+      if(ispresent(vl_MyRecord.field1.innerField2)) {setverdict(fail)} else {setverdict(pass)} ; //DTE???
+    }
+}
+
+  testcase tc_record_mandatoryField_WithWildcard() runs on templateRec_mycomp {
+    var template MyRec4 vtl_rec:=?
+    if(ispresent(vtl_rec.u)){setverdict(pass)}else {setverdict(fail)};
+    if(ispresent(vtl_rec.i)){setverdict(pass)}else {setverdict(fail)};
+  }
+
+  testcase tc_record_withWildCard1() runs on templateRec_mycomp {
+    var template MyRec2 vtl_rec2;
+    vtl_rec2:={
+      roc:=*
+    }
+    if(ispresent(vtl_rec2)) {setverdict(pass)}else {setverdict(fail)};
+  }
+  testcase tc_record_withWildCard1A() runs on templateRec_mycomp {
+    var template MyRec2 vtl_rec2;
+    vtl_rec2:={
+      roc:=*
+    }  
+    if(ispresent(vtl_rec2.roc)) {setverdict(fail)}else {setverdict(pass)};
+  }
+
+  testcase tc_record_withWildCard1AA() runs on templateRec_mycomp {
+    var template MyRec2 vtl_rec2;
+    vtl_rec2:={
+      roc:=?
+    }  
+    if(ispresent(vtl_rec2.roc)) {setverdict(pass)}else {setverdict(fail)};
+  }
+
+  testcase tc_record_withWildCard1B() runs on templateRec_mycomp {
+    var template MyRec2 vtl_rec2;
+    vtl_rec2:={
+      roc:=*
+    }    
+    if(ispresent(vtl_rec2.roc[0])) {setverdict(fail)}else {setverdict(pass)};
+  }
+
+  testcase tc_record_withWildCard2() runs on templateRec_mycomp {
+    var template MyRec2 vtl_rec2; 
+    vtl_rec2:={
+      roc:={ ?,? }
+    }
+    if(ispresent(vtl_rec2)) {setverdict(pass)}else {setverdict(fail)};
+    if(ispresent(vtl_rec2.roc)) {setverdict(pass)}else {setverdict(fail)};
+    if(ispresent(vtl_rec2.roc[0])){setverdict(pass)}else {setverdict(fail)};
+    if(ispresent(vtl_rec2.roc[1])){setverdict(pass)}else {setverdict(fail)};
+    if(ispresent(vtl_rec2.roc[10])){setverdict(fail)}else {setverdict(pass)};
+  }
+
+  //unbound
+  testcase tc_record_withWildCard2A() runs on templateRec_mycomp {
+    var template MyRec2 vtl_rec2; 
+    vtl_rec2:={
+      roc:={ ?,? }
+    }  
+    if(ispresent(vtl_rec2.roi)){setverdict(fail)}else {setverdict(pass)};
+  }
+  testcase tc_record_withWildCard2B() runs on templateRec_mycomp {
+    var template MyRec2 vtl_rec2; 
+    vtl_rec2:={
+      roc:={ ?,? }
+    }  
+    if(ispresent(vtl_rec2.u)){setverdict(fail)}else {setverdict(pass)};
+  }
+  testcase tc_record_withWildCard2C() runs on templateRec_mycomp {
+    var template MyRec2 vtl_rec2; 
+    vtl_rec2:={
+      roc:={ ?,? }
+    }    
+    if(ispresent(vtl_rec2.r)){setverdict(fail)}else {setverdict(pass)};
+  }
+
+  testcase tc_record_withWildCard3() runs on templateRec_mycomp {
+    var template MyRec2 vtl_rec2; 
+    vtl_rec2:={
+      u := *
+    }
+    if(ispresent(vtl_rec2)) {setverdict(pass)}else {setverdict(fail)};
+  }
+
+  testcase tc_record_withWildCard3A() runs on templateRec_mycomp {
+    var template MyRec2 vtl_rec2; 
+    vtl_rec2:={
+      u := *
+    }
+    if(ispresent(vtl_rec2.roc)){setverdict(fail)}else {setverdict(pass)};
+  }
+
+  testcase tc_record_withWildCard3B() runs on templateRec_mycomp {
+    var template MyRec2 vtl_rec2; 
+    vtl_rec2:={
+      u := *
+    }
+    if(ispresent(vtl_rec2.roi)){setverdict(fail)}else {setverdict(pass)};
+  }
+
+  testcase tc_record_withWildCard3C() runs on templateRec_mycomp {
+    var template MyRec2 vtl_rec2; 
+    vtl_rec2:={
+      u := *
+    }
+    if(ispresent(vtl_rec2.u)){setverdict(fail)}else{setverdict(pass)};
+  }
+
+  testcase tc_record_withWildCard3D() runs on templateRec_mycomp {
+    var template MyRec2 vtl_rec2; 
+    vtl_rec2:={
+      u := ?
+    }
+    if(ispresent(vtl_rec2.u)){setverdict(pass)}else{setverdict(fail)};
+  }
+
+  testcase tc_record_withWildCard4() runs on templateRec_mycomp {
+    var template MyRec2 vtl_rec2; 
+    vtl_rec2:={
+      roc:=omit,
+      u:={i:=?}
+    }
+    if(ispresent(vtl_rec2)) {setverdict(pass)}else {setverdict(fail)};
+    if(ispresent(vtl_rec2.roc)){setverdict(fail)}else {setverdict(pass)};
+  }
+
+  testcase tc_record_withWildCard4A() runs on templateRec_mycomp {
+    var template MyRec2 vtl_rec2; 
+    vtl_rec2:={
+      roc:=omit,
+      u:={i:=?}
+    }  
+    if(ispresent(vtl_rec2.roi)){setverdict(fail)}else {setverdict(pass)};
+  }
+
+  testcase tc_record_withWildCard4B() runs on templateRec_mycomp {
+    var template MyRec2 vtl_rec2; 
+    vtl_rec2:={
+      roc:=omit,
+      u:={i:=?}
+    }  
+    if(ispresent(vtl_rec2.u)){setverdict(pass)}else {setverdict(fail)};
+    if(ispresent(vtl_rec2.u.i)){setverdict(pass)}else {setverdict(fail)};
+  }
+
+  testcase tc_record_withWildCard5() runs on templateRec_mycomp {
+    var template MyRec2 vtl_rec2; 
+    vtl_rec2:={
+      r:= ?
+    }
+    if(ispresent(vtl_rec2)) {setverdict(pass)}else {setverdict(fail)};
+    if(ispresent(vtl_rec2.roc)){setverdict(fail)}else {setverdict(pass)};
+    if(ispresent(vtl_rec2.roi)){setverdict(fail)}else {setverdict(pass)};
+    if(ispresent(vtl_rec2.u)){setverdict(fail)}else {setverdict(pass)};
+    if(ispresent(vtl_rec2.u.i)){setverdict(fail)}else {setverdict(pass)};
+  }
+
+  testcase tc_record_withWildCard5A() runs on templateRec_mycomp {
+    var template MyRec2 vtl_rec2; 
+    vtl_rec2:={
+      r:= ?
+    }
+    if(ispresent(vtl_rec2.r)) {setverdict(pass)}else {setverdict(fail)};
+  }
+
+  testcase tc_record_withWildCard5B_optional() runs on templateRec_mycomp {
+    var template MyRec2 vtl_rec2; 
+    vtl_rec2:={
+      r:= ?
+    }
+    if(ispresent(vtl_rec2.r.i)) {setverdict(fail)}else {setverdict(pass)};
+    if(ispresent(vtl_rec2.r.x)) {setverdict(fail)}else {setverdict(pass)};
+  }
+
+  testcase tc_record_withWildCard5B_mandatory() runs on templateRec_mycomp {
+    var template MyRec2 vtl_rec2; 
+    vtl_rec2:={
+      r:= ?
+    }
+    if(ispresent(vtl_rec2.r.c)) {setverdict(pass)}else {setverdict(fail)};
+  }
+
+  testcase tc_record_withWildCard6() runs on templateRec_mycomp {
+    var template MyRec2 vtl_rec2; 
+    vtl_rec2:={
+      r:= *
+    }
+    if(ispresent(vtl_rec2)) {setverdict(pass)}else {setverdict(fail)};
+    if(ispresent(vtl_rec2.roc)){setverdict(fail)}else {setverdict(pass)};
+    if(ispresent(vtl_rec2.roi)){setverdict(fail)}else {setverdict(pass)};
+    if(ispresent(vtl_rec2.u)){setverdict(fail)}else {setverdict(pass)};
+    if(ispresent(vtl_rec2.u.i)){setverdict(fail)}else {setverdict(pass)};
+  }
+
+  testcase tc_record_withWildCard6A() runs on templateRec_mycomp {
+    var template MyRec2 vtl_rec2; 
+    vtl_rec2:={
+      r:= *
+    }  
+    if(ispresent(vtl_rec2.r)) {setverdict(fail)}else {setverdict(pass)};
+    if(ispresent(vtl_rec2.r.i)) {setverdict(fail)}else {setverdict(pass)};
+    if(ispresent(vtl_rec2.r.x)) {setverdict(fail)}else {setverdict(pass)};
+    if(ispresent(vtl_rec2.r.c)) {setverdict(fail)}else {setverdict(pass)};
+  }
+  
+control {
+ execute(pasu());
+ execute(templateRecSpec());
+ execute(templateRecList());
+ execute(templateRecComp());
+ execute(templateRecOmit());
+ execute(templateRecAny());
+ execute(templateRecAnyorNone());
+ execute(templateRecIfpresent());
+ execute(MTTSM00015947());
+ execute(tc_HM39698());
+ execute(tc_valueof_governor_segfault());
+ execute(tc_HO49372());
+ execute(tc_HO69658());
+ 
+ execute(tc_record_withJoker1());
+ execute(tc_record_withJoker2());
+ execute(tc_record_withJoker3());
+ execute(tc_record_withJoker4());
+ execute(tc_record_withJoker5());
+ execute(tc_record_withJoker6());
+ execute(tc_record_TR_HO72813());
+ execute(tc_record_withWildCard1());
+ execute(tc_record_withWildCard1A()); //pass
+ execute(tc_record_withWildCard1AA());
+ execute(tc_record_withWildCard1B());  
+ execute(tc_record_withWildCard2());
+ execute(tc_record_withWildCard2A());//pass (unbound)
+ execute(tc_record_withWildCard2B());//pass (unbound)
+ execute(tc_record_withWildCard2C());//pass (unbound)
+ execute(tc_record_withWildCard3());
+ execute(tc_record_withWildCard3A());//pass (unbound)
+ execute(tc_record_withWildCard3B());//pass (unbound)
+ execute(tc_record_withWildCard3C());//pass (*)
+ execute(tc_record_withWildCard3D());//pass
+ execute(tc_record_withWildCard4());//pass
+ execute(tc_record_withWildCard4A());
+ execute(tc_record_withWildCard4B()); 
+ execute(tc_record_withWildCard5());//pass
+ execute(tc_record_withWildCard5A());//pass
+ execute(tc_record_withWildCard5A());//pass
+ execute(tc_record_withWildCard5B_optional());//pass
+ execute(tc_record_withWildCard5B_mandatory());//pass
+ execute(tc_record_withWildCard6());//pass
+ execute(tc_record_withWildCard6A());
+ execute(tc_record_TR_HO72813_ip());
+ execute(tc_record_TR_HO72813_innerFields());
+ execute(tc_record_TR_HO72813_partlyInitialized());
+ execute(tc_record_TR_HO72813_omit());
+}
+}
diff --git a/Regression_Test_java/src/TtemplateRecAsn.asn b/Regression_Test_java/src/TtemplateRecAsn.asn
new file mode 100644
index 0000000000000000000000000000000000000000..0e2bfb929cc1cf6e552687b6f85cb4a2a9656730
--- /dev/null
+++ b/Regression_Test_java/src/TtemplateRecAsn.asn
@@ -0,0 +1,22 @@
+--/////////////////////////////////////////////////////////////////////////////
+-- Copyright (c) 2000-2019 Ericsson Telecom AB
+-- All rights reserved. This program and the accompanying materials
+-- are made available under the terms of the Eclipse Public License v2.0
+-- which accompanies this distribution, and is available at
+-- https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+--
+-- Contributors:
+--   Balasko, Jeno
+--   Kovacs, Ferenc
+--
+--/////////////////////////////////////////////////////////////////////////////
+TtemplateRecAsn
+DEFINITIONS IMPLICIT TAGS ::= BEGIN
+IMPORTS ;
+-- Test for HM39698.
+AmbiguousAnyRec ::= SEQUENCE
+{
+  argument ANY OPTIONAL
+}
+END
+
diff --git a/Regression_Test_java/src/TtemplateRecof.ttcn b/Regression_Test_java/src/TtemplateRecof.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..49a1a2262cf82c818cc6bcc897ce3dcbbe2e33db
--- /dev/null
+++ b/Regression_Test_java/src/TtemplateRecof.ttcn
@@ -0,0 +1,682 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Baranyi, Botond
+ *   Delic, Adam
+ *   Forstner, Matyas
+ *   Kovacs, Ferenc
+ *   Raduly, Csaba
+ *   Szabados, Kristof
+ *   Szabo, Janos Zoltan – initial implementation
+ *
+ ******************************************************************************/
+module TtemplateRecof {
+type component mycomp {};
+type record of integer templateRecof_myrecof;
+type record templateRecof_rec {
+ templateRecof_myrecof x1,
+ templateRecof_myrecof x2,
+ templateRecof_myrecof x3 optional };
+template templateRecof_rec templateRecof_tSpec :={ //specific values
+ x1:={1,1},
+ x2:={2,1},
+ x3:={3,1} };
+template templateRecof_rec templateRecof_tList :={ //specific value and value list
+ x1:={1,1},
+ x2:=({2,1},{3,1},{6,1}),
+ x3:={3,1} };
+template templateRecof_rec templateRecof_tComp :={ //specific value and compl. list
+ x1:={1,1},
+ x2:=complement ({2,1},{3,1},{6,1}),
+ x3:={3,1} };
+template templateRecof_rec templateRecof_tOmit :={ //omitting values
+ x1:={1,1},
+ x2:={2,1},
+ x3:=omit } ;
+template templateRecof_rec templateRecof_tAny :={ //specific and any value
+ x1:={1,1},
+ x2:={2,1},
+ x3:=? } ;
+template templateRecof_rec templateRecof_tAnyorNone :={ //specific and AnyorNone value
+ x1:={1,1},
+ x2:={2,1},
+ x3:=* };
+template templateRecof_rec templateRecof_tLength1 :={ //specific value and length (fix)
+ x1:={1,1},
+ x2:={2,1},
+ x3:=* length(3) };
+template templateRecof_rec templateRecof_tLength2 :={ //specific value and length (range)
+ x1:={1,1},
+ x2:={2,1},
+ x3:=? length(2..4) };
+template templateRecof_rec templateRecof_tLength3 :={ //specific value and length (range, infinity)
+ x1:={1,1},
+ x2:={2,1},
+ x3:=? length(2..infinity) };
+template templateRecof_rec templateRecof_tIfpresent :={ // specific value and ifpresent
+ x1:={1,1},
+ x2:={2,1},
+ x3:={3,1} ifpresent };
+template templateRecof_rec templateRecof_tLengthIfp :={ //specific value and length (fix), ifpresent
+ x1:={1,1},
+ x2:={2,1},
+ x3:=? length(3) ifpresent};
+template templateRecof_rec templateRecof_tAnyEl :={ //specific value and any element inside value
+ x1:={1,1},
+ x2:={2,1},
+ x3:={3,?,1} } ;
+template templateRecof_rec templateRecof_tAnyorNoneEl :={ //specific value and Any number of elements or none inside value
+ x1:={1,1},
+ x2:={2,1},
+ x3:={3,*,1} };
+
+template templateRecof_rec aliased_template := templateRecof_tAnyorNoneEl;
+
+testcase templateRecofSpec() runs on mycomp {
+var templateRecof_myrecof temp:={3,1};
+var templateRecof_rec x1,x2;		//specific value
+x1:={ x1:={1,1},  x2:={2,1},  x3:=temp };
+x2:={ x1:={2,1},  x2:={2,1},  x3:=temp };
+//match
+if (match(x1,templateRecof_tSpec)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match
+if (not(match(x2,templateRecof_tSpec))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateRecofList() runs on mycomp {
+var templateRecof_myrecof temp:={3,1};
+var templateRecof_rec x1,x2,x3;		//value list
+x1:={ x1:={1,1},  x2:={6,1},  x3:=temp };
+x2:={ x1:={1,1},  x2:={7,1},  x3:=temp };
+x3:={ x1:={8,1},  x2:={6,1},  x3:=temp };
+//match
+if (match(x1,templateRecof_tList)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: out of list
+if (not(match(x2,templateRecof_tList))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateRecof_tList))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateRecofComp() runs on mycomp {
+var templateRecof_myrecof temp:={3,1};
+var templateRecof_rec x1,x2,x3;		//complemented list
+x1:={ x1:={1,1},  x2:={7,1},  x3:=temp };
+x2:={ x1:={1,1},  x2:={6,1},  x3:=temp };
+x3:={ x1:={2,1},  x2:={7,1},  x3:=temp };
+//match
+if (match(x1,templateRecof_tComp)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: in the list
+if (not(match(x2,templateRecof_tComp))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateRecof_tComp))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateRecofOmit() runs on mycomp {
+var templateRecof_myrecof temp:={3,1};
+var templateRecof_rec x1,x2,x3;		//omitting value
+x1:={ x1:={1,1},  x2:={2,1},  x3:=omit };
+x2:={ x1:={1,1},  x2:={2,1},  x3:=temp };
+x3:={ x1:={2,1},  x2:={2,1},  x3:=omit };
+//match
+if (match(x1,templateRecof_tOmit)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: not omitted
+if (not(match(x2,templateRecof_tOmit))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateRecof_tOmit))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateRecofAny() runs on mycomp {
+var templateRecof_myrecof temp:={3,1};
+var templateRecof_rec x1,x2,x3;		//any value
+x1:={ x1:={1,1},  x2:={2,1},  x3:=temp };
+x2:={ x1:={1,1},  x2:={2,1},  x3:=omit };
+x3:={ x1:={2,1},  x2:={2,1},  x3:=temp };
+//match
+if (match(x1,templateRecof_tAny)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: field omitted
+if (not(match(x2,templateRecof_tAny))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateRecof_tAny))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateRecofAnyorNone() runs on mycomp {
+var templateRecof_myrecof temp:={3,1};
+var templateRecof_rec x1,x2,x3;		//AnyorNone value
+x1:={ x1:={1,1},  x2:={2,1},  x3:=omit };
+x2:={ x1:={1,1},  x2:={2,1},  x3:=temp };
+x3:={ x1:={2,1},  x2:={2,1},  x3:=omit };
+//match: omitted
+if (match(x1,templateRecof_tAnyorNone)) {setverdict(pass);}
+ else {setverdict(fail);}
+//match: value
+if (match(x2,templateRecof_tAnyorNone)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateRecof_tAnyorNone))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateRecofLength1() runs on mycomp {
+var templateRecof_myrecof temp1:={1,2,3};	//length (fix)
+var templateRecof_myrecof temp2:={1,2};
+var templateRecof_rec x1,x2,x3,x4;
+x1:={ x1:={1,1},  x2:={2,1},  x3:=temp1 };
+x2:={ x1:={1,1},  x2:={2,1},  x3:=omit };
+x3:={ x1:={1,1},  x2:={2,1},  x3:=temp2 };
+x4:={ x1:={1,1,1},  x2:={2,1},  x3:=temp1 };
+//match: proper length
+if (match(x1,templateRecof_tLength1)) {setverdict(pass);}
+ else {setverdict(fail);}
+//match: omitted
+if (match(x2,templateRecof_tLength1)) {setverdict(pass);}
+ else {setverdict(fail);}
+// no match: not proper length
+if (not(match(x3,templateRecof_tLength1))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x4,templateRecof_tLength1))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateRecofLength2() runs on mycomp {
+var templateRecof_myrecof temp1:={1,2};	// length (range)
+var templateRecof_myrecof temp2:={1};
+var templateRecof_rec x1,x2,x3;
+x1:={ x1:={1,1},  x2:={2,1},  x3:=temp1 };
+x2:={ x1:={1,1},  x2:={2,1},  x3:=temp2 };
+x3:={ x1:={1},  x2:={2,1},  x3:=temp1 };
+//match
+if (match(x1,templateRecof_tLength2)) {setverdict(pass);}
+ else {setverdict(fail);}
+// no match: not proper length
+if (not(match(x2,templateRecof_tLength2))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateRecof_tLength2))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateRecofLength3() runs on mycomp {
+var templateRecof_myrecof temp1:={1,2};	// length (range, infinity)
+var templateRecof_myrecof temp2:={1};
+var templateRecof_rec x1,x2,x3;
+x1:={ x1:={1,1},  x2:={2,1},  x3:=temp1 };
+x2:={ x1:={1,1},  x2:={2,1},  x3:=temp2 };
+x3:={ x1:={1},  x2:={2,1},  x3:=temp1 };
+//match
+if (match(x1,templateRecof_tLength3)) {setverdict(pass);}
+ else {setverdict(fail);}
+// no match: not proper length
+if (not(match(x2,templateRecof_tLength3))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateRecof_tLength3))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateRecofIfpresent() runs on mycomp {
+var templateRecof_myrecof temp1:={3,1};       //ifpresent
+var templateRecof_myrecof temp2:={4,1};
+var templateRecof_rec x1,x2,x3,x4;
+x1:={ x1:={1,1},  x2:={2,1},  x3:=temp1 };
+x2:={ x1:={1,1},  x2:={2,1},  x3:=omit };
+x3:={ x1:={1,1},  x2:={2,1},  x3:=temp2 };
+x4:={ x1:={2,1},  x2:={2,1},  x3:=omit };
+//match: present and match
+if (match(x1,templateRecof_tIfpresent)) {setverdict(pass);}
+ else {setverdict(fail);}
+//match: not present
+if (match(x2,templateRecof_tIfpresent)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: present and not match
+if (not(match(x3,templateRecof_tIfpresent))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x4,templateRecof_tIfpresent))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateRecofLengthIfp() runs on mycomp {
+var templateRecof_myrecof temp1:={1,2,3};     //length (fix), ifpresent
+var templateRecof_myrecof temp2:={1,2};
+var templateRecof_rec x1,x2,x3,x4;
+x1:={ x1:={1,1},  x2:={2,1},  x3:=temp1 };
+x2:={ x1:={1,1},  x2:={2,1},  x3:=omit };
+x3:={ x1:={1,1},  x2:={2,1},  x3:=temp2 };
+x4:={ x1:={1,1,1},  x2:={2,1},  x3:=temp1 };
+//match: proper length
+if (match(x1,templateRecof_tLengthIfp)) {setverdict(pass);}
+ else {setverdict(fail);}
+//match: omitted
+if (match(x2,templateRecof_tLengthIfp)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: not proper length
+if (not(match(x3,templateRecof_tLengthIfp))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x4,templateRecof_tLengthIfp))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateRecofAnyEl() runs on mycomp {
+var templateRecof_myrecof temp1:={3,15,1};    // any element
+var templateRecof_myrecof temp2:={3,1};
+var templateRecof_myrecof temp3:={3,1,4,1};
+var templateRecof_myrecof temp4:={3,1,2};
+var templateRecof_rec x1,x2,x3,x4,x5;
+x1:={ x1:={1,1},  x2:={2,1},  x3:=temp1 };
+x2:={ x1:={1,1},  x2:={2,1},  x3:=temp2 };
+x3:={ x1:={1,1},  x2:={2,1},  x3:=temp3 };
+x4:={ x1:={1,1},  x2:={2,1},  x3:=temp4 };
+x5:={ x1:={1},  x2:={2,1},  x3:=temp1 };
+//match
+if (match(x1,templateRecof_tAnyEl)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: no element
+if (not(match(x2,templateRecof_tAnyEl))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: two element
+if (not(match(x3,templateRecof_tAnyEl))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: wrong element
+if (not(match(x4,templateRecof_tAnyEl))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x5,templateRecof_tAnyEl))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateRecofAnyorNoneEl() runs on mycomp {
+var templateRecof_myrecof temp1:={3,1};       //Any number of elements or none
+var templateRecof_myrecof temp2:={3,5,1};
+var templateRecof_myrecof temp3:={3,2,5,1};
+var templateRecof_myrecof temp4:={4,2,1};
+var templateRecof_myrecof temp5:={3,5,1,2,1};
+var templateRecof_myrecof temp6:={3,5,1,2};
+var templateRecof_rec x1,x2,x3,x4,x5,x6,x7;
+x1:={ x1:={1,1},  x2:={2,1},  x3:=temp1 };
+x2:={ x1:={1,1},  x2:={2,1},  x3:=temp2 };
+x3:={ x1:={1,1},  x2:={2,1},  x3:=temp3 };
+x4:={ x1:={1,1},  x2:={2,1},  x3:=temp4 };
+x5:={ x1:={1,2},  x2:={2,1},  x3:=temp3 };
+x6:={ x1:={1,1},  x2:={2,1},  x3:=temp5 };
+x7:={ x1:={1,1},  x2:={2,1},  x3:=temp6 };
+//match: no element
+if (match(x1,templateRecof_tAnyorNoneEl)) {setverdict(pass);}
+ else {setverdict(fail);}
+//match: one element
+if (match(x2,templateRecof_tAnyorNoneEl)) {setverdict(pass);}
+ else {setverdict(fail);}
+//match: two element
+if (match(x3,templateRecof_tAnyorNoneEl)) {setverdict(pass);}
+ else {setverdict(fail);}
+//see if the algorithm goes till the end
+if (match(x6,templateRecof_tAnyorNoneEl)) {setverdict(pass);}
+ else {setverdict(fail);}
+  //no match: other element
+if (not(match(x4,templateRecof_tAnyorNoneEl))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x5,templateRecof_tAnyorNoneEl))) {setverdict(pass);}
+ else {setverdict(fail);}
+//see if the algorithm goes till the end
+if (not(match(x7,templateRecof_tAnyorNoneEl))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+ testcase templateRecofPermutation() runs on mycomp {
+   template templateRecof_rec t1 := {
+     {1,1},
+     {permutation(1,2,3)},
+     {3,1}
+   };
+   template templateRecof_rec t2 := {
+     {1,1},
+     {permutation(1,2,3), 4},
+     {3,1}
+   };
+   template templateRecof_rec t3 := {
+     {1,1},
+     {permutation(1,2,3,*), 4},
+     {3,1}
+   };
+   template templateRecof_rec t4 := {
+     {1,1},
+     {permutation(1,2,?,*), 4},
+     {3,1}
+   };
+   template templateRecof_rec t5 := {
+     {1,1},
+     {permutation(1,2,?), 4},
+     {3,1}
+   };
+   template templateRecof_rec t6 := {
+     {1,1},
+     {permutation(1,2,?,?), 4},
+     {3,1}
+   };
+   template templateRecof_rec t7 := {
+     {1,1},
+     {permutation(?,1,2,?), 4},
+     {3,1}
+   };
+   template templateRecof_rec t8 := {
+     {1,1},
+     {permutation(8,1,2,?), 4},
+     {3,1}
+   };
+   template templateRecof_rec t9 := {
+     {1,1},
+     {permutation(1,*,2,3,*), 4},
+     {3,1}
+   };
+   template templateRecof_rec t10 := {
+     {1,1},
+     {*, permutation(2,3,*), *},
+     {3,1}
+   };
+   template templateRecof_rec t11 := {
+     {1,1},
+     {*, permutation(2,3), *},
+     {3,1}
+   };
+   template templateRecof_rec t12 := {
+     {1,1},
+     {*, permutation(2,3,*), *, 4},
+     {3,1}
+   };
+   template templateRecof_rec t13 := {
+     {1,1},
+     {*, permutation(2,3,*), *, 4, *},
+     {3,1}
+   };
+   template templateRecof_rec t14 := {
+     {1,1},
+     {*, permutation(2,?), *, 4, *},
+     {3,1}
+   };
+   template templateRecof_rec t15 := {
+     {1,1},
+     {*, permutation(2,?), ?, 4, *},
+     {3,1}
+   };
+   template templateRecof_rec t16 := {
+     {1,1},
+     {1, *, permutation(3,?), ?, 4, *},
+     {3,1}
+   };
+   template templateRecof_rec t17 := {
+     {1,1},
+     {1, *, permutation(3,?), ?, *},
+     {3,1}
+   };
+   template templateRecof_rec t18 := {
+     {1,1},
+     {permutation(3,?), permutation(4, *)},
+     {3,1}
+   };
+   template templateRecof_rec t19 := {
+     {1,1},
+     {?, permutation(3,?), permutation(4, *)},
+     {3,1}
+   };
+   template templateRecof_rec t20 := {
+     {1,1},
+     {permutation(2,1), permutation(4,3)},
+     {3,1}
+   };
+   var templateRecof_rec v1 := {x1:={1,1}, x2:={1,2,3}, x3:={3,1}};
+   var templateRecof_rec v2 := {x1:={1,1}, x2:={2,3,1}, x3:={3,1}};
+   var templateRecof_rec v3 := {x1:={1,1}, x2:={1,2,3,4}, x3:={3,1}};
+
+   if(match(v1,t1)) {setverdict(pass);} else {setverdict(fail);}
+   if(match(v2,t1)) {setverdict(pass);} else {setverdict(fail);}
+   if(not match(v3,t1)) {setverdict(pass);} else {setverdict(fail);}
+   if(match(v3,t2)) {setverdict(pass);} else {setverdict(fail);}
+   if(match(v3,t3)) {setverdict(pass);} else {setverdict(fail);}
+   if(match(v3,t4)) {setverdict(pass);} else {setverdict(fail);}
+   if(match(v3,t5)) {setverdict(pass);} else {setverdict(fail);}
+   if(not match(v3,t6)) {setverdict(pass);} else {setverdict(fail);}
+   if(not match(v3,t7)) {setverdict(pass);} else {setverdict(fail);}
+   if(not match(v3,t8)) {setverdict(pass);} else {setverdict(fail);}
+   if(match(v3,t9)) {setverdict(pass);} else {setverdict(fail);}
+   if(match(v3,t10)) {setverdict(pass);} else {setverdict(fail);}
+   if(match(v3,t11)) {setverdict(pass);} else {setverdict(fail);}
+   if(match(v3,t12)) {setverdict(pass);} else {setverdict(fail);}
+   if(match(v3,t13)) {setverdict(pass);} else {setverdict(fail);}
+   if(match(v3,t14)) {setverdict(pass);} else {setverdict(fail);}
+   if(match(v3,t15)) {setverdict(pass);} else {setverdict(fail);}
+   if(not match(v3,t16)) {setverdict(pass);} else {setverdict(fail);}
+   if(match(v3,t17)) {setverdict(pass);} else {setverdict(fail);}
+   if(not match(v3,t18)) {setverdict(pass);} else {setverdict(fail);}
+   if(match(v3,t19)) {setverdict(pass);} else {setverdict(fail);}
+   if(match(v3,t20)) {setverdict(pass);} else {setverdict(fail);}
+ }
+
+ type record r_A { charstring f1 }
+ type record of r_A ro_B
+ testcase HK38721() runs on mycomp {
+   var ro_B v_B := { { "" } }
+   // 3.0.4 was unable to compile the generated code for this.
+   log(match("", v_B[0].f1))
+   setverdict(pass)
+ }
+
+testcase templateRecofIsvalue() runs on mycomp {
+  var template templateRecof_myrecof tpl1;
+  var template templateRecof_myrecof tpl2 := { 0,1,2,3,4,5,6,7,8,9 }
+  template templateRecof_myrecof tpl3 := { *,?,*,?,*,?,*,?,*,? };
+  template templateRecof_myrecof tpl4 := { (0,1,2,3),*,?,*,?,*,?,*,?,42 };
+
+  if ( isvalue(tpl1) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(tpl2) ) { setverdict(pass); } else { setverdict(fail); }
+  if ( isvalue(tpl3) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(tpl4) ) { setverdict(fail); } else { setverdict(pass); };
+}
+
+type record of charstring ROC;
+type record of integer  ROI;
+type record MyRecord1 {
+  integer       i optional,
+  float         x optional,
+  charstring    c
+}
+
+type union MyUnion1 {
+  ROC roc,
+  integer i,
+  ROI roi,
+  MyRecord1 r
+}
+
+type record MyRec2 {
+  ROC roc optional,
+  ROI roi optional,
+  MyUnion1 u optional, 
+  MyRecord1 r optional
+}
+
+type record of MyRec2 MyRecOf
+
+template MyRecOf t_recOf1 := (
+  { [0]:= { roc:=omit }, [1]:= {roc:=omit} },
+  { [0]:= { roc:=omit }, [1]:= {roc:={"one", "two"}} },
+  { [0]:= { roc:=omit }, [2]:= {u:={i:=5}} }
+)
+
+testcase tc_recordOf_template1() runs on mycomp {
+  var template MyRecOf vtl_recOf:= t_recOf1;
+  if(isbound( vtl_recOf )) {setverdict(pass)}else {setverdict(fail)};
+  if(isbound( t_recOf1 )) {setverdict(pass)}else {setverdict(fail)};
+}
+
+testcase tc_recordOf_template2() runs on mycomp {
+  var template MyRecOf vtl_recOf:= t_recOf1;
+  if(isbound( vtl_recOf[0] )) {setverdict(fail)}else {setverdict(pass)};
+  if(isbound( vtl_recOf[1] )) {setverdict(fail)}else {setverdict(pass)};
+  if(isbound( vtl_recOf[2] )) {setverdict(fail)}else {setverdict(pass)}; 
+} 
+
+testcase tc_recordOf_template1_ispresent() runs on mycomp {
+  var template MyRecOf vtl_recOf:= t_recOf1;
+  if(ispresent( vtl_recOf )) {setverdict(pass)}else {setverdict(fail)};
+  if(ispresent( t_recOf1 )) {setverdict(pass)}else {setverdict(fail)};
+}
+
+testcase tc_recordOf_template2_ispresent() runs on mycomp {
+  var template MyRecOf vtl_recOf:= t_recOf1;
+  if(ispresent( vtl_recOf[0] )) {setverdict(fail)}else {setverdict(pass)};
+  if(ispresent( vtl_recOf[1] )) {setverdict(fail)}else {setverdict(pass)};
+  if(ispresent( vtl_recOf[2] )) {setverdict(fail)}else {setverdict(pass)}; 
+}
+
+testcase tc_recordOf_template_unbound_elements_lengthof_sizeof() runs on mycomp {
+  var ROI temp;
+  var template ROI ttemp;
+  temp[99] := 0;
+  ttemp[99] := 0;
+  if ((sizeof(temp)==100) and (sizeof(temp)==sizeof(ttemp))) { setverdict(pass); } else { setverdict(fail); }
+  if ((lengthof(temp)==100) and (lengthof(temp)==lengthof(ttemp))) { setverdict(pass); } else { setverdict(fail); }
+}
+
+type record Block {}
+
+type record of Block Blocks;
+
+type record Request {
+  Blocks blocks optional
+}
+
+testcase HO91743() runs on mycomp {
+  var template Request vt_ReqO := { blocks := omit };
+  var template Request vt_ReqQ := { blocks := ? };
+  var template Request vt_ReqS := { blocks := * };
+  var template Block vt_b := {}
+
+  vt_ReqQ.blocks[3] := vt_b;
+  vt_ReqS.blocks[3] := vt_b;
+  // Indexing a template record-of which was omit used to DTE
+  // (in contrast to any-value and any-or-omit, which would create the record-of).
+  // HO91743 unifies the behaviour (record-of is created when indexing omit).
+  vt_ReqO.blocks[3] := vt_b;
+
+  if (lengthof(vt_ReqO.blocks) == 4) { setverdict(pass); } else { setverdict(fail); }
+  if (sizeof  (vt_ReqO.blocks) == 4) { setverdict(pass); } else { setverdict(fail); }
+
+  if (lengthof(vt_ReqQ.blocks) == 4) { setverdict(pass); } else { setverdict(fail); }
+  if (sizeof  (vt_ReqQ.blocks) == 4) { setverdict(pass); } else { setverdict(fail); }
+
+  if (lengthof(vt_ReqS.blocks) == 4) { setverdict(pass); } else { setverdict(fail); }
+  if (sizeof  (vt_ReqS.blocks) == 4) { setverdict(pass); } else { setverdict(fail); }
+}
+
+//=================================================================
+// isbound tests for ROI
+function f_isbound4ROI_getLen(template ROI pl_roi) return integer {
+  var integer i := 0;
+  while(isbound(pl_roi[i])){
+    i:=i+1;
+  }
+  return i; 
+}
+
+template ROI t_il0:={};
+template ROI t_il1:={0};
+template ROI t_il2:={0,*};
+template ROI t_il3:={0,?};
+template ROI t_il4:={0,1,2,3,?};
+
+function f(template ROI roi,integer expected){
+  var integer index:= f_isbound4ROI_getLen(roi);
+  if(index==expected) {
+    setverdict(pass,"Result:", index);
+  }else {
+    setverdict(fail,"Result:",index," expected:", expected);
+  } 
+}
+
+testcase tc_isbound4ROI0() runs on mycomp {
+  f(t_il0,0);
+}
+
+testcase tc_isbound4ROI1() runs on mycomp {
+  f(t_il1,1);
+}
+
+testcase tc_isbound4ROI2() runs on mycomp {
+  f(t_il2,2);
+}
+
+testcase tc_isbound4ROI3() runs on mycomp {
+  f(t_il3,2);
+}
+
+testcase tc_isbound4ROI4() runs on mycomp {
+  f(t_il4,5);
+}
+
+template integer tpard(template integer i) := i;
+
+testcase tc_HU56425() runs on mycomp {
+  template integer t_i := tpard(3);
+  template templateRecof_myrecof t_list := { tpard(t_i) };
+  // HU56425 refers to a code generation error (which caused a C++ compilation error), but let's check the resulting template anyway
+  template templateRecof_myrecof t_list_exp := { 3 };
+  if (log2str(t_list) == log2str(t_list_exp)) { setverdict(pass); }
+  else { setverdict(fail); }
+}
+
+
+control {
+ execute(templateRecofSpec());
+ execute(templateRecofList());
+ execute(templateRecofComp());
+ execute(templateRecofOmit());
+ execute(templateRecofAny());
+ execute(templateRecofAnyorNone());
+ execute(templateRecofLength1());
+ execute(templateRecofLength2());
+ execute(templateRecofLength3());
+ execute(templateRecofIfpresent());
+ execute(templateRecofLengthIfp());
+ execute(templateRecofAnyEl());
+ execute(templateRecofAnyorNoneEl());
+ execute(templateRecofPermutation());
+ execute(HK38721());
+ execute(templateRecofIsvalue());
+ 
+ execute(tc_recordOf_template1());
+ execute(tc_recordOf_template2());
+ execute(tc_recordOf_template1_ispresent());
+ execute(tc_recordOf_template2_ispresent());
+
+ execute(tc_recordOf_template_unbound_elements_lengthof_sizeof());
+ execute(HO91743());
+ execute(tc_isbound4ROI0());
+ execute(tc_isbound4ROI1());
+ execute(tc_isbound4ROI2());
+ execute(tc_isbound4ROI3());
+ execute(tc_isbound4ROI4());
+
+}
+}
diff --git a/Regression_Test_java/src/TtemplateSet.ttcn b/Regression_Test_java/src/TtemplateSet.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..ca5a9e5f242ef83b5a3be48a6941258bb671cdcc
--- /dev/null
+++ b/Regression_Test_java/src/TtemplateSet.ttcn
@@ -0,0 +1,183 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Raduly, Csaba
+ *   Szabados, Kristof
+ *   Szabo, Janos Zoltan – initial implementation
+ *
+ ******************************************************************************/
+module TtemplateSet {
+type component templateSet_mycomp {};
+type set templateSet_myset {
+ integer f1,
+ float f2 };
+type record templateSet_rec {
+ templateSet_myset x1,
+ templateSet_myset x2,
+ templateSet_myset x3 optional };
+template templateSet_rec templateSet_tSpec :={ //specific values
+ x1:={f1:=1,f2:=1.2},
+ x2:={f1:=2,f2:=1.2},
+ x3:={f1:=3,f2:=1.2} };
+template templateSet_rec templateSet_tList :={ //specific value and value list
+ x1:={f2:=1.2,f1:=1},
+ x2:=({f1:=2,f2:=1.2},{f1:=3,f2:=1.2},{f1:=6,f2:=1.2}),
+ x3:={f1:=3,f2:=1.2} };
+template templateSet_rec templateSet_tComp :={ //specific value and compl. list
+ x1:={f1:=1,f2:=1.2},
+ x2:=complement ({f1:=2,f2:=1.2},{f1:=3,f2:=1.2},{f1:=6,f2:=1.2}),
+ x3:={f1:=3,f2:=1.2} };
+template templateSet_rec templateSet_tOmit :={ //omitting values
+ x1:={f1:=1,f2:=1.2},
+ x2:={f1:=2,f2:=1.2},
+ x3:=omit } ;
+template templateSet_rec templateSet_tAny :={ //specific and any value
+ x1:={f1:=1,f2:=1.2},
+ x2:={f1:=2,f2:=1.2},
+ x3:=? } ;
+template templateSet_rec templateSet_tAnyorNone :={ //specific and AnyorNone value
+ x1:={f1:=1,f2:=1.2},
+ x2:={f1:=2,f2:=1.2},
+ x3:=* };
+//template templateSet_rec templateSet_tIfpresent :={ //specific value and ifpresent
+// x1:={f1:=1,f2:=1.2},
+// x2:={f1:=2,f2:=1.2},
+// x3:={f1:=3,f2:=1.2} ifpresent };
+
+testcase templateSetSpec() runs on templateSet_mycomp {
+var templateSet_myset temp:={f1:=3,f2:=1.2};
+var templateSet_rec x1,x2;		//specific value
+x1:={ x1:={f1:=1,f2:=1.2},  x2:={f1:=2,f2:=1.2},  x3:=temp };
+x2:={ x1:={f1:=2,f2:=1.2},  x2:={f1:=2,f2:=1.2},  x3:=temp };
+//match
+if (match(x1,templateSet_tSpec)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match
+if (not(match(x2,templateSet_tSpec))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateSetList() runs on templateSet_mycomp {
+var templateSet_myset temp:={f1:=3,f2:=1.2};
+var templateSet_rec x1,x2,x3;		//value list
+x1:={ x1:={f1:=1,f2:=1.2},  x2:={f1:=6,f2:=1.2},  x3:=temp };
+x2:={ x1:={f1:=1,f2:=1.2},  x2:={f1:=7,f2:=1.2},  x3:=temp };
+x3:={ x1:={f1:=8,f2:=1.2},  x2:={f1:=6,f2:=1.2},  x3:=temp };
+//match
+if (match(x1,templateSet_tList)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: out of list
+if (not(match(x2,templateSet_tList))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateSet_tList))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateSetComp() runs on templateSet_mycomp {
+var templateSet_myset temp:={f1:=3,f2:=1.2};
+var templateSet_rec x1,x2,x3;		//complemented list
+x1:={ x1:={f1:=1,f2:=1.2},  x2:={f1:=7,f2:=1.2},  x3:=temp };
+x2:={ x1:={f1:=1,f2:=1.2},  x2:={f1:=6,f2:=1.2},  x3:=temp };
+x3:={ x1:={f1:=2,f2:=1.2},  x2:={f1:=7,f2:=1.2},  x3:=temp };
+//match
+if (match(x1,templateSet_tComp)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: in the list
+if (not(match(x2,templateSet_tComp))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateSet_tComp))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateSetOmit() runs on templateSet_mycomp {
+var templateSet_myset temp:={f1:=3,f2:=1.2};
+var templateSet_rec x1,x2,x3;		//omitting value
+x1:={ x1:={f1:=1,f2:=1.2},  x2:={f1:=2,f2:=1.2},  x3:=omit };
+x2:={ x1:={f1:=1,f2:=1.2},  x2:={f1:=2,f2:=1.2},  x3:=temp };
+x3:={ x1:={f1:=2,f2:=1.2},  x2:={f1:=2,f2:=1.2},  x3:=omit };
+//match
+if (match(x1,templateSet_tOmit)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: not omitted
+if (not(match(x2,templateSet_tOmit))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateSet_tOmit))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateSetAny() runs on templateSet_mycomp {
+var templateSet_myset temp:={f1:=3,f2:=1.2};
+var templateSet_rec x1,x2,x3;		//any value
+x1:={ x1:={f1:=1,f2:=1.2},  x2:={f1:=2,f2:=1.2},  x3:=temp };
+x2:={ x1:={f1:=1,f2:=1.2},  x2:={f1:=2,f2:=1.2},  x3:=omit };
+x3:={ x1:={f1:=2,f2:=1.2},  x2:={f1:=2,f2:=1.2},  x3:=temp };
+//match
+if (match(x1,templateSet_tAny)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: field omitted
+if (not(match(x2,templateSet_tAny))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateSet_tAny))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateSetAnyorNone() runs on templateSet_mycomp {
+var templateSet_myset temp:={f1:=3,f2:=1.2};
+var templateSet_rec x1,x2,x3;		//AnyorNone value
+x1:={ x1:={f1:=1,f2:=1.2},  x2:={f1:=2,f2:=1.2},  x3:=omit };
+x2:={ x1:={f1:=1,f2:=1.2},  x2:={f1:=2,f2:=1.2},  x3:=temp };
+x3:={ x1:={f1:=2,f2:=1.2},  x2:={f1:=2,f2:=1.2},  x3:=omit };
+//match: omitted
+if (match(x1,templateSet_tAnyorNone)) {setverdict(pass);}
+ else {setverdict(fail);}
+//match: value
+if (match(x2,templateSet_tAnyorNone)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateSet_tAnyorNone))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+//testcase templateSetIfpresent() runs on templateInt_mycomp {
+//var templateSet_myset temp1:={f1:=3,f2:=1.2};	//ifpresent
+//var templateSet_myset temp2:={f1:=4,f2:=1.2};
+//var templateSet_rec x1,x2,x3,x4;
+//x1:={ x1:={f1:=1,f2:=1.2},  x2:={f1:=2,f2:=1.2},  x3:=temp1 };
+//x2:={ x1:={f1:=1,f2:=1.2},  x2:={f1:=2,f2:=1.2},  x3:=omit };
+//x3:={ x1:={f1:=1,f2:=1.2},  x2:={f1:=2,f2:=1.2},  x3:=temp2 };
+//x4:={ x1:={f1:=2,f2:=1.2},  x2:={f1:=2,f2:=1.2},  x3:=omit };
+//match: present and match
+//if (match(x1,templateSet_tIfpresent)) {setverdict(pass);}
+// else {setverdict(fail);}
+//match: not present
+//if (match(x2,templateSet_tIfpresent)) {setverdict(pass);}
+// else {setverdict(fail);}
+//no match: present and not match
+//if (not(match(x3,templateSet_tIfpresent))) {setverdict(pass);}
+// else {setverdict(fail);}
+//no match: other field
+//if (not(match(x4,templateSet_tIfpresent))) {setverdict(pass);}
+// else {setverdict(fail);}
+//}
+
+control {
+ execute(templateSetSpec());
+ execute(templateSetList());
+ execute(templateSetComp());
+ execute(templateSetOmit());
+ execute(templateSetAny());
+ execute(templateSetAnyorNone());
+// execute(templateSetIfpresent());
+
+}
+}
diff --git a/Regression_Test_java/src/TtemplateSetof.ttcn b/Regression_Test_java/src/TtemplateSetof.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..a63a1371129071cca5b24741e1d2e63fbf3d6223
--- /dev/null
+++ b/Regression_Test_java/src/TtemplateSetof.ttcn
@@ -0,0 +1,439 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Koppany, Csaba
+ *   Raduly, Csaba
+ *   Szabados, Kristof
+ *   Szabo, Janos Zoltan – initial implementation
+ *
+ ******************************************************************************/
+module TtemplateSetof {
+type component templateSetof_mycomp {};
+type set of integer templateSetof_mysetof;
+type record templateSetof_rec {
+ templateSetof_mysetof x1,
+ templateSetof_mysetof x2,
+ templateSetof_mysetof x3 optional };
+template templateSetof_rec templateSetof_tSpec :={ //specific values
+ x1:={1,1},
+ x2:={2,1},
+ x3:={3,1} };
+template templateSetof_rec templateSetof_tList :={ //specific value and value list
+ x1:={1,1},
+ x2:=({2,1},{3,1},{6,1}),
+ x3:={3,1} };
+template templateSetof_rec templateSetof_tComp :={ //specific value and compl. list
+ x1:={1,1},
+ x2:=complement ({2,1},{3,1},{6,1}),
+ x3:={3,1} };
+template templateSetof_rec templateSetof_tOmit :={ //omitting values
+ x1:={1,1},
+ x2:={2,1},
+ x3:=omit } ;
+template templateSetof_rec templateSetof_tAny :={ //specific and any value
+ x1:={1,1},
+ x2:={2,1},
+ x3:=? } ;
+template templateSetof_rec templateSetof_tAnyorNone :={ //specific and AnyorNone value
+ x1:={1,1},
+ x2:={2,1},
+ x3:=* };
+template templateSetof_rec templateSetof_tLength1 :={ //specific value and length (fix)
+ x1:={1,1},
+ x2:={2,1},
+ x3:=* length(3) };
+template templateSetof_rec templateSetof_tLength2 :={ //specific value and length (range)
+ x1:={1,1},
+ x2:={2,1},
+ x3:=? length(2..4) };
+template templateSetof_rec templateSetof_tLength3 :={ //specific value and length (range, infinity)
+ x1:={1,1},
+ x2:={2,1},
+ x3:=? length(2..infinity) };
+//template templateSetof_rec templateSetof_tSuperset :={ //specific value and superset
+// x1:={1,1},
+// x2:={2,1},
+// x3:=? superset (1,4) };
+//template templateSetof_rec templateSetof_tSubset :={ //specific value and subset
+// x1:={1,1},
+// x2:={2,1},
+// x3:=? subset (1,2,3,4) };
+template templateSetof_rec templateSetof_tIfpresent :={ //specific value and ifpresent
+ x1:={1,1},
+ x2:={2,1},
+ x3:={3,1} ifpresent };
+template templateSetof_rec templateSetof_tLengthIfp :={ //specific value and length (fix), ifpresent
+ x1:={1,1},
+ x2:={2,1},
+ x3:=? length(3) ifpresent};
+template templateSetof_rec templateSetof_tAnyEl :={ //specific value and any element inside value
+ x1:={1,1},
+ x2:={2,1},
+ x3:={3,?,1} } ;
+template templateSetof_rec templateSetof_tAnyorNoneEl :={ //specific value and Any number of elements or none inside value
+ x1:={1,1},
+ x2:={2,1},
+ x3:={3,*,1} };
+
+testcase templateSetofSpec() runs on templateSetof_mycomp {
+var templateSetof_mysetof temp:={3,1};
+var templateSetof_rec x1,x2,x3;		//specific value
+x1:={ x1:={1,1},  x2:={2,1},  x3:=temp };
+x2:={ x1:={1,1},  x2:={1,2},  x3:=temp }; // other order
+x3:={ x1:={2,1},  x2:={2,1},  x3:=temp };
+//match
+if (match(x1,templateSetof_tSpec)) {setverdict(pass);}
+ else {setverdict(fail);}
+//match: other order
+if (match(x2,templateSetof_tSpec)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match
+if (not(match(x3,templateSetof_tSpec))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateSetofList() runs on templateSetof_mycomp {
+var templateSetof_mysetof temp:={3,1};
+var templateSetof_rec x1,x2,x3;		//value list
+x1:={ x1:={1,1},  x2:={6,1},  x3:=temp };
+x2:={ x1:={1,1},  x2:={7,1},  x3:=temp };
+x3:={ x1:={8,1},  x2:={6,1},  x3:=temp };
+//match
+if (match(x1,templateSetof_tList)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: out of list
+if (not(match(x2,templateSetof_tList))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateSetof_tList))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateSetofComp() runs on templateSetof_mycomp {
+var templateSetof_mysetof temp:={3,1};
+var templateSetof_rec x1,x2,x3;		//complemented list
+x1:={ x1:={1,1},  x2:={7,1},  x3:=temp };
+x2:={ x1:={1,1},  x2:={6,1},  x3:=temp };
+x3:={ x1:={2,1},  x2:={7,1},  x3:=temp };
+//match
+if (match(x1,templateSetof_tComp)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: in the list
+if (not(match(x2,templateSetof_tComp))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateSetof_tComp))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateSetofOmit() runs on templateSetof_mycomp {
+var templateSetof_mysetof temp:={3,1};
+var templateSetof_rec x1,x2,x3;		//omitting value
+x1:={ x1:={1,1},  x2:={2,1},  x3:=omit };
+x2:={ x1:={1,1},  x2:={2,1},  x3:=temp };
+x3:={ x1:={2,1},  x2:={2,1},  x3:=omit };
+//match
+if (match(x1,templateSetof_tOmit)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: not omitted
+if (not(match(x2,templateSetof_tOmit))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateSetof_tOmit))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateSetofAny() runs on templateSetof_mycomp {
+var templateSetof_mysetof temp:={3,1};
+var templateSetof_rec x1,x2,x3;		//any value
+x1:={ x1:={1,1},  x2:={2,1},  x3:=temp };
+x2:={ x1:={1,1},  x2:={2,1},  x3:=omit };
+x3:={ x1:={2,1},  x2:={2,1},  x3:=temp };
+//match
+if (match(x1,templateSetof_tAny)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: field omitted
+if (not(match(x2,templateSetof_tAny))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateSetof_tAny))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateSetofAnyorNone() runs on templateSetof_mycomp {
+var templateSetof_mysetof temp:={3,1};
+var templateSetof_rec x1,x2,x3;		//AnyorNone value
+x1:={ x1:={1,1},  x2:={2,1},  x3:=omit };
+x2:={ x1:={1,1},  x2:={2,1},  x3:=temp };
+x3:={ x1:={2,1},  x2:={2,1},  x3:=omit };
+//match: omitted
+if (match(x1,templateSetof_tAnyorNone)) {setverdict(pass);}
+ else {setverdict(fail);}
+//match: value
+if (match(x2,templateSetof_tAnyorNone)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateSetof_tAnyorNone))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateSetofLength1() runs on templateSetof_mycomp {
+var templateSetof_mysetof temp1:={1,2,3};	// length (fix)
+var templateSetof_mysetof temp2:={1,2};
+var templateSetof_rec x1,x2,x3,x4;
+x1:={ x1:={1,1},  x2:={2,1},  x3:=temp1 };
+x2:={ x1:={1,1},  x2:={2,1},  x3:=omit };
+x3:={ x1:={1,1},  x2:={2,1},  x3:=temp2 };
+x4:={ x1:={1,1,1},  x2:={2,1},  x3:=temp1 };
+//match: proper size
+if (match(x1,templateSetof_tLength1)) {setverdict(pass);}
+ else {setverdict(fail);}
+//match: omitted
+if (match(x2,templateSetof_tLength1)) {setverdict(pass);}
+ else {setverdict(fail);}
+// no match: not proper length
+if (not(match(x3,templateSetof_tLength1))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x4,templateSetof_tLength1))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateSetofLength2() runs on templateSetof_mycomp {
+var templateSetof_mysetof temp1:={1,2};	// length (range)
+var templateSetof_mysetof temp2:={1};
+var templateSetof_rec x1,x2,x3;
+x1:={ x1:={1,1},  x2:={2,1},  x3:=temp1 };
+x2:={ x1:={1,1},  x2:={2,1},  x3:=temp2 };
+x3:={ x1:={1},  x2:={2,1},  x3:=temp1 };
+//match
+if (match(x1,templateSetof_tLength2)) {setverdict(pass);}
+ else {setverdict(fail);}
+// no match: not proper length
+if (not(match(x2,templateSetof_tLength2))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateSetof_tLength2))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateSetofLength3() runs on templateSetof_mycomp {
+var templateSetof_mysetof temp1:={1,2};	// length (range, infinity)
+var templateSetof_mysetof temp2:={1};
+var templateSetof_rec x1,x2,x3;
+x1:={ x1:={1,1},  x2:={2,1},  x3:=temp1 };
+x2:={ x1:={1,1},  x2:={2,1},  x3:=temp2 };
+x3:={ x1:={1},  x2:={2,1},  x3:=temp1 };
+//match
+if (match(x1,templateSetof_tLength3)) {setverdict(pass);}
+ else {setverdict(fail);}
+// no match: not proper length
+if (not(match(x2,templateSetof_tLength3))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateSetof_tLength3))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+//testcase templateSetofSuperset() runs on templateSetof_mycomp {
+//var templateSetof_mysetof temp1:={1,4};	// superset
+//var templateSetof_mysetof temp2:={2,1,4};
+//var templateSetof_mysetof temp3:={1};
+//var templateSetof_rec x1,x2,x3,x4;
+//x1:={ x1:={1,1},  x2:={2,1},  x3:=temp1 };
+//x2:={ x1:={1,1},  x2:={2,1},  x3:=temp2 };
+//x3:={ x1:={1,1},  x2:={2,1},  x3:=temp3 };
+//x4:={ x1:={1},  x2:={2,1},  x3:=temp1 };
+//match: equal
+//if (match(x1,templateSetof_tSuperset)) {setverdict(pass);}
+// else {setverdict(fail);}
+//match: real superset
+//if (match(x2,templateSetof_tSuperset)) {setverdict(pass);}
+// else {setverdict(fail);}
+//no match: not superset
+//if (not(match(x3,templateSetof_tSuperset))) {setverdict(pass);}
+// else {setverdict(fail);}
+//no match: other field
+//if (not(match(x4,templateSetof_tSuperset))) {setverdict(pass);}
+// else {setverdict(fail);}
+//}
+
+//testcase templateSetofSubset() runs on templateSetof_mycomp {
+//var templateSetof_mysetof temp1:={1,4,2,3};		// subset
+//var templateSetof_mysetof temp2:={1,4};
+//var templateSetof_mysetof temp3:={2,1,4,7};
+//var templateSetof_rec x1,x2,x3,x4;
+//x1:={ x1:={1,1},  x2:={2,1},  x3:=temp1 };
+//x2:={ x1:={1,1},  x2:={2,1},  x3:=temp2 };
+//x3:={ x1:={1,1},  x2:={2,1},  x3:=temp3 };
+//x4:={ x1:={2,1},  x2:={2,1},  x3:=temp1 };
+//match: equal
+//if (match(x1,templateSetof_tSubset)) {setverdict(pass);}
+// else {setverdict(fail);}
+//match: real subset
+//if (match(x2,templateSetof_tSubset)) {setverdict(pass);}
+// else {setverdict(fail);}
+//no match: not subset
+//if (not(match(x3,templateSetof_tSubset))) {setverdict(pass);}
+// else {setverdict(fail);}
+//no match: other field
+//if (not(match(x4,templateSetof_tSubset))) {setverdict(pass);}
+// else {setverdict(fail);}
+//}
+
+testcase templateSetofIfpresent() runs on templateSetof_mycomp {
+var templateSetof_mysetof temp1:={3,1};	//ifpresent
+var templateSetof_mysetof temp2:={4,1};
+var templateSetof_rec x1,x2,x3,x4;
+x1:={ x1:={1,1},  x2:={2,1},  x3:=temp1 };
+x2:={ x1:={1,1},  x2:={2,1},  x3:=omit };
+x3:={ x1:={1,1},  x2:={2,1},  x3:=temp2 };
+x4:={ x1:={2,1},  x2:={2,1},  x3:=omit };
+// match: present and match
+if (match(x1,templateSetof_tIfpresent)) {setverdict(pass);}
+ else {setverdict(fail);}
+// match: not present
+if (match(x2,templateSetof_tIfpresent)) {setverdict(pass);}
+ else {setverdict(fail);}
+// no match: present and not match
+if (not(match(x3,templateSetof_tIfpresent))) {setverdict(pass);}
+ else {setverdict(fail);}
+// no match: other field
+if (not(match(x4,templateSetof_tIfpresent))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateSetofLengthIfp() runs on templateSetof_mycomp {
+var templateSetof_mysetof temp1:={1,2,3};	// length (fix), ifpresent
+var templateSetof_mysetof temp2:={1,2};
+var templateSetof_rec x1,x2,x3,x4;
+x1:={ x1:={1,1},  x2:={2,1},  x3:=temp1 };
+x2:={ x1:={1,1},  x2:={2,1},  x3:=omit };
+x3:={ x1:={1,1},  x2:={2,1},  x3:=temp2 };
+x4:={ x1:={1,1,1},  x2:={2,1},  x3:=temp1 };
+// match: proper size
+if (match(x1,templateSetof_tLengthIfp)) {setverdict(pass);}
+ else {setverdict(fail);}
+// match: omitted
+if (match(x2,templateSetof_tLengthIfp)) {setverdict(pass);}
+ else {setverdict(fail);}
+// no match: not proper length
+if (not(match(x3,templateSetof_tLengthIfp))) {setverdict(pass);}
+ else {setverdict(fail);}
+// no match: other field
+if (not(match(x4,templateSetof_tLengthIfp))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateSetofAnyEl() runs on templateSetof_mycomp {
+var templateSetof_mysetof temp1:={3,15,1};	// any element
+var templateSetof_mysetof temp2:={3,1};
+var templateSetof_mysetof temp3:={3,1,4,1};
+var templateSetof_mysetof temp4:={3,1,2};
+var templateSetof_rec x1,x2,x3,x4,x5;
+x1:={ x1:={1,1},  x2:={2,1},  x3:=temp1 };
+x2:={ x1:={1,1},  x2:={2,1},  x3:=temp2 };
+x3:={ x1:={1,1},  x2:={2,1},  x3:=temp3 };
+x4:={ x1:={1,1},  x2:={2,1},  x3:=temp4 };
+x5:={ x1:={1},  x2:={2,1},  x3:=temp1 };
+// match
+if (match(x1,templateSetof_tAnyEl)) {setverdict(pass);}
+ else {setverdict(fail);}
+// no match: no element
+if (not(match(x2,templateSetof_tAnyEl))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: two element
+if (not(match(x3,templateSetof_tAnyEl))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: wrong element
+if (match(x4,templateSetof_tAnyEl)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x5,templateSetof_tAnyEl))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateSetofAnyorNoneEl() runs on templateSetof_mycomp {
+var templateSetof_mysetof temp1:={3,1}; 	//Any number of elements or none
+var templateSetof_mysetof temp2:={3,2,1};
+var templateSetof_mysetof temp3:={3,5,2,1};
+var templateSetof_mysetof temp4:={4,2,1};
+var templateSetof_rec x1,x2,x3,x4,x5;
+x1:={ x1:={1,1},  x2:={2,1},  x3:=temp1 };
+x2:={ x1:={1,1},  x2:={2,1},  x3:=temp2 };
+x3:={ x1:={1,1},  x2:={2,1},  x3:=temp3 };
+x4:={ x1:={1,1},  x2:={2,1},  x3:=temp4 };
+x5:={ x1:={1},  x2:={2,1},  x3:=temp3 };
+//match: no element
+if (match(x1,templateSetof_tAnyorNoneEl)) {setverdict(pass);}
+ else {setverdict(fail);}
+//match: one element
+if (match(x2,templateSetof_tAnyorNoneEl)) {setverdict(pass);}
+ else {setverdict(fail);}
+//match: two element
+if (match(x3,templateSetof_tAnyorNoneEl)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other element
+if (not(match(x4,templateSetof_tAnyorNoneEl))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x5,templateSetof_tAnyorNoneEl))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+type set Block {}
+
+type set of Block Blocks;
+
+type set Request {
+  Blocks blocks optional
+}
+
+testcase HO91743() runs on templateSetof_mycomp {
+  var template Request vt_ReqO := { blocks := omit };
+  var template Request vt_ReqQ := { blocks := ? };
+  var template Request vt_ReqS := { blocks := * };
+  var template Block vt_b := {}
+
+  vt_ReqQ.blocks[3] := vt_b;
+  vt_ReqS.blocks[3] := vt_b;
+  // Indexing a template set-of which was omit used to DTE
+  // (in contrast to any-value and any-or-omit, which would create the set-of).
+  // HO91743 unifies the behaviour (set-of is created when indexing omit).
+  vt_ReqO.blocks[3] := vt_b;
+
+  if (lengthof(vt_ReqO.blocks) == 4) { setverdict(pass); } else { setverdict(fail); }
+  if (sizeof  (vt_ReqO.blocks) == 4) { setverdict(pass); } else { setverdict(fail); }
+
+  if (lengthof(vt_ReqQ.blocks) == 4) { setverdict(pass); } else { setverdict(fail); }
+  if (sizeof  (vt_ReqQ.blocks) == 4) { setverdict(pass); } else { setverdict(fail); }
+
+  if (lengthof(vt_ReqS.blocks) == 4) { setverdict(pass); } else { setverdict(fail); }
+  if (sizeof  (vt_ReqS.blocks) == 4) { setverdict(pass); } else { setverdict(fail); }
+}
+
+control {
+ execute(templateSetofSpec());
+ execute(templateSetofList());
+ execute(templateSetofComp());
+ execute(templateSetofOmit());
+ execute(templateSetofAny());
+ execute(templateSetofAnyorNone());
+ execute(templateSetofLength1());
+ execute(templateSetofLength2());
+ execute(templateSetofLength3());
+// execute(templateSetofSuperset());
+// execute(templateSetofSubset());
+ execute(templateSetofIfpresent());
+ execute(templateSetofLengthIfp());
+ execute(templateSetofAnyEl());
+ execute(templateSetofAnyorNoneEl());
+ execute(HO91743());
+}
+}
diff --git a/Regression_Test_java/src/TtemplateUnion.ttcn b/Regression_Test_java/src/TtemplateUnion.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..84585cda197dcbe67b962091a8fcaf048b30a19d
--- /dev/null
+++ b/Regression_Test_java/src/TtemplateUnion.ttcn
@@ -0,0 +1,213 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Delic, Adam
+ *   Raduly, Csaba
+ *   Szabados, Kristof
+ *   Szabo, Janos Zoltan – initial implementation
+ *
+ ******************************************************************************/
+module TtemplateUnion {
+type component templateUnion_mycomp {};
+type union templateUnion_myunion {
+ integer f1,
+ float f2 };
+type record templateUnion_rec {
+ templateUnion_myunion x1,
+ templateUnion_myunion x2,
+ templateUnion_myunion x3 optional };
+template templateUnion_rec templateUnion_tSpec :={ //specific values
+ x1:={f2:=1.2},
+ x2:={f1:=2},
+ x3:={f1:=3} };
+template templateUnion_rec templateUnion_tList :={ //specific value and value list
+ x1:={f2:=1.2},
+ x2:=({f1:=2},{f1:=3},{f2:=1.2}),
+ x3:={f1:=3} };
+template templateUnion_rec templateUnion_tComp :={ //specific value and compl. list
+ x1:={f2:=1.2},
+ x2:=complement ({f1:=2},{f2:=1.2},{f1:=6}),
+ x3:={f1:=3} };
+template templateUnion_rec templateUnion_tOmit :={ //omitting values
+ x1:={f2:=1.2},
+ x2:={f1:=2},
+ x3:=omit } ;
+template templateUnion_rec templateUnion_tAny :={ //specific and any value
+ x1:={f2:=1.2},
+ x2:={f1:=2},
+ x3:=? } ;
+template templateUnion_rec templateUnion_tAnyorNone :={ //specific and AnyorNone value
+ x1:={f2:=1.2},
+ x2:={f1:=2},
+ x3:=* };
+//template templateUnion_rec templateUnion_tIfpresent :={ //specific value and ifpresent
+// x1:={f2:=1.2},
+// x2:={f1:=2},
+// x3:={f1:=3} ifpresent };
+
+testcase templateUnionSpec() runs on templateUnion_mycomp {
+var templateUnion_myunion temp:={f1:=3};
+var templateUnion_rec x1,x2;		//specific value
+x1:={ x1:={f2:=1.2},  x2:={f1:=2},  x3:=temp };
+x2:={ x1:={f2:=1.3},  x2:={f1:=2},  x3:=temp };
+//match
+if (match(x1,templateUnion_tSpec)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match
+if (not(match(x2,templateUnion_tSpec))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateUnionList() runs on templateUnion_mycomp {
+var templateUnion_myunion temp:={f1:=3};
+var templateUnion_rec x1,x2,x3;		//value list
+x1:={ x1:={f2:=1.2},  x2:={f1:=3},  x3:=temp };
+x2:={ x1:={f2:=1.2},  x2:={f1:=7},  x3:=temp };
+x3:={ x1:={f1:=8},  x2:={f1:=3},  x3:=temp };
+//match
+if (match(x1,templateUnion_tList)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: out of list
+if (not(match(x2,templateUnion_tList))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateUnion_tList))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateUnionComp() runs on templateUnion_mycomp {
+var templateUnion_myunion temp:={f1:=3};
+var templateUnion_rec x1,x2,x3;		//complemented list
+x1:={ x1:={f2:=1.2},  x2:={f1:=7},  x3:=temp };
+x2:={ x1:={f2:=1.2},  x2:={f1:=6},  x3:=temp };
+x3:={ x1:={f2:=1.3},  x2:={f1:=7},  x3:=temp };
+//match
+if (match(x1,templateUnion_tComp)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: in the list
+if (not(match(x2,templateUnion_tComp))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateUnion_tComp))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateUnionOmit() runs on templateUnion_mycomp {
+var templateUnion_myunion temp:={f1:=3};
+var templateUnion_rec x1,x2,x3;		//omitting value
+x1:={ x1:={f2:=1.2},  x2:={f1:=2},  x3:=omit };
+x2:={ x1:={f2:=1.2},  x2:={f1:=2},  x3:=temp };
+x3:={ x1:={f1:=2},  x2:={f1:=2},  x3:=omit };
+//match
+if (match(x1,templateUnion_tOmit)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: not omitted
+if (not(match(x2,templateUnion_tOmit))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateUnion_tOmit))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateUnionAny() runs on templateUnion_mycomp {
+var templateUnion_myunion temp:={f1:=3};
+var templateUnion_rec x1,x2,x3;		//any value
+x1:={ x1:={f2:=1.2},  x2:={f1:=2},  x3:=temp };
+x2:={ x1:={f2:=1.2},  x2:={f1:=2},  x3:=omit };
+x3:={ x1:={f1:=2},  x2:={f1:=2},  x3:=temp };
+//match
+if (match(x1,templateUnion_tAny)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: field omitted
+if (not(match(x2,templateUnion_tAny))) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateUnion_tAny))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+testcase templateUnionAnyorNone() runs on templateUnion_mycomp {
+var templateUnion_myunion temp:={f1:=3};
+var templateUnion_rec x1,x2,x3;		//AnyorNone value
+x1:={ x1:={f2:=1.2},  x2:={f1:=2},  x3:=omit };
+x2:={ x1:={f2:=1.2},  x2:={f1:=2},  x3:=temp };
+x3:={ x1:={f1:=2},  x2:={f1:=2},  x3:=omit };
+//match: omitted
+if (match(x1,templateUnion_tAnyorNone)) {setverdict(pass);}
+ else {setverdict(fail);}
+//match: value
+if (match(x2,templateUnion_tAnyorNone)) {setverdict(pass);}
+ else {setverdict(fail);}
+//no match: other field
+if (not(match(x3,templateUnion_tAnyorNone))) {setverdict(pass);}
+ else {setverdict(fail);}
+}
+
+//testcase templateUnionIfpresent() runs on templateInt_mycomp {
+//var templateUnion_myunion temp1:={f1:=3};	//ifpresent
+//var templateUnion_myunion temp2:={f1:=4};
+//var templateUnion_rec x1,x2,x3,x4;
+//x1:={ x1:={f2:=1.2},  x2:={f1:=2},  x3:=temp1 };
+//x2:={ x1:={f2:=1.2},  x2:={f1:=2},  x3:=omit };
+//x3:={ x1:={f2:=1.2},  x2:={f1:=2},  x3:=temp2 };
+//x4:={ x1:={f2:=1.4},  x2:={f1:=2},  x3:=omit };
+//match: present and match
+//if (match(x1,templateUnion_tIfpresent)) {setverdict(pass);}
+// else {setverdict(fail);}
+//match: not present
+//if (match(x2,templateUnion_tIfpresent)) {setverdict(pass);}
+// else {setverdict(fail);}
+//no match: present and not match
+//if (not(match(x3,templateUnion_tIfpresent))) {setverdict(pass);}
+// else {setverdict(fail);}
+//no match: other field
+//if (not(match(x4,templateUnion_tIfpresent))) {setverdict(pass);}
+// else {setverdict(fail);}
+//}
+
+type record MyRec2{
+  ROC roc optional,
+  ROI roi optional,
+  MyUnion1 u optional, 
+  MyRecord1 r optional
+}
+
+type record of charstring ROC;
+type record of integer  ROI;
+type record MyRecord1 {
+  integer       i optional,
+  float         x optional,
+  charstring    c
+}
+
+type union MyUnion1 {
+  ROC roc,
+  integer i,
+  ROI roi,
+  MyRecord1 r
+}
+
+testcase tc_record_withWildCard3E() runs on templateUnion_mycomp {
+  var template MyRec2 vtl_rec2; 
+  vtl_rec2:={ u := ? }
+  //log("The value of the record:",vtl_rec2.u);
+  if(ispresent(vtl_rec2.u.i)){setverdict(fail)}else {setverdict(pass)};
+}
+
+control {
+ execute(templateUnionSpec());
+ execute(templateUnionList());
+ execute(templateUnionComp());
+ execute(templateUnionOmit());
+ execute(templateUnionAny());
+ execute(templateUnionAnyorNone());
+// execute(templateUnionIfpresent());
+ execute(tc_record_withWildCard3E());
+}
+}
diff --git a/Regression_Test_java/src/TucharstrOper.ttcn b/Regression_Test_java/src/TucharstrOper.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..544d26cfca616cc0e3939fa86d5579487a2d649e
--- /dev/null
+++ b/Regression_Test_java/src/TucharstrOper.ttcn
@@ -0,0 +1,111 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Kovacs, Ferenc
+ *   Szabados, Kristof
+ *
+ ******************************************************************************/
+module TucharstrOper
+{
+type component ucharstrOper_comptype { }
+
+type universal charstring myustr0
+type myustr0 myustr1
+type myustr0 myustr2 (char(0, 0, 0, 1)..char(0, 0, 1, 0))
+type myustr0 myustr3 (char(0, 0, 0, 0), char(0, 0, 0, 1), char(0, 0, 1, 0)) 
+type myustr0 myustr4 (char(0, 0, 0, 0) & char(0, 0, 0, 0), c_myustr0)
+type myustr0 myustr5 (c_myustr0..c_myustr0) length(lengthof(c_myustr0))
+type universal charstring myustr6 (pattern "abc?\q{0, 0, 0, 65}")
+type myustr0 myustr7 (pattern "abc*xyz")
+type myustr7 myustr8 length(0)  // It should be an empty set.
+type myustr1 myustr9 length(2)
+type universal charstring MyUCharString1 ("a".."z")
+type universal charstring MyUCharString2 (char(0, 0, 1, 111)..char(0, 0, 1, 113))
+type universal charstring myustr10 (myustr2, myustr3)
+type universal charstring myustr11 length(0..infinity)  // Full set.
+
+const myustr0 c_myustr0 := char(0, 0, 0, 0)
+const myustr7 c_myustr1 := "abcxyz"
+const myustr10 c_myustr2 := char(0, 0, 0, 1)
+
+template myustr0 t_myustr0 := char(0, 0, 0, 0)
+template myustr7 t_myustr1 := "abc" & c_myustr1 & "xyz"
+template myustr3 t_myustr2 := pattern char(0, 0, 0, 1)
+template myustr10 t_myustr3 := c_myustr2
+template myustr2 t_myustr4 := char(0, 0, 0, 1) length(1)
+
+function f_ustr1() return myustr7 {
+  if (lengthof(t_myustr1) > lengthof(c_myustr1)) { return valueof(t_myustr1) }
+  else { return c_myustr1 }
+}
+
+testcase ucharstrSubtypes() runs on ucharstrOper_comptype {
+  var template myustr2 vt_myustr1 := char(0, 0, 0, 1)  // Value range.
+  var template myustr3 vt_myustr2 := vt_myustr1  // Value list.
+  var template myustr5 vt_myustr3 := char(0, 0, 0, 0)  // Length and value range.
+  var template myustr9 vt_myustr4 := valueof(vt_myustr3) & valueof(vt_myustr3)  // Length only.
+  var myustr2 v_myustr1 := char(0, 0, 0, 1)
+  var myustr3 v_myustr2 := v_myustr1
+  var myustr5 v_myustr3 := char(0, 0, 0, 0)
+  var myustr9 v_myustr4 := v_myustr3 & v_myustr3
+
+  if (valueof(vt_myustr1) == v_myustr1 and v_myustr2 == valueof(vt_myustr2)) { setverdict(pass) }
+  else { setverdict(fail) }
+  if (valueof(vt_myustr3) == v_myustr3 and v_myustr4 == valueof(vt_myustr4)) { setverdict(pass) }
+  else { setverdict(fail) }
+  if (f_ustr1() == "abc" & c_myustr1 & "xyz") { setverdict(pass) }
+  else { setverdict(fail) }
+}
+
+testcase ucharstrIsvalue() runs on ucharstrOper_comptype {
+  var universal charstring us := "foo";
+  var universal charstring un;
+  var template universal charstring ust := "bar";
+
+  if ( isvalue(us) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isvalue(un) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(ust) ) { setverdict(pass); } else { setverdict(fail); };
+}
+
+testcase ucharstrIsbound() runs on ucharstrOper_comptype {
+  var universal charstring us := "foo";
+  var universal charstring un;
+  var template universal charstring ust := "bar";
+
+  if ( isbound(un) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isbound(un[0]) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isbound(us) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isbound(ust) ) { setverdict(pass); } else { setverdict(fail); };
+}
+
+testcase CR_TR00018474() runs on ucharstrOper_comptype {
+  // Indexing of string template variables.
+  var template universal charstring vtu1 := "fisherman"
+  var template universal charstring vtu2 := char(0, 0, 0, 65) & "F" & char(0, 0, 0, 65)
+  vtu1[0] := "F"
+  if (match(char(0, 0, 0, 70) & char(0, 0, 0, 105) & char(0, 0, 0, 115) & char(0, 0, 0, 104) & char(0, 0, 0, 101) & char(0, 0, 0, 114) & char(0, 0, 0, 109) & char(0, 0, 0, 97) & char(0, 0, 0, 110), vtu1)) { setverdict(pass) } else { setverdict(fail) }
+  vtu1[0] := "F"  // Indexed assignment notation cannot be used here.
+  vtu1[1] := "i"  // Still works, nothing special.
+  if (match(char(0, 0, 0, 70) & char(0, 0, 0, 105) & char(0, 0, 0, 115) & char(0, 0, 0, 104) & char(0, 0, 0, 101) & char(0, 0, 0, 114) & char(0, 0, 0, 109) & char(0, 0, 0, 97) & char(0, 0, 0, 110), vtu1)) { setverdict(pass) } else { setverdict(fail) }
+  vtu2[0] := "B"
+  if (match("BF" & char(0, 0, 0, 65), vtu2)) { setverdict(pass) } else { setverdict(fail) }
+}
+
+control {
+  const universal charstring cl_1 := char(0, 0, 0, 0)
+  const universal charstring cl_2 := "abcxyz"
+  var universal charstring vl_1 := char(0, 0, 0, 0)
+  var universal charstring vl_2 := "abcxyz"
+
+  execute(ucharstrSubtypes());
+  execute(ucharstrIsvalue());
+  execute(ucharstrIsbound());
+  execute(CR_TR00018474());
+}
+}
diff --git a/Regression_Test_java/src/TunionOper.ttcn b/Regression_Test_java/src/TunionOper.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..89752f69dda949d44f473d6797910c5159a49a01
--- /dev/null
+++ b/Regression_Test_java/src/TunionOper.ttcn
@@ -0,0 +1,1168 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Baranyi, Botond
+ *   Kovacs, Ferenc
+ *   Raduly, Csaba
+ *   Szabados, Kristof
+ *   Szabo, Janos Zoltan – initial implementation
+ *
+ ******************************************************************************/
+module TunionOper {
+// ********** Type definitions  *********************
+type component unionOper_mycomp {};
+type enumerated unionOper_myenum {xx1,xx2,xx3};
+type record unionOper_trecord {
+	integer x1 optional,
+	float x2 };
+type record of octetstring unionOper_trecof;
+type set unionOper_tset {
+	integer x1,
+	float x2 optional };
+type set of charstring unionOper_tsetof;
+type union unionOper_tunion {
+	integer x1,
+	float x2 };
+type union unionOper_myunion1 {integer x1, float x2}; 	// union of basic types
+type union unionOper_myunion2 {  // union of enum
+	unionOper_myenum x1,
+	integer x2};
+type union unionOper_myunion3 {  // union of record
+	unionOper_trecord x1,
+	integer x2};
+type union unionOper_myunion4 { // union of record of
+	unionOper_trecof x1,
+	integer x2};
+type union unionOper_myunion5 {  // union of set
+	unionOper_tset x1,
+	integer x2};
+type union unionOper_myunion6 { // union of set of
+	unionOper_tsetof x1,
+	integer x2};
+type union unionOper_myunion7 { // union of union
+	unionOper_tunion x1,
+	integer x2};
+type union unionOper_myunion8 { // union of same types
+	integer x1,
+	integer x2};
+	type union typedefunionComp_myunion {
+	unionOper_trecord x1,
+	unionOper_trecof x2,
+	unionOper_tset x3,
+	unionOper_tsetof x4,
+	unionOper_tunion x5,
+	integer x6[3]
+	};
+// *************** Constanst ***********************
+//const unionOper_trecord unionOper_temp1:={ x1:=omit, x2:=3.4 };
+//const unionOper_trecof unionOper_temp2:={ 'AF12'O };
+//const unionOper_tset unionOper_temp3:={ x1:=234, x2:=1.9};
+//const unionOper_tsetof unionOper_temp4:={"f","8"};
+//const unionOper_tunion unionOper_temp5:={ x2:=1.3 };
+const unionOper_myunion1 unionOper_const1:={	//union with basic types
+	x1:=1 };
+const unionOper_myunion2 unionOper_const2:={	//union with enum
+  x1:=xx1 };
+const unionOper_myunion3 unionOper_const4:={   //union from record
+  x1:={ x1:=1, x2:=1.2 } };
+const unionOper_myunion4 unionOper_const6:={   //union from record of
+ x1:={ '12AB'O, 'CD12'O } };
+const unionOper_myunion5 unionOper_const8:={   //union from set
+ x1:={ x1:=2, x2:=1.3} };
+const unionOper_myunion6 unionOper_const10:={   //union from set of
+ x1:={"a","b"} };
+const unionOper_myunion7 unionOper_const12:={   //union from union
+ x1:={ x1 :=3 } };
+const typedefunionComp_myunion unionOper_const13:= { x1:={ x1:=1, x2:=1.2 }};
+const typedefunionComp_myunion unionOper_const14:= { x2:={ '12AB'O, 'CD12'O }};
+const typedefunionComp_myunion unionOper_const15:= { x3:={ x1:=2, x2:=1.3 }};
+const typedefunionComp_myunion unionOper_const16:= { x4:={ "a", "b", "c" }};
+const typedefunionComp_myunion unionOper_const17:= { x5:={ x1 :=3 }};
+const typedefunionComp_myunion unionOper_const18:= { x6:={ 1,2,3}};
+
+testcase unionAssign() runs on unionOper_mycomp{
+var unionOper_myunion1 x1:={	//union with basic types
+  x1:=1};
+var unionOper_myunion1 x2,x3;
+x2:={ x2:=1.2 };
+if (x1.x1==1) {setverdict(pass);}	//at declaration
+     else {setverdict(fail);}
+if (ischosen(x1.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.x2==1.2) {setverdict(pass);}	//later
+     else {setverdict(fail);}
+if (ischosen(x2.x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2.x1))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase unionAssignEnum() runs on unionOper_mycomp{
+var unionOper_myunion2 x1:={	//union with enum
+  x1:=xx1};
+var unionOper_myunion2 x2;
+x2:={ x1:=xx2 };
+if (x1.x1==xx1) {setverdict(pass);}	//at declaration
+     else {setverdict(fail);}
+if (ischosen(x1.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.x1==xx2) {setverdict(pass);}	//later
+     else {setverdict(fail);}
+if (ischosen(x2.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase unionAssignRec() runs on unionOper_mycomp{
+//var unionOper_trecord temp1:={ x1:=omit, x2:=3.4 };
+var unionOper_myunion3 x1:={   //union from record
+ x1:={ x1:=1, x2:=1.2 } };
+var unionOper_myunion3 x2;
+x2:={ x1:={ x1:=1, x2:=1.2 } };
+if (x1.x1.x1==1) {setverdict(pass);}	//at declaration
+     else {setverdict(fail);}
+if (x1.x1.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x1.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.x1.x1==1) {setverdict(pass);}	//later
+     else {setverdict(fail);}
+if (x2.x1.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x2.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase unionAssignRecof() runs on unionOper_mycomp{
+//var unionOper_trecof temp2:={'AF12'O};
+var unionOper_myunion4 x1:={   //union from record of
+ x1:={ '12AB'O, 'CD12'O } };
+var unionOper_myunion4 x2;
+x2:={  x1:={ '12AB'O, 'CD12'O } };
+if (x1.x1[0]=='12AB'O) {setverdict(pass);}	//at declaration
+     else {setverdict(fail);}
+if (x1.x1[1]=='CD12'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x1.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.x1[0]=='12AB'O) {setverdict(pass);}	//later
+     else {setverdict(fail);}
+if (x2.x1[1]=='CD12'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x2.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+
+testcase unionAssignSet() runs on unionOper_mycomp{
+//var unionOper_tset temp1:={ x1:=2, x2:=omit };
+var unionOper_myunion5 x1:={   //union from record
+ x1:={ x1:=1, x2:=1.2 } };
+var unionOper_myunion5 x2;
+x2:={   x1:={ x1:=1, x2:=1.2 } };
+if (x1.x1.x1==1) {setverdict(pass);}	//at declaration
+     else {setverdict(fail);}
+if (x1.x1.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x1.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.x1.x1==1) {setverdict(pass);}	//later
+     else {setverdict(fail);}
+if (x2.x1.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x2.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase unionAssignSetof() runs on unionOper_mycomp{
+//var unionOper_tsetof temp2:={"a","7"};
+var unionOper_myunion6 x1:={   //union from set of
+ x1:={ "1", "a" } };
+var unionOper_myunion6 x2;
+x2:={  x1:={ "1", "a" } };
+if (x1.x1[0]=="1") {setverdict(pass);}	//at declaration
+     else {setverdict(fail);}
+if (x1.x1[1]=="a") {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x1.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.x1[0]=="1") {setverdict(pass);}	//later
+     else {setverdict(fail);}
+if (x2.x1[1]=="a") {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x2.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase unionAssignUnion() runs on unionOper_mycomp{
+var unionOper_tunion temp5 := {x2:=1.3}
+var unionOper_myunion7 x1:={   //union from union
+ x1:={ x1 :=3 } };
+var unionOper_myunion7 x2;
+x2:={ x1:={ x1 :=3 } };
+if (x1.x1.x1==3) {setverdict(pass);}	//at declaration
+     else {setverdict(fail);}
+if (ischosen(x1.x1.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1.x1.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x1.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.x1.x1==3) {setverdict(pass);}	//later
+     else {setverdict(fail);}
+if (ischosen(x2.x1.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2.x1.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x2.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase unionAssignElem() runs on unionOper_mycomp{
+var unionOper_myunion1 x1, x2;	//union with basic types
+x1:={ x1:=1 };
+x2:= {x1:=2}
+x1.x1:=3;		// change value
+x2.x2:=3.2;		//choose other
+if (x1.x1==3) {setverdict(pass);}	//change value
+     else {setverdict(fail);}
+if (ischosen(x1.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.x2==3.2) {setverdict(pass);}	//choose other
+     else {setverdict(fail);}
+if (ischosen(x2.x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2.x1))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase unionAssignElemEnum() runs on unionOper_mycomp{
+var unionOper_myunion2 x1, x2;	//union with enum
+x1:={ x1:=xx1 };
+x2:= {x1:=xx2}
+x1.x1:=xx3;		// change value
+x2.x2:=3;		//choose other
+if (x1.x1==xx3) {setverdict(pass);}	//change value
+     else {setverdict(fail);}
+if (ischosen(x1.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.x2==3) {setverdict(pass);}	//choose other
+     else {setverdict(fail);}
+if (ischosen(x2.x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2.x1))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase unionAssignElemRec() runs on unionOper_mycomp{
+//var unionOper_trecord temp1:={ x1:=omit, x2:=3.4 };
+var unionOper_myunion3 x1,x2;	//union from record
+x1:={   x1:={ x1:=1, x2:=1.2 } };
+x2:={   x1:={ x1:=1, x2:=1.2 } };
+x1.x1.x1:=2;		//change value
+x2.x2:=2;		//change selection
+if (x1.x1.x1==2) {setverdict(pass);}	//change value
+     else {setverdict(fail);}
+if (x1.x1.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x1.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.x2==2) {setverdict(pass);}	//change selection
+     else {setverdict(fail);}
+if (ischosen(x2.x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2.x1))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase unionAssignElemRecof() runs on unionOper_mycomp{
+//var unionOper_trecof temp2:={'AF12'O};
+var unionOper_myunion4 x1,x2;    //union from record of
+x1:={ x1:={ '12AB'O, 'CD12'O } };
+x2:={ x1:={ '12AB'O, 'CD12'O } };
+x1.x1[1]:='34AB'O;	//change value
+x2.x2:=2;		//change selection
+if (x1.x1[0]=='12AB'O) {setverdict(pass);}	//change value
+     else {setverdict(fail);}
+if (x1.x1[1]=='34AB'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x1.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.x2==2) {setverdict(pass);}	//change selection
+     else {setverdict(fail);}
+if (ischosen(x2.x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2.x1))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+
+testcase unionAssignElemSet() runs on unionOper_mycomp{
+//var unionOper_tset temp1:={ x1:=2, x2:=omit };
+var unionOper_myunion5 x1,x2;   //union from record
+x1:= { x1:={ x1:=1, x2:=1.2 } };
+x2:= { x1:={ x1:=1, x2:=1.2 } };
+x1.x1.x2:=3.4;			//change value
+x2.x2:=3;			//change selection
+if (x1.x1.x1==1) {setverdict(pass);}	//change value
+     else {setverdict(fail);}
+if (x1.x1.x2==3.4) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x1.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.x2==3) {setverdict(pass);}	//change selection
+     else {setverdict(fail);}
+if (ischosen(x2.x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2.x1))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase unionAssignElemSetof() runs on unionOper_mycomp{
+//var unionOper_tsetof temp2:={"a","7"};
+var unionOper_myunion6 x1,x2;   //union from record of
+x1:={ x1:={ "1", "a" } };
+x2:={ x2:=1 };
+x1.x1[0]:="h";		//change value
+x2.x1:={ "1", "a" };		//change selection
+if (x1.x1[0]=="h") {setverdict(pass);}	//change value
+     else {setverdict(fail);}
+if (x1.x1[1]=="a") {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x1.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.x1[0]=="1") {setverdict(pass);}	//change selection
+     else {setverdict(fail);}
+if (x2.x1[1]=="a") {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x2.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase unionAssignElemUnion() runs on unionOper_mycomp{
+//var unionOper_tunion temp5 := {x2:=1.3}
+var unionOper_myunion7 x1,x2;   //union from union
+x1:={ x1:={ x1 :=3 } };
+x2:={ x2:=2 };
+x1.x1.x2:=3.4;			//change value
+x2.x1:={ x2 :=3.4 };		//change selection
+if (x1.x1.x2==3.4) {setverdict(pass);}	//change value
+     else {setverdict(fail);}
+if (ischosen(x1.x1.x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1.x1.x1))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x1.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2.x1.x2==3.4) {setverdict(pass);}	//change selection
+     else {setverdict(fail);}
+if (ischosen(x2.x1.x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2.x1.x1))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x2.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+
+testcase unionConst() runs on unionOper_mycomp{
+const unionOper_myunion1 const1:={	//union with basic types
+ x1:=1 };
+if (unionOper_const1.x1==1) {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+if (ischosen(unionOper_const1.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(unionOper_const1.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const1.x1==1) {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+if (ischosen(const1.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(const1.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase unionConstEnum() runs on unionOper_mycomp{
+const unionOper_myunion2 const2:={	//union with enum
+ x1:=xx1 };
+if (unionOper_const2.x1==xx1) {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+if (ischosen(unionOper_const2.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(unionOper_const2.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const2.x1==xx1) {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+if (ischosen(const2.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(const2.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase unionConstRec() runs on unionOper_mycomp{
+const unionOper_myunion3 const4:={   //union from record
+ x1:={ x1:=1, x2:=1.2 } };
+if (unionOper_const4.x1.x1==1) {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+if (unionOper_const4.x1.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(unionOper_const4.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(unionOper_const4.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const4.x1.x1==1) {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+if (const4.x1.x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(const4.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(const4.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase unionConstRecof() runs on unionOper_mycomp{
+const unionOper_myunion4 const6:={   //union from record of
+ x1:={ '12AB'O, 'CD12'O } };
+if (unionOper_const6.x1[0]=='12AB'O) {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+if (unionOper_const6.x1[1]=='CD12'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(unionOper_const6.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(unionOper_const6.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const6.x1[0]=='12AB'O) {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+if (const6.x1[1]=='CD12'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(const6.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(const6.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+
+testcase unionConstSet() runs on unionOper_mycomp{
+const unionOper_myunion5 const8:={   //union from set
+ x1:={ x1:=2, x2:=1.3} };
+if (unionOper_const8.x1.x1==2) {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+if (unionOper_const8.x1.x2==1.3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(unionOper_const8.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(unionOper_const8.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const8.x1.x1==2) {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+if (const8.x1.x2==1.3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(const8.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(const8.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase unionConstSetof() runs on unionOper_mycomp{
+const unionOper_myunion6 const10:={   //union from set of
+ x1:={"a","b"} };
+if (unionOper_const10.x1[0]=="a") {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+if (unionOper_const10.x1[1]=="b") {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(unionOper_const10.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(unionOper_const10.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const10.x1[0]=="a") {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+if (const10.x1[1]=="b") {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(const10.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(const10.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase unionConstUnion() runs on unionOper_mycomp{
+const unionOper_myunion7 const12:={   //union from union
+ x1:={ x1 :=3 } };
+if (unionOper_const12.x1.x1==3) {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+if (ischosen(unionOper_const12.x1.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(unionOper_const12.x1.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(unionOper_const12.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(unionOper_const12.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const12.x1.x1==3) {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+if (ischosen(const12.x1.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(const12.x1.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(const12.x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(const12.x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase unionComp() runs on unionOper_mycomp{
+var unionOper_myunion1 x1,x2,x3,x4;
+x1:={ x1:=1  };
+x2:={ x1:=1 };
+x3:={ x1:=2 };		// different value
+x4:={ x2:=1.2 };	// different selection
+if (x1==x2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1==x3)) {setverdict(pass);}	// different value
+     else {setverdict(fail);}
+if (not(x4==x1)) {setverdict(pass);}	// different selection
+     else {setverdict(fail);}
+if (not(x1!=x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1!=x3) {setverdict(pass);}		// different value
+     else {setverdict(fail);}
+if (x4!=x2) {setverdict(pass);}		// different selection
+     else {setverdict(fail);}
+}
+
+testcase unionCompSame() runs on unionOper_mycomp{
+var unionOper_myunion8 x1,x2;
+x1:={ x1:=1  };			// same value, different selection
+x2:={ x2:=1 };
+if (x1!=x2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1==x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase unionCompEnum() runs on unionOper_mycomp{
+var unionOper_myunion2 x1,x2,x3,x4;
+x1:={ x1:=xx1  };
+x2:={ x1:=xx1 };
+x3:={ x1:=xx2 };		// different value
+x4:={ x2:=1 };	// different selection
+if (x1==x2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1==x3)) {setverdict(pass);}	// different value
+     else {setverdict(fail);}
+if (not(x4==x1)) {setverdict(pass);}	// different selection
+     else {setverdict(fail);}
+if (not(x1!=x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1!=x3) {setverdict(pass);}		// different value
+     else {setverdict(fail);}
+if (x4!=x2) {setverdict(pass);}		// different selection
+     else {setverdict(fail);}
+}
+
+
+testcase unionCompRec() runs on unionOper_mycomp{
+//var unionOper_trecord temp1:={ x1:=omit, x2:=3.4 };
+var unionOper_myunion3 x1,x2,x3,x4;
+x1 :={  x1:={ x1:=1, x2:=1.2 } };
+x2 :={  x1:={ x1:=1, x2:=1.2 } };
+x3 :={  x1:={ x1:=2, x2:=1.2 } }; // different value
+x4 :={  x2:=1 }; // different selection
+if (x1==x2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1==x3)) {setverdict(pass);}	// different value
+     else {setverdict(fail);}
+if (not(x4==x1)) {setverdict(pass);}	// different selection
+     else {setverdict(fail);}
+if (not(x1!=x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1!=x3) {setverdict(pass);}		// different value
+     else {setverdict(fail);}
+if (x4!=x2) {setverdict(pass);}		// different selection
+     else {setverdict(fail);}
+}
+
+
+testcase unionCompRecof() runs on unionOper_mycomp{
+//var unionOper_trecof temp2:={'AF12'O};
+var unionOper_myunion4 x1,x2,x3,x4;	//union from record of
+x1:={  x1:={ '12AB'O, 'CD12'O } };
+x2:={  x1:={ '12AB'O, 'CD12'O } };
+x3:={  x1:={ '12AB'O } };		//different value
+x4:={  x2:=12 };		//different selection
+if (x1==x2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1==x3)) {setverdict(pass);}	// different value
+     else {setverdict(fail);}
+if (not(x4==x1)) {setverdict(pass);}	// different selection
+     else {setverdict(fail);}
+if (not(x1!=x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1!=x3) {setverdict(pass);}		// different value
+     else {setverdict(fail);}
+if (x4!=x2) {setverdict(pass);}		// different selection
+     else {setverdict(fail);}
+}
+
+
+testcase unionCompSet() runs on unionOper_mycomp{
+//var unionOper_tset temp1:={ x1:=2, x2:=omit };
+var unionOper_myunion5 x1,x2,x3,x4; // union from set
+x1:={ x1:={ x1:=1, x2:=1.2 } };
+x2:={ x1:={ x1:=1, x2:=1.2 } };
+x3:={ x1:={ x1:=4, x2:=1.2 } }; // different value
+x4:={ x2:=4 }; 			// different selection
+if (x1==x2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1==x3)) {setverdict(pass);}	// different value
+     else {setverdict(fail);}
+if (not(x4==x1)) {setverdict(pass);}	// different selection
+     else {setverdict(fail);}
+if (not(x1!=x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1!=x3) {setverdict(pass);}		// different value
+     else {setverdict(fail);}
+if (x4!=x2) {setverdict(pass);}		// different selection
+     else {setverdict(fail);}
+}
+
+testcase unionCompSetof() runs on unionOper_mycomp{
+//var unionOper_tsetof temp2:={"a","7"};
+var unionOper_myunion6 x1,x2,x3,x4;	//union from record of
+x1:={ x1:={ "1", "a" } };
+x2:={ x1:={ "1", "a" } };
+x3:={ x1:={ "1", "a", "k" } };	//different value
+x4:={ x2:=2 };			//different selection
+if (x1==x2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1==x3)) {setverdict(pass);}	// different value
+     else {setverdict(fail);}
+if (not(x4==x1)) {setverdict(pass);}	// different selection
+     else {setverdict(fail);}
+if (not(x1!=x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1!=x3) {setverdict(pass);}		// different value
+     else {setverdict(fail);}
+if (x4!=x2) {setverdict(pass);}		// different selection
+     else {setverdict(fail);}
+}
+
+testcase unionCompUnion() runs on unionOper_mycomp{
+var unionOper_tunion temp5 := {x2:=1.3}
+var unionOper_myunion7 x1,x2,x3,x4;	// union form union
+x1:={  x1:={ x1 :=3 } };
+x2:={  x1:={ x1 :=3 } };
+x3:={  x1:={ x2 :=3.9 } };		//different value
+x4:={  x2:=3 };				//different selection
+if (x1==x2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1==x3)) {setverdict(pass);}	// different value
+     else {setverdict(fail);}
+if (not(x4==x1)) {setverdict(pass);}	// different selection
+     else {setverdict(fail);}
+if (not(x1!=x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1!=x3) {setverdict(pass);}		// different value
+     else {setverdict(fail);}
+if (x4!=x2) {setverdict(pass);}		// different selection
+     else {setverdict(fail);}
+}
+
+type union myu1 {
+  integer f1 (0..255),
+  charstring f2 length(0..255)
+}
+type myu1 myu2
+type myu1 myu3 ({ f1 := 0 }, { f1 := 1 }, { f2 := "" })
+type myu1 myu4 (myu3)
+
+function f_u1() return myu3 {
+  var myu1 v_myu1 := { f1 := 0 }
+  var myu2 v_myu2 := { f2 := "" }
+  if (v_myu1 == v_myu2) { return v_myu1 }
+  else { return v_myu2 }
+}
+
+testcase unionSubtypes() runs on unionOper_mycomp {
+  var template myu1 vt_myu1 := { f1 := 0 }  // Restricted fields.
+  var template myu4 vt_myu2 := { f2 := "" }  // Type list.
+  var myu1 v_myu1 := { f2 := "0" }
+  var myu4 v_myu2 := { f2 := "" }
+
+  if (valueof(vt_myu1.f1) == str2int(v_myu1.f2) and v_myu2 == valueof(vt_myu2)) { setverdict(pass) }
+  else { setverdict(fail) }
+  if (f_u1() != f_u1()) { setverdict(fail) }
+  else { setverdict(pass) }
+}
+
+testcase unionIsvalue() runs on unionOper_mycomp{
+  var unionOper_tunion u0;
+  var unionOper_tunion u1 := { x1 := 1 };
+  var unionOper_tunion u2;
+  u2.x2 := 1.0;
+  var unionOper_tunion u3 := { x2 := 1.0 };
+  if ( isvalue(u0) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(u1) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isvalue(u2) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isvalue(u3) ) { setverdict(pass); } else { setverdict(fail); };
+
+  template unionOper_tunion t_union1 := { x1:= 1 }
+  template unionOper_tunion t_union2 := * ;
+  template unionOper_tunion t_union3 := { x1 := (1,2,3) }
+  template unionOper_tunion t_union4 := { x1 := ? }
+
+  if ( isvalue(t_union1) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isvalue(t_union1.x1) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isvalue(t_union2) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(t_union3) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(t_union3.x1) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(t_union4) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(t_union4.x1) ) { setverdict(fail); } else { setverdict(pass); };
+
+  if ( isvalue(modifies t_union1 := { x2 := 33.0 }) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isvalue(modifies t_union1 := { x2 := ? }) ) { setverdict(fail); } else { setverdict(pass); };
+}
+
+testcase unionIsbound() runs on unionOper_mycomp{
+  var unionOper_tunion u0;
+  var unionOper_tunion u1 := { x1 := 1 };
+  var unionOper_tunion u2;
+  u2.x2 := 1.0;
+  var unionOper_tunion u3 := { x2 := 1.0 };
+  if ( isbound(u0) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isbound(u0.x1) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isbound(u0.x2) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isbound(u1) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isbound(u1.x1) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isbound(u1.x2) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isbound(u2) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isbound(u2.x1) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isbound(u2.x2) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isbound(u3) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isbound(u3.x1) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isbound(u3.x2) ) { setverdict(pass); } else { setverdict(fail); };
+
+  template unionOper_tunion t_union1 := { x1:= 1 }
+  template unionOper_tunion t_union2 := * ;
+  template unionOper_tunion t_union3 := { x1 := (1,2,3) }
+  template unionOper_tunion t_union4 := { x1 := ? }
+
+  if ( isbound(t_union1) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isbound(t_union1.x1) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isbound(t_union2) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isbound(t_union3) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isbound(t_union3.x1) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isbound(t_union4) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isbound(t_union4.x1) ) { setverdict(pass); } else { setverdict(fail); };
+
+  if ( isbound(modifies t_union1 := { x2 := 33.0 }) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isbound(modifies t_union1 := { x2 := ? }) ) { setverdict(pass); } else { setverdict(fail); };
+}
+
+type record of charstring ROC;
+type record of integer  ROI;
+type record MyRecord1 {
+  integer       i optional,
+  float         x optional,
+  charstring    c
+}
+
+type union MyUnion1 {
+  ROC roc,
+  integer i,
+  ROI roi,
+  MyRecord1 r
+}
+
+const MyUnion1 c_myunion1:= { roc:= { "1aa", "2bb", "3cc"}}
+const MyUnion1 c_myunion2:= { i:= 5}
+
+testcase tc_unionOfRecordOfs1() runs on unionOper_mycomp {
+  var MyUnion1 vl_u:= c_myunion1;
+  if(isbound(vl_u)) {setverdict(pass)} else {setverdict(fail)}
+  if(isbound(vl_u.roc)){setverdict(pass)} else {setverdict(fail)}
+  if(isbound(vl_u.roc[0])){setverdict(pass)}else {setverdict(fail)}
+  if(isbound(vl_u.roc[1])){setverdict(pass)}else {setverdict(fail)}
+  if(isbound(vl_u.roc[2])){setverdict(pass)}else {setverdict(fail)}
+  if(isbound(vl_u.roc[3])){setverdict(fail)}else {setverdict(pass)}
+  if(isbound(vl_u.roc[99])){setverdict(fail)}else {setverdict(pass)}
+  if(isbound(vl_u.i)){setverdict(fail)}else {setverdict(pass)}
+  if(isbound(vl_u.roi)){setverdict(fail)}else {setverdict(pass)}
+  if(isbound(vl_u.roi[0])){setverdict(fail)}else {setverdict(pass)}
+  if(isbound(vl_u.roi[1])){setverdict(fail)} else {setverdict(pass)}
+  log(vl_u.roc);
+}
+
+testcase tc_unionOfRecordOfs2() runs on unionOper_mycomp {
+  var MyUnion1 vl_u:= c_myunion2;
+  if(isbound(vl_u)) {setverdict(pass)} else {setverdict(fail)}
+  if(isbound(vl_u.roc)){setverdict(fail)} else {setverdict(pass)}
+  if(isbound(vl_u.roc[0])){setverdict(fail)} else {setverdict(pass)}
+  if(isbound(vl_u.roc[1])){setverdict(fail)} else {setverdict(pass)}
+  if(isbound(vl_u.roc[2])){setverdict(fail)} else {setverdict(pass)}
+  if(isbound(vl_u.roc[3])){setverdict(fail)} else {setverdict(pass)}
+  if(isbound(vl_u.roc[99])){setverdict(fail)} else {setverdict(pass)}
+  if(isbound(vl_u.r)){setverdict(fail)} else {setverdict(pass)};
+  if(isbound(vl_u.r.i)){setverdict(fail)} else {setverdict(pass)};
+  if(isbound(vl_u.r.x)){setverdict(fail)} else {setverdict(pass)};
+  if(isbound(vl_u.r.c)){setverdict(fail)} else {setverdict(pass)};
+  //checks if the selected item remained the same
+  if(isbound(vl_u.i)){setverdict(pass)}else {setverdict(fail)}
+  if(isbound(vl_u.roi)){setverdict(fail)} else {setverdict(pass)}
+  if(isbound(vl_u.roi[0])){setverdict(fail)}else {setverdict(pass)}
+  if(isbound(vl_u.roi[1])){setverdict(fail)} else {setverdict(pass)}
+}
+
+
+// testcase tc_compilationerror1() runs on unionOper_mycomp {
+//   var MyUnion1 vl_u:= c_myunion2;
+//   if(isbound(vl_u)) {setverdict(pass)} else {setverdict(fail)}
+//   if(isbound(vl_u.roc)){setverdict(fail)} else {setverdict(pass)}
+//   if(isbound(vl_u.roc[0])){setverdict(fail)}else {setverdict(pass)} 
+//   if(isbound(vl_u.r.x)){setverdict(fail)}else {setverdict(pass)} 
+//   if(isbound(vl_u.roc[99])){setverdict(fail)} else {setverdict(pass)} 
+// }
+
+
+  
+testcase tc_union_modify() runs on unionOper_mycomp {
+  var MyUnion1 vl_u:= c_myunion2;
+  if(isbound(vl_u)) {setverdict(pass)} else {setverdict(fail)}
+  if(isbound(vl_u.roc)){setverdict(fail)} else {setverdict(pass)}
+  if(isbound(vl_u.roi)){setverdict(fail)} else {setverdict(pass)}  
+
+  vl_u:=c_myunion1;
+  if(isbound(vl_u)) {setverdict(pass)} else {setverdict(fail)}
+  if(isbound(vl_u.roc)){setverdict(pass)} else {setverdict(fail)}
+  if(isbound(vl_u.roc[0])){setverdict(pass)}else {setverdict(fail)}
+  if(isbound(vl_u.roc[1])){setverdict(pass)}else {setverdict(fail)}
+  if(isbound(vl_u.roc[2])){setverdict(pass)}else {setverdict(fail)}
+  if(isbound(vl_u.roc[3])){setverdict(fail)}
+  if(isbound(vl_u.roc[99])){setverdict(fail)}
+  if(isbound(vl_u.i)){setverdict(fail)}
+  if(isbound(vl_u.roi)){setverdict(fail)}
+  if(isbound(vl_u.roi[0])){setverdict(fail)}
+  if(isbound(vl_u.roi[1])){setverdict(fail)} else {setverdict(pass)}
+  log(vl_u.roc);
+}
+//expected:error
+testcase tc_sideeffect1() runs on unionOper_mycomp {
+  var MyUnion1 vl_u:= c_myunion1;    // { roc:= { "1aa", "2bb", "3cc"}}
+  if(isbound(vl_u.roc[3])){setverdict(fail)}else {setverdict(pass)}
+  if(ispresent(vl_u.roc[3])){setverdict(fail)}else {setverdict(pass)}
+}
+
+//expected:error
+testcase tc_sideeffect2() runs on unionOper_mycomp {
+  var MyUnion1 vl_u:= c_myunion1;  // { roc:= { "1aa", "2bb", "3cc"}}
+  var integer vl_oldsize:=0, vl_newsize:=0;
+  vl_oldsize:=sizeof(vl_u.roc);
+
+  if(isbound(vl_u.i)){setverdict(fail)}else {setverdict(pass)}  
+
+  if(isbound(vl_u.roc)) {setverdict(pass)}else {setverdict(fail)}
+
+  //checks if  size is unchenged  
+  if(isbound(vl_u.roc[4])) {setverdict(fail)}else {setverdict(pass)}
+  vl_newsize:=sizeof(vl_u.roc);
+  if(vl_newsize == vl_oldsize) {setverdict(pass)}else {setverdict(fail)}
+  //log(vl_u.i);
+}
+
+  testcase tc_unionOfRecordOfs1_ispresent() runs on unionOper_mycomp {
+    var MyUnion1 vl_u:= c_myunion1;
+    if(ispresent(vl_u)) {setverdict(pass)} else {setverdict(fail)}
+  }
+  
+  testcase tc_unionOfRecordOfs2_ispresent() runs on unionOper_mycomp {
+    var MyUnion1 vl_u:= c_myunion1;
+    if(ispresent(vl_u.roc)){setverdict(pass)} else {setverdict(fail)}
+    if(ispresent(vl_u.roc[0])){setverdict(pass)}else {setverdict(fail)}
+    if(ispresent(vl_u.roc[1])){setverdict(pass)}else {setverdict(fail)}
+    if(ispresent(vl_u.roc[2])){setverdict(pass)}else {setverdict(fail)}
+    if(ispresent(vl_u.roc[3])){setverdict(fail)}else {setverdict(pass)}
+    if(ispresent(vl_u.roc[99])){setverdict(fail)}else {setverdict(pass)}
+    if(ispresent(vl_u.i)){setverdict(fail)}else {setverdict(pass)}
+    if(ispresent(vl_u.roi)){setverdict(fail)}else {setverdict(pass)}
+    if(ispresent(vl_u.roi[0])){setverdict(fail)}else {setverdict(pass)}
+    if(ispresent(vl_u.roi[1])){setverdict(fail)} else {setverdict(pass)}
+    log(vl_u.roc);
+  }
+
+  testcase tc_unionOfRecordOfs3_ispresent() runs on unionOper_mycomp {
+    var MyUnion1 vl_u:= c_myunion2;
+    if(ispresent(vl_u)) {setverdict(pass)} else {setverdict(fail,__LINE__)}
+    if(ispresent(vl_u.roc)){setverdict(fail,__LINE__)} else {setverdict(pass)}
+    if(ispresent(vl_u.roc[0])){setverdict(fail,__LINE__)} else {setverdict(pass)}
+    if(ispresent(vl_u.roc[1])){setverdict(fail,__LINE__)} else {setverdict(pass)}
+    if(ispresent(vl_u.roc[2])){setverdict(fail,__LINE__)} else {setverdict(pass)}
+    if(ispresent(vl_u.roc[3])){setverdict(fail,__LINE__)} else {setverdict(pass)}
+    if(ispresent(vl_u.roc[99])){setverdict(fail,__LINE__)} else {setverdict(pass)}
+    if(ispresent(vl_u.r)){setverdict(fail,__LINE__)} else {setverdict(pass)};
+    if(ispresent(vl_u.r.i)){setverdict(fail,__LINE__)} else {setverdict(pass)};
+    if(ispresent(vl_u.r.x)){setverdict(fail,__LINE__)} else {setverdict(pass)};
+    if(ispresent(vl_u.r.c)){setverdict(fail,__LINE__)} else {setverdict(pass)};
+    //checks if the selected item remained the same
+    if(ispresent(vl_u.i)){setverdict(pass)}else {setverdict(fail,__LINE__)}
+    if(ispresent(vl_u.roi)){setverdict(fail,__LINE__)} else {setverdict(pass)}
+    if(ispresent(vl_u.roi[0])){setverdict(fail,__LINE__)}else {setverdict(pass)}
+    if(ispresent(vl_u.roi[1])){setverdict(fail,__LINE__)} else {setverdict(pass)}
+  }
+
+
+  // testcase tc_compilationerror1() runs on unionOper_mycomp {
+  //   var MyUnion1 vl_u:= c_myunion2;
+  //   if(ispresent(vl_u)) {setverdict(pass)} else {setverdict(fail)}
+  //   if(ispresent(vl_u.roc)){setverdict(fail)} else {setverdict(pass)}
+  //   if(ispresent(vl_u.roc[0])){setverdict(fail)}else {setverdict(pass)} 
+  //   if(ispresent(vl_u.r.x)){setverdict(fail)}else {setverdict(pass)} 
+  //   if(ispresent(vl_u.roc[99])){setverdict(fail)} else {setverdict(pass)} 
+  // }
+
+
+
+  testcase tc_union_modify_ispresent() runs on unionOper_mycomp {
+    var MyUnion1 vl_u:= c_myunion2;
+    if(ispresent(vl_u)) {setverdict(pass)} else {setverdict(fail)}
+    if(ispresent(vl_u.roc)){setverdict(fail)} else {setverdict(pass)}
+    if(ispresent(vl_u.roi)){setverdict(fail)} else {setverdict(pass)}  
+
+    vl_u:=c_myunion1;
+    if(ispresent(vl_u)) {setverdict(pass)} else {setverdict(fail)}
+    if(ispresent(vl_u.roc)){setverdict(pass)} else {setverdict(fail)}
+    if(ispresent(vl_u.roc[0])){setverdict(pass)}else {setverdict(fail)}
+    if(ispresent(vl_u.roc[1])){setverdict(pass)}else {setverdict(fail)}
+    if(ispresent(vl_u.roc[2])){setverdict(pass)}else {setverdict(fail)}
+    if(ispresent(vl_u.roc[3])){setverdict(fail)}
+    if(ispresent(vl_u.roc[99])){setverdict(fail)}
+    if(ispresent(vl_u.i)){setverdict(fail)}
+    if(ispresent(vl_u.roi)){setverdict(fail)}
+    if(ispresent(vl_u.roi[0])){setverdict(fail)}
+    if(ispresent(vl_u.roi[1])){setverdict(fail)} else {setverdict(pass)}
+    log(vl_u.roc);
+  }
+  //expected:error
+  testcase tc_sideeffect1_ispresent() runs on unionOper_mycomp {
+    var MyUnion1 vl_u:= c_myunion1;    // { roc:= { "1aa", "2bb", "3cc"}}
+    if(ispresent(vl_u.roc[2])){setverdict(pass)}else {setverdict(fail)}
+    if(ispresent(vl_u.roc[3])){setverdict(fail)}else {setverdict(pass)}
+  }
+
+  //expected:error
+  testcase tc_sideeffect2_ispresent() runs on unionOper_mycomp {
+    var MyUnion1 vl_u:= c_myunion1;  // { roc:= { "1aa", "2bb", "3cc"}}
+    var integer vl_oldsize:=0, vl_newsize:=0;
+    vl_oldsize:=sizeof(vl_u.roc);
+
+    if(ispresent(vl_u.i)){setverdict(fail)}else {setverdict(pass)}  
+
+    if(ispresent(vl_u.roc)) {setverdict(pass)}else {setverdict(fail)}
+
+    //checks if  size is unchenged  
+    if(ispresent(vl_u.roc[4])) {setverdict(fail)}else {setverdict(pass)}
+    vl_newsize:=sizeof(vl_u.roc);
+    if(vl_newsize == vl_oldsize) {setverdict(pass)}else {setverdict(fail)}
+    //log(vl_u.i);
+  }
+  
+type set InnerSet {
+  integer num,
+  charstring str
+}
+
+type record InnerRec {
+  integer num,
+  charstring str
+}
+
+type union InnerUni {
+  InnerSet s,
+  InnerRec r
+}
+
+type record Outer {
+  InnerUni uni1 optional,
+  InnerUni uni2,
+  record of InnerUni unis
+}
+
+//modulepar Outer mp;
+
+// Test case for artf703093 : A union with an unbound alternative should itself be unbound
+// All unions in the module parameter and the variable declared in the test case should
+// be unbound (instead of being bound with an unbound alternative).
+// Copying the record containing the unions should be possible, too, without errors.
+testcase tc_union_with_unbound_alternative() runs on unionOper_mycomp {
+//  if (isbound(mp.uni1)) {
+//    setverdict(fail, "mp.uni1 is bound: ", mp.uni1);
+//  }
+//  if (isbound(mp.uni2)) {
+//    setverdict(fail, "mp.uni2 is bound: ", mp.uni2);
+//  }
+//  if (isbound(mp.unis[0])) {
+//    setverdict(fail, "mp.unis[0] is bound: ", mp.unis[0]);
+//  }
+//  if (isbound(mp.unis[1])) {
+//    setverdict(fail, "mp.unis[1] is bound: ", mp.unis[1]);
+//  }
+
+  var Outer x := {
+    uni1 := { r := { num := -, str := - } },
+    uni2 := { s := { num := -, str := - } },
+    unis := {
+      { r := { num := -, str := - } },
+      { s := { num := -, str := - } }
+    }
+  };
+  if (isbound(x.uni1)) {
+    setverdict(fail, "x.uni1 is bound: ", x.uni1);
+  }
+  if (isbound(x.uni2)) {
+    setverdict(fail, "x.uni2 is bound: ", x.uni2);
+  }
+  if (isbound(x.unis[0])) {
+    setverdict(fail, "x.unis[0] is bound: ", x.unis[0]);
+  }
+  if (isbound(x.unis[1])) {
+    setverdict(fail, "x.unis[1] is bound: ", x.unis[1]);
+  }
+
+  var Outer copy := x;
+  if (isbound(copy.uni1)) {
+    setverdict(fail, "copied x.uni1 is bound: ", copy.uni1);
+  }
+  if (isbound(copy.uni2)) {
+    setverdict(fail, "copied x.uni2 is bound: ", copy.uni2);
+  }
+  if (isbound(copy.unis[0])) {
+    setverdict(fail, "copied x.unis[0] is bound: ", copy.unis[0]);
+  }
+  if (isbound(copy.unis[1])) {
+    setverdict(fail, "copied x.unis[1] is bound: ", copy.unis[1]);
+  }
+
+//  copy := mp;
+//  if (isbound(copy.uni1)) {
+//    setverdict(fail, "copied mp.uni1 is bound: ", copy.uni1);
+//  }
+//  if (isbound(copy.uni2)) {
+//    setverdict(fail, "copied mp.uni2 is bound: ", copy.uni2);
+//  }
+//  if (isbound(copy.unis[0])) {
+//    setverdict(fail, "copied mp.unis[0] is bound: ", copy.unis[0]);
+//  }
+//  if (isbound(copy.unis[1])) {
+//    setverdict(fail, "copied mp.unis[1] is bound: ", copy.unis[1]);
+//  }
+  setverdict(pass);
+}
+
+control {
+ const typedefunionComp_myunion cl_1:= { x1:={ x1:=1, x2:=1.2 }}; // constant in control part
+ const typedefunionComp_myunion cl_2:= { x2:={ '12AB'O, 'CD12'O }};
+ const typedefunionComp_myunion cl_3:= { x3:={ x1:=2, x2:=1.3 }};
+ const typedefunionComp_myunion cl_4:= { x4:={ "a", "b", "c" }};
+ const typedefunionComp_myunion cl_5:= { x5:={ x1 :=3 }};
+ const typedefunionComp_myunion cl_6:= { x6:={ 1,2,3}};
+ var typedefunionComp_myunion vl_1; // variable in control part
+ var typedefunionComp_myunion vl_2;
+ var typedefunionComp_myunion vl_3;
+ var typedefunionComp_myunion vl_4;
+ var typedefunionComp_myunion vl_5;
+ var typedefunionComp_myunion vl_6;
+
+ execute(unionAssign());
+ execute(unionAssignEnum());
+ execute(unionAssignRec());
+ execute(unionAssignRecof());
+ execute(unionAssignSet());
+ execute(unionAssignSetof());
+ execute(unionAssignUnion());
+ execute(unionAssignElem());
+ execute(unionAssignElemEnum());
+ execute(unionAssignElemRec());
+ execute(unionAssignElemRecof());
+ execute(unionAssignElemSet());
+ execute(unionAssignElemSetof());
+ execute(unionAssignElemUnion());
+ execute(unionConst());
+ execute(unionConstEnum());
+ execute(unionConstRec());
+ execute(unionConstRecof());
+ execute(unionConstSet());
+ execute(unionConstSetof());
+ execute(unionConstUnion())
+ execute(unionComp());
+ execute(unionCompSame());
+ execute(unionCompEnum());
+ execute(unionCompRec());
+ execute(unionCompRecof());
+ execute(unionCompSet());
+ execute(unionCompSetof());
+ execute(unionCompUnion());
+ execute(unionSubtypes());
+ execute(unionIsvalue());
+ execute(unionIsbound());
+ 
+ execute(tc_unionOfRecordOfs1());
+ execute(tc_unionOfRecordOfs2());
+ execute(tc_union_modify());
+ execute(tc_sideeffect1());
+ execute(tc_sideeffect2());
+ execute(tc_unionOfRecordOfs1_ispresent());
+ execute(tc_unionOfRecordOfs2_ispresent());
+ execute(tc_unionOfRecordOfs3_ispresent());
+ execute(tc_union_modify_ispresent());
+ execute(tc_sideeffect1_ispresent());
+ execute(tc_sideeffect2_ispresent());
+ execute(tc_union_with_unbound_alternative());
+}
+}
diff --git a/Regression_Test_java/src/TverdictOper.ttcn b/Regression_Test_java/src/TverdictOper.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..c3a5d7813436d8004c6874025952a828d1cbad2b
--- /dev/null
+++ b/Regression_Test_java/src/TverdictOper.ttcn
@@ -0,0 +1,350 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Godar, Marton
+ *   Kovacs, Ferenc
+ *   Raduly, Csaba
+ *   Szabados, Kristof
+ *   Szabo, Janos Zoltan – initial implementation
+ *
+ ******************************************************************************/
+module TverdictOper
+{ type component verdictOper_mycomp {};
+  const verdicttype verdictOper_const1:=fail;
+
+testcase verdictAssign() runs on verdictOper_mycomp {
+ var verdicttype x1:=inconc;
+ var verdicttype x2;
+ x2:=pass;
+ if (x1==inconc) {setverdict(pass);}	//at declaration
+     else {setverdict(fail);}
+ if (x2==pass) {setverdict(pass);}	//later
+     else {setverdict(fail);}
+}
+
+testcase verdictConst() runs on verdictOper_mycomp {
+ const verdicttype const1:=inconc;
+ if (verdictOper_const1==fail) {setverdict(pass);}	//definition part declaration
+     else {setverdict(fail);}
+ if (const1==inconc) {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+}
+
+
+testcase verdictCompEq() runs on verdictOper_mycomp {
+var verdicttype x1,x2,x3;
+  x1:=pass;
+  x2:=pass;
+  x3:=inconc;
+  if (x1==x2) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (not(x3==x2)) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (x1==pass) {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if (not(x1==fail)) {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if (pass==x1) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if (not(inconc==x1)) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if (pass==pass) {setverdict(pass);}	//value_value
+   else {setverdict(fail);}
+  if (not(pass==fail)) {setverdict(pass);}	//value_value
+   else {setverdict(fail);}
+}
+
+testcase verdictCompNotEq() runs on verdictOper_mycomp
+{ var verdicttype x1,x2,x3;
+  x1:=pass;
+  x2:=fail;
+  x3:=pass;
+  if (x1!=x2) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (not(x1!=x3)) {setverdict(pass);}	//variable_variable
+   else {setverdict(fail);}
+  if (x1!=fail) {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if (not(x1!=pass)) {setverdict(pass);}	//variable_value
+   else {setverdict(fail);}
+  if (pass!=x2) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if (not(fail!=x2)) {setverdict(pass);}	//value_variable
+   else {setverdict(fail);}
+  if (inconc!=fail) {setverdict(pass);}	//value_value
+   else {setverdict(fail);}
+  if (not(pass!=pass)) {setverdict(pass);}	//value_value
+   else {setverdict(fail);}
+}
+
+testcase verdictSetGet() runs on verdictOper_mycomp {
+ var verdicttype x1;
+ if (getverdict != none) { setverdict(fail); stop; }
+ setverdict(pass);
+ x1 := getverdict;
+ if (x1 != pass) { setverdict(fail); stop; }
+}
+
+testcase verdictSet_None() runs on verdictOper_mycomp {
+ // do nothing
+}
+
+testcase verdictSet_n_None() runs on verdictOper_mycomp {
+ setverdict(none);
+}
+
+testcase verdictSet_p_Pass() runs on verdictOper_mycomp {
+ setverdict(pass);
+}
+
+testcase verdictSet_i_Inconc() runs on verdictOper_mycomp {
+ setverdict(inconc);
+}
+
+testcase verdictSet_f_Fail() runs on verdictOper_mycomp {
+ setverdict(fail, "fail alone is fail");
+}
+
+testcase verdictSet_p_i_Inconc() runs on verdictOper_mycomp {
+ setverdict(pass);
+ setverdict(inconc);
+}
+
+testcase verdictSet_p_f_Fail() runs on verdictOper_mycomp {
+ setverdict(pass);
+ setverdict(fail, "fail after pass is fail");
+}
+
+testcase verdictSet_p_n_Pass() runs on verdictOper_mycomp {
+ setverdict(pass);
+ setverdict(none);
+}
+
+testcase verdictSet_i_p_Inconc() runs on verdictOper_mycomp {
+ setverdict(inconc);
+ setverdict(pass);
+}
+
+testcase verdictSet_i_f_Fail() runs on verdictOper_mycomp {
+ setverdict(inconc);
+ setverdict(fail);
+}
+
+testcase verdictSet_i_n_Inconc() runs on verdictOper_mycomp {
+ setverdict(inconc);
+ setverdict(none);
+}
+
+testcase verdictSet_f_p_Fail() runs on verdictOper_mycomp {
+ setverdict(fail);
+ setverdict(pass, "pass after fail is still fail");
+}
+
+testcase verdictSet_f_i_Fail() runs on verdictOper_mycomp {
+ setverdict(fail);
+ setverdict(inconc);
+}
+
+testcase verdictSet_f_n_Fail() runs on verdictOper_mycomp {
+ setverdict(fail);
+ setverdict(none);
+}
+
+testcase verdictSet_n_p_Pass() runs on verdictOper_mycomp {
+ setverdict(none);
+ setverdict(pass);
+}
+
+testcase verdictSet_n_i_Inconc() runs on verdictOper_mycomp {
+ setverdict(none);
+ setverdict(inconc);
+}
+
+testcase verdictSet_n_f_Fail() runs on verdictOper_mycomp {
+ setverdict(none);
+ setverdict(fail);
+}
+
+/*--- VERDICT REASON -----------------------------------------------*/
+
+modulepar octetstring VR_mp := '12353425'O;
+const float VR_fl := 1.0;
+//type record VR_rec {
+//	integer i,
+//	boolean b
+//}
+//
+//testcase verdict_reason() runs on verdictOper_mycomp {
+//
+//	template VR_rec VR_tmpl := { i := 1235, b := true};
+//	var integer VR_int := 5;
+//	var boolean VR_bool;
+//	timer VR_timer := 5.0;
+//	VR_timer.start;
+//
+// 	setverdict(pass, "Module parameter identifier: ", VR_mp);
+// 	setverdict(pass, "Literal value: ", "this is the value");
+// 	setverdict(pass, "Data constant identifier: ", VR_fl);
+// 	setverdict(pass, "Template instance: ", VR_tmpl);
+// 	setverdict(pass, "Data type variable identifier: ", VR_int);
+// 	setverdict(pass, "Uninitialized data type variable identifier: ", VR_bool);
+// 	setverdict(pass, "self component type variable identifier: ", self);
+// 	setverdict(pass, "mtc component type variable identifier: ", mtc);
+// 	setverdict(pass, "system component type variable identifier: ", system);
+// 	setverdict(pass, "Timer running operation: ", VR_timer.running);
+// 	setverdict(pass, "Timer name: ", VR_timer);
+// 	setverdict(pass, "Getverdict operation: ", getverdict);
+// 	setverdict(pass, "More parameters: ", getverdict, system, self, VR_tmpl, VR_mp, "and this is the and of all logging...");
+// 	setverdict(pass);
+//}
+
+type verdicttype typedefbasic_myverdt;
+type verdicttype myv1 (pass, fail, none, inconc)
+type myv1 myv2
+type verdicttype myv3 (error)
+type verdicttype myv4 (myv1, myv3)
+const myv1 c_myv1 := pass
+const myv4 c_myv2 := none
+template myv1 t_myv1 := f_v1()
+template myv1 t_myv2 := f_v2()
+template myv4 t_myv3 := fail
+
+modulepar myv1 mod1 := c_myv1
+
+function f_v1() return myv1 { return inconc }
+function f_v2() return myv1 { return c_myv1 }
+
+testcase verdictSubtypes() runs on verdictOper_mycomp {
+  if (pass == mod1 and mod1 == pass and f_v1() != f_v2()) { setverdict(pass) }
+  else { setverdict(fail) }
+  var template myv3 vt_v1 := error
+  var myv3 v_v1 := valueof(vt_v1)
+  if (error == v_v1 and match(error, vt_v1)) { setverdict(pass) }
+  else { setverdict(fail) }
+}
+
+testcase verdictIsbound() runs on verdictOper_mycomp {
+  var verdicttype v0;
+  var verdicttype v1 := pass;
+  if ( isvalue(v0) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(v1) ) { setverdict(pass); } else { setverdict(fail); };
+}
+
+control{
+ var integer fault_count := 0;
+ if (execute(verdictAssign()) != pass) {
+  log("Test case verdictAssign has unexpected verdict.");
+  fault_count := fault_count + 1;
+ }
+ if (execute(verdictConst()) != pass) {
+  log("Test case verdictConst has unexpected verdict.");
+  fault_count := fault_count + 1;
+ }
+ if (execute(verdictCompEq()) != pass) {
+  log("Test case verdictCompEq has unexpected verdict.");
+  fault_count := fault_count + 1;
+ }
+ if (execute(verdictCompNotEq()) != pass) {
+  log("Test case verdictCompNotEq has unexpected verdict.");
+  fault_count := fault_count + 1;
+ }
+ if (execute(verdictSetGet()) != pass) {
+  log("Test case verdictSetGet has unexpected verdict.");
+  fault_count := fault_count + 1;
+ }
+ if (execute(verdictSet_None()) != none) {
+  log("Test case verdictSet_None has unexpected verdict.");
+  fault_count := fault_count + 1;
+ }
+ if (execute(verdictSet_n_None()) != none) {
+  log("Test case verdictSet_n_None has unexpected verdict.");
+  fault_count := fault_count + 1;
+ }
+ if (execute(verdictSet_p_Pass()) != pass) {
+  log("Test case verdictSet_p_Pass has unexpected verdict.");
+  fault_count := fault_count + 1;
+ }
+ if (execute(verdictSet_i_Inconc()) != inconc) {
+  log("Test case verdictSet_i_Inconc has unexpected verdict.");
+  fault_count := fault_count + 1;
+ }
+ if (execute(verdictSet_f_Fail()) != fail) {
+  log("Test case verdictSet_f_Fail has unexpected verdict.");
+  fault_count := fault_count + 1;
+ }
+ if (execute(verdictSet_p_i_Inconc()) != inconc) {
+  log("Test case verdictSet_p_i_Inconc has unexpected verdict.");
+  fault_count := fault_count + 1;
+ }
+ if (execute(verdictSet_p_f_Fail()) != fail) {
+  log("Test case verdictSet_p_f_Fail has unexpected verdict.");
+  fault_count := fault_count + 1;
+ }
+ if (execute(verdictSet_p_n_Pass()) != pass) {
+  log("Test case verdictSet_p_n_Pass has unexpected verdict.");
+  fault_count := fault_count + 1;
+ }
+ if (execute(verdictSet_i_p_Inconc()) != inconc) {
+  log("Test case verdictSet_i_p_Inconc has unexpected verdict.");
+  fault_count := fault_count + 1;
+ }
+ if (execute(verdictSet_i_f_Fail()) != fail) {
+  log("Test case verdictSet_i_f_Fail has unexpected verdict.");
+  fault_count := fault_count + 1;
+ }
+ if (execute(verdictSet_i_n_Inconc()) != inconc) {
+  log("Test case verdictSet_i_n_Inconc has unexpected verdict.");
+  fault_count := fault_count + 1;
+ }
+ if (execute(verdictSet_f_p_Fail()) != fail) {
+  log("Test case verdictSet_f_p_Fail has unexpected verdict.");
+  fault_count := fault_count + 1;
+ }
+ if (execute(verdictSet_f_i_Fail()) != fail) {
+  log("Test case verdictSet_f_i_Fail has unexpected verdict.");
+  fault_count := fault_count + 1;
+ }
+ if (execute(verdictSet_f_n_Fail()) != fail) {
+  log("Test case verdictSet_f_n_Fail has unexpected verdict.");
+  fault_count := fault_count + 1;
+ }
+ if (execute(verdictSet_n_p_Pass()) != pass) {
+  log("Test case verdictSet_n_p_Pass has unexpected verdict.");
+  fault_count := fault_count + 1;
+ }
+ if (execute(verdictSet_n_i_Inconc()) != inconc) {
+  log("Test case verdictSet_n_i_Inconc has unexpected verdict.");
+  fault_count := fault_count + 1;
+ }
+ if (execute(verdictSet_n_f_Fail()) != fail) {
+  log("Test case verdictSet_n_f_Fail has unexpected verdict.");
+  fault_count := fault_count + 1;
+ }
+// if (execute(verdict_reason()) != pass) {
+//  log("Test case verdict_reason has unexpected verdict.");
+//  fault_count := fault_count + 1;
+// }
+ if (execute(verdictSubtypes()) != pass) {
+  log("Test case verdictSubtypes() has unexpected verdict.");
+  fault_count := fault_count + 1;
+  }
+ if (execute(verdictIsbound()) != pass) {
+  log("Test case verdictSubtypes() has unexpected verdict.");
+  fault_count := fault_count + 1;
+ }
+ if (fault_count == 0) {
+  log("ALL TEST CASES HAVE PASSED!!!");
+ } else {
+  var integer i := 0;
+  log("NUMBER OF FAILED TEST CASES: ", fault_count);
+  // this will cause an error
+  i := 1 / i;
+ }
+ }
+}
diff --git a/Regression_Test_java/src/all_from/all_from.ttcn b/Regression_Test_java/src/all_from/all_from.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..042aacb214c3c89a2bad204797b125764260ca4d
--- /dev/null
+++ b/Regression_Test_java/src/all_from/all_from.ttcn
@@ -0,0 +1,1543 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Baranyi, Botond
+ *   Raduly, Csaba
+ *
+ ******************************************************************************/
+module all_from { // ETSI CR 6088
+import from types all;
+import from functions all;
+
+template RoI t_imported_RoI1 := {1, 2, (6..9)};
+template RoI t_imported_RoI2 := {1, *, 3};
+template RoI t_imported_RoI3 := {20,21,22};
+template RoI t_imported_RoI4 := {1, ?, 3};
+//for permutation:
+template RoI t_imported_RoI1_P := {1, 2, *};
+template RoI t_imported_RoI3_P := {1, 2, 3};
+template RoI t_imported_RoI7_P := {1, 2, ?};
+
+//===========Set of Integer================================
+template SoI t_imported_SoI1 := {1,2,(6..9)};
+template SoI t_imported_SoI2 := {1, *, 3};
+template SoI t_imported_SoI3 := {20,21,22};
+
+//just to test these types as well:
+modulepar RoI tsp_RoI3 := {20,21,22};
+modulepar RoI tsp_SoI3 := {20,21,22};
+
+const RoI c_RoI3 := {20,21,22};
+const SoI c_SoI3 := {20,21,22};
+
+// Test Target:
+// ETSI ES 201 873-1 v?.?
+// B 1.2.1 Template List
+//"It can be used on values of all types"
+
+//============Record of Integer============================
+template RoI t_RoI1 := {1, 2, (6..9)};
+template RoI t_RoI2 := {1, *, 3};
+template RoI t_RoI3 := {20,21,22};
+template RoI t_RoI4 := {1, ?, 3};
+
+template integer t_i0 := (all from t_RoI1);
+template integer t_i0_eq := (1, 2, (6..9));
+
+template integer t_i1 := (all from t_RoI1, 100);
+template integer t_i1_eq := (1, 2, (6..9), 100); 
+
+template integer t_i2 := (-1,0,all from t_RoI1, 100);
+template integer t_i2_eq:=(-1,0,1, 2, (6..9),100);
+
+template integer t_i3 := (-1,0,all from t_RoI1, all from t_RoI3, 100);
+template integer t_i3_eq := (-1,0,1, 2, (6..9), 20,21,22, 100);
+
+template integer t_i4 := (-1,0,all from t_RoI1, 100, all from t_RoI3);
+template integer t_i4_eq := (-1,0,1, 2, (6..9),100,20,21,22);
+
+template integer t_i5 := (-1,0,all from t_RoI1, 100,all from t_RoI3,all from t_RoI3 ); //repetition
+template integer t_i5_eq := (-1,0,1, 2, (6..9),100,20,21,22,20,21,22);
+
+template integer t_i6 := (-1,0,all from t_RoI1, 100, all from t_RoI3,all from t_RoI3,all from t_RoI3); //repetition
+template integer t_i6_eq := (-1,0,1, 2, (6..9),100,20,21,22,20,21,22,20,21,22);
+
+template integer t_i7 := (all from t_RoI4,100);
+template integer t_i7_eq := (1,?,3,100);
+
+template integer t_i8 := (100,all from t_RoI4);
+template integer t_i8_eq := (100,1,?,3);
+
+template integer t_i9 := (100,all from t_RoI4,-1);
+template integer t_i9_eq := (100,1,?,3,-1);
+//NEG TEST: template integer t_i10 := ((all from t_RoI2),100);   //<== WHY not if the previous three accepted?
+//NEG TEST: template integer t_i11 := (100,all from t_RoI2);
+//NEG TEST: template integer t_i12 := (100,all from t_RoI2,-1);
+
+//from modulepar:
+template integer t_i13roi := (all from tsp_RoI3);
+template integer t_i13_eq := (20,21,22);
+template integer t_i13soi := (all from tsp_SoI3);
+
+//from const:
+template integer t_i13roi_c := (all from c_RoI3);
+template integer t_i13soi_c := (all from c_SoI3);
+
+
+//=== All from referring remote templates (imported templates)
+template integer t_importing_i0 := (all from t_imported_RoI1);
+template integer t_importing_i1 := (all from t_imported_RoI1, 100);
+template integer t_importing_i2 := (-1,0,all from t_imported_RoI1, 100);
+template integer t_importing_i3 := (-1,0,all from t_imported_RoI1, all from t_imported_RoI3, 100);
+template integer t_importing_i4 := (-1,0,all from t_imported_RoI1, 100, all from t_imported_RoI3);
+template integer t_importing_i5 := (-1,0,all from t_imported_RoI1, 100,all from t_imported_RoI3,all from t_imported_RoI3 ); //repetition
+template integer t_importing_i6 := (-1,0,all from t_imported_RoI1, 100, all from t_imported_RoI3,all from t_imported_RoI3,all from t_imported_RoI3); //repetition
+template integer t_importing_i7 := (all from t_imported_RoI4,100);
+template integer t_importing_i8 := (100,all from t_imported_RoI4);
+template integer t_importing_i9 := (100,all from t_imported_RoI4,-1);
+
+  
+//===========Set of Integer================================
+template SoI t_SoI1 := {1,2,(6..9)};
+template SoI t_SoI2 := {1, *, 3};
+template SoI t_SoI3 := {20,21,22};
+
+template integer t_i0s    := (all from t_SoI1);
+template integer t_i0s_eq := ( 1,2,(6..9));
+
+template integer t_i1s    := (all from t_SoI1, 100);
+template integer t_i1s_eq := ( 1,2,(6..9),100);
+// equivalent to         (1, 2, (6..9)   , 100);
+
+template integer t_i2s := (-1,0,all from t_SoI1, 100);
+template integer t_i2s_eq:=(-1,0,1,2,(6..9), 100);
+
+template integer t_i3s := (-1,0,all from t_SoI1, all from t_SoI3, 100);
+template integer t_i3s_eq := (-1,0,1,2,(6..9),20,21,22, 100);
+
+template integer t_i4s := (-1,0,all from t_SoI1, 100, all from t_SoI3);
+template integer t_i4s_eq := (-1,0,1,2,(6..9),100,20,21,22);
+
+template integer t_i5s := (-1,0,all from t_imported_SoI1, 100, all from t_imported_SoI3,all from t_imported_SoI3 ); //repetition
+template integer t_i5s_eq := (-1,0,1,2,(6..9),100,20,21,22,20,21,22);
+
+template integer t_i6s := (-1,0,all from t_imported_SoI1, 100, all from t_imported_SoI3,all from t_imported_SoI3,all from t_imported_SoI3); //repetition
+template integer t_i6s_eq := (-1,0,1,2,(6..9),100,20,21,22,20,21,22,20,21,22);
+
+template integer t_importing_i0s    := (all from t_imported_SoI1);
+template integer t_importing_i1s    := (all from t_imported_SoI1, 100);
+template integer t_importing_i2s := (-1,0,all from t_imported_SoI1, 100);
+template integer t_importing_i3s := (-1,0,all from t_imported_SoI1, all from t_imported_SoI3, 100);
+template integer t_importing_i4s := (-1,0,all from t_imported_SoI1, 100, all from t_imported_SoI3);
+template integer t_importing_i5s := (-1,0,all from t_imported_SoI1, 100, all from t_imported_SoI3,all from t_imported_SoI3 ); //repetition
+template integer t_importing_i6s := (-1,0,all from t_SoI1, 100, all from t_SoI3,all from t_SoI3,all from t_SoI3); //repetition
+
+//===========Record of of charstring================================
+template RoCS t_RoCS1 := { "apple","banana","","pear"};
+template RoCS t_RoCS2 := { "apples","bananas","","pears"};
+template charstring t_cs1 := ( all from t_RoCS1, "dog" );
+template charstring t_cs1_eq := ( "apple","banana","","pear", "dog" );
+template charstring t_cs2 := ( "treeeeeeeeeeeeee",all from t_RoCS1, "dog", all from t_RoCS2);
+template charstring t_cs2_eq := ( "treeeeeeeeeeeeee","apple","banana","","pear", "dog","apples","bananas","","pears");
+
+//===========Record of octetstring================================
+template RoOS t_RoOS1 := {'ABBA'O,'BABA'O,'FFFF'O,'00'O,'0B'O}
+template octetstring t_os1 := ( all from t_RoOS1 );
+template octetstring t_os1_eq := ('ABBA'O,'BABA'O,'FFFF'O,'00'O,'0B'O)
+template octetstring t_os2 := ( 'AA'O,all from t_RoOS1,all from t_RoOS1);
+
+//====== Embedded templates ====
+//Record
+template MyRecord t_myrec1 := { i:= t_i1, roi:=t_RoI1, soi:=t_SoI1 }
+template MyRecord t_myrec1_eq := { i:= t_i1_eq, roi:=t_RoI1, soi:={1,2,(6..9)} }
+
+template MyRecord t_myrec2 := { i:= t_i2, roi:=t_RoI1, soi:=t_SoI1 }
+template MyRecord t_myrec2_eq := { i:= t_i2_eq, roi:=t_RoI1, soi:= {1,2,(6..9)}}  
+
+template MyRecord t_myrec3 := { i:= t_i2, roi:={t_i0s,t_i1}, soi:=t_SoI1 }
+template MyRecord t_myrec3_eq := { i:= t_i2_eq, roi:={( 1,2,(6..9)),(1, 2, (6..9), 100)}, soi:={1,2,(6..9)} }    
+
+//Union
+template MyUnion t_myunion1i   := { i:= t_i1}
+template MyUnion t_myunion1roi := { roi:={t_i1,t_i1}} 
+template MyUnion t_myunion1soi := { soi:={t_i1,t_i1}} 
+
+template MyUnion t_myunion1i_eq   := { i:= t_i1_eq}
+template MyUnion t_myunion1roi_eq := { roi:= {(1, 2, (6..9)),(1, 2, (6..9))}} 
+template MyUnion t_myunion1soi_eq := { soi:= {(1, 2, (6..9)),(1, 2, (6..9))}}
+
+template MyUnion t_myunion2i := { i:= t_i2  }
+template MyUnion t_myunion2roi := { roi:=t_RoI1  }
+template MyUnion t_myunion2soi := { soi:=t_SoI1 }
+
+template MyUnion t_myunion2i_eq := { i:= t_i2_eq  }
+template MyUnion t_myunion2roi_eq := { roi:={1, 2,(6..9)} };
+template MyUnion t_myunion2soi_eq := { soi:= {1,2,(6..9)} };
+
+template MyUnion t_myunion3 := { roi:={t_i0s,t_i1}}
+template MyUnion t_myunion3_eq := {roi:={ ( 1,2,(6..9)),(1, 2, (6..9), 100)}} 
+
+//Complex
+template RoI t_roiComplex1 := { t_i0s, (all from t_SoI3) };
+template RoI t_roiComplex1_eq  := { ( 1,2,(6..9)), (20,21,22)};
+template integer t_complex1 := (all from t_roiComplex1);
+template integer t_complex1_eq := ( ( 1,2,(6..9)), (20,21,22));
+
+//==== function reference =====
+template RoF_int2int t_rofref_int2int := { refers(f_int2int_1),refers(f_int2int_2) }
+template F_int2int t_fref_int2int := ( all from t_rofref_int2int );
+template F_int2int t_fref_int2int_eq := ( refers(f_int2int_1),refers(f_int2int_2)  );
+
+//============== Test for Integer List ================================
+
+
+//----- Tests for static templates ------
+
+//real static template, without any manipulation
+testcase tc_checkIntegerValueListTemplate() runs on A
+{
+  var RoI vl_goodValues := { 1,2,6,7,8,9,100};
+  action("t_i1=", t_i1, " will be checked against ",vl_goodValues);
+  var integer N:=sizeof(vl_goodValues);
+  for(var integer i:=0;i<N;i:=i+1) {
+    if (match(vl_goodValues[i], t_i1)) { setverdict(pass); }
+    else { setverdict(fail,vl_goodValues[i], " should match ", t_i1); }
+  }
+
+  var RoI vl_badValues := { -99,-10,-1,0,3,4,5,10,11,20,99,101,102,200,1000, 100000000000000};  
+  action("t_i1=", t_i1, " will be checked against ",vl_badValues);
+  N:=sizeof(vl_badValues);
+  for(var integer i:=0;i<N;i:=i+1) {
+    if (not match(vl_badValues[i], t_i1)) { setverdict(pass); }
+    else { setverdict(fail,vl_badValues[i], " should match ", t_i1); }
+  }
+
+}
+
+//=== 0 ===
+//( 1,2,(6..9));
+testcase tc_checkIntegerValueListTemplate0_eq() runs on A{
+  f_checkIntTemplateEquivalence(t_i0,t_i0_eq);
+}
+
+testcase tc_checkImportingIntegerValueListTemplate0_eq() runs on A{
+  f_checkIntTemplateEquivalence(t_importing_i0,t_i0_eq);
+}
+
+testcase tc_checkIntegerValueListTemplate0() runs on A
+{
+  var RoI vl_goodValues := { 1,2,6,7,8,9};
+  var RoI vl_badValues := { -99,-10,-1,0,3,4,5,10,11,20,99,100,101,102,200,1000, 100000000000000};  
+  f_checkIntegerTemplate(t_i0,vl_goodValues,vl_badValues);
+}
+
+testcase tc_checkImportingIntegerValueListTemplate0() runs on A
+{
+  var RoI vl_goodValues := { 1,2,6,7,8,9};
+  var RoI vl_badValues := { -99,-10,-1,0,3,4,5,10,11,20,99,100,101,102,200,1000, 100000000000000};  
+  f_checkIntegerTemplate(t_importing_i0,vl_goodValues,vl_badValues);
+}
+//=== 1 ===
+//( 1,2,(6..9),100);
+testcase tc_checkIntegerValueListTemplate1_eq() runs on A{
+  f_checkIntTemplateEquivalence(t_i1,t_i1_eq);
+}
+
+testcase tc_checkImportingIntegerValueListTemplate1_eq() runs on A{
+  f_checkIntTemplateEquivalence(t_importing_i1,t_i1_eq);
+}
+
+testcase tc_checkIntegerValueListTemplate1() runs on A
+{
+  var RoI vl_goodValues := { 1,2,6,7,8,9,100};
+  var RoI vl_badValues := { -99,-10,-1,0,3,4,5,10,11,20,99,101,102,200,1000, 100000000000000};  
+  f_checkIntegerTemplate(t_i1,vl_goodValues,vl_badValues);
+}
+
+testcase tc_checkImportingIntegerValueListTemplate1() runs on A
+{
+  var RoI vl_goodValues := { 1,2,6,7,8,9,100};
+  var RoI vl_badValues := { -99,-10,-1,0,3,4,5,10,11,20,99,101,102,200,1000, 100000000000000};  
+  f_checkIntegerTemplate(t_importing_i1,vl_goodValues,vl_badValues);
+}
+//=== 2 ===
+//(-1,0,1,2,(6..9), 100);
+testcase tc_checkIntegerValueListTemplate2_eq() runs on A{
+  f_checkIntTemplateEquivalence(t_i2,t_i2_eq);
+}
+
+testcase tc_checkImportingIntegerValueListTemplate2_eq() runs on A{
+  f_checkIntTemplateEquivalence(t_importing_i2,t_i2_eq);
+}
+testcase tc_checkIntegerValueListTemplate2() runs on A
+{
+  var RoI vl_goodValues := { -1,0,1,2,6,7,8,9,100};
+  var RoI vl_badValues := { -99,-10,3,4,5,10,11,20,99,101,102,200,1000, 100000000000000};  
+  f_checkIntegerTemplate(t_i2,vl_goodValues,vl_badValues);
+}
+testcase tc_checkImportingIntegerValueListTemplate2() runs on A
+{
+  var RoI vl_goodValues := { -1,0,1,2,6,7,8,9,100};
+  var RoI vl_badValues := { -99,-10,3,4,5,10,11,20,99,101,102,200,1000, 100000000000000};  
+  f_checkIntegerTemplate(t_importing_i2,vl_goodValues,vl_badValues);
+}
+//=== 3 ===
+//(-1,0,1,2,(6..9),20,21,22, 100);
+testcase tc_checkIntegerValueListTemplate3_eq() runs on A{
+  f_checkIntTemplateEquivalence(t_i3,t_i3_eq);
+}
+testcase tc_checkIntegerValueListTemplate3() runs on A
+{
+  var RoI vl_goodValues := { -1,0,1,2,6,7,8,9,100,20,21,22};
+  var RoI vl_badValues := { -99,-10,3,4,5,10,11,19,23,40,42,44,99,101,102,200,1000, 100000000000000};  
+  f_checkIntegerTemplate(t_i3,vl_goodValues,vl_badValues);
+}
+//=== 4 ===
+//order;(-1,0,1,2,(6..9),100,20,21,22);
+testcase tc_checkIntegerValueListTemplate4_eq() runs on A{
+  f_checkIntTemplateEquivalence(t_i4,t_i4_eq);
+}
+testcase tc_checkIntegerValueListTemplate4() runs on A
+{
+  var RoI vl_goodValues := { -1,0,1,2,6,7,8,9,100,20,21,22};
+  var RoI vl_badValues := { -99,-10,3,4,5,10,11,19,23,40,42,44,99,101,102,200,1000, 100000000000000};  
+  f_checkIntegerTemplate(t_i4,vl_goodValues,vl_badValues);
+}
+
+//=== 5 ===
+//repetition
+//(-1,0,1,2,(6..9),100,20,21,22,20,21,22);
+testcase tc_checkIntegerValueListTemplate5_eq() runs on A{
+  f_checkIntTemplateEquivalence(t_i5,t_i5_eq);
+}
+testcase tc_checkIntegerValueListTemplate5() runs on A
+{
+  var RoI vl_goodValues := { -1,0,1,2,6,7,8,9,100,20,21,22};
+  var RoI vl_badValues := { -99,-10,3,4,5,10,11,19,23,40,42,44,99,101,102,200,1000, 100000000000000};  
+  f_checkIntegerTemplate(t_i5,vl_goodValues,vl_badValues);
+}
+
+//=== 6 ===
+//(-1,0,1,2,(6..9),100,20,21,22,20,21,22,20,21,22);
+testcase tc_checkIntegerValueListTemplate6_eq() runs on A{
+  f_checkIntTemplateEquivalence(t_i6,t_i6_eq);
+}
+testcase tc_checkIntegerValueListTemplate6() runs on A
+{
+  var RoI vl_goodValues := { -1,0,1,2,6,7,8,9,100,20,21,22};
+  var RoI vl_badValues := { -99,-10,3,4,5,10,11,19,23,40,42,44,99,101,102,200,1000, 100000000000000};  
+  f_checkIntegerTemplate(t_i6,vl_goodValues,vl_badValues);
+}
+//=== 7 ===
+//(1,?,3,100);
+testcase tc_checkIntegerValueListTemplate7_eq() runs on A{
+  f_checkIntTemplateEquivalence(t_i7,t_i7_eq);
+}
+testcase tc_checkIntegerValueListTemplate7() runs on A
+{
+  var RoI vl_goodValues := {-1,0,1,2,3,4,5,500,5000};
+  var RoI vl_badValues := { };  
+  f_checkIntegerTemplate(t_i7,vl_goodValues,vl_badValues);
+}
+//=== 8 ===
+//(100,all from t_RoI4);
+testcase tc_checkIntegerValueListTemplate8_eq() runs on A{
+  f_checkIntTemplateEquivalence(t_i8,t_i8_eq);
+}
+testcase tc_checkIntegerValueListTemplate8() runs on A
+{
+  var RoI vl_goodValues := {-1,0,1,2,3,4,5,500,5000};
+  var RoI vl_badValues := { };  
+  f_checkIntegerTemplate(t_i8,vl_goodValues,vl_badValues);
+}
+//=== 9 ===
+//(100,1,?,3,-1);
+testcase tc_checkIntegerValueListTemplate9_eq() runs on A{
+  f_checkIntTemplateEquivalence(t_i9,t_i9_eq);
+}
+testcase tc_checkIntegerValueListTemplate9() runs on A
+{
+  var RoI vl_goodValues := {-1,0,1,2,3,4,5,500,5000};
+  var RoI vl_badValues := { };  
+  f_checkIntegerTemplate(t_i9,vl_goodValues,vl_badValues);
+}
+
+/* wrong?
+testcase tc_checkIntegerValueListTemplate10() runs on A
+{
+  var RoI vl_goodValues := {-1,0,1,2,3,4,5,500,5000};
+  var RoI vl_badValues := { };  
+  f_checkIntegerTemplate(t_i10,vl_goodValues,vl_badValues);
+}
+
+testcase tc_checkIntegerValueListTemplate11() runs on A
+{
+  var RoI vl_goodValues := {-1,0,1,2,3,4,5,500,5000};
+  var RoI vl_badValues := { };  
+  f_checkIntegerTemplate(t_i11,vl_goodValues,vl_badValues);
+}
+
+testcase tc_checkIntegerValueListTemplate12() runs on A
+{
+  var RoI vl_goodValues := {-1,0,1,2,3,4,5,500,5000};
+  var RoI vl_badValues := { };  
+  f_checkIntegerTemplate(t_i12,vl_goodValues,vl_badValues);
+}
+*/
+
+//=== i13 ===
+//(20,21,22);
+
+testcase tc_checkIntegerValueListTemplate13roi_eq() runs on A{
+  f_checkIntTemplateEquivalence(t_i13roi,t_i13_eq);
+}
+testcase tc_checkIntegerValueListTemplate13roi() runs on A
+{
+  var RoI vl_goodValues := {20,21,22};
+  var RoI vl_badValues := { };  
+  f_checkIntegerTemplate(t_i13roi,vl_goodValues,vl_badValues);
+}
+
+testcase tc_checkIntegerValueListTemplate13soi_eq() runs on A{
+  f_checkIntTemplateEquivalence(t_i13soi,t_i13_eq);
+}
+testcase tc_checkIntegerValueListTemplate13soi() runs on A
+{
+  var RoI vl_goodValues := {20,21,22};
+  var RoI vl_badValues := { };  
+  f_checkIntegerTemplate(t_i13soi,vl_goodValues,vl_badValues);
+}
+
+testcase tc_checkIntegerValueListTemplate13roi_c_eq() runs on A{
+  f_checkIntTemplateEquivalence(t_i13roi_c,t_i13_eq);
+}
+testcase tc_checkIntegerValueListTemplate13roi_c() runs on A
+{
+  var RoI vl_goodValues := {20,21,22};
+  var RoI vl_badValues := { };  
+  f_checkIntegerTemplate(t_i13roi_c,vl_goodValues,vl_badValues);
+}
+
+testcase tc_checkIntegerValueListTemplate13soi_c_eq() runs on A{
+  f_checkIntTemplateEquivalence(t_i13soi_c,t_i13_eq);
+}
+testcase tc_checkIntegerValueListTemplate13soi_c() runs on A
+{
+  var RoI vl_goodValues := {20,21,22};
+  var RoI vl_badValues := { };  
+  f_checkIntegerTemplate(t_i13soi_c,vl_goodValues,vl_badValues);
+}
+
+testcase tc_checkAllFromInFunctionCall_IntegerValueListInTemplate13roi_eq() runs on A{
+  var template integer tl_i := 0;
+  f_createIntegerWithAllFromFromInTemplateFromRoi(t_RoI3,tl_i);
+  f_checkIntTemplateEquivalence(tl_i,t_i13_eq);
+}
+
+testcase tc_checkAllFromInFunctionCall_IntegerValueListInOutTemplate13roi_eq() runs on A{
+  var template integer tl_i := 0;
+  f_createIntegerWithAllFromFromInTemplateFromRoi(t_RoI3,tl_i);
+  f_checkIntTemplateEquivalence(tl_i,t_i13_eq);
+}
+
+testcase tc_checkAllFromInFunctionCall_IntegerValueListInTemplate13soi_eq() runs on A{
+  var template integer tl_i := 0;
+  f_createIntegerWithAllFromFromInTemplateFromSoi(t_SoI3,tl_i);
+  f_checkIntTemplateEquivalence(tl_i,t_i13_eq);
+}
+
+testcase tc_checkAllFromInFunctionCall_IntegerValueListInOutTemplate13soi_eq() runs on A{
+  var template integer tl_i := 0;
+  f_createIntegerWithAllFromFromInTemplateFromSoi(t_SoI3,tl_i);
+  f_checkIntTemplateEquivalence(tl_i,t_i13_eq);
+}
+
+testcase tc_checkAllFromComponentVar_IntegerValueListTemplate13roi_eq() runs on A{
+  var template integer tl_i := (all from v_roi);
+  f_checkIntTemplateEquivalence(tl_i,t_i13_eq);
+}
+
+testcase tc_checkAllFromComponentVar_IntegerValueListTemplate13soi_eq() runs on A{
+  var template integer tl_i := (all from v_soi);
+  f_checkIntTemplateEquivalence(tl_i,t_i13_eq);
+}
+
+//====== templates derived from set of integers
+//=== i0s ===
+//t_i0s_eq := ( 1,2,(6..9));
+
+testcase tc_checkIntegerValueListTemplate0s_eq() runs on A{
+  f_checkIntTemplateEquivalence(t_i0s,t_i0s_eq);
+}
+
+testcase tc_checkImportingIntegerValueListTemplate0s_eq() runs on A{
+  f_checkIntTemplateEquivalence(t_importing_i0s,t_i0s_eq);
+}
+
+testcase tc_checkIntegerValueListTemplate0s() runs on A
+{
+  var RoI vl_goodValues := { 1,2,6,7,8,9};
+  var RoI vl_badValues := { -99,-10,-1,0,3,4,5,10,11,20,99,100,101,102,200,1000, 100000000000000};  
+  f_checkIntegerTemplate(t_i0s,vl_goodValues,vl_badValues);
+}
+testcase tc_checkImportingIntegerValueListTemplate0s() runs on A
+{
+  var RoI vl_goodValues := { 1,2,6,7,8,9};
+  var RoI vl_badValues := { -99,-10,-1,0,3,4,5,10,11,20,99,100,101,102,200,1000, 100000000000000};  
+  f_checkIntegerTemplate(t_importing_i0s,vl_goodValues,vl_badValues);
+}
+//=== i1s ==
+//t_i1s_eq := ( 1,2,(6..9),100);
+testcase tc_checkIntegerValueListTemplate1s_eq() runs on A{
+  f_checkIntTemplateEquivalence(t_i1s,t_i1s_eq);
+}
+testcase tc_checkImportingIntegerValueListTemplate1s_eq() runs on A{
+  f_checkIntTemplateEquivalence(t_importing_i1s,t_i1s_eq);
+}
+testcase tc_checkIntegerValueListTemplate1s() runs on A
+{
+  var RoI vl_goodValues := { 1,2,6,7,8,9,100};
+  var RoI vl_badValues := { -99,-10,-1,0,3,4,5,10,11,20,99,101,102,200,1000, 100000000000000};  
+  f_checkIntegerTemplate(t_i1s,vl_goodValues,vl_badValues);
+}
+
+//=== i2s ===
+//(-1,0,1,2,(6..9), 100);
+testcase tc_checkIntegerValueListTemplate2s_eq() runs on A{
+  f_checkIntTemplateEquivalence(t_i2s,t_i2s_eq);
+}
+testcase tc_checkIntegerValueListTemplate2s() runs on A
+{
+  var RoI vl_goodValues := { -1,0,1,2,6,7,8,9,100};
+  var RoI vl_badValues := { -99,-10,3,4,5,10,11,20,99,101,102,200,1000, 100000000000000};  
+  f_checkIntegerTemplate(t_i2s,vl_goodValues,vl_badValues);
+}
+
+//=== i3s ===
+//(-1,0,1,2,(6..9),20,21,22, 100);
+testcase tc_checkIntegerValueListTemplate3s_eq() runs on A{
+  f_checkIntTemplateEquivalence(t_i3s,t_i3s_eq);
+}
+testcase tc_checkIntegerValueListTemplate3s() runs on A
+{
+  var RoI vl_goodValues := { -1,0,1,2,6,7,8,9,100,20,21,22};
+  var RoI vl_badValues := { -99,-10,3,4,5,10,11,19,23,40,42,44,99,101,102,200,1000, 100000000000000};  
+  f_checkIntegerTemplate(t_i3s,vl_goodValues,vl_badValues);
+}
+
+//=== i4s ===
+//order
+//(-1,0,1,2,(6..9),100,20,21,22);
+testcase tc_checkIntegerValueListTemplate4s_eq() runs on A{
+  f_checkIntTemplateEquivalence(t_i4s,t_i4s_eq);
+}
+testcase tc_checkIntegerValueListTemplate4s() runs on A
+{
+  var RoI vl_goodValues := { -1,0,1,2,6,7,8,9,100,20,21,22};
+  var RoI vl_badValues := { -99,-10,3,4,5,10,11,19,23,40,42,44,99,101,102,200,1000, 100000000000000};  
+  f_checkIntegerTemplate(t_i4s,vl_goodValues,vl_badValues);
+}
+
+//=== i5s ===
+//repetition
+testcase tc_checkIntegerValueListTemplate5s_eq() runs on A{
+  f_checkIntTemplateEquivalence(t_i5s,t_i5s_eq);
+}
+testcase tc_checkIntegerValueListTemplate5s() runs on A
+{
+  var RoI vl_goodValues := { -1,0,1,2,6,7,8,9,100,20,21,22};
+  var RoI vl_badValues := { -99,-10,3,4,5,10,11,19,23,40,42,44,99,101,102,200,1000, 100000000000000};  
+  f_checkIntegerTemplate(t_i5s,vl_goodValues,vl_badValues);
+}
+
+//=== i6s ===
+//(-1,0,1,2,(6..9),100,20,21,22,20,21,22,20,21,22);
+testcase tc_checkIntegerValueListTemplate6s_eq() runs on A{
+  f_checkIntTemplateEquivalence(t_i6s,t_i6s_eq);
+}
+testcase tc_checkIntegerValueListTemplate6s() runs on A
+{
+  var RoI vl_goodValues := { -1,0,1,2,6,7,8,9,100,20,21,22};
+  var RoI vl_badValues := { -99,-10,3,4,5,10,11,19,23,40,42,44,99,101,102,200,1000, 100000000000000};  
+  f_checkIntegerTemplate(t_i6s,vl_goodValues,vl_badValues);
+}
+//-------- Tests for dynamic templates ( template variables) ----
+//=== i0 ===
+//( 1,2,(6..9));
+testcase tc_checkIntegerValueListTemplate0_eq_dyn() runs on A{
+  var template integer tl_i0 := (all from t_RoI1);
+  f_checkIntTemplateEquivalence(tl_i0,t_i0_eq);
+}
+
+testcase tc_checkImportingIntegerValueListTemplate0_eq_dyn() runs on A{
+  var template integer tl_importing_i0 := (all from t_imported_RoI1);
+  f_checkIntTemplateEquivalence(tl_importing_i0,t_i0_eq);
+}
+
+testcase tc_checkIntegerValueListTemplate0_eq_2dyn() runs on A{
+  var template RoI tl_RoI1 := {1, 2, (6..9)};
+  var template integer tl_i0 := (all from tl_RoI1);
+  f_checkIntTemplateEquivalence(tl_i0,t_i0_eq);
+}
+
+testcase tc_checkIntegerValueListTemplate0_dyn() runs on A
+{
+  var template integer tl_i0 := (all from t_RoI1);
+  var RoI vl_goodValues := { 1,2,6,7,8,9};
+  var RoI vl_badValues := { -99,-10,-1,0,3,4,5,10,11,20,99,100,101,102,200,1000, 100000000000000};  
+  f_checkIntegerTemplate(tl_i0,vl_goodValues,vl_badValues);
+}
+
+testcase tc_checkImportingIntegerValueListTemplate0_dyn() runs on A
+{
+  var template integer tl_importing_i0 := (all from t_imported_RoI1);
+  var RoI vl_goodValues := { 1,2,6,7,8,9};
+  var RoI vl_badValues := { -99,-10,-1,0,3,4,5,10,11,20,99,100,101,102,200,1000, 100000000000000};  
+  f_checkIntegerTemplate(tl_importing_i0,vl_goodValues,vl_badValues);
+}
+
+testcase tc_checkIntegerValueListTemplate0_2dyn() runs on A
+{
+  var template RoI tl_RoI1 := {1, 2, (6..9)};
+  var template integer tl_i0 := (all from tl_RoI1);
+  var RoI vl_goodValues := { 1,2,6,7,8,9};
+  var RoI vl_badValues := { -99,-10,-1,0,3,4,5,10,11,20,99,100,101,102,200,1000, 100000000000000};  
+  f_checkIntegerTemplate(tl_i0,vl_goodValues,vl_badValues);
+}
+//=== i1 ===
+testcase tc_checkIntegerValueListTemplate1_eq_dyn() runs on A
+{
+  var template integer tl_i1 := (all from t_RoI1, 100);
+  f_checkIntTemplateEquivalence(tl_i1,t_i1_eq);
+}
+testcase tc_checkIntegerValueListTemplate1_eq_2dyn() runs on A
+{
+  var template RoI tl_RoI1 := {1, 2, (6..9)};
+  var template integer tl_i1 := (all from tl_RoI1, 100);
+  f_checkIntTemplateEquivalence(tl_i1,t_i1_eq);
+}
+
+testcase tc_checkIntegerValueListTemplate1_dyn() runs on A
+{
+  var template integer tl_i1 := (all from t_RoI1, 100);
+  var RoI vl_goodValues := { 1,2,6,7,8,9,100};
+  var RoI vl_badValues := { -99,-10,-1,0,3,4,5,10,11,20,99,101,102,200,1000, 100000000000000};  
+  f_checkIntegerTemplate(tl_i1,vl_goodValues,vl_badValues);
+}
+
+testcase tc_checkIntegerValueListTemplate1_2dyn() runs on A
+{
+  var template RoI tl_RoI1:= {1, 2, (6..9)};
+  var template integer tl_i1 := (all from tl_RoI1, 100);
+  var RoI vl_goodValues := {1,2,6,7,8,9,100};
+  var RoI vl_badValues := { -99,-10,-1,0,3,4,5,10,11,20,99,101,102,200,1000, 100000000000000};  
+  f_checkIntegerTemplate(tl_i1,vl_goodValues,vl_badValues);
+}
+
+//=== i2 ===
+testcase tc_checkIntegerValueListTemplate2_eq_dyn() runs on A{
+  var template integer tl_i2 := (-1,0,all from t_RoI1, 100);
+  f_checkIntTemplateEquivalence(tl_i2,t_i2_eq);
+}
+testcase tc_checkIntegerValueListTemplate2_eq_2dyn() runs on A{
+  var template RoI tl_RoI1:= {1, 2, (6..9)};
+  var template integer tl_i2 := (-1,0,all from tl_RoI1, 100);
+  f_checkIntTemplateEquivalence(tl_i2,t_i2_eq);
+}
+testcase tc_checkIntegerValueListTemplate2_dyn() runs on A
+{
+  var template integer tl_i2 := (-1,0,all from t_RoI1, 100);
+  var RoI vl_goodValues := { -1,0,1,2,6,7,8,9,100};
+  var RoI vl_badValues := { -99,-10,3,4,5,10,11,20,99,101,102,200,1000, 100000000000000};  
+  f_checkIntegerTemplate(tl_i2,vl_goodValues,vl_badValues);
+}
+
+testcase tc_checkIntegerValueListTemplate2_2dyn() runs on A
+{
+  var template RoI tl_RoI1:= {1, 2, (6..9)};
+  var template integer tl_i2 := (-1,0,all from tl_RoI1, 100);
+  var RoI vl_goodValues := { -1,0,1,2,6,7,8,9,100};
+  var RoI vl_badValues := { -99,-10,3,4,5,10,11,20,99,101,102,200,1000, 100000000000000};  
+  f_checkIntegerTemplate(tl_i2,vl_goodValues,vl_badValues);
+}
+//=== i3 ===
+
+testcase tc_checkIntegerValueListTemplate3_eq_dyn() runs on A{
+  var template integer tl_i3 := (-1,0,all from t_RoI1, all from t_RoI3, 100); 
+  f_checkIntTemplateEquivalence(tl_i3,t_i3_eq);
+}
+testcase tc_checkIntegerValueListTemplate3_eq_2dyn() runs on A{
+  var template RoI tl_RoI1:= {1, 2, (6..9)};
+  var template RoI tl_RoI3 := {20,21,22};
+  var template integer tl_i3 := (-1,0,all from tl_RoI1, all from tl_RoI3, 100); 
+  f_checkIntTemplateEquivalence(tl_i3,t_i3_eq);
+}
+
+testcase tc_checkIntegerValueListTemplate3_dyn() runs on A
+{
+  var template integer tl_i3 := (-1,0,all from t_RoI1, all from t_RoI3, 100); 
+  var RoI vl_goodValues := { -1,0,1,2,6,7,8,9,20,21,22,100};
+  var RoI vl_badValues := { -99,-10,3,4,5,10,11,19,23,40,42,44,99,101,102,200,1000, 100000000000000};  
+  f_checkIntegerTemplate(tl_i3,vl_goodValues,vl_badValues);
+}
+
+testcase tc_checkIntegerValueListTemplate3_2dyn() runs on A
+{
+  var template RoI tl_RoI1:= {1, 2, (6..9)};
+  var template RoI tl_RoI3 := {20,21,22};
+  var template integer tl_i4 := (-1,0,all from tl_RoI1, 100, all from tl_RoI3);
+  var RoI vl_goodValues := { -1,0,1,2,6,7,8,9,100,20,21,22};
+  var RoI vl_badValues := { -99,-10,3,4,5,10,11,19,23,40,42,44,99,101,102,200,1000, 100000000000000};  
+  f_checkIntegerTemplate(tl_i4,vl_goodValues,vl_badValues);
+}
+
+//=== i4 ===
+testcase tc_checkIntegerValueListTemplate4_eq_dyn() runs on A{
+  var template integer tl_i4 :=  (-1,0,all from t_RoI1, 100, all from t_RoI3);
+  f_checkIntTemplateEquivalence(tl_i4,t_i4_eq);
+}
+testcase tc_checkIntegerValueListTemplate4_eq_2dyn() runs on A{
+  var template RoI tl_RoI1:= {1, 2, (6..9)};
+  var template RoI tl_RoI3 := {20,21,22};
+  var template integer tl_i4 :=  (-1,0,all from tl_RoI1, 100, all from tl_RoI3);
+  f_checkIntTemplateEquivalence(tl_i4,t_i4_eq);
+}
+
+testcase tc_checkIntegerValueListTemplate4_dyn() runs on A
+{
+  var template integer tl_i4 := (-1,0,all from t_RoI1, 100, all from t_RoI3);
+  var RoI vl_goodValues := { -1,0,1,2,6,7,8,9,100,20,21,22};
+  var RoI vl_badValues := { -99,-10,3,4,5,10,11,19,23,40,42,44,99,101,102,200,1000, 100000000000000};  
+  f_checkIntegerTemplate(t_i4,vl_goodValues,vl_badValues);
+}
+
+testcase tc_checkIntegerValueListTemplate4_2dyn() runs on A
+{
+  var template RoI tl_RoI1:= {1, 2, (6..9)};
+  var template RoI tl_RoI3 := {20,21,22};
+  var template integer tl_i4 := (-1,0,all from tl_RoI1, 100, all from tl_RoI3);
+  var RoI vl_goodValues := { -1,0,1,2,6,7,8,9,100,20,21,22};
+  var RoI vl_badValues := { -99,-10,3,4,5,10,11,19,23,40,42,44,99,101,102,200,1000, 100000000000000};  
+  f_checkIntegerTemplate(tl_i4,vl_goodValues,vl_badValues);
+}
+
+//=== i5 ===
+testcase tc_checkIntegerValueListTemplate5_eq_dyn() runs on A{
+  var template integer tl_i5 :=  (-1,0,all from t_RoI1, 100,all from t_RoI3,all from t_RoI3 ) 
+  f_checkIntTemplateEquivalence(tl_i5,t_i5_eq);
+}
+
+testcase tc_checkIntegerValueListTemplate5_eq_2dyn() runs on A{
+  var template RoI tl_RoI1:= {1, 2, (6..9)};
+  var template RoI tl_RoI3 := {20,21,22};
+  var template integer tl_i5 :=  (-1,0,all from tl_RoI1, 100,all from tl_RoI3,all from tl_RoI3 ) 
+  f_checkIntTemplateEquivalence(tl_i5,t_i5_eq);
+}
+
+testcase tc_checkIntegerValueListTemplate5_dyn() runs on A
+{
+  var template integer tl_i5 :=  (-1,0,all from t_RoI1, 100,all from t_RoI3,all from t_RoI3 )
+  var RoI vl_goodValues := { -1,0,1,2,6,7,8,9,100,20,21,22};
+  var RoI vl_badValues := { -99,-10,3,4,5,10,11,19,23,40,42,44,99,101,102,200,1000, 100000000000000};  
+  f_checkIntegerTemplate(tl_i5,vl_goodValues,vl_badValues);
+}
+testcase tc_checkIntegerValueListTemplate5_2dyn() runs on A
+{
+  var template RoI tl_RoI1:= {1, 2, (6..9)};
+  var template RoI tl_RoI3 := {20,21,22};
+  var template integer tl_i5 :=  (-1,0,all from tl_RoI1, 100,all from tl_RoI3,all from tl_RoI3 )
+  var RoI vl_goodValues := { -1,0,1,2,6,7,8,9,100,20,21,22};
+  var RoI vl_badValues := { -99,-10,3,4,5,10,11,19,23,40,42,44,99,101,102,200,1000, 100000000000000};  
+  f_checkIntegerTemplate(tl_i5,vl_goodValues,vl_badValues);
+}
+
+//=== i6 ===
+testcase tc_checkIntegerValueListTemplate6_eq_dyn() runs on A{
+  var template integer tl_i6 := (-1,0,all from t_RoI1, 100, all from t_RoI3,all from t_RoI3,all from t_RoI3);  
+  f_checkIntTemplateEquivalence(tl_i6,t_i6_eq);
+}
+
+testcase tc_checkIntegerValueListTemplate6_eq_2dyn() runs on A{
+  var template RoI tl_RoI1:= {1, 2, (6..9)};
+  var template RoI tl_RoI3 := {20,21,22};
+  var template integer tl_i6 := (-1,0,all from tl_RoI1, 100, all from tl_RoI3,all from tl_RoI3,all from tl_RoI3);  
+  f_checkIntTemplateEquivalence(tl_i6,t_i6_eq);
+}
+
+testcase tc_checkIntegerValueListTemplate6_dyn() runs on A
+{
+  var template integer tl_i6 := (-1,0,all from t_RoI1, 100, all from t_RoI3,all from t_RoI3,all from t_RoI3); //repetition
+  var RoI vl_goodValues := { -1,0,1,2,6,7,8,9,100,20,21,22};
+  var RoI vl_badValues := { -99,-10,3,4,5,10,11,19,23,40,42,44,99,101,102,200,1000, 100000000000000};  
+  f_checkIntegerTemplate(tl_i6,vl_goodValues,vl_badValues);
+}
+testcase tc_checkIntegerValueListTemplate6_2dyn() runs on A
+{
+  var template RoI tl_RoI1:= {1, 2, (6..9)};
+  var template RoI tl_RoI3 := {20,21,22};
+  var template integer tl_i6 := (-1,0,all from t_RoI1, 100, all from t_RoI3,all from t_RoI3,all from t_RoI3); //repetition
+  var RoI vl_goodValues := { -1,0,1,2,6,7,8,9,100,20,21,22};
+  var RoI vl_badValues := { -99,-10,3,4,5,10,11,19,23,40,42,44,99,101,102,200,1000, 100000000000000};  
+  f_checkIntegerTemplate(tl_i6,vl_goodValues,vl_badValues);
+}
+//=== i7 ===
+testcase tc_checkIntegerValueListTemplate7_eq_dyn() runs on A{
+  var template integer tl_i7 :=  (all from t_RoI4,100); 
+  f_checkIntTemplateEquivalence(tl_i7,t_i7_eq);
+}
+
+testcase tc_checkIntegerValueListTemplate7_eq_2dyn() runs on A{
+  var template RoI tl_RoI4 := {1, ?, 3};
+  var template integer tl_i7 :=  (all from tl_RoI4,100); 
+  f_checkIntTemplateEquivalence(tl_i7,t_i7_eq);
+}
+
+testcase tc_checkIntegerValueListTemplate7_dyn() runs on A
+{
+  var template integer tl_i7 :=  (all from t_RoI4,100); 
+  var RoI vl_goodValues := {-1,0,1,2,3,4,5,500,5000};
+  var RoI vl_badValues := { };  
+  f_checkIntegerTemplate(tl_i7,vl_goodValues,vl_badValues);
+}
+
+testcase tc_checkIntegerValueListTemplate7_2dyn() runs on A
+{
+  var template RoI tl_RoI4 := {1, ?, 3};
+  var template integer tl_i7 :=  (all from tl_RoI4,100); 
+  var RoI vl_goodValues := {-1,0,1,2,3,4,5,500,5000};
+  var RoI vl_badValues := { };  
+  f_checkIntegerTemplate(tl_i7,vl_goodValues,vl_badValues);
+}
+
+//=== i8 ===
+testcase tc_checkIntegerValueListTemplate8_eq_dyn() runs on A{
+  var template integer tl_i8 :=  (100,all from t_RoI4);
+  f_checkIntTemplateEquivalence(tl_i8,t_i8_eq);
+}
+
+testcase tc_checkIntegerValueListTemplate8_eq_2dyn() runs on A{
+  var template RoI tl_RoI4 := {1, ?, 3};
+  var template integer tl_i8 :=  (100,all from tl_RoI4);
+  f_checkIntTemplateEquivalence(tl_i8,t_i8_eq);
+}
+
+testcase tc_checkIntegerValueListTemplate8_dyn() runs on A
+{
+  var template integer tl_i8 := (100,all from t_RoI4);
+  var RoI vl_goodValues := {-1,0,1,2,3,4,5,500,5000};
+  var RoI vl_badValues := { };  
+  f_checkIntegerTemplate(tl_i8,vl_goodValues,vl_badValues);
+}
+testcase tc_checkIntegerValueListTemplate8_2dyn() runs on A
+{
+  var template RoI tl_RoI4 := {1, ?, 3};
+  var template integer tl_i8 := (100,all from t_RoI4);
+  var RoI vl_goodValues := {-1,0,1,2,3,4,5,500,5000};
+  var RoI vl_badValues := { };  
+  f_checkIntegerTemplate(tl_i8,vl_goodValues,vl_badValues);
+}
+
+//=== i9 ===
+testcase tc_checkIntegerValueListTemplate9_eq_dyn() runs on A{
+  var template integer tl_i9 := (100,all from t_RoI4,-1);  
+  f_checkIntTemplateEquivalence(tl_i9,t_i9_eq);
+}
+
+testcase tc_checkIntegerValueListTemplate9_eq_2dyn() runs on A
+{
+  var template RoI tl_RoI4 := {1, ?, 3};
+  var template integer tl_i9 := (100,all from t_RoI4,-1);  
+  f_checkIntTemplateEquivalence(tl_i9,t_i9_eq);
+}
+
+testcase tc_checkIntegerValueListTemplate9_dyn() runs on A
+{
+  var template integer tl_i9 := (100,all from t_RoI4,-1); 
+  var RoI vl_goodValues := {-1,0,1,2,3,4,5,500,5000};
+  var RoI vl_badValues := { };  
+  f_checkIntegerTemplate(tl_i9,vl_goodValues,vl_badValues);
+}
+
+testcase tc_checkIntegerValueListTemplate9_2dyn() runs on A
+{
+  var template RoI tl_RoI4 := {1, ?, 3};
+  var template integer tl_i9 := (100,all from tl_RoI4,-1); 
+  var RoI vl_goodValues := {-1,0,1,2,3,4,5,500,5000};
+  var RoI vl_badValues := { };  
+  f_checkIntegerTemplate(tl_i9,vl_goodValues,vl_badValues);
+}
+
+//=== 10 ===
+//More complex example
+
+//== 10 eq ==
+testcase tc_RoITemplate10_eq() runs on A
+{
+  f_checkRoITemplateEquivalence(t_roiComplex1,t_roiComplex1_eq);
+}
+
+testcase tc_checkIntegerValueListTemplate10_eq() runs on A
+{
+  f_checkIntTemplateEquivalence(t_complex1,t_complex1_eq);
+}
+
+//local template
+testcase tc_checkIntegerValueListTemplate10_eq_local() runs on A
+{
+  template integer tl_complex1 := (all from t_roiComplex1);
+  f_checkIntTemplateEquivalence(tl_complex1,t_complex1_eq);
+}
+
+testcase tc_checkIntegerValueListTemplate10_eq_dyn() runs on A
+{
+  var template integer tl_complex1 := (all from t_roiComplex1);
+  f_checkIntTemplateEquivalence(tl_complex1,t_complex1_eq);
+}
+
+testcase tc_checkIntegerValueListTemplate10_eq_2dyn() runs on A
+{
+  var template RoI tl_roiComplex1 := { t_i0s, (all from t_SoI3) };
+  var template integer tl_complex1 := (all from tl_roiComplex1);
+  f_checkIntTemplateEquivalence(tl_complex1,t_complex1_eq);
+}
+
+testcase tc_checkIntegerValueListTemplate10_eq_3dyn() runs on A
+{
+  var template integer tl_i0s    := (all from t_SoI1);
+  var template RoI tl_roiComplex1 := { tl_i0s, (all from t_SoI3) };
+  var template integer tl_complex1 := (all from tl_roiComplex1);
+  f_checkIntTemplateEquivalence(tl_complex1,t_complex1_eq);
+}
+
+testcase tc_checkIntegerValueListTemplate10_eq_4dyn() runs on A
+{
+  var template SoI tl_SoI1 := {1,2,(6..9)};
+  template SoI tl_SoI3 := {20,21,22};
+
+  var template integer tl_i0s    := (all from tl_SoI1);
+  var template RoI tl_roiComplex1 := { tl_i0s, (all from tl_SoI3) };
+  var template integer tl_complex1 := (all from tl_roiComplex1);
+  f_checkIntTemplateEquivalence(tl_complex1,t_complex1_eq);
+}
+
+testcase tc_checkIntegerValueListTemplate10_eq_5dyn() runs on A
+{
+  var template SoI tl_SoI1 := {1,2,(6..9)};
+  var template SoI tl_SoI3 := {20,21,22};  //<=== !!! if this is local then the tc can be compiled
+
+  var template integer tl_i0s    := (all from tl_SoI1);
+  var template RoI tl_roiComplex1 := { tl_i0s, (all from tl_SoI3) };//compile error
+  var template integer tl_complex1 := (all from tl_roiComplex1);
+  f_checkIntTemplateEquivalence(tl_complex1,t_complex1_eq);
+}
+//=== 10 check values ==
+testcase tc_checkIntegerValueListTemplate10() runs on A
+{
+  var RoI vl_goodValues := {1,2,6,7,8,9,20,21,22};
+  var RoI vl_badValues := { 0,3,4,5,10,19,23};  
+  f_checkIntegerTemplate(t_complex1,vl_goodValues,vl_badValues);
+}
+
+testcase tc_checkIntegerValueListTemplate10_dyn() runs on A
+{
+  var template integer tl_complex1 := (all from t_roiComplex1); 
+  var RoI vl_goodValues := {1,2,6,7,8,9,20,21,22};
+  var RoI vl_badValues := { 0,3,4,5,10,19,23};  
+  f_checkIntegerTemplate(tl_complex1,vl_goodValues,vl_badValues);
+}
+
+testcase tc_checkIntegerValueListTemplate10_loc_dyn() runs on A
+{
+  template RoI tl_roiComplex1 := { t_i0s, (all from t_SoI3) }; //local template def
+  var template integer tl_complex1 := (all from tl_roiComplex1); //dyn template def
+  
+  var RoI vl_goodValues := {1,2,6,7,8,9,20,21,22};
+  var RoI vl_badValues := { 0,3,4,5,10,19,23};  
+  f_checkIntegerTemplate(tl_complex1,vl_goodValues,vl_badValues);
+}
+
+testcase tc_checkIntegerValueListTemplate10_2loc_2dyn () runs on A
+{
+  template SoI tl_SoI1 := {1,2,(6..9)};     //local template def
+  template SoI tl_SoI3 := {20,21,22};       //local template def
+  var template RoI tl_roiComplex1 := { (all from tl_SoI1), (all from tl_SoI3) }; 
+  var template integer tl_complex1 := (all from tl_roiComplex1); 
+  
+  var RoI vl_goodValues := {1,2,6,7,8,9,20,21,22};
+  var RoI vl_badValues := { 0,3,4,5,10,19,23};  
+  f_checkIntegerTemplate(tl_complex1,vl_goodValues,vl_badValues);
+}
+
+testcase tc_checkIntegerValueListTemplate10_3loc_2dyn () runs on A
+{
+  template SoI tl_SoI1 := {1,2,(6..9)};     //local template def
+  template SoI tl_SoI3 := {20,21,22};       //local template def
+  template integer tl_i0s    := (all from tl_SoI1);   //local template def
+  var template RoI tl_roiComplex1 := { tl_i0s, (all from tl_SoI3) }; 
+  var template integer tl_complex1 := (all from tl_roiComplex1); 
+  
+  var RoI vl_goodValues := {1,2,6,7,8,9,20,21,22};
+  var RoI vl_badValues := { 0,3,4,5,10,19,23};  
+  f_checkIntegerTemplate(tl_complex1,vl_goodValues,vl_badValues);
+}
+
+testcase tc_checkIntegerValueListTemplate10_1dyn_1loc_3dyn() runs on A
+{
+  var template SoI tl_SoI1 := {1,2,(6..9)};
+  template SoI tl_SoI3 := {20,21,22};
+  var template integer tl_i0s    := (all from tl_SoI1);
+  var template RoI tl_roiComplex1 := { tl_i0s, (all from tl_SoI3) };
+  var template integer tl_complex1 := (all from tl_roiComplex1); 
+  
+  var RoI vl_goodValues := {1,2,6,7,8,9,20,21,22};
+  var RoI vl_badValues := { 0,3,4,5,10,19,23};  
+  f_checkIntegerTemplate(tl_complex1,vl_goodValues,vl_badValues);
+}
+
+testcase tc_checkIntegerValueListTemplate10_2loc_3dyn () runs on A
+{
+  template SoI tl_SoI1 := {1,2,(6..9)};
+  template SoI tl_SoI3 := {20,21,22};
+  var template integer tl_i0s    := (all from tl_SoI1);
+  var template RoI tl_roiComplex1 := { tl_i0s, (all from tl_SoI3) };
+  var template integer tl_complex1 := (all from tl_roiComplex1); 
+  var RoI vl_goodValues := {1,2,6,7,8,9,20,21,22};
+  var RoI vl_badValues := { 0,3,4,5,10,19,23};  
+  f_checkIntegerTemplate(tl_complex1,vl_goodValues,vl_badValues);
+}
+
+// The following two thestcases are critical:
+
+//PASS
+testcase tc_checkIntegerValueListTemplate10_6dyn() runs on A
+{
+  var template SoI tl_SoI1 := {1,2,(6..9)};
+  var template SoI tl_SoI3 := {20,21,22};
+  var template integer tl_i0s := (all from tl_SoI1);
+  var template integer tl_i1s := (all from tl_SoI3); //<===this helps to compile
+  var template RoI tl_roiComplex1 := { tl_i0s,tl_i1s};
+  var template integer tl_complex1 := (all from tl_roiComplex1); 
+  var RoI vl_goodValues := {1,2,6,7,8,9,20,21,22};
+  var RoI vl_badValues := { 0,3,4,5,10,19,23};  
+  f_checkIntegerTemplate(tl_complex1,vl_goodValues,vl_badValues);
+}
+
+ 
+testcase tc_checkIntegerValueListTemplate10_5dyn() runs on A
+{
+  var template SoI tl_SoI1 := {1,2,(6..9)};
+  var template SoI tl_SoI3 := {20,21,22};  
+  var template integer tl_i0s    := (all from tl_SoI1);
+  var template RoI tl_roiComplex1 := { tl_i0s, (all from tl_SoI3) };  
+  var template integer tl_complex1 := (all from tl_roiComplex1); 
+
+  var RoI vl_goodValues := {1,2,6,7,8,9,20,21,22};
+  var RoI vl_badValues := { 0,3,4,5,10,19,23};  
+  f_checkIntegerTemplate(tl_complex1,vl_goodValues,vl_badValues);
+}
+
+ 
+testcase tc_checkIntegerValueListTemplate10_4dyn() runs on A
+{
+  var template SoI tl_SoI1 := {1,2,(6..9)};
+  var template SoI tl_SoI3 := {20,21,22};  
+  var template RoI tl_roiComplex1 := { (all from tl_SoI1), (all from tl_SoI3) };  
+  var template integer tl_complex1 := (all from tl_roiComplex1); 
+
+  var RoI vl_goodValues := {1,2,6,7,8,9,20,21,22};
+  var RoI vl_badValues := { 0,3,4,5,10,19,23};  
+  f_checkIntegerTemplate(tl_complex1,vl_goodValues,vl_badValues);
+}
+
+//+++++++++ NEGATIVE TEST+++++++++++++++++++++++++
+
+// see: TTCN3_SA_13_TD.script
+
+//====== Dynamic Templates for Set Of Integer =====
+
+//=== i0s ===
+//t_i0s_eq := ( 1,2,(6..9));
+
+testcase tc_checkIntegerValueListTemplate0s_eq_dyn() runs on A{
+  var template integer tl_i0s    := (all from t_SoI1);
+  f_checkIntTemplateEquivalence(tl_i0s,t_i0s_eq);
+}
+
+testcase tc_checkIntegerValueListTemplate0s_eq_2dyn() runs on A{
+  var template SoI tl_SoI1 := {1,2,(6..9)};
+  var template integer tl_i0s    := (all from tl_SoI1);
+  f_checkIntTemplateEquivalence(tl_i0s,t_i0s_eq);
+}
+
+testcase tc_checkIntegerValueListTemplate0s_dyn() runs on A
+{
+  var template integer tl_i0s    := (all from t_SoI1);
+  var RoI vl_goodValues := { 1,2,6,7,8,9};
+  var RoI vl_badValues := { -99,-10,-1,0,3,4,5,10,11,20,99,100,101,102,200,1000, 100000000000000};  
+  f_checkIntegerTemplate(tl_i0s,vl_goodValues,vl_badValues);
+}
+
+testcase tc_checkIntegerValueListTemplate0s_2dyn() runs on A
+{
+  var template SoI tl_SoI1 := {1,2,(6..9)};
+  var template integer tl_i0s    := (all from tl_SoI1);
+  var RoI vl_goodValues := { 1,2,6,7,8,9};
+  var RoI vl_badValues := { -99,-10,-1,0,3,4,5,10,11,20,99,100,101,102,200,1000, 100000000000000};  
+  f_checkIntegerTemplate(tl_i0s,vl_goodValues,vl_badValues);
+}
+
+//=== i1s ==
+//t_i1s_eq := ( 1,2,(6..9),100);
+testcase tc_checkIntegerValueListTemplate1s_eq_dyn() runs on A{
+  var template integer tl_i1s    := (all from t_SoI1, 100);
+  f_checkIntTemplateEquivalence(tl_i1s,t_i1s_eq);
+}
+
+testcase tc_checkIntegerValueListTemplate1s_eq_2dyn() runs on A{
+  var template SoI tl_SoI1 := {1,2,(6..9)};
+  var template integer tl_i1s    := (all from tl_SoI1, 100);
+  f_checkIntTemplateEquivalence(tl_i1s,t_i1s_eq);
+}
+
+
+testcase tc_checkIntegerValueListTemplate1s_dyn() runs on A
+{
+  var template integer tl_i1s    := (all from t_SoI1, 100);
+  var RoI vl_goodValues := { 1,2,6,7,8,9,100};
+  var RoI vl_badValues := { -99,-10,-1,0,3,4,5,10,11,20,99,101,102,200,1000, 100000000000000};  
+  f_checkIntegerTemplate(tl_i1s,vl_goodValues,vl_badValues);
+}
+
+testcase tc_checkIntegerValueListTemplate1s_2dyn() runs on A
+{
+  var template SoI tl_SoI1 := {1,2,(6..9)};
+  var template integer tl_i1s    := (all from tl_SoI1, 100);
+  var RoI vl_goodValues := { 1,2,6,7,8,9,100};
+  var RoI vl_badValues := { -99,-10,-1,0,3,4,5,10,11,20,99,101,102,200,1000, 100000000000000};  
+  f_checkIntegerTemplate(tl_i1s,vl_goodValues,vl_badValues);
+}
+
+
+//=========================================================
+//===== Test for Record of charstring =====================
+//=========================================================
+
+//=== cs1 ===
+testcase tc_CharstringTemplate1_eq() runs on A
+{
+  f_checkCharstringTemplateEquivalence(t_cs1,t_cs1_eq);
+}
+
+testcase tc_CharstringTemplate1_eq_local() runs on A
+{
+  template charstring tl_cs1 := ( all from t_RoCS1, "dog" );
+  f_checkCharstringTemplateEquivalence(tl_cs1,t_cs1_eq);
+}
+
+testcase tc_CharstringTemplate1_eq_dyn() runs on A
+{
+  var template charstring tl_cs1 := ( all from t_RoCS1, "dog" );
+  f_checkCharstringTemplateEquivalence(tl_cs1,t_cs1_eq);
+}
+
+testcase tc_CharstringTemplate1_eq_2dyn() runs on A
+{
+  var template RoCS tl_RoCS1 := { "apple","banana","","pear"};
+  var template charstring tl_cs1 := ( all from tl_RoCS1, "dog" );
+  f_checkCharstringTemplateEquivalence(tl_cs1,t_cs1_eq);
+}
+
+testcase tc_CharstringTemplate1() runs on A
+{
+  var RoCS vl_goodValues := { "apple","banana","","pear", "dog" };
+  var RoCS vl_badValues := { "house","apples" };  
+  f_checkCharstringTemplate(t_cs1,vl_goodValues,vl_badValues);
+}
+
+testcase tc_CharstringTemplate1_local() runs on A
+{
+  template charstring tl_cs1 := ( all from t_RoCS1, "dog" )
+  var RoCS vl_goodValues := { "apple","banana","","pear", "dog" };
+  var RoCS vl_badValues := { "house","apples" };  
+  f_checkCharstringTemplate(tl_cs1,vl_goodValues,vl_badValues);
+}
+
+testcase tc_CharstringTemplate1_dyn() runs on A
+{
+  var template charstring tl_cs1 := ( all from t_RoCS1, "dog" )
+  var RoCS vl_goodValues := { "apple","banana","","pear", "dog" };
+  var RoCS vl_badValues := { "house","apples" };  
+  f_checkCharstringTemplate(tl_cs1,vl_goodValues,vl_badValues);
+}
+
+testcase tc_CharstringTemplate1_2dyn() runs on A
+{
+  var template RoCS tl_RoCS1 := { "apple","banana","","pear"};
+  var template charstring tl_cs1 := ( all from tl_RoCS1, "dog" )
+  var RoCS vl_goodValues := { "apple","banana","","pear", "dog" };
+  var RoCS vl_badValues := { "house","apples" };  
+  f_checkCharstringTemplate(tl_cs1,vl_goodValues,vl_badValues);
+}
+
+//=== cs2 ===
+testcase tc_CharstringTemplate2_eq() runs on A
+{
+  f_checkCharstringTemplateEquivalence(t_cs2,t_cs2_eq);
+}
+
+testcase tc_CharstringTemplate2_eq_local() runs on A
+{
+  template charstring tl_cs2 :=  ( "treeeeeeeeeeeeee",all from t_RoCS1, "dog", all from t_RoCS2);
+  f_checkCharstringTemplateEquivalence(tl_cs2,t_cs2_eq);
+}
+
+testcase tc_CharstringTemplate2_eq_dyn() runs on A
+{
+  var template charstring tl_cs2 := ( "treeeeeeeeeeeeee",all from t_RoCS1, "dog", all from t_RoCS2); 
+  f_checkCharstringTemplateEquivalence(tl_cs2,t_cs2_eq);
+}
+
+testcase tc_CharstringTemplate2_eq_2dyn() runs on A
+{
+  var template RoCS tl_RoCS1 := { "apple","banana","","pear"};
+  var template RoCS tl_RoCS2 := { "apples","bananas","","pears"};
+  var template charstring tl_cs2 := ( "treeeeeeeeeeeeee",all from tl_RoCS1, "dog", all from tl_RoCS2);  
+  f_checkCharstringTemplateEquivalence(tl_cs2,t_cs2_eq);
+}
+testcase tc_CharstringTemplate2() runs on A
+{
+  var RoCS vl_goodValues := { "apple","banana","","pear", "dog", "treeeeeeeeeeeeee","apples","bananas","pears" };
+  var RoCS vl_badValues := { "house","applesss","tree","a","app","appl","pple" };  
+  f_checkCharstringTemplate(t_cs2,vl_goodValues,vl_badValues);
+}
+//=========================================================
+//================== Test for Octetstring =================
+//=========================================================
+
+//== 1 ===
+//( all from t_RoOS1 )
+//('ABBA'O,'BABA'O,'FFFF'O,'00'O,'0B'O)
+testcase tc_OctetstringTemplate1_eq() runs on A
+{
+  f_checkOctetstringTemplateEquivalence(t_os1,t_os1_eq);
+}
+
+testcase tc_OctetstringTemplate1() runs on A
+{
+
+  var RoOS vl_goodValues := { 'ABBA'O,'BABA'O,'FFFF'O,'00'O,'0B'O  };
+  var RoOS vl_badValues := { ''O,'0000'O,'00FF'O,'AA'O,'00ABBA'O };  
+  f_checkOctetstringTemplate(t_os1,vl_goodValues,vl_badValues);
+}
+
+testcase tc_OctetstringTemplate1_eq_local() runs on A
+{
+  template octetstring tl_os1 := ( all from t_RoOS1 );
+  f_checkOctetstringTemplateEquivalence(tl_os1,t_os1_eq);
+}
+
+testcase tc_OctetstringTemplate1_eq_dyn() runs on A
+{
+  var template octetstring tl_os1 := ( all from t_RoOS1 );
+  f_checkOctetstringTemplateEquivalence(tl_os1,t_os1_eq);
+}
+
+testcase tc_OctetstringTemplate1_eq_local_dyn() runs on A
+{
+  template RoOS tl_RoOS1 := {'ABBA'O,'BABA'O,'FFFF'O,'00'O,'0B'O}
+  var template octetstring tl_os1 := ( all from tl_RoOS1 );
+  f_checkOctetstringTemplateEquivalence(tl_os1,t_os1_eq);
+}
+
+testcase tc_OctetstringTemplate1_eq_2dyn() runs on A
+{
+  var template RoOS tl_RoOS1 := {'ABBA'O,'BABA'O,'FFFF'O,'00'O,'0B'O}
+  var template octetstring tl_os1 := ( all from tl_RoOS1 );
+  f_checkOctetstringTemplateEquivalence(tl_os1,t_os1_eq);
+}
+
+testcase tc_OctetstringTemplate1_dyn() runs on A
+{
+  var RoOS vl_goodValues := { 'ABBA'O,'BABA'O,'FFFF'O,'00'O,'0B'O  };
+  var RoOS vl_badValues := { ''O,'0000'O,'00FF'O,'AA'O,'00ABBA'O };  
+  f_checkOctetstringTemplate(t_os1,vl_goodValues,vl_badValues);
+}
+//=========================================================
+//================== Test for Records =====================
+//=========================================================
+testcase tc_MyRecordTemplate1_eq() runs on A {
+  f_checkMyRecordTemplateEquivalence(t_myrec1,t_myrec1_eq);
+}
+
+testcase tc_MyRecordTemplate1() runs on A
+{
+  var RoMyRec vl_goodValues := { 
+    {i:=1,roi:={1,2,6},soi:={1,7,2} },
+    {i:=2,roi:={1,2,7},soi:={1,9,2} } };
+  var RoMyRec vl_badValues := {{omit,omit,omit}  };  
+  f_checkMyRecTemplate(t_myrec1,vl_goodValues,vl_badValues);
+}
+
+testcase tc_MyRecordTemplate2_eq() runs on A {
+  f_checkMyRecordTemplateEquivalence(t_myrec2,t_myrec2_eq);
+}
+
+testcase tc_MyRecordTemplate3_eq() runs on A {
+  f_checkMyRecordTemplateEquivalence(t_myrec3,t_myrec3_eq);
+}
+
+//=========================================================
+//================== Test for Union =====================
+//=========================================================
+testcase tc_MyUnionTemplate1i_eq() runs on A {
+  f_checkMyUnionTemplateEquivalence(t_myunion1i,t_myunion1i_eq);
+}
+
+testcase tc_MyUnionTemplate1i() runs on A
+{
+  var RoMyUnion vl_goodValues := {{i:=1},{i:=2},{i:=6},{i:=7},{i:=8},{i:=9},{i:=100}}  ;
+  var RoMyUnion vl_badValues := {{i:=0},{i:=3},{roi:={}},{roi:={1,2}}};  
+  f_checkMyUnionTemplate(t_myunion1i,vl_goodValues,vl_badValues);
+}
+testcase tc_MyUnionTemplate1roi() runs on A
+{
+  var RoMyUnion vl_goodValues := { 
+    { roi:={1,2}  },{roi:={1,2}},{roi:={1,6}},{roi:={2,7}},{roi:={100,100}} };
+  var RoMyUnion vl_badValues := {{roi:={1}},{roi:={1,4}}, {roi:={2,3}},{roi:={1,2,3}},{roi:={1,2,6,101}},{roi:={1,2,6,100}} };  
+  f_checkMyUnionTemplate(t_myunion1roi,vl_goodValues,vl_badValues);
+}
+testcase tc_MyUnionTemplate1soi() runs on A
+{
+  var RoMyUnion vl_goodValues := { 
+   { soi:={1,2}  },{soi:={1,2}},{soi:={1,6}},{soi:={2,7}},{soi:={100,100}} };  
+  var RoMyUnion vl_badValues := { {soi:={}},{soi:={1,3}},{soi:={1,101}} };
+  f_checkMyUnionTemplate(t_myunion1soi,vl_goodValues,vl_badValues);
+}
+testcase tc_MyUnionTemplate2i_eq() runs on A {
+  f_checkMyUnionTemplateEquivalence(t_myunion2i,t_myunion2i_eq);
+}
+testcase tc_MyUnionTemplate2roi_eq() runs on A {
+  f_checkMyUnionTemplateEquivalence(t_myunion2roi,t_myunion2roi_eq);
+}
+testcase tc_MyUnionTemplate2soi_eq() runs on A {
+  f_checkMyUnionTemplateEquivalence(t_myunion2soi,t_myunion2soi_eq);
+}
+testcase tc_MyUnionTemplate3_eq() runs on A {
+  f_checkMyUnionTemplateEquivalence(t_myunion3,t_myunion3_eq);
+}
+
+//==== function reference =====
+testcase tc_functionRef_rof_eq() runs on A {
+  f_checkMyFunctionRefTemplateEquivalence( t_fref_int2int,t_fref_int2int_eq);
+}
+
+// all from with length restriction
+// 1. the target of 'all from' is foldable (known at compile-time)
+testcase tc_varTemplate_len_res_foldable() runs on A
+{
+  template RoI tl_foldable := { 6, 9 };
+  var template RoI tl_len_res := { 2, all from tl_foldable } length (3);
+  var template RoI tl_len_res_eq := { 2, 6, 9 } length (3);
+  f_checkRoITemplateEquivalence(tl_len_res, tl_len_res_eq);
+}
+
+// 2. the target of 'all from' is unfoldable (not known at compile-time)
+testcase tc_varTemplate_len_res_unfoldable() runs on A
+{
+  var template RoI tl_unfoldable := { 6, 9 };
+  var template RoI tl_len_res := { 2, all from tl_unfoldable } length (3);
+  var template RoI tl_len_res_eq := { 2, 6, 9 } length (3);
+  f_checkRoITemplateEquivalence(tl_len_res, tl_len_res_eq);
+}
+
+// HU21359 Length of record of template containing 'all from' is invalid
+template RoI t_ints_1 := { 1 };
+template RoI t_ints_2 := { 2, 3 };
+
+function modify (template RoI p1, template RoI p2)
+return template RoI
+{    
+  return { all from p1, all from p2 };
+}
+
+testcase tc_HU21359() runs on A {
+  var template RoI vt_res := modify(t_ints_1, t_ints_2);
+  var template RoI vt_exp := { 1, 2, 3 };
+  f_checkRoITemplateEquivalence(vt_res, vt_exp);
+}
+
+
+// control part is NOT used during the test!
+control {
+  //  execute(tc_checkIntegerValueListTemplate_eq());
+execute(tc_checkIntegerValueListTemplate());
+execute(tc_checkIntegerValueListTemplate0_eq());
+execute(tc_checkImportingIntegerValueListTemplate0_eq());
+execute(tc_checkIntegerValueListTemplate0());
+execute(tc_checkImportingIntegerValueListTemplate0());
+execute(tc_checkIntegerValueListTemplate1_eq());
+execute(tc_checkImportingIntegerValueListTemplate1_eq());
+execute(tc_checkIntegerValueListTemplate1());
+execute(tc_checkImportingIntegerValueListTemplate1());
+execute(tc_checkIntegerValueListTemplate2_eq());
+execute(tc_checkImportingIntegerValueListTemplate2_eq());
+execute(tc_checkIntegerValueListTemplate2());
+execute(tc_checkImportingIntegerValueListTemplate2());
+execute(tc_checkIntegerValueListTemplate3_eq());
+execute(tc_checkIntegerValueListTemplate3());
+execute(tc_checkIntegerValueListTemplate4_eq());
+execute(tc_checkIntegerValueListTemplate4());
+execute(tc_checkIntegerValueListTemplate5_eq());
+execute(tc_checkIntegerValueListTemplate5());
+execute(tc_checkIntegerValueListTemplate6_eq());
+execute(tc_checkIntegerValueListTemplate6());
+execute(tc_checkIntegerValueListTemplate7_eq());
+execute(tc_checkIntegerValueListTemplate7());
+execute(tc_checkIntegerValueListTemplate8_eq());
+execute(tc_checkIntegerValueListTemplate8());
+execute(tc_checkIntegerValueListTemplate9_eq());
+execute(tc_checkIntegerValueListTemplate9());
+execute(tc_checkIntegerValueListTemplate13roi_eq());
+execute(tc_checkIntegerValueListTemplate13roi());
+execute(tc_checkIntegerValueListTemplate13soi_eq());
+execute(tc_checkIntegerValueListTemplate13soi());
+execute(tc_checkIntegerValueListTemplate13roi_c_eq());
+execute(tc_checkIntegerValueListTemplate13roi_c());
+execute(tc_checkIntegerValueListTemplate13soi_c_eq());
+execute(tc_checkIntegerValueListTemplate13soi_c());
+execute(tc_checkAllFromInFunctionCall_IntegerValueListInTemplate13roi_eq());
+execute(tc_checkAllFromInFunctionCall_IntegerValueListInOutTemplate13roi_eq());
+execute(tc_checkAllFromInFunctionCall_IntegerValueListInTemplate13soi_eq());
+execute(tc_checkAllFromInFunctionCall_IntegerValueListInOutTemplate13soi_eq());
+execute(tc_checkAllFromComponentVar_IntegerValueListTemplate13roi_eq());
+execute(tc_checkAllFromComponentVar_IntegerValueListTemplate13soi_eq());
+execute(tc_checkIntegerValueListTemplate0s_eq());
+execute(tc_checkImportingIntegerValueListTemplate0s_eq());
+execute(tc_checkIntegerValueListTemplate0s());
+execute(tc_checkImportingIntegerValueListTemplate0s());
+execute(tc_checkIntegerValueListTemplate1s_eq());
+execute(tc_checkImportingIntegerValueListTemplate1s_eq());
+execute(tc_checkIntegerValueListTemplate1s());
+execute(tc_checkIntegerValueListTemplate2s_eq());
+execute(tc_checkIntegerValueListTemplate2s());
+execute(tc_checkIntegerValueListTemplate3s_eq());
+execute(tc_checkIntegerValueListTemplate3s());
+execute(tc_checkIntegerValueListTemplate4s_eq());
+execute(tc_checkIntegerValueListTemplate4s());
+execute(tc_checkIntegerValueListTemplate5s_eq());
+execute(tc_checkIntegerValueListTemplate5s());
+execute(tc_checkIntegerValueListTemplate6s_eq());
+execute(tc_checkIntegerValueListTemplate6s());
+execute(tc_checkIntegerValueListTemplate0_eq_dyn());
+execute(tc_checkImportingIntegerValueListTemplate0_eq_dyn());
+execute(tc_checkIntegerValueListTemplate0_eq_2dyn());
+execute(tc_checkIntegerValueListTemplate0_dyn());
+execute(tc_checkImportingIntegerValueListTemplate0_dyn());
+execute(tc_checkIntegerValueListTemplate0_2dyn());
+execute(tc_checkIntegerValueListTemplate1_eq_dyn());
+execute(tc_checkIntegerValueListTemplate1_eq_2dyn());
+execute(tc_checkIntegerValueListTemplate1_dyn());
+execute(tc_checkIntegerValueListTemplate1_2dyn());
+execute(tc_checkIntegerValueListTemplate2_eq_dyn());
+execute(tc_checkIntegerValueListTemplate2_eq_2dyn());
+execute(tc_checkIntegerValueListTemplate2_dyn());
+execute(tc_checkIntegerValueListTemplate2_2dyn());
+execute(tc_checkIntegerValueListTemplate3_eq_dyn());
+execute(tc_checkIntegerValueListTemplate3_eq_2dyn());
+execute(tc_checkIntegerValueListTemplate3_dyn());
+execute(tc_checkIntegerValueListTemplate3_2dyn());
+execute(tc_checkIntegerValueListTemplate4_eq_dyn());
+execute(tc_checkIntegerValueListTemplate4_eq_2dyn());
+execute(tc_checkIntegerValueListTemplate4_dyn());
+execute(tc_checkIntegerValueListTemplate4_2dyn());
+execute(tc_checkIntegerValueListTemplate5_eq_dyn());
+execute(tc_checkIntegerValueListTemplate5_eq_2dyn());
+execute(tc_checkIntegerValueListTemplate5_dyn());
+execute(tc_checkIntegerValueListTemplate5_2dyn());
+execute(tc_checkIntegerValueListTemplate6_eq_dyn());
+execute(tc_checkIntegerValueListTemplate6_eq_2dyn());
+execute(tc_checkIntegerValueListTemplate6_dyn());
+execute(tc_checkIntegerValueListTemplate6_2dyn());
+execute(tc_checkIntegerValueListTemplate7_eq_dyn());
+execute(tc_checkIntegerValueListTemplate7_eq_2dyn());
+execute(tc_checkIntegerValueListTemplate7_dyn());
+execute(tc_checkIntegerValueListTemplate7_2dyn());
+execute(tc_checkIntegerValueListTemplate8_eq_dyn());
+execute(tc_checkIntegerValueListTemplate8_eq_2dyn());
+execute(tc_checkIntegerValueListTemplate8_dyn());
+execute(tc_checkIntegerValueListTemplate8_2dyn());
+execute(tc_checkIntegerValueListTemplate9_eq_dyn());
+execute(tc_checkIntegerValueListTemplate9_eq_2dyn());
+execute(tc_checkIntegerValueListTemplate9_dyn());
+execute(tc_checkIntegerValueListTemplate9_2dyn());
+execute(tc_RoITemplate10_eq());
+execute(tc_checkIntegerValueListTemplate10_eq());
+execute(tc_checkIntegerValueListTemplate10_eq_local());
+execute(tc_checkIntegerValueListTemplate10_eq_dyn());
+execute(tc_checkIntegerValueListTemplate10_eq_2dyn());
+execute(tc_checkIntegerValueListTemplate10_eq_3dyn());
+execute(tc_checkIntegerValueListTemplate10_eq_4dyn());
+execute(tc_checkIntegerValueListTemplate10_eq_5dyn());
+execute(tc_checkIntegerValueListTemplate10());
+execute(tc_checkIntegerValueListTemplate10_dyn());
+execute(tc_checkIntegerValueListTemplate10_loc_dyn());
+execute(tc_checkIntegerValueListTemplate10_2loc_2dyn());
+execute(tc_checkIntegerValueListTemplate10_3loc_2dyn());
+execute(tc_checkIntegerValueListTemplate10_1dyn_1loc_3dyn());
+execute(tc_checkIntegerValueListTemplate10_2loc_3dyn());
+execute(tc_checkIntegerValueListTemplate10_6dyn());
+execute(tc_checkIntegerValueListTemplate10_5dyn());
+execute(tc_checkIntegerValueListTemplate10_4dyn());
+execute(tc_checkIntegerValueListTemplate0s_eq_dyn());
+execute(tc_checkIntegerValueListTemplate0s_eq_2dyn());
+execute(tc_checkIntegerValueListTemplate0s_dyn());
+execute(tc_checkIntegerValueListTemplate0s_2dyn());
+execute(tc_checkIntegerValueListTemplate1s_eq_dyn());
+execute(tc_checkIntegerValueListTemplate1s_eq_2dyn());
+execute(tc_checkIntegerValueListTemplate1s_dyn());
+execute(tc_checkIntegerValueListTemplate1s_2dyn());
+execute(tc_CharstringTemplate1_eq());
+execute(tc_CharstringTemplate1_eq_local());
+execute(tc_CharstringTemplate1_eq_dyn());
+execute(tc_CharstringTemplate1_eq_2dyn());
+execute(tc_CharstringTemplate1());
+execute(tc_CharstringTemplate1_local());
+execute(tc_CharstringTemplate1_dyn());
+execute(tc_CharstringTemplate1_2dyn());
+execute(tc_CharstringTemplate2_eq());
+execute(tc_CharstringTemplate2_eq_local());
+execute(tc_CharstringTemplate2_eq_dyn());
+execute(tc_CharstringTemplate2_eq_2dyn());
+execute(tc_CharstringTemplate2());
+execute(tc_OctetstringTemplate1_eq());
+execute(tc_OctetstringTemplate1());
+execute(tc_OctetstringTemplate1_eq_local());
+execute(tc_OctetstringTemplate1_eq_dyn());
+execute(tc_OctetstringTemplate1_eq_local_dyn());
+execute(tc_OctetstringTemplate1_eq_2dyn());
+execute(tc_OctetstringTemplate1_dyn());
+execute(tc_MyRecordTemplate1_eq());
+execute(tc_MyRecordTemplate1());
+execute(tc_MyRecordTemplate2_eq());
+execute(tc_MyRecordTemplate3_eq());
+execute(tc_MyUnionTemplate1i_eq());
+execute(tc_MyUnionTemplate1i());
+execute(tc_MyUnionTemplate1roi());
+execute(tc_MyUnionTemplate1soi());
+execute(tc_MyUnionTemplate2i_eq());
+execute(tc_MyUnionTemplate2roi_eq());
+execute(tc_MyUnionTemplate2soi_eq());
+execute(tc_MyUnionTemplate3_eq());
+execute(tc_functionRef_rof_eq());
+execute(tc_varTemplate_len_res_foldable());
+execute(tc_varTemplate_len_res_unfoldable());
+execute(tc_HU21359());
+}
+
+}
diff --git a/Regression_Test_java/src/all_from/all_from_complement.ttcn b/Regression_Test_java/src/all_from/all_from_complement.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..983059a8be803c1157b33072c182af26e908d30f
--- /dev/null
+++ b/Regression_Test_java/src/all_from/all_from_complement.ttcn
@@ -0,0 +1,574 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Raduly, Csaba
+ *
+ ******************************************************************************/
+module all_from_complement { // ETSI CR 6088
+import from types all;
+import from functions all;
+
+template RoI t_imported_RoI1 := {1, 2, (6..9)};
+template RoI t_imported_RoI2 := {1, *, 3};
+template RoI t_imported_RoI3 := {20,21,22};
+template RoI t_imported_RoI4 := {1, ?, 3};
+//for permutation:
+template RoI t_imported_RoI1_P := {1, 2, *};
+template RoI t_imported_RoI3_P := {1, 2, 3};
+template RoI t_imported_RoI7_P := {1, 2, ?};
+
+//===========Set of Integer================================
+template SoI t_imported_SoI1 := {1,2,(6..9)};
+template SoI t_imported_SoI2 := {1, *, 3};
+template SoI t_imported_SoI3 := {20,21,22};
+
+// B 1.2.1 Template List
+// "It can be used on values of all types"
+
+//just to test these types as well:
+modulepar RoI tsp_RoI3 := {20,21,22};
+modulepar RoI tsp_SoI3 := {20,21,22};
+
+const RoI c_RoI3 := {20,21,22};
+const SoI c_SoI3 := {20,21,22};
+
+//============Record of Integer============================
+template RoI t_RoI1 := {1, 2, (6..9)};
+template RoI t_RoI2 := {1, *, 3};
+template RoI t_RoI3 := {20,21,22};
+template RoI t_RoI4 := {1, ?, 3};
+
+//template RoI t_RoI1c :=  {complement (1),complement (2), complement(6)}; 
+ 
+template integer t_i0 := complement(all from t_RoI1);
+template integer t_i0_eq := complement (1, 2, (6..9));
+
+template integer t_i1 := complement(all from t_RoI1, 100);        
+template integer t_i1_eq :=complement(1, 2, (6..9), 100);
+
+template integer t_i2 := complement (-1,0,all from t_RoI1, 100);
+template integer t_i2_eq := complement (-1,0,1, 2, (6..9), 100);
+
+template integer t_i3 := complement (-1,0,all from t_RoI1, all from t_RoI3, 100);
+template integer t_i3_eq := complement (-1,0,1, 2, (6..9),20,21,22, 100);
+
+template integer t_i4 := complement (-1,0,all from t_RoI1, 100, all from t_RoI3);
+template integer t_i4_eq := complement (-1,0,1, 2, (6..9),100,20,21,22 );
+
+template integer t_i5 := complement (-1,0,all from t_RoI1, 100, all from t_RoI3,all from t_RoI3 ); //repetition
+template integer t_i5_eq := complement (-1,0,1, 2, (6..9),100,20,21,22,20,21,22);
+
+template integer t_i6 := complement (-1,0,all from t_RoI1, 100, all from t_RoI3,all from t_RoI3,all from t_RoI3); //repetition
+template integer t_i6_eq := complement (-1,0, 1, 2, (6..9),100,20,21,22,20,21,22,20,21,22);
+//from modulepar:
+template integer t_i13roi := complement(all from tsp_RoI3);
+template integer t_i13_eq := complement(20,21,22);
+template integer t_i13soi := complement(all from tsp_SoI3);
+
+//from const:
+template integer t_i13roi_c := complement(all from c_RoI3);
+template integer t_i13soi_c := complement(all from c_SoI3);
+//=== All from referring remote templates (imported templates)
+template integer t_importing_i0 := complement(all from t_imported_RoI1);
+template integer t_importing_i1 := complement(all from t_imported_RoI1, 100);
+template integer t_importing_i2 := complement(-1,0,all from t_imported_RoI1, 100);
+template integer t_importing_i3 := complement(-1,0,all from t_imported_RoI1, all from t_imported_RoI3, 100);
+template integer t_importing_i4 := complement(-1,0,all from t_imported_RoI1, 100, all from t_imported_RoI3);
+template integer t_importing_i5 := complement(-1,0,all from t_imported_RoI1, 100,all from t_imported_RoI3,all from t_imported_RoI3 ); //repetition
+template integer t_importing_i6 := complement(-1,0,all from t_imported_RoI1, 100, all from t_imported_RoI3,all from t_imported_RoI3,all from t_imported_RoI3); //repetition
+template integer t_importing_i7 := complement(all from t_imported_RoI4,100);
+template integer t_importing_i8 := complement(100,all from t_imported_RoI4);
+template integer t_importing_i9 := complement(100,all from t_imported_RoI4,-1);
+//===========Set of Integer================================
+template SoI t_SoI1 :=  {1, 2, (6..9)};
+template SoI t_SoI2 :=  {1, *, 3};
+template SoI t_SoI3 :=  {20,21,22};
+
+template integer t_i0s    := complement(all from t_SoI1);
+template integer t_i0s_eq := complement( 1,2,(6..9));
+
+template integer t_i1s := complement(all from t_SoI1, 100);
+template integer t_i1s_eq := complement( 1,2,(6..9),100);
+// equivalent to         (1, 2, (6..9)   , 100);
+
+template integer t_i2s := complement(-1,0,all from t_SoI1, 100);
+template integer t_i2s_eq := complement( -1,0,1,2,(6..9),100);
+
+template integer t_i3s := complement(-1,0,all from t_SoI1, all from t_SoI3, 100);
+template integer t_i3s_eq := complement( -1,0,1,2,(6..9),20,21,22,100);
+
+template integer t_i4s := complement(-1,0,all from t_SoI1, 100, all from t_SoI3);
+template integer t_i5s := complement(-1,0,all from t_SoI1, 100, all from t_SoI3,all from t_SoI3 ); //repetition
+template integer t_i6s := complement(-1,0,all from t_SoI1, 100, all from t_SoI3,all from t_SoI3,all from t_SoI3); //repetition
+
+//===========Record of of charstring================================
+template RoCS t_RoCS1 := { "apple","banana","","pear"};
+template RoCS t_RoCS2 := { "apples","bananas","","pears"};
+template charstring t_cs1 := complement ( all from t_RoCS1, "dog" );
+template charstring t_cs2 := complement ( "treeeeeeeeeeeeee",all from t_RoCS1, "dog", all from t_RoCS2);
+//==== function reference =====
+template RoF_int2int t_rofref_int2int := { refers(f_int2int_1),refers(f_int2int_2) }
+template F_int2int t_fref_int2int_c := complement( all from t_rofref_int2int );
+template F_int2int t_fref_int2int_c_eq := complement( refers(f_int2int_1),refers(f_int2int_2)  );
+//============== Test for Integer List ================================
+ 
+//----- Tests for static templates ------
+
+//real static template, without any manipulation
+testcase tc_complementInt() runs on A
+{
+  var RoI vl_goodValues := { -99,-10,-1,0,3,4,5,10,11,20,99,101,102,200,1000, 100000000000000};
+  action("t_i1=", t_i1, " will be checked against ",vl_goodValues);
+  var integer N:=sizeof(vl_goodValues);
+  for(var integer i:=0;i<N;i:=i+1) {
+    if (match(vl_goodValues[i], t_i1)) { setverdict(pass); }
+    else { setverdict(fail,vl_goodValues[i], " should match ", t_i1); }
+  }
+
+  var RoI vl_badValues := { 1,2,6,7,8,9,100};  
+  action("t_i1=", t_i1, " will be checked against ",vl_badValues);
+  N:=sizeof(vl_badValues);
+  for(var integer i:=0;i<N;i:=i+1) {
+    if (not match(vl_badValues[i], t_i1)) { setverdict(pass); }
+    else { setverdict(fail,vl_badValues[i], " should match ", t_i1); }
+  }
+
+}
+//=== i0 ===
+//complement(1, 2, (6..9));
+testcase tc_complementInt0_eq() runs on A{
+  f_checkIntTemplateEquivalence(t_i0,t_i0_eq);
+}
+
+testcase tc_complementImportingInt0_eq() runs on A{
+  f_checkIntTemplateEquivalence(t_importing_i0,t_i0_eq);
+}
+
+testcase tc_complementInt0() runs on A
+{
+  var RoI vl_goodValues := { -99,-10,-1,0,3,4,5,10,11,20,99,100,101,102,200,1000, 100000000000000};  
+  var RoI vl_badValues := {1,2,6,7,8,9};
+  f_checkIntegerTemplate(t_i0,vl_goodValues,vl_badValues);
+}
+testcase tc_complementImportingInt0() runs on A
+{
+  var RoI vl_goodValues := { -99,-10,-1,0,3,4,5,10,11,20,99,100,101,102,200,1000, 100000000000000};  
+  var RoI vl_badValues := {1,2,6,7,8,9};
+  f_checkIntegerTemplate(t_importing_i0,vl_goodValues,vl_badValues);
+}
+//=== i1 ===
+//complement(1, 2, (6..9), 100);
+testcase tc_complementInt1_eq() runs on A{
+  f_checkIntTemplateEquivalence(t_i1,t_i1_eq);
+}
+testcase tc_complementInt1() runs on A
+{
+  var RoI vl_goodValues := { -99,-10,-1,0,3,4,5,10,11,20,99,101,102,200,1000, 100000000000000};  
+  var RoI vl_badValues := { 1,2,6,7,8,9,100};
+  f_checkIntegerTemplate(t_i1,vl_goodValues,vl_badValues);
+}
+
+//complement (-1,0,1, 2, (6..9), 100);
+testcase tc_complementInt2_eq() runs on A{
+  f_checkIntTemplateEquivalence(t_i2,t_i2_eq);
+}
+testcase tc_complementInt2() runs on A
+{
+  var RoI vl_goodValues :={ -99,-10,3,4,5,10,11,20,99,101,102,200,1000, 100000000000000};  
+  var RoI vl_badValues :=  { -1,0,1,2,6,7,8,9,100};
+  f_checkIntegerTemplate(t_i2,vl_goodValues,vl_badValues);
+}
+
+//complement (-1,0,1, 2, (6..9),20,21,22, 100);
+testcase tc_complementInt3_eq() runs on A{
+  f_checkIntTemplateEquivalence(t_i3,t_i3_eq);
+}
+testcase tc_complementInt3() runs on A
+{
+  var RoI vl_goodValues := { -99,-10,3,4,5,10,11,19,23,40,42,44,99,101,102,200,1000, 100000000000000};  
+  var RoI vl_badValues := { -1,0,1,2,6,7,8,9,100,20,21,22};
+  f_checkIntegerTemplate(t_i3,vl_goodValues,vl_badValues);
+}
+
+//order
+testcase tc_complementInt4_eq() runs on A{
+  f_checkIntTemplateEquivalence(t_i4,t_i4_eq);
+}
+testcase tc_complementInt4() runs on A
+{
+  var RoI vl_goodValues := { -99,-10,3,4,5,10,11,19,23,40,42,44,99,101,102,200,1000, 100000000000000}; 
+  var RoI vl_badValues := { -1,0,1,2,6,7,8,9,100,20,21,22}; 
+  f_checkIntegerTemplate(t_i4,vl_goodValues,vl_badValues);
+}
+//repetition
+
+testcase tc_complementInt5_eq() runs on A{
+  f_checkIntTemplateEquivalence(t_i5,t_i5_eq);
+}
+testcase tc_complementInt5() runs on A
+{
+  var RoI vl_goodValues := { -99,-10,3,4,5,10,11,19,23,40,42,44,99,101,102,200,1000, 100000000000000};  
+  var RoI vl_badValues := { -1,0,1,2,6,7,8,9,100,20,21,22};
+  f_checkIntegerTemplate(t_i5,vl_goodValues,vl_badValues);
+}
+//=== i6 ===
+testcase tc_complementInt6_eq() runs on A{
+  f_checkIntTemplateEquivalence(t_i6,t_i6_eq);
+}
+testcase tc_complementInt6() runs on A
+{
+  var RoI vl_goodValues := { -99,-10,3,4,5,10,11,19,23,40,42,44,99,101,102,200,1000, 100000000000000};  
+  var RoI vl_badValues := { -1,0,1,2,6,7,8,9,100,20,21,22};
+  f_checkIntegerTemplate(t_i6,vl_goodValues,vl_badValues);
+}
+//=== i13 ===
+//modulepar test
+
+testcase tc_complementInt13roi_eq() runs on A{
+  f_checkIntTemplateEquivalence(t_i13roi,t_i13_eq);
+}
+testcase tc_complementInt13roi() runs on A
+{
+  var RoI vl_goodValues := {-1,19,23,24,100};  
+  var RoI vl_badValues := { 20,21,22};
+  f_checkIntegerTemplate(t_i13roi,vl_goodValues,vl_badValues);
+}
+testcase tc_complementInt13soi_eq() runs on A{
+  f_checkIntTemplateEquivalence(t_i13soi,t_i13_eq);
+}
+testcase tc_complementInt13soi() runs on A
+{
+  var RoI vl_goodValues := {-1,19,23,24,100};  
+  var RoI vl_badValues := { 20,21,22};
+  f_checkIntegerTemplate(t_i13soi,vl_goodValues,vl_badValues);
+}
+
+//const test:
+testcase tc_complementInt13roi_c_eq() runs on A{
+  f_checkIntTemplateEquivalence(t_i13roi_c,t_i13_eq);
+}
+testcase tc_complementInt13roi_c() runs on A
+{
+  var RoI vl_goodValues := {-1,19,23,24,100};  
+  var RoI vl_badValues := { 20,21,22};
+  f_checkIntegerTemplate(t_i13roi_c,vl_goodValues,vl_badValues);
+}
+testcase tc_complementInt13soi_c_eq() runs on A{
+  f_checkIntTemplateEquivalence(t_i13soi_c,t_i13_eq);
+}
+testcase tc_complementInt13soi_c() runs on A
+{
+  var RoI vl_goodValues := {-1,19,23,24,100};  
+  var RoI vl_badValues := { 20,21,22};
+  f_checkIntegerTemplate(t_i13soi_c,vl_goodValues,vl_badValues);
+}
+//====== templates derived from set of integers
+
+//=== i0s ===
+//complement(1, 2, (6..9));
+testcase tc_complementInt0s_eq() runs on A{
+  f_checkIntTemplateEquivalence(t_i0s,t_i0s_eq);
+}
+
+testcase tc_complementInt0s() runs on A
+{
+  var RoI vl_goodValues := { -99,-10,-1,0,3,4,5,10,11,20,99,100,101,102,200,1000, 100000000000000};  
+  var RoI vl_badValues := {1,2,6,7,8,9};
+  f_checkIntegerTemplate(t_i0s,vl_goodValues,vl_badValues);
+}
+//=== i1s ===
+testcase tc_complementInt1s_eq() runs on A{
+  f_checkIntTemplateEquivalence(t_i1s,t_i1s_eq);
+}
+
+testcase tc_complementInt1s() runs on A
+{
+  var RoI vl_goodValues := { -99,-10,-1,0,3,4,5,10,11,20,99,101,102,200,1000, 100000000000000}; 
+  var RoI vl_badValues := { 1,2,6,7,8,9,100}; 
+  f_checkIntegerTemplate(t_i1s,vl_goodValues,vl_badValues);
+}
+//=== i2s ===
+testcase tc_complementInt2s_eq() runs on A{
+  f_checkIntTemplateEquivalence(t_i2s,t_i2s_eq);
+}
+testcase tc_complementInt2s() runs on A
+{
+  var RoI vl_goodValues := { -99,-10,3,4,5,10,11,20,99,101,102,200,1000, 100000000000000};
+  var RoI vl_badValues := { -1,0,1,2,6,7,8,9,100};  
+  f_checkIntegerTemplate(t_i2s,vl_goodValues,vl_badValues);
+}
+//=== i3s ===
+testcase tc_complementInt3s() runs on A
+{
+  var RoI vl_goodValues := { -99,-10,3,4,5,10,11,19,23,40,42,44,99,101,102,200,1000, 100000000000000};  
+  var RoI vl_badValues := { -1,0,1,2,6,7,8,9,100,20,21,22};
+  f_checkIntegerTemplate(t_i3s,vl_goodValues,vl_badValues);
+}
+//=== i4s ===
+//order
+testcase tc_complementInt4s() runs on A
+{
+  var RoI vl_goodValues := { -99,-10,3,4,5,10,11,19,23,40,42,44,99,101,102,200,1000, 100000000000000};  
+  var RoI vl_badValues := { -1,0,1,2,6,7,8,9,100,20,21,22};
+  f_checkIntegerTemplate(t_i4s,vl_goodValues,vl_badValues);
+}
+
+//=== i5s ===
+//repetition
+testcase tc_complementInt5s() runs on A
+{
+  var RoI vl_goodValues := { -99,-10,3,4,5,10,11,19,23,40,42,44,99,101,102,200,1000, 100000000000000};  
+  var RoI vl_badValues := { -1,0,1,2,6,7,8,9,100,20,21,22};
+  f_checkIntegerTemplate(t_i5s,vl_goodValues,vl_badValues);
+}
+//=== i6s ===
+testcase tc_complementInt6s() runs on A
+{
+  var RoI vl_goodValues := { -99,-10,3,4,5,10,11,19,23,40,42,44,99,101,102,200,1000, 100000000000000};  
+  var RoI vl_badValues := { -1,0,1,2,6,7,8,9,100,20,21,22};
+  f_checkIntegerTemplate(t_i6s,vl_goodValues,vl_badValues);
+}
+
+
+//-------- Tests for dynamic templates ( template variables) ----
+
+//=== i0 ===
+//complement(1, 2, (6..9));
+testcase tc_complementInt0_eq_dyn() runs on A{
+  var template integer tl_i0    := complement (all from t_RoI1);
+  f_checkIntTemplateEquivalence(tl_i0,t_i0_eq);
+}
+
+testcase tc_complementInt0_eq_2dyn() runs on A{
+  var template RoI tl_RoI1 :=  {1, 2, (6..9)};
+  var template integer tl_i0    := complement (all from tl_RoI1);
+  f_checkIntTemplateEquivalence(tl_i0,t_i0_eq);
+}
+
+testcase tc_complementInt0_dyn() runs on A
+{
+  var template integer tl_i0    := complement (all from t_RoI1);
+  var RoI vl_goodValues := { -99,-10,-1,0,3,4,5,10,11,20,99,100,101,102,200,1000, 100000000000000};  
+  var RoI vl_badValues := {1,2,6,7,8,9};
+  f_checkIntegerTemplate(tl_i0,vl_goodValues,vl_badValues);
+}
+
+testcase tc_complementInt0_2dyn() runs on A
+{
+  var template RoI tl_RoI1 :=  {1, 2, (6..9)};
+  var template integer tl_i0    := complement(all from tl_RoI1);
+  var RoI vl_goodValues := { -99,-10,-1,0,3,4,5,10,11,20,99,100,101,102,200,1000, 100000000000000};  
+  var RoI vl_badValues := {1,2,6,7,8,9};
+  f_checkIntegerTemplate(tl_i0,vl_goodValues,vl_badValues);
+}
+
+//=== i1 ===
+testcase tc_complementInt1_dyn() runs on A
+{
+  var template integer tl_i1 := complement (all from t_RoI1, 100);
+  var RoI vl_goodValues := { -99,-10,-1,0,3,4,5,10,11,20,99,101,102,200,1000, 100000000000000};
+  var RoI vl_badValues  := { 1,2,6,7,8,9,100}; 
+  f_checkIntegerTemplate(tl_i1,vl_goodValues,vl_badValues);
+}
+testcase tc_complementInt1_2dyn() runs on A
+{
+  var template RoI tl_RoI1:= {1, 2, (6..9)};
+  var template integer tl_i1 := complement(all from tl_RoI1, 100);
+  var RoI vl_goodValues := { -99,-10,-1,0,3,4,5,10,11,20,99,101,102,200,1000, 100000000000000};
+  var RoI vl_badValues :=  {1,2,6,7,8,9,100};
+  f_checkIntegerTemplate(tl_i1,vl_goodValues,vl_badValues);
+} 
+
+//=== i2 ===
+testcase tc_complementInt2_dyn() runs on A
+{
+  var template integer tl_i2 := complement(-1,0,all from t_RoI1, 100);
+  var RoI vl_goodValues :=  { -99,-10,3,4,5,10,11,20,99,101,102,200,1000, 100000000000000};
+  var RoI vl_badValues := { -1,0,1,2,6,7,8,9,100};  
+  f_checkIntegerTemplate(tl_i2,vl_goodValues,vl_badValues);
+}
+
+testcase tc_complementInt2_2dyn() runs on A
+{
+  var template RoI tl_RoI1:= {1, 2, (6..9)};
+  var template integer tl_i2 := complement(-1,0,all from tl_RoI1, 100);
+  var RoI vl_goodValues := {-99,-10,3,4,5,10,11,20,99,101,102,200,1000, 100000000000000};
+  var RoI vl_badValues :=  {-1,0,1,2,6,7,8,9,100};  
+  f_checkIntegerTemplate(tl_i2,vl_goodValues,vl_badValues);
+}
+
+//=== i3 ===
+testcase tc_complementInt3_dyn() runs on A
+{
+  var template integer tl_i4 := complement(-1,0,all from t_RoI1, 100, all from t_RoI3);
+  var RoI vl_goodValues := { -99,-10,3,4,5,10,11,19,23,40,42,44,99,101,102,200,1000, 100000000000000};
+  var RoI vl_badValues := { -1,0,1,2,6,7,8,9,100,20,21,22}; 
+  f_checkIntegerTemplate(tl_i4,vl_goodValues,vl_badValues);
+}
+ 
+testcase tc_complementInt3_2dyn() runs on A
+{
+  var template RoI tl_RoI1:= {1, 2, (6..9)};
+  var template RoI tl_RoI3 := {20,21,22};
+  var template integer tl_i4 := complement(-1,0,all from tl_RoI1, 100, all from tl_RoI3);
+  var RoI vl_goodValues := { -99,-10,3,4,5,10,11,19,23,40,42,44,99,101,102,200,1000, 100000000000000}; 
+  var RoI vl_badValues := { -1,0,1,2,6,7,8,9,100,20,21,22}; 
+  f_checkIntegerTemplate(tl_i4,vl_goodValues,vl_badValues);
+}
+
+//=== i4 ===
+
+//======== Dyn. Set Of Int=========================
+
+//=== i0 ===
+//complement(1, 2, (6..9));
+testcase tc_complementInt0s_eq_dyn() runs on A{
+  var template integer tl_i0s    := complement (all from t_SoI1);
+  f_checkIntTemplateEquivalence(tl_i0s,t_i0s_eq);
+}  
+
+testcase tc_complementInt0s_eq_2dyn() runs on A{
+  var template SoI tl_SoI1 :=  {1, 2, (6..9)};
+  var template integer tl_i0s    := complement (all from tl_SoI1);
+  f_checkIntTemplateEquivalence(tl_i0s,t_i0s_eq);
+} 
+
+testcase tc_complementInt0s_dyn() runs on A
+{
+  var template integer tl_i0s    := complement (all from t_SoI1);
+  var RoI vl_goodValues := { -99,-10,-1,0,3,4,5,10,11,20,99,100,101,102,200,1000, 100000000000000};  
+  var RoI vl_badValues := {1,2,6,7,8,9};
+  f_checkIntegerTemplate(tl_i0s,vl_goodValues,vl_badValues);
+}
+
+testcase tc_complementInt0s_2dyn() runs on A
+{
+  var template SoI tl_SoI1 :=  {1, 2, (6..9)};
+  var template integer tl_i0s    := complement(all from tl_SoI1);
+  var RoI vl_goodValues := { -99,-10,-1,0,3,4,5,10,11,20,99,100,101,102,200,1000, 100000000000000};  
+  var RoI vl_badValues := {1,2,6,7,8,9};
+  f_checkIntegerTemplate(t_i0s,vl_goodValues,vl_badValues);
+}
+
+//=== i1s ===
+
+//+++++++++ NEGATIVE TEST+++++++++++++++++++++++++
+// see: TTCN3_SA_13_TD.script
+
+//=========================================================
+//===== Test for Record of charstring =====================
+//=========================================================
+
+testcase tc_complementCharstring1() runs on A
+{
+  var RoCS vl_goodValues := { "house","apples" };
+  var RoCS vl_badValues := { "apple","banana","","pear", "dog" };  
+  f_checkCharstringTemplate(t_cs1,vl_goodValues,vl_badValues);
+}
+
+testcase tc_complementCharstring2() runs on A
+{
+  var RoCS vl_goodValues := { "house","applesss","tree","a","app","appl","pple" };  
+  var RoCS vl_badValues := { "apple","banana","","pear", "dog", "treeeeeeeeeeeeee","apples","bananas","pears" };
+  f_checkCharstringTemplate(t_cs2,vl_goodValues,vl_badValues);
+}
+
+//=========================================================
+//================== Test for Records =====================
+//=========================================================
+//====== Embedded templates ====
+template MyRecord t_myrec1 := { i:= t_i1, roi:=t_RoI1, soi:=t_SoI1 }
+template MyRecord t_myrec1_eq := { i:= t_i1_eq, roi:=t_RoI1, soi:=t_SoI1 }
+
+template MyRecord t_myrec2 := { i:= t_i2, roi:=t_RoI1, soi:=t_SoI1 }
+template MyRecord t_myrec2_eq := { i:= t_i2_eq, roi:=t_RoI1, soi:=t_SoI1 } 
+  
+testcase tc_complementMyRec1_eq() runs on A {
+  f_checkMyRecordTemplateEquivalence(t_myrec1,t_myrec1_eq);
+}
+
+testcase tc_complementMyRec1() runs on A
+{
+  var RoMyRec vl_goodValues := { 
+    {i:=3,roi:={1,2,6},soi:={1,7,2} },
+    {i:=0,roi:={1,2,7},soi:={1,9,2} } };
+  var RoMyRec vl_badValues := {{omit,omit,omit}  };  
+  f_checkMyRecTemplate(t_myrec1,vl_goodValues,vl_badValues);
+}
+
+testcase tc_complementMyRec2_eq() runs on A {
+  f_checkMyRecordTemplateEquivalence(t_myrec2,t_myrec2_eq);
+}
+
+//==== function reference =====
+testcase tc_functionRef_rof_c_eq() runs on A {
+  f_checkMyFunctionRefTemplateEquivalence( t_fref_int2int_c,t_fref_int2int_c_eq);
+}
+
+
+// control part is NOT used during the test!
+control {
+  //  execute(tc_complementInt_eq());
+execute(tc_complementInt0_eq());
+execute(tc_complementImportingInt0_eq());
+execute(tc_complementInt0());
+execute(tc_complementImportingInt0());
+execute(tc_complementInt1_eq());
+execute(tc_complementInt1());
+execute(tc_complementInt2_eq());
+execute(tc_complementInt2());
+execute(tc_complementInt3_eq());
+execute(tc_complementInt3());
+execute(tc_complementInt4_eq());
+execute(tc_complementInt4());
+execute(tc_complementInt5_eq());
+execute(tc_complementInt5());
+execute(tc_complementInt6_eq());
+execute(tc_complementInt6());
+execute(tc_complementInt13roi_eq());
+execute(tc_complementInt13roi());
+execute(tc_complementInt13soi_eq());
+execute(tc_complementInt13soi());
+execute(tc_complementInt13roi_c_eq());
+execute(tc_complementInt13roi_c());
+execute(tc_complementInt13soi_c_eq());
+execute(tc_complementInt13soi_c());
+execute(tc_complementInt0s_eq());
+execute(tc_complementInt0s());
+execute(tc_complementInt1s_eq());
+execute(tc_complementInt1s());
+execute(tc_complementInt2s_eq());
+execute(tc_complementInt2s());
+execute(tc_complementInt3s());
+execute(tc_complementInt4s());
+execute(tc_complementInt5s());
+execute(tc_complementInt6s());
+execute(tc_complementInt0_eq_dyn());
+execute(tc_complementInt0_eq_2dyn());
+execute(tc_complementInt0_dyn());
+execute(tc_complementInt0_2dyn());
+execute(tc_complementInt1_dyn());
+execute(tc_complementInt1_2dyn());
+execute(tc_complementInt2_dyn());
+execute(tc_complementInt2_2dyn());
+execute(tc_complementInt3_dyn());
+execute(tc_complementInt3_2dyn());
+execute(tc_complementInt0s_eq_dyn());
+execute(tc_complementInt0s_eq_2dyn());
+execute(tc_complementInt0s_dyn());
+execute(tc_complementInt0s_2dyn());
+execute(tc_complementCharstring1());
+execute(tc_complementCharstring2());
+execute(tc_complementMyRec1_eq());
+execute(tc_complementMyRec1());
+execute(tc_complementMyRec2_eq());
+execute(tc_functionRef_rof_c_eq());
+}
+
+}
diff --git a/Regression_Test_java/src/all_from/all_from_permutation.ttcn b/Regression_Test_java/src/all_from/all_from_permutation.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..4aade0543e9e79a3185b74f726b1ec517992d902
--- /dev/null
+++ b/Regression_Test_java/src/all_from/all_from_permutation.ttcn
@@ -0,0 +1,1961 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Baranyi, Botond
+ *   Raduly, Csaba
+ *   Szabo, Bence Janos
+ *
+ ******************************************************************************/
+module all_from_permutation
+{
+import from types all;
+import from functions all;
+
+template RoI t_imported_RoI1 := {1, 2, (6..9)};
+template RoI t_imported_RoI2 := {1, *, 3};
+template RoI t_imported_RoI3 := {20,21,22};
+template RoI t_imported_RoI4 := {1, ?, 3};
+//for permutation:
+template RoI t_imported_RoI1_P := {1, 2, *};
+template RoI t_imported_RoI3_P := {1, 2, 3};
+template RoI t_imported_RoI7_P := {1, 2, ?};
+
+//===========Set of Integer================================
+template SoI t_imported_SoI1 := {1,2,(6..9)};
+template SoI t_imported_SoI2 := {1, *, 3};
+template SoI t_imported_SoI3 := {20,21,22};
+
+// Test Target:
+// B.1.3.3    Permutation
+//"That shall be used only on values of record types"
+
+//just to test these types as well:
+modulepar RoI tsp_RoI3 := {20,21,22};
+modulepar RoI tsp_SoI3 := {20,21,22};
+
+const RoI c_RoI3 := {20,21,22};
+const SoI c_SoI3 := {20,21,22};
+/*
+template RoI t_RoI1 := {1, 2, (6..9)};
+template RoI t_RoI2 := {1, *, 3};
+
+// B.1.3.3    Permutation
+//EXAMPLE 1:
+    type RoI MySequenceOfType;
+
+    template MySequenceOfType MyTemplate1p := { permutation ( 1, 2, 3 ), 5 };
+    // matches any of the following sequences of 4 integers: 1,2,3,5; 1,3,2,5; 2,1,3,5;
+    // 2,3,1,5; 3,1,2,5; or 3,2,1,5
+
+    template MySequenceOfType MyTemplate2p := { permutation ( 1, 2, ? ), 5 };
+    // matches any sequence of 4 integers that ends with 5 and contains 1 and 2 at least once in
+    // other positions
+
+    template MySequenceOfType MyTemplate3p := { permutation ( 1, 2, 3 ), * };
+    // matches any sequence of integers starting with 1,2,3; 1,3,2; 2,1,3; 2,3,1; 3,1,2 or 3,2,1
+
+    template MySequenceOfType MyTemplate4p := { *, permutation ( 1, 2, 3 )};
+    // matches any sequence of integers ending with 1,2,3; 1,3,2; 2,1,3; 2,3,1; 3,1,2 or 3,2,1
+
+    template MySequenceOfType MyTemplate5p := { *, permutation ( 1, 2, 3 ),* };
+    // matches any sequence of integers containing any of the following substrings at any position:
+    // 1,2,3; 1,3,2; 2,1,3; 2,3,1; 3,1,2 or 3,2,1 
+
+    template MySequenceOfType MyTemplate6p := { permutation ( 1, 2, * ), 5 };
+    // matches any sequence of integers that ends with 5 and containing 1 and 2 at least once in
+    // other positions
+
+//error by Titan: Length restriction cannot be used in a template of type `integer'
+//    template MySequenceOfType MyTemplate7p := { permutation ( 1, 2, 3 ), * length (0..5) };
+    // matches any sequence of three to eight integers starting with 1,2,3; 1,3,2; 2,1,3; 2,3,1;
+    // 3,1,2 or 3,2,1
+
+    template integer MyInt1 := (1,2,3);
+    template integer MyInt2 := (1,2,?);
+    template integer MyInt3 := ?;
+    template integer MyInt4 := *;
+
+    template MySequenceOfType MyTemplate10 := { permutation (MyInt1, 2, 3 ), 5 };
+    // matches any of the sequences of 4 integers:
+    //        1,3,2,5; 2,1,3,5; 2,3,1,5; 3,1,2,5; or 3,2,1,5;
+    //        2,3,2,5; 2,2,3,5; 2,3,2,5; 3,2,2,5; or 3,2,2,5;
+    //        3,3,2,5; 2,3,3,5; 2,3,3,5; 3,3,2,5; or 3,2,3,5;
+
+    template MySequenceOfType MyTemplate11 := { permutation (MyInt2, 2, 3 ), 5 };
+    // matches any sequence of 4 integers that ends with 5 and contains 2 and 3 at least once in
+    // other positions
+
+    template MySequenceOfType MyTemplate12 := { permutation (MyInt3, 2, 3 ), 5 };
+    // matches any sequence of 4 integers that ends with 5 and contains 2 and 3 at least once in
+    // other positions
+
+    template MySequenceOfType MyTemplate13 := { permutation (MyInt4, 2, 3 ), 5 };
+    // matches any sequence of integers that ends with 5 and containing 2 and 3 at least once in
+    // other positions
+
+    template MySequenceOfType MyTemplate14 := { permutation (MyInt3, 2, ? ), 5 };
+    // matches any sequence of 4 integers that ends with 5 and contains 2 at least once in
+    // other positions
+
+    template MySequenceOfType MyTemplate15 := { permutation (MyInt4, 2, * ), 5 };
+    // matches any sequence of integers that ends with 5 and contains 2 at least once in
+    // other positions
+*/
+//EXAMPLE 2:
+template RoI t_RoI1 := {1, 2, *};
+template RoI t_RoI1p := {permutation(all from t_RoI1)};
+template RoI t_RoI1p_eq:={permutation(1, 2, *)};
+
+template RoI t_RoI2p := {permutation(0, all from t_RoI1), 4, 5};
+template RoI t_RoI2p_eq := {permutation(0,1,2,*), 4, 5};
+
+template RoI t_RoI3 := {1, 2, 3};
+template RoI t_RoI3p := {permutation( all from t_RoI3)};
+template RoI t_RoI3p_eq := {permutation(1, 2, 3)};
+
+template RoI t_RoI4p := {?,permutation(0, all from t_RoI1), 4, 5};
+template RoI t_RoI4p_eq := {?,permutation(0,1,2,*), 4, 5};
+
+template RoI t_RoI5p := {*,permutation(all from t_RoI3),*}
+template RoI t_RoI5p_eq := {*,permutation(1,2,3),*}
+
+template RoI t_RoI6p := {?,permutation(all from t_RoI3),4} //(?,permutation(1,2,3),4)
+template RoI t_RoI6p_eq := {?,permutation(1,2,3),4}
+
+template RoI t_RoI7 := {1, 2, ?};
+template RoI t_RoI7p := {permutation(all from t_RoI7)};
+template RoI t_RoI7p_eq := {permutation(1, 2, ?)};
+
+template RoI t_RoI8p := {permutation(0, all from t_RoI7), 4, 5};
+template RoI t_RoI8p_eq := {permutation(0,1,2,?), 4, 5};
+
+//from modulepar:
+template RoI t_RoI13roi := {permutation(all from tsp_RoI3)};
+template RoI t_RoI13_eq := {permutation(20,21,22)};
+template RoI t_RoI13soi := {permutation(all from tsp_SoI3)};
+
+//from const:
+template RoI t_RoI13roi_c :={permutation(all from c_RoI3)};
+template RoI t_RoI13soi_c :={permutation(all from c_SoI3)};
+
+//=== All from referring remote templates (imported templates)
+template RoI t_importing_RoI1p := {permutation(all from t_imported_RoI1_P)};
+template RoI t_importing_RoI2p := {permutation(0, all from t_imported_RoI1_P), 4, 5};
+template RoI t_importing_RoI3p := {permutation( all from  t_imported_RoI3_P)};
+
+// ===== Set of ====
+template SoI t_SoI1 := {1, 2, *};
+template RoI t_SoI1p := {permutation(all from t_SoI1)};
+template RoI t_SoI1p_eq:={permutation(1, 2, *)};
+
+template RoI t_SoI2p := {permutation(0, all from t_SoI1), 4, 5};
+template RoI t_SoI2p_eq := {permutation(0,1,2,*), 4, 5};
+
+template SoI t_SoI3 := {1, 2, 3};
+template RoI t_SoI3p := {permutation( all from t_SoI3)};
+template RoI t_SoI3p_eq := {permutation(1, 2, 3)};
+
+template RoI t_SoI4p := {?,permutation(0, all from t_SoI1), 4, 5};
+template RoI t_SoI4p_eq := {?,permutation(0,1,2,*), 4, 5};
+
+template RoI t_SoI5p := {*,permutation(all from t_SoI3),*}
+template RoI t_SoI5p_eq := {*,permutation(1,2,3),*}
+
+template RoI t_SoI6p := {?,permutation(all from t_SoI3),4} //(?,permutation(1,2,3),4)
+template RoI t_SoI6p_eq := {?,permutation(1,2,3),4}
+
+template SoI t_SoI7 := {1, 2, ?};
+template RoI t_SoI7p := {permutation(all from t_SoI7)};
+template RoI t_SoI7p_eq := {permutation(1, 2, ?)};
+
+template RoI t_SoI8p := {permutation(0, all from t_SoI7), 4, 5};
+template RoI t_SoI8p_eq := {permutation(0,1,2,?), 4, 5};
+
+//===== charstring 
+template RoCS t_RoCS1 := { "apple","banana","","pear"};
+template RoCS t_RoCS2 := { "apples","bananas","","pears"};
+
+template RoCS t_rocs1 := { permutation ( all from t_RoCS1 ) };
+template RoCS t_rocs1_eq := { permutation ( "apple","banana","","pear" ) };
+
+template RoCS t_rocs2 := { permutation( "treeeeeeeeeeeeee",all from t_RoCS1, "dog", all from t_RoCS2) };
+template RoCS t_rocs2_eq := { permutation( "treeeeeeeeeeeeee","apple","banana","","pear",
+  "dog","apples","bananas","","pears") };
+
+//==== function reference =====
+template RoF_int2int t_rofref_int2int := { refers(f_int2int_1),refers(f_int2int_2) }
+template RoF_int2int t_fref_int2int_p := { permutation( all from t_rofref_int2int ) };
+template RoF_int2int t_fref_int2int_p_eq := { permutation( refers(f_int2int_1),refers(f_int2int_2) ) };
+//************************* Testcases for Templates of type Record of Integer ******************************
+
+testcase tc_permut() runs on A
+{
+  action("permut: ", t_RoI2p);
+  var RoI v;
+
+  v := {}
+  if (not match(v, t_RoI2p)) { setverdict(pass); }
+  else { setverdict(fail, v, " should NOT match ", t_RoI2p); }
+
+  v := { 1 }
+  if (not match(v, t_RoI2p)) { setverdict(pass); }
+  else { setverdict(fail, v, " should NOT match ", t_RoI2p); }
+
+  v := { 1, 2, 3, 4, 5 }
+  if (not match(v, t_RoI2p)) { setverdict(pass); }
+  else { setverdict(fail, v, " should NOT match ", t_RoI2p); }
+
+  v := { 0, 1, 2, 3, 4, 5 }
+  if (match(v, t_RoI2p)) { setverdict(pass); }
+  else { setverdict(fail, v, " should match ", t_RoI2p); }
+
+  v := { -2, -1, 0, 1, 2, 3, 4, 5 }
+  if (match(v, t_RoI2p)) { setverdict(pass); }
+  else { setverdict(fail, v, " should match ", t_RoI2p); }
+
+  v := { 1, 2, 3, 0, 4, 5 }
+  if (match(v, t_RoI2p)) { setverdict(pass); }
+  else { setverdict(fail, v, " should match ", t_RoI2p); }
+
+  v := { 1, 2, 3, 4, 5, 0 }
+  if (not match(v, t_RoI2p)) { setverdict(pass); }
+  else { setverdict(fail, v, " should NOT match ", t_RoI2p); }
+
+  v := { 5, 4, 3, 2, 1, 0 }
+  if (not match(v, t_RoI2p)) { setverdict(pass); }
+  else { setverdict(fail, v, " should NOT match ", t_RoI2p); }
+
+  v := { 3, 2, 1, 0, -1, -2, -3, 4, 5 }
+  if (match(v, t_RoI2p)) { setverdict(pass); }
+  else { setverdict(fail, v, " should match ", t_RoI2p); }
+
+  v := { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 9, 8, 7, 6, 5, 4 }
+  if (not match(v, t_RoI2p)) { setverdict(pass); }
+  else { setverdict(fail, v, " should NOT match ", t_RoI2p); }
+
+  v := { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 9, 8, 7, 6, 4, 5 }
+  if (match(v, t_RoI2p)) { setverdict(pass); }
+  else { setverdict(fail, v, " should match ", t_RoI2p); }
+}
+
+//====== Static Templates ======
+
+//=== 1 ===
+
+testcase tc_permut1_eq() runs on A {
+  f_checkRoITemplateEquivalence(t_RoI1p,t_RoI1p_eq);
+}
+
+testcase tc_permutImporting1_eq() runs on A {
+  f_checkRoITemplateEquivalence( t_importing_RoI1p,t_RoI1p_eq);
+}
+
+testcase tc_permut1() runs on A {
+  var RoRoI vl_goodValues := {{1,2},{2,1},{1,2,0},{1,2,1,2,3,4},{2,1,0},{2,1,222},{1,1,1,2,2,2,2} }
+  var RoRoI vl_badValues := {{},{1},{2},{3},{3,4,5},{3,4,5,1},{3,4,5,2}
+  }
+  f_checkRoITemplate(t_RoI1p,vl_goodValues,vl_badValues);
+}
+
+testcase tc_permutImporting1() runs on A {
+  var RoRoI vl_goodValues := {{1,2},{2,1},{1,2,0},{1,2,1,2,3,4},{2,1,0},{2,1,222},{1,1,1,2,2,2,2} }
+  var RoRoI vl_badValues := {{},{1},{2},{3},{3,4,5},{3,4,5,1},{3,4,5,2}
+  }
+  f_checkRoITemplate(t_importing_RoI1p,vl_goodValues,vl_badValues);
+}
+//=== 2 ===
+//{permutation(0,1,2,*), 4, 5};
+testcase tc_permut2_eq() runs on A {
+  f_checkRoITemplateEquivalence(t_RoI2p,t_RoI2p_eq);
+}
+
+testcase tc_permutImporting2_eq() runs on A {
+  f_checkRoITemplateEquivalence(t_RoI2p,t_RoI2p_eq);
+}
+
+testcase tc_permut2() runs on A {
+  var RoRoI vl_goodValues := { 
+    {0,1,2,4,5},{0,2,1,4,5},{1,0,2,4,5},{2,1,0,4,5},{1,2,0,4,5},
+    {0,1,2,3,4,5}, {0,1,3,2,4,5},{0,2,1,3,4,5},{0,2,3,1,4,5},{0,3,2,1,4,5},{0,3,1,2,4,5},
+    {1,0,2,3,4,5}, {1,0,3,2,4,5},{1,2,0,3,4,5},{1,2,3,0,4,5},{1,3,2,0,4,5},{1,3,0,2,4,5},
+    {2,1,0,3,4,5}, {2,1,3,0,4,5},{2,0,1,3,4,5},{2,0,3,1,4,5},{2,3,0,1,4,5},{2,3,1,0,4,5},
+    {3,1,0,2,4,5}, {3,1,2,0,4,5},{3,0,1,2,4,5},{3,0,2,1,4,5},{3,2,0,1,4,5},{3,2,1,0,4,5},
+    { -2, -1, 0, 1, 2, 3, 4, 5 },
+    { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 9, 8, 7, 6, 4, 5 },{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 9, 8, 7, 6, 5, 4,5 }
+  };
+  var RoRoI vl_badValues := { {},{1},{1,2},{1,2,3},{1,2,3,4},{1,2,3,4,5},{0,1,2,3,4,6},{ 5, 4, 3, 2, 1, 0 },{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 9, 8, 7, 6, 5, 4 }};  
+  f_checkRoITemplate(t_RoI2p,vl_goodValues,vl_badValues);
+}
+
+testcase tc_permutImporting2() runs on A {
+  var RoRoI vl_goodValues := { 
+    {0,1,2,4,5},{0,2,1,4,5},{1,0,2,4,5},{2,1,0,4,5},{1,2,0,4,5},
+    {0,1,2,3,4,5}, {0,1,3,2,4,5},{0,2,1,3,4,5},{0,2,3,1,4,5},{0,3,2,1,4,5},{0,3,1,2,4,5},
+    {1,0,2,3,4,5}, {1,0,3,2,4,5},{1,2,0,3,4,5},{1,2,3,0,4,5},{1,3,2,0,4,5},{1,3,0,2,4,5},
+    {2,1,0,3,4,5}, {2,1,3,0,4,5},{2,0,1,3,4,5},{2,0,3,1,4,5},{2,3,0,1,4,5},{2,3,1,0,4,5},
+    {3,1,0,2,4,5}, {3,1,2,0,4,5},{3,0,1,2,4,5},{3,0,2,1,4,5},{3,2,0,1,4,5},{3,2,1,0,4,5},
+    { -2, -1, 0, 1, 2, 3, 4, 5 },
+    { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 9, 8, 7, 6, 4, 5 },{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 9, 8, 7, 6, 5, 4,5 }
+  };
+  var RoRoI vl_badValues := { {},{1},{1,2},{1,2,3},{1,2,3,4},{1,2,3,4,5},{0,1,2,3,4,6},{ 5, 4, 3, 2, 1, 0 },{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 9, 8, 7, 6, 5, 4 }};  
+  f_checkRoITemplate(t_importing_RoI2p,vl_goodValues,vl_badValues);
+}
+//=== 3 ===
+testcase tc_permut3_eq() runs on A {
+  f_checkRoITemplateEquivalence(t_RoI3p,t_RoI3p_eq);
+}
+
+testcase tc_permutImporting3_eq() runs on A {
+  f_checkRoITemplateEquivalence(t_importing_RoI3p,t_RoI3p_eq);
+}
+
+testcase tc_permut3() runs on A {
+  var RoRoI vl_goodValues := { 
+    { 1,2,3},{1,3,2},
+    { 2,1,3},{2,3,1},
+    { 3,1,2},{3,2,1}
+  }
+  var RoRoI vl_badValues := { {},{1},{2},{3},{4},{1,2},{1,3},{1,4},{2,3},{1,2,3,4}, {1,2,3,3},
+    {-200,200,0,2,3,-1000},{-200,200,0,3,2,-1000},
+    {-200,200,0,1,3,-1000},{-200,200,0,3,1,-1000}
+  }
+  f_checkRoITemplate(t_RoI3p,vl_goodValues,vl_badValues);
+}
+
+
+//=== 4 ===
+
+testcase tc_permut4_eq() runs on A {
+  f_checkRoITemplateEquivalence(t_RoI4p,t_RoI4p_eq);
+}
+
+testcase tc_permut4() runs on A {
+  var RoRoI vl_goodValues := { 
+    {99,0,1,2,3,4,5}, {99,0,1,3,2,4,5},{99,0,2,1,3,4,5},{99,0,2,3,1,4,5},{99,0,3,2,1,4,5},{99,0,3,1,2,4,5},
+    {99,1,0,2,3,4,5}, {99,1,0,3,2,4,5},{99,1,2,0,3,4,5},{99,1,2,3,0,4,5},{99,1,3,2,0,4,5},{99,1,3,0,2,4,5},
+    {99,2,1,0,3,4,5}, {99,2,1,3,0,4,5},{99,2,0,1,3,4,5},{99,2,0,3,1,4,5},{99,2,3,0,1,4,5},{99,2,3,1,0,4,5},
+    {99,3,1,0,2,4,5}, {99,3,1,2,0,4,5},{99,3,0,1,2,4,5},{99,3,0,2,1,4,5},{99,3,2,0,1,4,5},{99,3,2,1,0,4,5},
+    {99,0,1,2,9,4,5}, {99,0,1,9,2,4,5},{99,0,2,1,9,4,5},{99,0,2,9,1,4,5},{99,0,9,2,1,4,5},{99,0,9,1,2,4,5},
+    {99,1,0,2,9,4,5}, {99,1,0,9,2,4,5},{99,1,2,0,9,4,5},{99,1,2,9,0,4,5},{99,1,9,2,0,4,5},{99,1,9,0,2,4,5},
+    {99,2,1,0,9,4,5}, {99,2,1,9,0,4,5},{99,2,0,1,9,4,5},{99,2,0,9,1,4,5},{99,2,9,0,1,4,5},{99,2,9,1,0,4,5},
+    {99,9,1,0,2,4,5}, {99,9,1,2,0,4,5},{99,9,0,1,2,4,5},{99,9,0,2,1,4,5},{99,9,2,0,1,4,5},{99,9,2,1,0,4,5},
+    {99,9,1,9,0,2,4,5}, 
+    {99,9,1,2,9,0,4,5},{99,9,0,9,1,9,2,9,4,5},{99,9,0,2,1,4,5},{99,9,2,0,1,4,5},{99,9,2,1,0,4,5}
+  };
+  var RoRoI vl_badValues := { {},{1},{1,2},{1,2,3},{1,2,3,4},
+    {1,2,3,4,5}, {0,1,2,3,4,5},{0,1,2,3,5,4},{0,1,2,3,4,6},{ 5, 4, 3, 2, 1, 0 },{1,1,1,1,1,1}};  
+  f_checkRoITemplate(t_RoI4p,vl_goodValues,vl_badValues);
+}
+
+
+//=== 5 ===
+//{*,permutation(1,2,3),*}
+testcase tc_permut5_eq() runs on A {
+  f_checkRoITemplateEquivalence(t_RoI5p,t_RoI5p_eq);
+}
+
+testcase tc_permut5() runs on A {
+  var RoRoI vl_goodValues := { 
+    { 1,2,3},{1,3,2},
+    { 0,2,1,3},{2,3,1},
+    { 3,1,2},{ 3,2,1},
+    {-200,200,0,1,2,3,-1000},{-200,200,0,1,3,2,-1000},
+    {-200,200,0,2,1,3,-1000},{-200,200,0,2,3,1,-1000},
+    {-200,200,0,3,1,2,-1000},{-200,200,0,3,2,1,-1000},
+    {1,-200,200,0,1,2,3,-1000},{1,-200,200,0,1,3,2,-1000},
+    {2,-200,200,0,2,1,3,-1000,2},{1,2,-200,200,0,2,3,1,-1000,2,1},
+    {-200,200,0,3,1,2,-1000},{-200,200,0,3,2,1,-1000}}
+  var RoRoI vl_badValues := { {},{1},{1,2},
+    {-200,200,0,2,3,-1000},{-200,200,0,3,2,-1000},
+    {-200,200,0,1,3,-1000},{-200,200,0,3,1,-1000},
+    {-200,200,0,1,2,-1000},{-200,200,0,2,1,-1000}, 
+    {-200,200,0,2,-1000},{-200,200,0,3,-1000},{-200,200,0,1,-1000},
+    {1,2,100,3},{1,100,2,3},{1,100,2,200,3}
+  }
+  f_checkRoITemplate(t_RoI5p,vl_goodValues,vl_badValues);
+}
+//=== 6 ===
+//{?,permutation(1,2,3),4}
+testcase tc_permut6_eq() runs on A {
+  f_checkRoITemplateEquivalence(t_RoI6p,t_RoI6p_eq);
+}
+
+testcase tc_permut6() runs on A {
+  var RoRoI vl_goodValues := { 
+    { 0,1,2,3,4},{0,1,3,2,4},
+    { 0,2,1,3,4},{0,2,3,1,4},
+    { 0,3,1,2,4},{0,3,2,1,4},
+
+    { 9,1,2,3,4},{9,1,3,2,4},
+    { 9,2,1,3,4},{9,2,3,1,4},
+    { 9,3,1,2,4},{9,3,2,1,4},
+
+    {5,1,2,3,4},{5,1,3,2,4},
+    {5,2,1,3,4},{5,2,3,1,4},
+    {5,3,1,2,4},{5,3,2,1,4},
+
+    {99,1,2,3,4},{-5,1,3,2,4},
+    {1,2,1,3,4},{2,2,3,1,4},
+    {3,3,1,2,4},{4,3,2,1,4}}
+  var RoRoI vl_badValues := { {},{1},{1,2},
+    { 1,2,3},{1,3,2},
+    { 0,2,1,3},{0,2,3,1},
+    { 3,1,2},{ 3,2,1},
+
+    {-200,200,0,2,3,-1000},{-200,200,0,3,2,-1000},
+    {-200,200,0,1,3,-1000},{-200,200,0,3,1,-1000},
+    {-200,200,0,1,2,-1000},{-200,200,0,2,1,-1000}, 
+    {-200,200,0,2,-1000},{-200,200,0,3,-1000},{-200,200,0,1,-1000},
+    {1,2,100,3},{1,100,2,3},{1,100,2,200,3}
+  }
+  f_checkRoITemplate(t_RoI6p,vl_goodValues,vl_badValues);
+}
+//=== 7 ===
+//{permutation{1, 2, ?}};
+testcase tc_permut7_eq() runs on A {
+  f_checkRoITemplateEquivalence(t_RoI7p,t_RoI7p_eq);
+}
+
+testcase tc_permut7() runs on A {
+  var RoRoI vl_goodValues := { 
+    {1,2,3}, {1,2,4},{1,2,5},{1,2,1000},
+    {1,3,2},{1,4,2},{1,5,2},{1,6,2},
+    {2,1,3},{2,1,4},{2,1,5},{2,1,6},
+    {3,1,2},{3,2,1},{4,1,2},{4,2,1},
+    {1000,1,2},{1,1000,2}
+  }
+  var RoRoI vl_badValues := { {},{1},{2},{3},{9999},{1,2},{2,1}, {13,31},
+    { 0,2,1,3},{0,2,3,1},
+    {-200,200,0,2,3,-1000},{-200,200,0,3,2,-1000},
+    {-200,200,0,1,3,-1000},{-200,200,0,3,1,-1000},
+    {-200,200,0,1,2,-1000},{-200,200,0,2,1,-1000}, 
+    {-200,200,0,2,-1000},{-200,200,0,3,-1000},{-200,200,0,1,-1000},
+    {1,2,100,3},{1,100,2,3},{1,100,2,200,3}
+  }
+  f_checkRoITemplate(t_RoI7p,vl_goodValues,vl_badValues);
+}
+
+//=== 8 ===
+//{permutation(0,1,2,?),4,5}
+
+testcase tc_permut8_eq() runs on A {
+  f_checkRoITemplateEquivalence(t_RoI8p,t_RoI8p_eq);
+}
+
+testcase tc_permut8() runs on A {
+  var RoRoI vl_goodValues := { 
+    {0,1,2,3,4,5}, {0,1,3,2,4,5},{0,2,1,3,4,5},{0,2,3,1,4,5},{0,3,2,1,4,5},{0,3,1,2,4,5},
+    {1,0,2,3,4,5}, {1,0,3,2,4,5},{1,2,0,3,4,5},{1,2,3,0,4,5},{1,3,2,0,4,5},{1,3,0,2,4,5},
+    {2,1,0,3,4,5}, {2,1,3,0,4,5},{2,0,1,3,4,5},{2,0,3,1,4,5},{2,3,0,1,4,5},{2,3,1,0,4,5},
+    {3,1,0,2,4,5}, {3,1,2,0,4,5},{3,0,1,2,4,5},{3,0,2,1,4,5},{3,2,0,1,4,5},{3,2,1,0,4,5},
+    {0,1,2,9,4,5}, {0,1,9,2,4,5},{0,2,1,9,4,5},{0,2,9,1,4,5},{0,9,2,1,4,5},{0,9,1,2,4,5},
+    {1,0,2,9,4,5}, {1,0,9,2,4,5},{1,2,0,9,4,5},{1,2,9,0,4,5},{1,9,2,0,4,5},{1,9,0,2,4,5},
+    {2,1,0,9,4,5}, {2,1,9,0,4,5},{2,0,1,9,4,5},{2,0,9,1,4,5},{2,9,0,1,4,5},{2,9,1,0,4,5},
+    {9,1,0,2,4,5}, {9,1,2,0,4,5},{9,0,1,2,4,5},{9,0,2,1,4,5},{9,2,0,1,4,5},{9,2,1,0,4,5}
+  }
+  var RoRoI vl_badValues := { {},{1},{1,2},{9,1,9,0,2,4,5}, {9,1,2,9,0,4,5},{9,0,9,1,9,2,9,4,5}
+
+  }
+  f_checkRoITemplate(t_RoI8p,vl_goodValues,vl_badValues);
+}
+//=== 13 ===
+//{permutation(0,1,2,?),4,5}
+
+testcase tc_permut13roi_eq() runs on A {
+  f_checkRoITemplateEquivalence(t_RoI13roi,t_RoI13_eq);
+}
+
+testcase tc_permut13roi() runs on A {
+  var RoRoI vl_goodValues := { 
+    {20,21,22},{20,22,21}
+  }
+  var RoRoI vl_badValues := { {},{1},{21},{21,22}, {20,21},{20,20,20}
+
+  }
+  f_checkRoITemplate(t_RoI13roi,vl_goodValues,vl_badValues);
+}
+testcase tc_permut13soi_eq() runs on A {
+  f_checkRoITemplateEquivalence(t_RoI13soi,t_RoI13_eq);
+}
+
+testcase tc_permut13soi() runs on A {
+  var RoRoI vl_goodValues := { 
+    {20,21,22},{20,22,21}
+  }
+  var RoRoI vl_badValues := { {},{1},{21},{21,22}, {20,21},{20,20,20}
+
+  }
+  f_checkRoITemplate(t_RoI13soi,vl_goodValues,vl_badValues);
+}
+
+testcase tc_permut13roi_c_eq() runs on A {
+  f_checkRoITemplateEquivalence(t_RoI13roi_c,t_RoI13_eq);
+}
+
+testcase tc_permut13roi_c() runs on A {
+  var RoRoI vl_goodValues := { 
+    {20,21,22},{20,22,21}
+  }
+  var RoRoI vl_badValues := { {},{1},{21},{21,22}, {20,21},{20,20,20}
+
+  }
+  f_checkRoITemplate(t_RoI13roi_c,vl_goodValues,vl_badValues);
+}
+testcase tc_permut13soi_c_eq() runs on A {
+  f_checkRoITemplateEquivalence(t_RoI13soi_c,t_RoI13_eq);
+}
+
+testcase tc_permut13soi_c() runs on A {
+  var RoRoI vl_goodValues := { 
+    {20,21,22},{20,22,21}
+  }
+  var RoRoI vl_badValues := { {},{1},{21},{21,22}, {20,21},{20,20,20}
+
+  }
+  f_checkRoITemplate(t_RoI13soi_c,vl_goodValues,vl_badValues);
+}
+
+//=== Testcases for Dynamic Templates=====
+
+
+//===1===
+//{permutation(1, 2, *)};
+
+testcase tc_permut1_eq_dyn() runs on A {
+  var template RoI tl_RoI1p := {permutation(all from t_RoI1)};
+  f_checkRoITemplateEquivalence(tl_RoI1p,t_RoI1p_eq);
+}
+
+testcase tc_permut1_eq_2dyn() runs on A {
+  var template RoI tl_RoI1 := {1, 2, *};
+  var template RoI tl_RoI1p := {permutation(all from tl_RoI1)};
+  f_checkRoITemplateEquivalence(tl_RoI1p,t_RoI1p_eq);
+}
+
+testcase tc_permut1_dyn() runs on A {
+  var template RoI tl_RoI1p := {permutation(all from t_RoI1)};
+  var RoRoI vl_goodValues := {{1,2},{2,1},{1,2,0},{1,2,1,2,3,4},{2,1,0},{2,1,222},{1,1,1,2,2,2,2} }
+  var RoRoI vl_badValues := {{},{1},{2},{3},{3,4,5},{3,4,5,1},{3,4,5,2}
+  }
+  f_checkRoITemplate(tl_RoI1p,vl_goodValues,vl_badValues);
+}
+
+testcase tc_permut1_2dyn() runs on A {
+  var template RoI tl_RoI1 := {1, 2, *};
+  var template RoI tl_RoI1p := {permutation(all from tl_RoI1)};
+  var RoRoI vl_goodValues := {{1,2},{2,1},{1,2,0},{1,2,1,2,3,4},{2,1,0},{2,1,222},{1,1,1,2,2,2,2} }
+  var RoRoI vl_badValues := {{},{1},{2},{3},{3,4,5},{3,4,5,1},{3,4,5,2}
+  }
+  f_checkRoITemplate(tl_RoI1p,vl_goodValues,vl_badValues);
+}
+//=== 2 ===
+testcase tc_permut2_eq_dyn() runs on A {
+  var template RoI tl_RoI2p := {permutation(0, all from t_RoI1), 4, 5};
+  f_checkRoITemplateEquivalence(tl_RoI2p,t_RoI2p_eq);
+}
+
+testcase tc_permut2_eq_2dyn() runs on A {
+  var template RoI tl_RoI1 := {1, 2, *};
+  var template RoI tl_RoI2p := {permutation(0, all from tl_RoI1), 4, 5};
+  f_checkRoITemplateEquivalence(tl_RoI2p,t_RoI2p_eq);
+}
+
+testcase tc_permut2_dyn() runs on A {
+  var template RoI tl_RoI2p := {permutation(0, all from t_RoI1), 4, 5};
+  var RoRoI vl_goodValues := { 
+    {0,1,2,4,5},{0,2,1,4,5},{1,0,2,4,5},{2,1,0,4,5},{1,2,0,4,5},
+    {0,1,2,3,4,5}, {0,1,3,2,4,5},{0,2,1,3,4,5},{0,2,3,1,4,5},{0,3,2,1,4,5},{0,3,1,2,4,5},
+    {1,0,2,3,4,5}, {1,0,3,2,4,5},{1,2,0,3,4,5},{1,2,3,0,4,5},{1,3,2,0,4,5},{1,3,0,2,4,5},
+    {2,1,0,3,4,5}, {2,1,3,0,4,5},{2,0,1,3,4,5},{2,0,3,1,4,5},{2,3,0,1,4,5},{2,3,1,0,4,5},
+    {3,1,0,2,4,5}, {3,1,2,0,4,5},{3,0,1,2,4,5},{3,0,2,1,4,5},{3,2,0,1,4,5},{3,2,1,0,4,5},
+    { -2, -1, 0, 1, 2, 3, 4, 5 },
+    { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 9, 8, 7, 6, 4, 5 },{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 9, 8, 7, 6, 5, 4,5 }
+  };
+  var RoRoI vl_badValues := { {},{1},{1,2},{1,2,3},{1,2,3,4},{1,2,3,4,5},{0,1,2,3,4,6},{ 5, 4, 3, 2, 1, 0 },{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 9, 8, 7, 6, 5, 4 }};  
+  f_checkRoITemplate(tl_RoI2p,vl_goodValues,vl_badValues);
+}
+
+testcase tc_permut2_2dyn() runs on A {
+  var template RoI tl_RoI1 := {1, 2, *};
+  log("debug1");
+  var template RoI tl_RoI2p := {permutation(0, all from tl_RoI1), 4, 5};
+  log("debug2");
+  var RoRoI vl_goodValues := { 
+    {0,1,2,4,5},{0,2,1,4,5},{1,0,2,4,5},{2,1,0,4,5},{1,2,0,4,5},
+    {0,1,2,3,4,5}, {0,1,3,2,4,5},{0,2,1,3,4,5},{0,2,3,1,4,5},{0,3,2,1,4,5},{0,3,1,2,4,5},
+    {1,0,2,3,4,5}, {1,0,3,2,4,5},{1,2,0,3,4,5},{1,2,3,0,4,5},{1,3,2,0,4,5},{1,3,0,2,4,5},
+    {2,1,0,3,4,5}, {2,1,3,0,4,5},{2,0,1,3,4,5},{2,0,3,1,4,5},{2,3,0,1,4,5},{2,3,1,0,4,5},
+    {3,1,0,2,4,5}, {3,1,2,0,4,5},{3,0,1,2,4,5},{3,0,2,1,4,5},{3,2,0,1,4,5},{3,2,1,0,4,5},
+    { -2, -1, 0, 1, 2, 3, 4, 5 },
+    { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 9, 8, 7, 6, 4, 5 },{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 9, 8, 7, 6, 5, 4,5 }
+  };
+  var RoRoI vl_badValues := { {},{1},{1,2},{1,2,3},{1,2,3,4},{1,2,3,4,5},{0,1,2,3,4,6},{ 5, 4, 3, 2, 1, 0 },{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 9, 8, 7, 6, 5, 4 }};  
+  f_checkRoITemplate(tl_RoI2p,vl_goodValues,vl_badValues);
+}
+
+//=== 3 ===
+testcase tc_permut3_eq_dyn() runs on A {
+  var template RoI tl_RoI3p := {permutation(all from t_RoI3)}
+  f_checkRoITemplateEquivalence(tl_RoI3p,t_RoI3p_eq);
+}
+
+testcase tc_permut3_eq_2dyn() runs on A {
+  var template RoI tl_RoI3 := {1, 2, 3};
+  var template RoI tl_RoI3p := {permutation(all from tl_RoI3)}
+  f_checkRoITemplateEquivalence(tl_RoI3p,t_RoI3p_eq);
+}
+
+testcase tc_permut3_dyn() runs on A {
+  log("debug1");
+  var template RoI tl_RoI3p := {permutation(all from t_RoI3)}
+  log("debug2");
+  var RoRoI vl_goodValues := { 
+    { 1,2,3},{1,3,2},
+    { 2,1,3},{2,3,1},
+    { 3,1,2},{3,2,1}
+  }
+  var RoRoI vl_badValues := { {},{1},{2},{3},{4},{1,2},{1,3},{1,4},{2,3},{1,2,3,4},
+    {-200,200,0,2,3,-1000},{-200,200,0,3,2,-1000},
+    {-200,200,0,1,3,-1000},{-200,200,0,3,1,-1000}
+  }
+  f_checkRoITemplate(tl_RoI3p,vl_goodValues,vl_badValues);
+}
+testcase tc_permut3_2dyn() runs on A {
+  var template RoI tl_RoI3 := {1, 2, 3};
+  log("debug1");
+  template RoI tl_RoI3p := {permutation(all from tl_RoI3)}
+  log("debug2");
+  var RoRoI vl_goodValues := { 
+    { 1,2,3},{1,3,2},
+    { 2,1,3},{2,3,1},
+    { 3,1,2},{3,2,1}
+  }
+  var RoRoI vl_badValues := { {},{1},{2},{3},{4},{1,2},{1,3},{1,4},{2,3},{1,2,3,4},
+    {-200,200,0,2,3,-1000},{-200,200,0,3,2,-1000},
+    {-200,200,0,1,3,-1000},{-200,200,0,3,1,-1000}
+  }
+  f_checkRoITemplate(tl_RoI3p,vl_goodValues,vl_badValues);
+}
+
+testcase tc_permut3A_dyn() runs on A {
+  var integer x:=1,y:=2,z:=3;
+  var template RoI tl_RoI3 := {x, y, z};
+  log("debug1");
+  //template RoI tl_RoI5p_dyn := {*,permutation(all from tl_RoI3p_dyn),*}
+  template RoI tl_RoI3p := {permutation(all from tl_RoI3)}
+  log("debug2");
+  var RoRoI vl_goodValues := { 
+    { 1,2,3},{1,3,2 },
+    { 2,1,3},{2,3,1},
+    { 3,1,2},{3,2,1}}
+  var RoRoI vl_badValues := { {},{1},{1,2},
+    {-200,200,0,2,3,-1000},{-200,200,0,3,2,-1000},
+    {-200,200,0,1,3,-1000},{-200,200,0,3,1,-1000},
+    {-200,200,0,1,2,-1000},{-200,200,0,2,1,-1000}, 
+    {-200,200,0,2,-1000},{-200,200,0,3,-1000},{-200,200,0,1,-1000},
+    {1,2,100,3},{1,100,2,3},{1,100,2,200,3}
+  }
+  f_checkRoITemplate(tl_RoI3p,vl_goodValues,vl_badValues);
+}
+//=== 4 ===
+testcase tc_permut4_eq_dyn() runs on A {
+  var template RoI tl_RoI4p := {?,permutation(0, all from t_RoI1), 4, 5};
+  f_checkRoITemplateEquivalence(tl_RoI4p,t_RoI4p_eq);
+}
+
+testcase tc_permut4_eq_2dyn() runs on A {
+  var template RoI tl_RoI1 := {1, 2, *};
+  var template RoI tl_RoI4p := {?,permutation(0, all from tl_RoI1), 4, 5};
+  f_checkRoITemplateEquivalence(tl_RoI4p,t_RoI4p_eq);
+}
+
+
+testcase tc_permut4_dyn() runs on A {
+  var template RoI tl_RoI4p := {permutation(0, all from t_RoI1), 4, 5}; //executor doesn't accept
+  var RoRoI vl_goodValues := { 
+    {99,0,1,2,3,4,5}, {99,0,1,3,2,4,5},{99,0,2,1,3,4,5},{99,0,2,3,1,4,5},{99,0,3,2,1,4,5},{99,0,3,1,2,4,5},
+    {99,1,0,2,3,4,5}, {99,1,0,3,2,4,5},{99,1,2,0,3,4,5},{99,1,2,3,0,4,5},{99,1,3,2,0,4,5},{99,1,3,0,2,4,5},
+    {99,2,1,0,3,4,5}, {99,2,1,3,0,4,5},{99,2,0,1,3,4,5},{99,2,0,3,1,4,5},{99,2,3,0,1,4,5},{99,2,3,1,0,4,5},
+    {99,3,1,0,2,4,5}, {99,3,1,2,0,4,5},{99,3,0,1,2,4,5},{99,3,0,2,1,4,5},{99,3,2,0,1,4,5},{99,3,2,1,0,4,5},
+    {99,0,1,2,9,4,5}, {99,0,1,9,2,4,5},{99,0,2,1,9,4,5},{99,0,2,9,1,4,5},{99,0,9,2,1,4,5},{99,0,9,1,2,4,5},
+    {99,1,0,2,9,4,5}, {99,1,0,9,2,4,5},{99,1,2,0,9,4,5},{99,1,2,9,0,4,5},{99,1,9,2,0,4,5},{99,1,9,0,2,4,5},
+    {99,2,1,0,9,4,5}, {99,2,1,9,0,4,5},{99,2,0,1,9,4,5},{99,2,0,9,1,4,5},{99,2,9,0,1,4,5},{99,2,9,1,0,4,5},
+    {99,9,1,0,2,4,5}, {99,9,1,2,0,4,5},{99,9,0,1,2,4,5},{99,9,0,2,1,4,5},{99,9,2,0,1,4,5},{99,9,2,1,0,4,5},
+    {99,9,1,9,0,2,4,5}, {99,9,1,2,9,0,4,5},{99,9,0,9,1,9,2,9,4,5},{99,9,0,2,1,4,5},{99,9,2,0,1,4,5},{99,9,2,1,0,4,5}
+  };
+  var RoRoI vl_badValues := { {},{1},{1,2},{1,2,3},{1,2,3,4},{1,2,3,4,5},{0,1,2,3,5,4},{0,1,2,3,4,6},{ 5, 4, 3, 2, 1, 0 },{1,1,1,1,1,1}};  
+  f_checkRoITemplate(tl_RoI4p,vl_goodValues,vl_badValues);
+}
+
+testcase tc_permut4_2dyn() runs on A {
+  var template RoI tl_RoI1 := {1, 2, *};
+  var template RoI tl_RoI4p := {permutation(0, all from tl_RoI1), 4, 5}; //executor doesn't accept
+  var RoRoI vl_goodValues := { 
+    {0,1,2,3,4,5}, {0,1,3,2,4,5},{0,2,1,3,4,5},{0,2,3,1,4,5},{0,3,2,1,4,5},{0,3,1,2,4,5},
+    {1,0,2,3,4,5}, {1,0,3,2,4,5},{1,2,0,3,4,5},{1,2,3,0,4,5},{1,3,2,0,4,5},{1,3,0,2,4,5},
+    {2,1,0,3,4,5}, {2,1,3,0,4,5},{2,0,1,3,4,5},{2,0,3,1,4,5},{2,3,0,1,4,5},{2,3,1,0,4,5},
+    {3,1,0,2,4,5}, {3,1,2,0,4,5},{3,0,1,2,4,5},{3,0,2,1,4,5},{3,2,0,1,4,5},{3,2,1,0,4,5},
+    {0,1,2,9,4,5}, {0,1,9,2,4,5},{0,2,1,9,4,5},{0,2,9,1,4,5},{0,9,2,1,4,5},{0,9,1,2,4,5},
+    {1,0,2,9,4,5}, {1,0,9,2,4,5},{1,2,0,9,4,5},{1,2,9,0,4,5},{1,9,2,0,4,5},{1,9,0,2,4,5},
+    {2,1,0,9,4,5}, {2,1,9,0,4,5},{2,0,1,9,4,5},{2,0,9,1,4,5},{2,9,0,1,4,5},{2,9,1,0,4,5},
+    {9,1,0,2,4,5}, {9,1,2,0,4,5},{9,0,1,2,4,5},{9,0,2,1,4,5},{9,2,0,1,4,5},{9,2,1,0,4,5},
+    {9,1,9,0,2,4,5}, {9,1,2,9,0,4,5},{9,0,9,1,9,2,9,4,5},{9,0,2,1,4,5},{9,2,0,1,4,5},{9,2,1,0,4,5}
+  };
+  var RoRoI vl_badValues := { {},{1},{1,2},{1,2,3},{1,2,3,4},{1,2,3,4,5},{0,1,2,3,5,4},{0,1,2,3,4,6},{ 5, 4, 3, 2, 1, 0 },{1,1,1,1,1,1}};  
+  f_checkRoITemplate(tl_RoI4p,vl_goodValues,vl_badValues);
+}
+
+//=== 5 ===
+
+//{*,permutation(1,2,3),*}
+testcase tc_permut5_eq_dyn() runs on A {
+  var template RoI tl_RoI5p := {*,permutation(all from t_RoI3),*}
+  f_checkRoITemplateEquivalence(tl_RoI5p,t_RoI5p_eq);
+}
+
+testcase tc_permut5_eq_2dyn() runs on A {
+  var template RoI tl_RoI3 := {1, 2, 3};
+  var template RoI tl_RoI5p := {*,permutation(all from tl_RoI3),*}
+  f_checkRoITemplateEquivalence(tl_RoI5p,t_RoI5p_eq);
+}
+
+testcase tc_permut5_dyn() runs on A {
+  var template RoI tl_RoI5p := {*,permutation(all from t_RoI3),*}
+  var RoRoI vl_goodValues := { 
+    {1,2,3},{1,3,2},
+    {2,1,3},{2,3,1},
+    {3,1,2},{3,2,1},
+    {0,2,1,3},{0,2,1,3,0},
+    {-200,200,0,1,2,3,-1000},{-200,200,0,1,3,2,-1000},
+    {-200,200,0,2,1,3,-1000},{-200,200,0,2,3,1,-1000},
+    {-200,200,0,3,1,2,-1000},{-200,200,0,3,2,1,-1000},
+    {1,-200,200,0,1,2,3,-1000},{1,-200,200,0,1,3,2,-1000},
+    {2,-200,200,0,2,1,3,-1000,2},{1,2,-200,200,0,2,3,1,-1000,2,1},
+    {-200,200,0,3,1,2,-1000},{-200,200,0,3,2,1,-1000}}
+  var RoRoI vl_badValues := { {},{1},{1,2},
+    {-200,200,0,2,3,-1000},{-200,200,0,3,2,-1000},
+    {-200,200,0,1,3,-1000},{-200,200,0,3,1,-1000},
+    {-200,200,0,1,2,-1000},{-200,200,0,2,1,-1000}, 
+    {-200,200,0,2,-1000},{-200,200,0,3,-1000},{-200,200,0,1,-1000},
+    {1,2,100,3},{1,100,2,3},{1,100,2,200,3}
+  }
+  f_checkRoITemplate(tl_RoI5p,vl_goodValues,vl_badValues);
+}
+
+testcase tc_permut5_2dyn() runs on A {
+  var template RoI tl_RoI3 := {1, 2, 3};
+  var template RoI tl_RoI5p := {*,permutation(all from tl_RoI3),*}
+  var RoRoI vl_goodValues := { 
+    { 1,2,3},{1,3,2},
+    { 2,1,3},{2,3,1},
+    { 3,1,2},{ 3,2,1},
+    {0,2,1,3},{0,2,1,3,0},
+    {-200,200,0,1,2,3,-1000},{-200,200,0,1,3,2,-1000},
+    {-200,200,0,2,1,3,-1000},{-200,200,0,2,3,1,-1000},
+    {-200,200,0,3,1,2,-1000},{-200,200,0,3,2,1,-1000},
+    {1,-200,200,0,1,2,3,-1000},{1,-200,200,0,1,3,2,-1000},
+    {2,-200,200,0,2,1,3,-1000,2},{1,2,-200,200,0,2,3,1,-1000,2,1},
+    {-200,200,0,3,1,2,-1000},{-200,200,0,3,2,1,-1000}}
+  var RoRoI vl_badValues := { {},{1},{1,2},
+    {-200,200,0,2,3,-1000},{-200,200,0,3,2,-1000},
+    {-200,200,0,1,3,-1000},{-200,200,0,3,1,-1000},
+    {-200,200,0,1,2,-1000},{-200,200,0,2,1,-1000}, 
+    {-200,200,0,2,-1000},{-200,200,0,3,-1000},{-200,200,0,1,-1000},
+    {1,2,100,3},{1,100,2,3},{1,100,2,200,3}
+  }
+  f_checkRoITemplate(tl_RoI5p,vl_goodValues,vl_badValues);
+}
+//=== 6 ===
+//{?,permutation(1,2,3),4}
+testcase tc_permut6_eq_dyn() runs on A {
+  var template RoI tl_RoI6p := {?,permutation(all from t_RoI3),4};
+  f_checkRoITemplateEquivalence(tl_RoI6p,t_RoI6p_eq);
+}
+
+testcase tc_permut6_eq_2dyn() runs on A {
+  var template RoI tl_RoI3 := {1, 2, 3};
+  var template RoI tl_RoI6p := {?,permutation(all from tl_RoI3),4};
+  f_checkRoITemplateEquivalence(tl_RoI6p,t_RoI6p_eq);
+}
+
+testcase tc_permut6_dyn() runs on A {
+  var template RoI tl_RoI6p := {?,permutation(all from t_RoI3),4} //(?,permutation(1,2,3),4)
+  var RoRoI vl_goodValues := { 
+    {0,1,2,3,4},{0,1,3,2,4},
+    {0,2,1,3,4},{0,2,3,1,4},
+    {0,3,1,2,4},{0,3,2,1,4},
+    {1,1,2,3,4},{1,1,3,2,4},
+    {1,2,1,3,4},{1,2,3,1,4},
+    {1,3,1,2,4},{1,3,2,1,4},
+    {2,1,2,3,4},{2,1,3,2,4},
+    {2,2,1,3,4},{2,2,3,1,4},
+    {2,3,1,2,4},{2,3,2,1,4},
+    {3,1,2,3,4},{3,1,3,2,4},
+    {3,2,1,3,4},{3,2,3,1,4},
+    {3,3,1,2,4},{3,3,2,1,4},
+    
+    {9,1,2,3,4},{9,1,3,2,4},
+    {9,2,1,3,4},{9,2,3,1,4},
+    {9,3,1,2,4},{9,3,2,1,4},
+
+    {5,1,2,3,4},{5,1,3,2,4},
+    {5,2,1,3,4},{5,2,3,1,4},
+    {5,3,1,2,4},{5,3,2,1,4},
+
+    {99,1,2,3,4},{-5,1,3,2,4},
+    {1,2,1,3,4},{2,2,3,1,4},
+    {3,3,1,2,4},{4,3,2,1,4}}
+  var RoRoI vl_badValues := { {},{1},{1,2},
+    {1,2,3},{1,3,2},
+    {0,2,1,3},{0,2,3,1},
+    {3,1,2},{3,2,1},
+
+    {-200,200,0,2,3,-1000},{-200,200,0,3,2,-1000},
+    {-200,200,0,1,3,-1000},{-200,200,0,3,1,-1000},
+    {-200,200,0,1,2,-1000},{-200,200,0,2,1,-1000}, 
+    {-200,200,0,2,-1000},{-200,200,0,3,-1000},{-200,200,0,1,-1000},
+    {1,2,100,3},{1,100,2,3},{1,100,2,200,3}
+  }
+  f_checkRoITemplate(tl_RoI6p,vl_goodValues,vl_badValues);
+}
+testcase tc_permut6_2dyn() runs on A {
+  var template RoI tl_RoI3 := {1, 2, 3};
+  var template RoI tl_RoI6p := {?,permutation(all from tl_RoI3),4};
+  var RoRoI vl_goodValues := { 
+    {0,1,2,3,4},{0,1,3,2,4},
+    {0,2,1,3,4},{0,2,3,1,4},
+    {0,3,1,2,4},{0,3,2,1,4},
+
+    {1,1,2,3,4},{1,1,3,2,4},
+    {1,2,1,3,4},{1,2,3,1,4},
+    {1,3,1,2,4},{1,3,2,1,4},
+    {2,1,2,3,4},{2,1,3,2,4},
+    {2,2,1,3,4},{2,2,3,1,4},
+    {2,3,1,2,4},{2,3,2,1,4},
+    {3,1,2,3,4},{3,1,3,2,4},
+    {3,2,1,3,4},{3,2,3,1,4},
+    {3,3,1,2,4},{3,3,2,1,4},
+    
+    {9,1,2,3,4},{9,1,3,2,4},
+    {9,2,1,3,4},{9,2,3,1,4},
+    {9,3,1,2,4},{9,3,2,1,4},
+
+    {5,1,2,3,4},{5,1,3,2,4},
+    {5,2,1,3,4},{5,2,3,1,4},
+    {5,3,1,2,4},{5,3,2,1,4},
+
+    {99,1,2,3,4},{-5,1,3,2,4},
+    {1,2,1,3,4},{2,2,3,1,4},
+    {3,3,1,2,4},{4,3,2,1,4}}
+  var RoRoI vl_badValues := { {},{1},{1,2},
+    { 1,2,3},{1,3,2},
+    { 0,2,1,3},{0,2,3,1},
+    { 3,1,2},{ 3,2,1},
+
+    {-200,200,0,2,3,-1000},{-200,200,0,3,2,-1000},
+    {-200,200,0,1,3,-1000},{-200,200,0,3,1,-1000},
+    {-200,200,0,1,2,-1000},{-200,200,0,2,1,-1000}, 
+    {-200,200,0,2,-1000},{-200,200,0,3,-1000},{-200,200,0,1,-1000},
+    {1,2,100,3},{1,100,2,3},{1,100,2,200,3}
+  }
+  f_checkRoITemplate(tl_RoI6p,vl_goodValues,vl_badValues);
+}
+testcase tc_permut6A_dyn() runs on A {
+  var integer x:=1,y:=2,z:=3;
+  var template RoI tl_RoI3 := {x, y, z};
+  var template RoI tl_RoI6p := {?,permutation(all from tl_RoI3),4}
+  var RoRoI vl_goodValues := { 
+    {0,1,2,3,4},{0,1,3,2,4},
+    {0,2,1,3,4},{0,2,3,1,4},
+    {0,3,1,2,4},{0,3,2,1,4},
+    {1,1,2,3,4},{1,1,3,2,4},
+    {1,2,1,3,4},{1,2,3,1,4},
+    {1,3,1,2,4},{1,3,2,1,4},
+    {2,1,2,3,4},{2,1,3,2,4},
+    {2,2,1,3,4},{2,2,3,1,4},
+    {2,3,1,2,4},{2,3,2,1,4},
+    {3,1,2,3,4},{3,1,3,2,4},
+    {3,2,1,3,4},{3,2,3,1,4},
+    {3,3,1,2,4},{3,3,2,1,4},
+    {9,1,2,3,4},{9,1,3,2,4},
+    {9,2,1,3,4},{9,2,3,1,4},
+    {9,3,1,2,4},{9,3,2,1,4},
+
+    {5,1,2,3,4},{5,1,3,2,4},
+    {5,2,1,3,4},{5,2,3,1,4},
+    {5,3,1,2,4},{5,3,2,1,4},
+
+    {99,1,2,3,4},{-5,1,3,2,4},
+    {1,2,1,3,4},{2,2,3,1,4},
+    {3,3,1,2,4},{4,3,2,1,4}}
+  var RoRoI vl_badValues := { {},{1},{1,2},
+    { 1,2,3},{1,3,2},
+    { 2,1,3},{2,3,1},
+    { 3,1,2},{ 3,2,1},
+    { 0,1,2,3},{1,1,3,2},
+    { 2,2,1,3},{3,2,3,1},
+    { 4,3,1,2},{5,3,2,1},
+    { 1,2,3,4},{1,3,2,4},
+    { 2,1,3,4},{2,3,1,4},
+    { 3,1,2,4},{ 3,2,1,4},
+    { 0,1,2,3,5},{1,1,3,2,6},
+    { 2,2,1,3,7},{3,2,3,1,8},
+    { 4,3,1,2,9},{5,3,2,1,10},
+    {-200,200,0,2,3,-1000},{-200,200,0,3,2,-1000},
+    {-200,200,0,1,3,-1000},{-200,200,0,3,1,-1000},
+    {-200,200,0,1,2,-1000},{-200,200,0,2,1,-1000}, 
+    {-200,200,0,2,-1000},{-200,200,0,3,-1000},{-200,200,0,1,-1000},
+    {1,2,100,3},{1,100,2,3},{1,100,2,200,3}
+  }
+  f_checkRoITemplate(tl_RoI6p,vl_goodValues,vl_badValues);
+}
+
+//=== 7 ===
+//{permutation{1, 2, ?}};
+testcase tc_permut7_eq_dyn() runs on A {
+  var template RoI tl_RoI7p := {permutation(all from t_RoI7)};
+  f_checkRoITemplateEquivalence(tl_RoI7p,t_RoI7p_eq);
+}
+
+testcase tc_permut7_eq_2dyn() runs on A {
+  var template RoI tl_RoI7 := {1, 2, ?};
+  var template RoI tl_RoI7p := {permutation(all from tl_RoI7)};
+  f_checkRoITemplateEquivalence(tl_RoI7p,t_RoI7p_eq);
+}
+
+testcase tc_permut7_dyn() runs on A {
+  var template RoI tl_RoI7p := {permutation(all from t_RoI7)};
+  var RoRoI vl_goodValues := { 
+    {1,2,3},{1,2,4},{1,2,5},{1,2,1000},
+    {1,3,2},{1,4,2},{1,5,2},{1,6,2},
+    {2,1,3},{2,1,4},{2,1,5},{2,1,6},
+    {3,1,2},{3,2,1},{4,1,2},{4,2,1},
+    {1000,1,2},{1,1000,2}
+  }
+  var RoRoI vl_badValues := { {},{1},{2},{3},{9999},{1,2},{2,1}, {13,31},
+    { 0,2,1,3},{0,2,3,1},{0,2,3,1,5},
+    {-200,200,0,2,3,-1000},{-200,200,0,3,2,-1000},
+    {-200,200,0,1,3,-1000},{-200,200,0,3,1,-1000},
+    {-200,200,0,1,2,-1000},{-200,200,0,2,1,-1000}, 
+    {-200,200,0,2,-1000},{-200,200,0,3,-1000},{-200,200,0,1,-1000},
+    {1,2,100,3},{1,100,2,3},{1,100,2,200,3}
+  }
+  f_checkRoITemplate(tl_RoI7p,vl_goodValues,vl_badValues);
+}
+
+testcase tc_permut7_2dyn() runs on A {
+  var template RoI tl_RoI7 := {1, 2, ?};
+  var template RoI tl_RoI7p := {permutation(all from tl_RoI7)};
+  var RoRoI vl_goodValues := { 
+    {1,2,3}, {1,2,4},{1,2,5},{1,2,1000},
+    {1,3,2},{1,4,2},{1,5,2},{1,6,2},
+    {2,1,3},{2,1,4},{2,1,5},{2,1,6},
+    {3,1,2},{3,2,1},{4,1,2},{4,2,1},
+    {1000,1,2},{1,1000,2}
+  }
+  var RoRoI vl_badValues := { {},{1},{2},{3},{9999},{1,2},{2,1}, {13,31},
+    { 0,2,1,3},{0,2,3,1},
+    {-200,200,0,2,3,-1000},{-200,200,0,3,2,-1000},
+    {-200,200,0,1,3,-1000},{-200,200,0,3,1,-1000},
+    {-200,200,0,1,2,-1000},{-200,200,0,2,1,-1000}, 
+    {-200,200,0,2,-1000},{-200,200,0,3,-1000},{-200,200,0,1,-1000},
+    {1,2,100,3},{1,100,2,3},{1,100,2,200,3}
+  }
+  f_checkRoITemplate(tl_RoI7p,vl_goodValues,vl_badValues);
+}
+
+//=== 8 ===
+//{permutation(0,1,2,?),4,5}
+
+testcase tc_permut8_eq_dyn() runs on A {
+  var template RoI tl_RoI8p := {permutation(0, all from t_RoI7), 4, 5};
+  f_checkRoITemplateEquivalence(tl_RoI8p,t_RoI8p_eq);
+}
+
+testcase tc_permut8_eq_2dyn() runs on A {
+  var template RoI tl_RoI7 := {1, 2, ?};
+  var template RoI tl_RoI8p := {permutation(0, all from tl_RoI7), 4, 5};
+  f_checkRoITemplateEquivalence(tl_RoI8p,t_RoI8p_eq);
+}
+
+testcase tc_permut8_dyn() runs on A {
+  var template RoI tl_RoI8p := {permutation(0, all from t_RoI7), 4, 5};
+  var RoRoI vl_goodValues := { 
+    {0,1,2,3,4,5}, {0,1,3,2,4,5},{0,2,1,3,4,5},{0,2,3,1,4,5},{0,3,2,1,4,5},{0,3,1,2,4,5},
+    {1,0,2,3,4,5}, {1,0,3,2,4,5},{1,2,0,3,4,5},{1,2,3,0,4,5},{1,3,2,0,4,5},{1,3,0,2,4,5},
+    {2,1,0,3,4,5}, {2,1,3,0,4,5},{2,0,1,3,4,5},{2,0,3,1,4,5},{2,3,0,1,4,5},{2,3,1,0,4,5},
+    {3,1,0,2,4,5}, {3,1,2,0,4,5},{3,0,1,2,4,5},{3,0,2,1,4,5},{3,2,0,1,4,5},{3,2,1,0,4,5},
+    {0,1,2,9,4,5}, {0,1,9,2,4,5},{0,2,1,9,4,5},{0,2,9,1,4,5},{0,9,2,1,4,5},{0,9,1,2,4,5},
+    {1,0,2,9,4,5}, {1,0,9,2,4,5},{1,2,0,9,4,5},{1,2,9,0,4,5},{1,9,2,0,4,5},{1,9,0,2,4,5},
+    {2,1,0,9,4,5}, {2,1,9,0,4,5},{2,0,1,9,4,5},{2,0,9,1,4,5},{2,9,0,1,4,5},{2,9,1,0,4,5},
+    {9,1,0,2,4,5}, {9,1,2,0,4,5},{9,0,1,2,4,5},{9,0,2,1,4,5},{9,2,0,1,4,5},{9,2,1,0,4,5}
+  }
+  var RoRoI vl_badValues := { {},{1},{1,2},{9,1,9,0,2,4,5}, {9,1,2,9,0,4,5},{9,0,9,1,9,2,9,4,5}
+
+  }
+  f_checkRoITemplate(tl_RoI8p,vl_goodValues,vl_badValues);
+}
+
+testcase tc_permut8_2dyn() runs on A {
+  var template RoI tl_RoI7 := {1, 2, ?};
+  var template RoI tl_RoI8p := {permutation(0, all from tl_RoI7), 4, 5};
+  var RoRoI vl_goodValues := { 
+    {0,1,2,3,4,5}, {0,1,3,2,4,5},{0,2,1,3,4,5},{0,2,3,1,4,5},{0,3,2,1,4,5},{0,3,1,2,4,5},
+    {1,0,2,3,4,5}, {1,0,3,2,4,5},{1,2,0,3,4,5},{1,2,3,0,4,5},{1,3,2,0,4,5},{1,3,0,2,4,5},
+    {2,1,0,3,4,5}, {2,1,3,0,4,5},{2,0,1,3,4,5},{2,0,3,1,4,5},{2,3,0,1,4,5},{2,3,1,0,4,5},
+    {3,1,0,2,4,5}, {3,1,2,0,4,5},{3,0,1,2,4,5},{3,0,2,1,4,5},{3,2,0,1,4,5},{3,2,1,0,4,5},
+    {0,1,2,9,4,5}, {0,1,9,2,4,5},{0,2,1,9,4,5},{0,2,9,1,4,5},{0,9,2,1,4,5},{0,9,1,2,4,5},
+    {1,0,2,9,4,5}, {1,0,9,2,4,5},{1,2,0,9,4,5},{1,2,9,0,4,5},{1,9,2,0,4,5},{1,9,0,2,4,5},
+    {2,1,0,9,4,5}, {2,1,9,0,4,5},{2,0,1,9,4,5},{2,0,9,1,4,5},{2,9,0,1,4,5},{2,9,1,0,4,5},
+    {9,1,0,2,4,5}, {9,1,2,0,4,5},{9,0,1,2,4,5},{9,0,2,1,4,5},{9,2,0,1,4,5},{9,2,1,0,4,5}
+  }
+  var RoRoI vl_badValues := { {},{1},{1,2},{9,1,9,0,2,4,5}, {9,1,2,9,0,4,5},{9,0,9,1,9,2,9,4,5}
+
+  }
+  f_checkRoITemplate(tl_RoI8p,vl_goodValues,vl_badValues);
+}
+
+//====================================================
+// ===== Permutation test for all from SoI ===========
+//====================================================
+
+
+//====== Static Templates ======
+
+//=== 1 ===
+
+testcase tc_permut1s_eq() runs on A {
+  f_checkRoITemplateEquivalence(t_SoI1p,t_SoI1p_eq);
+}
+
+testcase tc_permut1s() runs on A {
+  var RoRoI vl_goodValues := {{1,2},{2,1},{1,2,0},{1,2,1,2,3,4},{2,1,0},{2,1,222},{1,1,1,2,2,2,2} }
+  var RoRoI vl_badValues := {{},{1},{2},{3},{3,4,5},{3,4,5,1},{3,4,5,2}
+  }
+  f_checkRoITemplate(t_SoI1p,vl_goodValues,vl_badValues);
+}
+
+//=== 2 ===
+//{permutation(0,1,2,*), 4, 5};
+testcase tc_permut2s_eq() runs on A {
+  f_checkRoITemplateEquivalence(t_SoI2p,t_SoI2p_eq);
+}
+
+testcase tc_permut2s() runs on A {
+  var RoRoI vl_goodValues := { 
+    {0,1,2,4,5},{0,2,1,4,5},{1,0,2,4,5},{2,1,0,4,5},{1,2,0,4,5},
+    {0,1,2,3,4,5}, {0,1,3,2,4,5},{0,2,1,3,4,5},{0,2,3,1,4,5},{0,3,2,1,4,5},{0,3,1,2,4,5},
+    {1,0,2,3,4,5}, {1,0,3,2,4,5},{1,2,0,3,4,5},{1,2,3,0,4,5},{1,3,2,0,4,5},{1,3,0,2,4,5},
+    {2,1,0,3,4,5}, {2,1,3,0,4,5},{2,0,1,3,4,5},{2,0,3,1,4,5},{2,3,0,1,4,5},{2,3,1,0,4,5},
+    {3,1,0,2,4,5}, {3,1,2,0,4,5},{3,0,1,2,4,5},{3,0,2,1,4,5},{3,2,0,1,4,5},{3,2,1,0,4,5},
+    { -2, -1, 0, 1, 2, 3, 4, 5 },
+    { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 9, 8, 7, 6, 4, 5 },{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 9, 8, 7, 6, 5, 4,5 }
+  };
+  var RoRoI vl_badValues := { {},{1},{1,2},{1,2,3},{1,2,3,4},{1,2,3,4,5},{0,1,2,3,4,6},{ 5, 4, 3, 2, 1, 0 },{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 9, 8, 7, 6, 5, 4 }};  
+  f_checkRoITemplate(t_SoI2p,vl_goodValues,vl_badValues);
+}
+
+//=== 3 ===
+testcase tc_permut3s_eq() runs on A {
+  f_checkRoITemplateEquivalence(t_SoI3p,t_SoI3p_eq);
+}
+
+testcase tc_permut3s() runs on A {
+  var RoRoI vl_goodValues := { 
+    { 1,2,3},{1,3,2},
+    { 2,1,3},{2,3,1},
+    { 3,1,2},{3,2,1}
+  }
+  var RoRoI vl_badValues := { {},{1},{2},{3},{4},{1,2},{1,3},{1,4},{2,3},{1,2,3,4}, {1,2,3,3},
+    {-200,200,0,2,3,-1000},{-200,200,0,3,2,-1000},
+    {-200,200,0,1,3,-1000},{-200,200,0,3,1,-1000}
+  }
+  f_checkRoITemplate(t_SoI3p,vl_goodValues,vl_badValues);
+}
+
+
+//=== 4 ===
+
+testcase tc_permut4s_eq() runs on A {
+  f_checkRoITemplateEquivalence(t_SoI4p,t_SoI4p_eq);
+}
+
+testcase tc_permut4s() runs on A {
+  var RoRoI vl_goodValues := { 
+    {99,0,1,2,3,4,5}, {99,0,1,3,2,4,5},{99,0,2,1,3,4,5},{99,0,2,3,1,4,5},{99,0,3,2,1,4,5},{99,0,3,1,2,4,5},
+    {99,1,0,2,3,4,5}, {99,1,0,3,2,4,5},{99,1,2,0,3,4,5},{99,1,2,3,0,4,5},{99,1,3,2,0,4,5},{99,1,3,0,2,4,5},
+    {99,2,1,0,3,4,5}, {99,2,1,3,0,4,5},{99,2,0,1,3,4,5},{99,2,0,3,1,4,5},{99,2,3,0,1,4,5},{99,2,3,1,0,4,5},
+    {99,3,1,0,2,4,5}, {99,3,1,2,0,4,5},{99,3,0,1,2,4,5},{99,3,0,2,1,4,5},{99,3,2,0,1,4,5},{99,3,2,1,0,4,5},
+    {99,0,1,2,9,4,5}, {99,0,1,9,2,4,5},{99,0,2,1,9,4,5},{99,0,2,9,1,4,5},{99,0,9,2,1,4,5},{99,0,9,1,2,4,5},
+    {99,1,0,2,9,4,5}, {99,1,0,9,2,4,5},{99,1,2,0,9,4,5},{99,1,2,9,0,4,5},{99,1,9,2,0,4,5},{99,1,9,0,2,4,5},
+    {99,2,1,0,9,4,5}, {99,2,1,9,0,4,5},{99,2,0,1,9,4,5},{99,2,0,9,1,4,5},{99,2,9,0,1,4,5},{99,2,9,1,0,4,5},
+    {99,9,1,0,2,4,5}, {99,9,1,2,0,4,5},{99,9,0,1,2,4,5},{99,9,0,2,1,4,5},{99,9,2,0,1,4,5},{99,9,2,1,0,4,5},
+    {99,9,1,9,0,2,4,5}, 
+    {99,9,1,2,9,0,4,5},{99,9,0,9,1,9,2,9,4,5},{99,9,0,2,1,4,5},{99,9,2,0,1,4,5},{99,9,2,1,0,4,5}
+  };
+  var RoRoI vl_badValues := { {},{1},{1,2},{1,2,3},{1,2,3,4},
+    {1,2,3,4,5}, {0,1,2,3,4,5},{0,1,2,3,5,4},{0,1,2,3,4,6},{ 5, 4, 3, 2, 1, 0 },{1,1,1,1,1,1}};  
+  f_checkRoITemplate(t_SoI4p,vl_goodValues,vl_badValues);
+}
+
+
+//=== 5 ===
+//{*,permutation(1,2,3),*}
+testcase tc_permut5s_eq() runs on A {
+  f_checkRoITemplateEquivalence(t_SoI5p,t_SoI5p_eq);
+}
+
+testcase tc_permut5s() runs on A {
+  var RoRoI vl_goodValues := { 
+    { 1,2,3},{1,3,2},
+    { 0,2,1,3},{2,3,1},
+    { 3,1,2},{ 3,2,1},
+    {-200,200,0,1,2,3,-1000},{-200,200,0,1,3,2,-1000},
+    {-200,200,0,2,1,3,-1000},{-200,200,0,2,3,1,-1000},
+    {-200,200,0,3,1,2,-1000},{-200,200,0,3,2,1,-1000},
+    {1,-200,200,0,1,2,3,-1000},{1,-200,200,0,1,3,2,-1000},
+    {2,-200,200,0,2,1,3,-1000,2},{1,2,-200,200,0,2,3,1,-1000,2,1},
+    {-200,200,0,3,1,2,-1000},{-200,200,0,3,2,1,-1000}}
+  var RoRoI vl_badValues := { {},{1},{1,2},
+    {-200,200,0,2,3,-1000},{-200,200,0,3,2,-1000},
+    {-200,200,0,1,3,-1000},{-200,200,0,3,1,-1000},
+    {-200,200,0,1,2,-1000},{-200,200,0,2,1,-1000}, 
+    {-200,200,0,2,-1000},{-200,200,0,3,-1000},{-200,200,0,1,-1000},
+    {1,2,100,3},{1,100,2,3},{1,100,2,200,3}
+  }
+  f_checkRoITemplate(t_SoI5p,vl_goodValues,vl_badValues);
+}
+//=== 6 ===
+//{?,permutation(1,2,3),4}
+testcase tc_permut6s_eq() runs on A {
+  f_checkRoITemplateEquivalence(t_SoI6p,t_SoI6p_eq);
+}
+
+testcase tc_permut6s() runs on A {
+  var RoRoI vl_goodValues := { 
+    { 0,1,2,3,4},{0,1,3,2,4},
+    { 0,2,1,3,4},{0,2,3,1,4},
+    { 0,3,1,2,4},{0,3,2,1,4},
+
+    { 9,1,2,3,4},{9,1,3,2,4},
+    { 9,2,1,3,4},{9,2,3,1,4},
+    { 9,3,1,2,4},{9,3,2,1,4},
+
+    {5,1,2,3,4},{5,1,3,2,4},
+    {5,2,1,3,4},{5,2,3,1,4},
+    {5,3,1,2,4},{5,3,2,1,4},
+
+    {99,1,2,3,4},{-5,1,3,2,4},
+    {1,2,1,3,4},{2,2,3,1,4},
+    {3,3,1,2,4},{4,3,2,1,4}}
+  var RoRoI vl_badValues := { {},{1},{1,2},
+    { 1,2,3},{1,3,2},
+    { 0,2,1,3},{0,2,3,1},
+    { 3,1,2},{ 3,2,1},
+
+    {-200,200,0,2,3,-1000},{-200,200,0,3,2,-1000},
+    {-200,200,0,1,3,-1000},{-200,200,0,3,1,-1000},
+    {-200,200,0,1,2,-1000},{-200,200,0,2,1,-1000}, 
+    {-200,200,0,2,-1000},{-200,200,0,3,-1000},{-200,200,0,1,-1000},
+    {1,2,100,3},{1,100,2,3},{1,100,2,200,3}
+  }
+  f_checkRoITemplate(t_SoI6p,vl_goodValues,vl_badValues);
+}
+//=== 7 ===
+//{permutation{1, 2, ?}};
+testcase tc_permut7s_eq() runs on A {
+  f_checkRoITemplateEquivalence(t_SoI7p,t_SoI7p_eq);
+}
+
+testcase tc_permut7s() runs on A {
+  var RoRoI vl_goodValues := { 
+    {1,2,3}, {1,2,4},{1,2,5},{1,2,1000},
+    {1,3,2},{1,4,2},{1,5,2},{1,6,2},
+    {2,1,3},{2,1,4},{2,1,5},{2,1,6},
+    {3,1,2},{3,2,1},{4,1,2},{4,2,1},
+    {1000,1,2},{1,1000,2}
+  }
+  var RoRoI vl_badValues := { {},{1},{2},{3},{9999},{1,2},{2,1}, {13,31},
+    { 0,2,1,3},{0,2,3,1},
+    {-200,200,0,2,3,-1000},{-200,200,0,3,2,-1000},
+    {-200,200,0,1,3,-1000},{-200,200,0,3,1,-1000},
+    {-200,200,0,1,2,-1000},{-200,200,0,2,1,-1000}, 
+    {-200,200,0,2,-1000},{-200,200,0,3,-1000},{-200,200,0,1,-1000},
+    {1,2,100,3},{1,100,2,3},{1,100,2,200,3}
+  }
+  f_checkRoITemplate(t_SoI7p,vl_goodValues,vl_badValues);
+}
+
+//=== 8 ===
+//{permutation(0,1,2,?),4,5}
+
+testcase tc_permut8s_eq() runs on A {
+  f_checkRoITemplateEquivalence(t_SoI8p,t_SoI8p_eq);
+}
+
+testcase tc_permut8s() runs on A {
+  var RoRoI vl_goodValues := { 
+    {0,1,2,3,4,5}, {0,1,3,2,4,5},{0,2,1,3,4,5},{0,2,3,1,4,5},{0,3,2,1,4,5},{0,3,1,2,4,5},
+    {1,0,2,3,4,5}, {1,0,3,2,4,5},{1,2,0,3,4,5},{1,2,3,0,4,5},{1,3,2,0,4,5},{1,3,0,2,4,5},
+    {2,1,0,3,4,5}, {2,1,3,0,4,5},{2,0,1,3,4,5},{2,0,3,1,4,5},{2,3,0,1,4,5},{2,3,1,0,4,5},
+    {3,1,0,2,4,5}, {3,1,2,0,4,5},{3,0,1,2,4,5},{3,0,2,1,4,5},{3,2,0,1,4,5},{3,2,1,0,4,5},
+    {0,1,2,9,4,5}, {0,1,9,2,4,5},{0,2,1,9,4,5},{0,2,9,1,4,5},{0,9,2,1,4,5},{0,9,1,2,4,5},
+    {1,0,2,9,4,5}, {1,0,9,2,4,5},{1,2,0,9,4,5},{1,2,9,0,4,5},{1,9,2,0,4,5},{1,9,0,2,4,5},
+    {2,1,0,9,4,5}, {2,1,9,0,4,5},{2,0,1,9,4,5},{2,0,9,1,4,5},{2,9,0,1,4,5},{2,9,1,0,4,5},
+    {9,1,0,2,4,5}, {9,1,2,0,4,5},{9,0,1,2,4,5},{9,0,2,1,4,5},{9,2,0,1,4,5},{9,2,1,0,4,5}
+  }
+  var RoRoI vl_badValues := { {},{1},{1,2},{9,1,9,0,2,4,5}, {9,1,2,9,0,4,5},{9,0,9,1,9,2,9,4,5}
+
+  }
+  f_checkRoITemplate(t_SoI8p,vl_goodValues,vl_badValues);
+}
+
+
+//=== Testcases for Dynamic Templates of type RoI created from SoI =====
+
+
+//===1===
+//{permutation(1, 2, *)};
+
+testcase tc_permut1s_eq_dyn() runs on A {
+  var template RoI tl_RoI1p := {permutation(all from t_SoI1)};
+  f_checkRoITemplateEquivalence(tl_RoI1p,t_SoI1p_eq);
+}
+
+testcase tc_permut1s_eq_2dyn() runs on A {
+  var template RoI tl_RoI1 := {1, 2, *};
+  var template RoI tl_RoI1p := {permutation(all from tl_RoI1)};
+  f_checkRoITemplateEquivalence(tl_RoI1p,t_SoI1p_eq);
+}
+
+testcase tc_permut1s_dyn() runs on A {
+  var template RoI tl_RoI1p := {permutation(all from t_SoI1)};
+  var RoRoI vl_goodValues := {{1,2},{2,1},{1,2,0},{1,2,1,2,3,4},{2,1,0},{2,1,222},{1,1,1,2,2,2,2} }
+  var RoRoI vl_badValues := {{},{1},{2},{3},{3,4,5},{3,4,5,1},{3,4,5,2}
+  }
+  f_checkRoITemplate(tl_RoI1p,vl_goodValues,vl_badValues);
+}
+
+testcase tc_permut1s_2dyn() runs on A {
+  var template RoI tl_RoI1 := {1, 2, *};
+  var template RoI tl_RoI1p := {permutation(all from tl_RoI1)};
+  var RoRoI vl_goodValues := {{1,2},{2,1},{1,2,0},{1,2,1,2,3,4},{2,1,0},{2,1,222},{1,1,1,2,2,2,2} }
+  var RoRoI vl_badValues := {{},{1},{2},{3},{3,4,5},{3,4,5,1},{3,4,5,2}
+  }
+  f_checkRoITemplate(tl_RoI1p,vl_goodValues,vl_badValues);
+}
+//=== 2 ===
+testcase tc_permut2s_eq_dyn() runs on A {
+  var template RoI tl_RoI2p := {permutation(0, all from t_SoI1), 4, 5};
+  f_checkRoITemplateEquivalence(tl_RoI2p,t_SoI2p_eq);
+}
+
+testcase tc_permut2s_eq_2dyn() runs on A {
+  var template RoI tl_RoI1 := {1, 2, *};
+  var template RoI tl_RoI2p := {permutation(0, all from tl_RoI1), 4, 5};
+  f_checkRoITemplateEquivalence(tl_RoI2p,t_SoI2p_eq);
+}
+
+testcase tc_permut2s_dyn() runs on A {
+  var template RoI tl_RoI2p := {permutation(0, all from t_SoI1), 4, 5};
+  var RoRoI vl_goodValues := { 
+    {0,1,2,4,5},{0,2,1,4,5},{1,0,2,4,5},{2,1,0,4,5},{1,2,0,4,5},
+    {0,1,2,3,4,5}, {0,1,3,2,4,5},{0,2,1,3,4,5},{0,2,3,1,4,5},{0,3,2,1,4,5},{0,3,1,2,4,5},
+    {1,0,2,3,4,5}, {1,0,3,2,4,5},{1,2,0,3,4,5},{1,2,3,0,4,5},{1,3,2,0,4,5},{1,3,0,2,4,5},
+    {2,1,0,3,4,5}, {2,1,3,0,4,5},{2,0,1,3,4,5},{2,0,3,1,4,5},{2,3,0,1,4,5},{2,3,1,0,4,5},
+    {3,1,0,2,4,5}, {3,1,2,0,4,5},{3,0,1,2,4,5},{3,0,2,1,4,5},{3,2,0,1,4,5},{3,2,1,0,4,5},
+    { -2, -1, 0, 1, 2, 3, 4, 5 },
+    { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 9, 8, 7, 6, 4, 5 },{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 9, 8, 7, 6, 5, 4,5 }
+  };
+  var RoRoI vl_badValues := { {},{1},{1,2},{1,2,3},{1,2,3,4},{1,2,3,4,5},{0,1,2,3,4,6},{ 5, 4, 3, 2, 1, 0 },{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 9, 8, 7, 6, 5, 4 }};  
+  f_checkRoITemplate(tl_RoI2p,vl_goodValues,vl_badValues);
+}
+
+testcase tc_permut2s_2dyn() runs on A {
+  var template RoI tl_RoI1 := {1, 2, *};
+  log("debug1");
+  var template RoI tl_RoI2p := {permutation(0, all from tl_RoI1), 4, 5};
+  log("debug2");
+  var RoRoI vl_goodValues := { 
+    {0,1,2,4,5},{0,2,1,4,5},{1,0,2,4,5},{2,1,0,4,5},{1,2,0,4,5},
+    {0,1,2,3,4,5}, {0,1,3,2,4,5},{0,2,1,3,4,5},{0,2,3,1,4,5},{0,3,2,1,4,5},{0,3,1,2,4,5},
+    {1,0,2,3,4,5}, {1,0,3,2,4,5},{1,2,0,3,4,5},{1,2,3,0,4,5},{1,3,2,0,4,5},{1,3,0,2,4,5},
+    {2,1,0,3,4,5}, {2,1,3,0,4,5},{2,0,1,3,4,5},{2,0,3,1,4,5},{2,3,0,1,4,5},{2,3,1,0,4,5},
+    {3,1,0,2,4,5}, {3,1,2,0,4,5},{3,0,1,2,4,5},{3,0,2,1,4,5},{3,2,0,1,4,5},{3,2,1,0,4,5},
+    { -2, -1, 0, 1, 2, 3, 4, 5 },
+    { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 9, 8, 7, 6, 4, 5 },{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 9, 8, 7, 6, 5, 4,5 }
+  };
+  var RoRoI vl_badValues := { {},{1},{1,2},{1,2,3},{1,2,3,4},{1,2,3,4,5},{0,1,2,3,4,6},{ 5, 4, 3, 2, 1, 0 },{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 9, 8, 7, 6, 5, 4 }};  
+  f_checkRoITemplate(tl_RoI2p,vl_goodValues,vl_badValues);
+}
+
+//=== 3 ===
+testcase tc_permut3s_eq_dyn() runs on A {
+  var template RoI tl_RoI3p := {permutation(all from t_SoI3)}
+  f_checkRoITemplateEquivalence(tl_RoI3p,t_SoI3p_eq);
+}
+
+testcase tc_permut3s_eq_2dyn() runs on A {
+  var template RoI tl_RoI3 := {1, 2, 3};
+  var template RoI tl_RoI3p := {permutation(all from tl_RoI3)}
+  f_checkRoITemplateEquivalence(tl_RoI3p,t_SoI3p_eq);
+}
+
+testcase tc_permut3s_dyn() runs on A {
+  log("debug1");
+  var template RoI tl_RoI3p := {permutation(all from t_SoI3)}
+  log("debug2");
+  var RoRoI vl_goodValues := { 
+    { 1,2,3},{1,3,2},
+    { 2,1,3},{2,3,1},
+    { 3,1,2},{3,2,1}
+  }
+  var RoRoI vl_badValues := { {},{1},{2},{3},{4},{1,2},{1,3},{1,4},{2,3},{1,2,3,4},
+    {-200,200,0,2,3,-1000},{-200,200,0,3,2,-1000},
+    {-200,200,0,1,3,-1000},{-200,200,0,3,1,-1000}
+  }
+  f_checkRoITemplate(tl_RoI3p,vl_goodValues,vl_badValues);
+}
+testcase tc_permut3s_2dyn() runs on A {
+  var template RoI tl_RoI3 := {1, 2, 3};
+  log("debug1");
+  template RoI tl_RoI3p := {permutation(all from tl_RoI3)}
+  log("debug2");
+  var RoRoI vl_goodValues := { 
+    { 1,2,3},{1,3,2},
+    { 2,1,3},{2,3,1},
+    { 3,1,2},{3,2,1}
+  }
+  var RoRoI vl_badValues := { {},{1},{2},{3},{4},{1,2},{1,3},{1,4},{2,3},{1,2,3,4},
+    {-200,200,0,2,3,-1000},{-200,200,0,3,2,-1000},
+    {-200,200,0,1,3,-1000},{-200,200,0,3,1,-1000}
+  }
+  f_checkRoITemplate(tl_RoI3p,vl_goodValues,vl_badValues);
+}
+
+testcase tc_permut3sA_dyn() runs on A {
+  var integer x:=1,y:=2,z:=3;
+  var template RoI tl_RoI3 := {x, y, z};
+  log("debug1");
+  //template RoI tl_RoI5p_dyn := {*,permutation(all from tl_RoI3p_dyn),*}
+  template RoI tl_RoI3p := {permutation(all from tl_RoI3)}
+  log("debug2");
+  var RoRoI vl_goodValues := { 
+    { 1,2,3},{1,3,2 },
+    { 2,1,3},{2,3,1},
+    { 3,1,2},{3,2,1}}
+  var RoRoI vl_badValues := { {},{1},{1,2},
+    {-200,200,0,2,3,-1000},{-200,200,0,3,2,-1000},
+    {-200,200,0,1,3,-1000},{-200,200,0,3,1,-1000},
+    {-200,200,0,1,2,-1000},{-200,200,0,2,1,-1000}, 
+    {-200,200,0,2,-1000},{-200,200,0,3,-1000},{-200,200,0,1,-1000},
+    {1,2,100,3},{1,100,2,3},{1,100,2,200,3}
+  }
+  f_checkRoITemplate(tl_RoI3p,vl_goodValues,vl_badValues);
+}
+//=== 4 ===
+testcase tc_permut4s_eq_dyn() runs on A {
+  var template RoI tl_RoI4p := {?,permutation(0, all from t_SoI1), 4, 5};
+  f_checkRoITemplateEquivalence(tl_RoI4p,t_SoI4p_eq);
+}
+
+testcase tc_permut4s_eq_2dyn() runs on A {
+  var template RoI tl_RoI1 := {1, 2, *};
+  var template RoI tl_RoI4p := {?,permutation(0, all from tl_RoI1), 4, 5};
+  f_checkRoITemplateEquivalence(tl_RoI4p,t_SoI4p_eq);
+}
+
+
+testcase tc_permut4s_dyn() runs on A {
+  var template RoI tl_RoI4p := {permutation(0, all from t_SoI1), 4, 5}; //executor doesn't accept
+  var RoRoI vl_goodValues := { 
+    {99,0,1,2,3,4,5}, {99,0,1,3,2,4,5},{99,0,2,1,3,4,5},{99,0,2,3,1,4,5},{99,0,3,2,1,4,5},{99,0,3,1,2,4,5},
+    {99,1,0,2,3,4,5}, {99,1,0,3,2,4,5},{99,1,2,0,3,4,5},{99,1,2,3,0,4,5},{99,1,3,2,0,4,5},{99,1,3,0,2,4,5},
+    {99,2,1,0,3,4,5}, {99,2,1,3,0,4,5},{99,2,0,1,3,4,5},{99,2,0,3,1,4,5},{99,2,3,0,1,4,5},{99,2,3,1,0,4,5},
+    {99,3,1,0,2,4,5}, {99,3,1,2,0,4,5},{99,3,0,1,2,4,5},{99,3,0,2,1,4,5},{99,3,2,0,1,4,5},{99,3,2,1,0,4,5},
+    {99,0,1,2,9,4,5}, {99,0,1,9,2,4,5},{99,0,2,1,9,4,5},{99,0,2,9,1,4,5},{99,0,9,2,1,4,5},{99,0,9,1,2,4,5},
+    {99,1,0,2,9,4,5}, {99,1,0,9,2,4,5},{99,1,2,0,9,4,5},{99,1,2,9,0,4,5},{99,1,9,2,0,4,5},{99,1,9,0,2,4,5},
+    {99,2,1,0,9,4,5}, {99,2,1,9,0,4,5},{99,2,0,1,9,4,5},{99,2,0,9,1,4,5},{99,2,9,0,1,4,5},{99,2,9,1,0,4,5},
+    {99,9,1,0,2,4,5}, {99,9,1,2,0,4,5},{99,9,0,1,2,4,5},{99,9,0,2,1,4,5},{99,9,2,0,1,4,5},{99,9,2,1,0,4,5},
+    {99,9,1,9,0,2,4,5}, {99,9,1,2,9,0,4,5},{99,9,0,9,1,9,2,9,4,5},{99,9,0,2,1,4,5},{99,9,2,0,1,4,5},{99,9,2,1,0,4,5}
+  };
+  var RoRoI vl_badValues := { {},{1},{1,2},{1,2,3},{1,2,3,4},{1,2,3,4,5},{0,1,2,3,5,4},{0,1,2,3,4,6},{ 5, 4, 3, 2, 1, 0 },{1,1,1,1,1,1}};  
+  f_checkRoITemplate(tl_RoI4p,vl_goodValues,vl_badValues);
+}
+
+testcase tc_permut4s_2dyn() runs on A {
+  var template RoI tl_RoI1 := {1, 2, *};
+  var template RoI tl_RoI4p := {permutation(0, all from tl_RoI1), 4, 5}; //executor doesn't accept
+  var RoRoI vl_goodValues := { 
+    {0,1,2,3,4,5}, {0,1,3,2,4,5},{0,2,1,3,4,5},{0,2,3,1,4,5},{0,3,2,1,4,5},{0,3,1,2,4,5},
+    {1,0,2,3,4,5}, {1,0,3,2,4,5},{1,2,0,3,4,5},{1,2,3,0,4,5},{1,3,2,0,4,5},{1,3,0,2,4,5},
+    {2,1,0,3,4,5}, {2,1,3,0,4,5},{2,0,1,3,4,5},{2,0,3,1,4,5},{2,3,0,1,4,5},{2,3,1,0,4,5},
+    {3,1,0,2,4,5}, {3,1,2,0,4,5},{3,0,1,2,4,5},{3,0,2,1,4,5},{3,2,0,1,4,5},{3,2,1,0,4,5},
+    {0,1,2,9,4,5}, {0,1,9,2,4,5},{0,2,1,9,4,5},{0,2,9,1,4,5},{0,9,2,1,4,5},{0,9,1,2,4,5},
+    {1,0,2,9,4,5}, {1,0,9,2,4,5},{1,2,0,9,4,5},{1,2,9,0,4,5},{1,9,2,0,4,5},{1,9,0,2,4,5},
+    {2,1,0,9,4,5}, {2,1,9,0,4,5},{2,0,1,9,4,5},{2,0,9,1,4,5},{2,9,0,1,4,5},{2,9,1,0,4,5},
+    {9,1,0,2,4,5}, {9,1,2,0,4,5},{9,0,1,2,4,5},{9,0,2,1,4,5},{9,2,0,1,4,5},{9,2,1,0,4,5},
+    {9,1,9,0,2,4,5}, {9,1,2,9,0,4,5},{9,0,9,1,9,2,9,4,5},{9,0,2,1,4,5},{9,2,0,1,4,5},{9,2,1,0,4,5}
+  };
+  var RoRoI vl_badValues := { {},{1},{1,2},{1,2,3},{1,2,3,4},{1,2,3,4,5},{0,1,2,3,5,4},{0,1,2,3,4,6},{ 5, 4, 3, 2, 1, 0 },{1,1,1,1,1,1}};  
+  f_checkRoITemplate(tl_RoI4p,vl_goodValues,vl_badValues);
+}
+
+//=== 5 ===
+
+//{*,permutation(1,2,3),*}
+testcase tc_permut5s_eq_dyn() runs on A {
+  var template RoI tl_RoI5p := {*,permutation(all from t_SoI3),*}
+  f_checkRoITemplateEquivalence(tl_RoI5p,t_SoI5p_eq);
+}
+
+testcase tc_permut5s_eq_2dyn() runs on A {
+  var template RoI tl_RoI3 := {1, 2, 3};
+  var template RoI tl_RoI5p := {*,permutation(all from tl_RoI3),*}
+  f_checkRoITemplateEquivalence(tl_RoI5p,t_SoI5p_eq);
+}
+
+testcase tc_permut5s_dyn() runs on A {
+  var template RoI tl_RoI5p := {*,permutation(all from t_SoI3),*}
+  var RoRoI vl_goodValues := { 
+    {1,2,3},{1,3,2},
+    {2,1,3},{2,3,1},
+    {3,1,2},{3,2,1},
+    {0,2,1,3},{0,2,1,3,0},
+    {-200,200,0,1,2,3,-1000},{-200,200,0,1,3,2,-1000},
+    {-200,200,0,2,1,3,-1000},{-200,200,0,2,3,1,-1000},
+    {-200,200,0,3,1,2,-1000},{-200,200,0,3,2,1,-1000},
+    {1,-200,200,0,1,2,3,-1000},{1,-200,200,0,1,3,2,-1000},
+    {2,-200,200,0,2,1,3,-1000,2},{1,2,-200,200,0,2,3,1,-1000,2,1},
+    {-200,200,0,3,1,2,-1000},{-200,200,0,3,2,1,-1000}}
+  var RoRoI vl_badValues := { {},{1},{1,2},
+    {-200,200,0,2,3,-1000},{-200,200,0,3,2,-1000},
+    {-200,200,0,1,3,-1000},{-200,200,0,3,1,-1000},
+    {-200,200,0,1,2,-1000},{-200,200,0,2,1,-1000}, 
+    {-200,200,0,2,-1000},{-200,200,0,3,-1000},{-200,200,0,1,-1000},
+    {1,2,100,3},{1,100,2,3},{1,100,2,200,3}
+  }
+  f_checkRoITemplate(tl_RoI5p,vl_goodValues,vl_badValues);
+}
+
+testcase tc_permut5s_2dyn() runs on A {
+  var template RoI tl_RoI3 := {1, 2, 3};
+  var template RoI tl_RoI5p := {*,permutation(all from tl_RoI3),*}
+  var RoRoI vl_goodValues := { 
+    { 1,2,3},{1,3,2},
+    { 2,1,3},{2,3,1},
+    { 3,1,2},{ 3,2,1},
+    {0,2,1,3},{0,2,1,3,0},
+    {-200,200,0,1,2,3,-1000},{-200,200,0,1,3,2,-1000},
+    {-200,200,0,2,1,3,-1000},{-200,200,0,2,3,1,-1000},
+    {-200,200,0,3,1,2,-1000},{-200,200,0,3,2,1,-1000},
+    {1,-200,200,0,1,2,3,-1000},{1,-200,200,0,1,3,2,-1000},
+    {2,-200,200,0,2,1,3,-1000,2},{1,2,-200,200,0,2,3,1,-1000,2,1},
+    {-200,200,0,3,1,2,-1000},{-200,200,0,3,2,1,-1000}}
+  var RoRoI vl_badValues := { {},{1},{1,2},
+    {-200,200,0,2,3,-1000},{-200,200,0,3,2,-1000},
+    {-200,200,0,1,3,-1000},{-200,200,0,3,1,-1000},
+    {-200,200,0,1,2,-1000},{-200,200,0,2,1,-1000}, 
+    {-200,200,0,2,-1000},{-200,200,0,3,-1000},{-200,200,0,1,-1000},
+    {1,2,100,3},{1,100,2,3},{1,100,2,200,3}
+  }
+  f_checkRoITemplate(tl_RoI5p,vl_goodValues,vl_badValues);
+}
+//=== 6 ===
+//{?,permutation(1,2,3),4}
+testcase tc_permut6s_eq_dyn() runs on A {
+  var template RoI tl_RoI6p := {?,permutation(all from t_SoI3),4};
+  f_checkRoITemplateEquivalence(tl_RoI6p,t_SoI6p_eq);
+}
+
+testcase tc_permut6s_eq_2dyn() runs on A {
+  var template RoI tl_RoI3 := {1, 2, 3};
+  var template RoI tl_RoI6p := {?,permutation(all from tl_RoI3),4};
+  f_checkRoITemplateEquivalence(tl_RoI6p,t_SoI6p_eq);
+}
+
+testcase tc_permut6s_dyn() runs on A {
+  var template RoI tl_RoI6p := {?,permutation(all from t_SoI3),4} //(?,permutation(1,2,3),4)
+  var RoRoI vl_goodValues := { 
+    {0,1,2,3,4},{0,1,3,2,4},
+    {0,2,1,3,4},{0,2,3,1,4},
+    {0,3,1,2,4},{0,3,2,1,4},
+    {1,1,2,3,4},{1,1,3,2,4},
+    {1,2,1,3,4},{1,2,3,1,4},
+    {1,3,1,2,4},{1,3,2,1,4},
+    {2,1,2,3,4},{2,1,3,2,4},
+    {2,2,1,3,4},{2,2,3,1,4},
+    {2,3,1,2,4},{2,3,2,1,4},
+    {3,1,2,3,4},{3,1,3,2,4},
+    {3,2,1,3,4},{3,2,3,1,4},
+    {3,3,1,2,4},{3,3,2,1,4},
+    
+    {9,1,2,3,4},{9,1,3,2,4},
+    {9,2,1,3,4},{9,2,3,1,4},
+    {9,3,1,2,4},{9,3,2,1,4},
+
+    {5,1,2,3,4},{5,1,3,2,4},
+    {5,2,1,3,4},{5,2,3,1,4},
+    {5,3,1,2,4},{5,3,2,1,4},
+
+    {99,1,2,3,4},{-5,1,3,2,4},
+    {1,2,1,3,4},{2,2,3,1,4},
+    {3,3,1,2,4},{4,3,2,1,4}}
+  var RoRoI vl_badValues := { {},{1},{1,2},
+    {1,2,3},{1,3,2},
+    {0,2,1,3},{0,2,3,1},
+    {3,1,2},{3,2,1},
+
+    {-200,200,0,2,3,-1000},{-200,200,0,3,2,-1000},
+    {-200,200,0,1,3,-1000},{-200,200,0,3,1,-1000},
+    {-200,200,0,1,2,-1000},{-200,200,0,2,1,-1000}, 
+    {-200,200,0,2,-1000},{-200,200,0,3,-1000},{-200,200,0,1,-1000},
+    {1,2,100,3},{1,100,2,3},{1,100,2,200,3}
+  }
+  f_checkRoITemplate(tl_RoI6p,vl_goodValues,vl_badValues);
+}
+testcase tc_permut6s_2dyn() runs on A {
+  var template RoI tl_RoI3 := {1, 2, 3};
+  var template RoI tl_RoI6p := {?,permutation(all from tl_RoI3),4};
+  var RoRoI vl_goodValues := { 
+    {0,1,2,3,4},{0,1,3,2,4},
+    {0,2,1,3,4},{0,2,3,1,4},
+    {0,3,1,2,4},{0,3,2,1,4},
+
+    {1,1,2,3,4},{1,1,3,2,4},
+    {1,2,1,3,4},{1,2,3,1,4},
+    {1,3,1,2,4},{1,3,2,1,4},
+    {2,1,2,3,4},{2,1,3,2,4},
+    {2,2,1,3,4},{2,2,3,1,4},
+    {2,3,1,2,4},{2,3,2,1,4},
+    {3,1,2,3,4},{3,1,3,2,4},
+    {3,2,1,3,4},{3,2,3,1,4},
+    {3,3,1,2,4},{3,3,2,1,4},
+    
+    {9,1,2,3,4},{9,1,3,2,4},
+    {9,2,1,3,4},{9,2,3,1,4},
+    {9,3,1,2,4},{9,3,2,1,4},
+
+    {5,1,2,3,4},{5,1,3,2,4},
+    {5,2,1,3,4},{5,2,3,1,4},
+    {5,3,1,2,4},{5,3,2,1,4},
+
+    {99,1,2,3,4},{-5,1,3,2,4},
+    {1,2,1,3,4},{2,2,3,1,4},
+    {3,3,1,2,4},{4,3,2,1,4}}
+  var RoRoI vl_badValues := { {},{1},{1,2},
+    { 1,2,3},{1,3,2},
+    { 0,2,1,3},{0,2,3,1},
+    { 3,1,2},{ 3,2,1},
+
+    {-200,200,0,2,3,-1000},{-200,200,0,3,2,-1000},
+    {-200,200,0,1,3,-1000},{-200,200,0,3,1,-1000},
+    {-200,200,0,1,2,-1000},{-200,200,0,2,1,-1000}, 
+    {-200,200,0,2,-1000},{-200,200,0,3,-1000},{-200,200,0,1,-1000},
+    {1,2,100,3},{1,100,2,3},{1,100,2,200,3}
+  }
+  f_checkRoITemplate(tl_RoI6p,vl_goodValues,vl_badValues);
+}
+testcase tc_permut6sA_dyn() runs on A {
+  var integer x:=1,y:=2,z:=3;
+  var template RoI tl_RoI3 := {x, y, z};
+  var template RoI tl_RoI6p := {?,permutation(all from tl_RoI3),4}
+  var RoRoI vl_goodValues := { 
+    {0,1,2,3,4},{0,1,3,2,4},
+    {0,2,1,3,4},{0,2,3,1,4},
+    {0,3,1,2,4},{0,3,2,1,4},
+    {1,1,2,3,4},{1,1,3,2,4},
+    {1,2,1,3,4},{1,2,3,1,4},
+    {1,3,1,2,4},{1,3,2,1,4},
+    {2,1,2,3,4},{2,1,3,2,4},
+    {2,2,1,3,4},{2,2,3,1,4},
+    {2,3,1,2,4},{2,3,2,1,4},
+    {3,1,2,3,4},{3,1,3,2,4},
+    {3,2,1,3,4},{3,2,3,1,4},
+    {3,3,1,2,4},{3,3,2,1,4},
+    {9,1,2,3,4},{9,1,3,2,4},
+    {9,2,1,3,4},{9,2,3,1,4},
+    {9,3,1,2,4},{9,3,2,1,4},
+
+    {5,1,2,3,4},{5,1,3,2,4},
+    {5,2,1,3,4},{5,2,3,1,4},
+    {5,3,1,2,4},{5,3,2,1,4},
+
+    {99,1,2,3,4},{-5,1,3,2,4},
+    {1,2,1,3,4},{2,2,3,1,4},
+    {3,3,1,2,4},{4,3,2,1,4}}
+  var RoRoI vl_badValues := { {},{1},{1,2},
+    { 1,2,3},{1,3,2},
+    { 2,1,3},{2,3,1},
+    { 3,1,2},{ 3,2,1},
+    { 0,1,2,3},{1,1,3,2},
+    { 2,2,1,3},{3,2,3,1},
+    { 4,3,1,2},{5,3,2,1},
+    { 1,2,3,4},{1,3,2,4},
+    { 2,1,3,4},{2,3,1,4},
+    { 3,1,2,4},{ 3,2,1,4},
+    { 0,1,2,3,5},{1,1,3,2,6},
+    { 2,2,1,3,7},{3,2,3,1,8},
+    { 4,3,1,2,9},{5,3,2,1,10},
+    {-200,200,0,2,3,-1000},{-200,200,0,3,2,-1000},
+    {-200,200,0,1,3,-1000},{-200,200,0,3,1,-1000},
+    {-200,200,0,1,2,-1000},{-200,200,0,2,1,-1000}, 
+    {-200,200,0,2,-1000},{-200,200,0,3,-1000},{-200,200,0,1,-1000},
+    {1,2,100,3},{1,100,2,3},{1,100,2,200,3}
+  }
+  f_checkRoITemplate(tl_RoI6p,vl_goodValues,vl_badValues);
+}
+
+//=== 7 ===
+//{permutation{1, 2, ?}};
+testcase tc_permut7s_eq_dyn() runs on A {
+  var template RoI tl_RoI7p := {permutation(all from t_SoI7)};
+  f_checkRoITemplateEquivalence(tl_RoI7p,t_SoI7p_eq);
+}
+
+testcase tc_permut7s_eq_2dyn() runs on A {
+  var template RoI tl_RoI7 := {1, 2, ?};
+  var template RoI tl_RoI7p := {permutation(all from tl_RoI7)};
+  f_checkRoITemplateEquivalence(tl_RoI7p,t_SoI7p_eq);
+}
+
+testcase tc_permut7s_dyn() runs on A {
+  var template RoI tl_RoI7p := {permutation(all from t_SoI7)};
+  var RoRoI vl_goodValues := { 
+    {1,2,3},{1,2,4},{1,2,5},{1,2,1000},
+    {1,3,2},{1,4,2},{1,5,2},{1,6,2},
+    {2,1,3},{2,1,4},{2,1,5},{2,1,6},
+    {3,1,2},{3,2,1},{4,1,2},{4,2,1},
+    {1000,1,2},{1,1000,2}
+  }
+  var RoRoI vl_badValues := { {},{1},{2},{3},{9999},{1,2},{2,1}, {13,31},
+    { 0,2,1,3},{0,2,3,1},{0,2,3,1,5},
+    {-200,200,0,2,3,-1000},{-200,200,0,3,2,-1000},
+    {-200,200,0,1,3,-1000},{-200,200,0,3,1,-1000},
+    {-200,200,0,1,2,-1000},{-200,200,0,2,1,-1000}, 
+    {-200,200,0,2,-1000},{-200,200,0,3,-1000},{-200,200,0,1,-1000},
+    {1,2,100,3},{1,100,2,3},{1,100,2,200,3}
+  }
+  f_checkRoITemplate(tl_RoI7p,vl_goodValues,vl_badValues);
+}
+
+testcase tc_permut7s_2dyn() runs on A {
+  var template RoI tl_RoI7 := {1, 2, ?};
+  var template RoI tl_RoI7p := {permutation(all from tl_RoI7)};
+  var RoRoI vl_goodValues := { 
+    {1,2,3}, {1,2,4},{1,2,5},{1,2,1000},
+    {1,3,2},{1,4,2},{1,5,2},{1,6,2},
+    {2,1,3},{2,1,4},{2,1,5},{2,1,6},
+    {3,1,2},{3,2,1},{4,1,2},{4,2,1},
+    {1000,1,2},{1,1000,2}
+  }
+  var RoRoI vl_badValues := { {},{1},{2},{3},{9999},{1,2},{2,1}, {13,31},
+    { 0,2,1,3},{0,2,3,1},
+    {-200,200,0,2,3,-1000},{-200,200,0,3,2,-1000},
+    {-200,200,0,1,3,-1000},{-200,200,0,3,1,-1000},
+    {-200,200,0,1,2,-1000},{-200,200,0,2,1,-1000}, 
+    {-200,200,0,2,-1000},{-200,200,0,3,-1000},{-200,200,0,1,-1000},
+    {1,2,100,3},{1,100,2,3},{1,100,2,200,3}
+  }
+  f_checkRoITemplate(tl_RoI7p,vl_goodValues,vl_badValues);
+}
+
+//=== 8 ===
+//{permutation(0,1,2,?),4,5}
+
+testcase tc_permut8s_eq_dyn() runs on A {
+  var template RoI tl_RoI8p := {permutation(0, all from t_SoI7), 4, 5};
+  f_checkRoITemplateEquivalence(tl_RoI8p,t_SoI8p_eq);
+}
+
+testcase tc_permut8s_eq_2dyn() runs on A {
+  var template RoI tl_RoI7 := {1, 2, ?};
+  var template RoI tl_RoI8p := {permutation(0, all from tl_RoI7), 4, 5};
+  f_checkRoITemplateEquivalence(tl_RoI8p,t_SoI8p_eq);
+}
+
+testcase tc_permut8s_dyn() runs on A {
+  var template RoI tl_RoI8p := {permutation(0, all from t_SoI7), 4, 5};
+  var RoRoI vl_goodValues := { 
+    {0,1,2,3,4,5}, {0,1,3,2,4,5},{0,2,1,3,4,5},{0,2,3,1,4,5},{0,3,2,1,4,5},{0,3,1,2,4,5},
+    {1,0,2,3,4,5}, {1,0,3,2,4,5},{1,2,0,3,4,5},{1,2,3,0,4,5},{1,3,2,0,4,5},{1,3,0,2,4,5},
+    {2,1,0,3,4,5}, {2,1,3,0,4,5},{2,0,1,3,4,5},{2,0,3,1,4,5},{2,3,0,1,4,5},{2,3,1,0,4,5},
+    {3,1,0,2,4,5}, {3,1,2,0,4,5},{3,0,1,2,4,5},{3,0,2,1,4,5},{3,2,0,1,4,5},{3,2,1,0,4,5},
+    {0,1,2,9,4,5}, {0,1,9,2,4,5},{0,2,1,9,4,5},{0,2,9,1,4,5},{0,9,2,1,4,5},{0,9,1,2,4,5},
+    {1,0,2,9,4,5}, {1,0,9,2,4,5},{1,2,0,9,4,5},{1,2,9,0,4,5},{1,9,2,0,4,5},{1,9,0,2,4,5},
+    {2,1,0,9,4,5}, {2,1,9,0,4,5},{2,0,1,9,4,5},{2,0,9,1,4,5},{2,9,0,1,4,5},{2,9,1,0,4,5},
+    {9,1,0,2,4,5}, {9,1,2,0,4,5},{9,0,1,2,4,5},{9,0,2,1,4,5},{9,2,0,1,4,5},{9,2,1,0,4,5}
+  }
+  var RoRoI vl_badValues := { {},{1},{1,2},{9,1,9,0,2,4,5}, {9,1,2,9,0,4,5},{9,0,9,1,9,2,9,4,5}
+
+  }
+  f_checkRoITemplate(tl_RoI8p,vl_goodValues,vl_badValues);
+}
+
+testcase tc_permut8s_2dyn() runs on A {
+  var template RoI tl_RoI7 := {1, 2, ?};
+  var template RoI tl_RoI8p := {permutation(0, all from tl_RoI7), 4, 5};
+  var RoRoI vl_goodValues := { 
+    {0,1,2,3,4,5}, {0,1,3,2,4,5},{0,2,1,3,4,5},{0,2,3,1,4,5},{0,3,2,1,4,5},{0,3,1,2,4,5},
+    {1,0,2,3,4,5}, {1,0,3,2,4,5},{1,2,0,3,4,5},{1,2,3,0,4,5},{1,3,2,0,4,5},{1,3,0,2,4,5},
+    {2,1,0,3,4,5}, {2,1,3,0,4,5},{2,0,1,3,4,5},{2,0,3,1,4,5},{2,3,0,1,4,5},{2,3,1,0,4,5},
+    {3,1,0,2,4,5}, {3,1,2,0,4,5},{3,0,1,2,4,5},{3,0,2,1,4,5},{3,2,0,1,4,5},{3,2,1,0,4,5},
+    {0,1,2,9,4,5}, {0,1,9,2,4,5},{0,2,1,9,4,5},{0,2,9,1,4,5},{0,9,2,1,4,5},{0,9,1,2,4,5},
+    {1,0,2,9,4,5}, {1,0,9,2,4,5},{1,2,0,9,4,5},{1,2,9,0,4,5},{1,9,2,0,4,5},{1,9,0,2,4,5},
+    {2,1,0,9,4,5}, {2,1,9,0,4,5},{2,0,1,9,4,5},{2,0,9,1,4,5},{2,9,0,1,4,5},{2,9,1,0,4,5},
+    {9,1,0,2,4,5}, {9,1,2,0,4,5},{9,0,1,2,4,5},{9,0,2,1,4,5},{9,2,0,1,4,5},{9,2,1,0,4,5}
+  }
+  var RoRoI vl_badValues := { {},{1},{1,2},{9,1,9,0,2,4,5}, {9,1,2,9,0,4,5},{9,0,9,1,9,2,9,4,5}
+
+  }
+  f_checkRoITemplate(tl_RoI8p,vl_goodValues,vl_badValues);
+}
+
+//************************* Testcases for Templates of type Record of charstring ******************************
+
+//=== 1 ===
+testcase tc_CharstringTemplate1_eq() runs on A
+{
+  f_checkRoCSTemplateEquivalence(t_rocs1,t_rocs1_eq);
+}
+testcase tc_CharstringTemplate1_eq_local() runs on A
+{
+  template RoCS tl_rocs1 := { permutation ( all from t_RoCS1 ) };
+  f_checkRoCSTemplateEquivalence(tl_rocs1,t_rocs1_eq);
+}
+testcase tc_CharstringTemplate1_eq_dyn() runs on A
+{
+  var template RoCS tl_rocs1 := { permutation ( all from t_RoCS1 ) };
+  f_checkRoCSTemplateEquivalence(tl_rocs1,t_rocs1_eq);
+}
+
+testcase tc_CharstringTemplate1_eq_local_dyn() runs on A
+{
+  template RoCS tl_RoCS1 := { "apple","banana","","pear"};
+  var template RoCS tl_rocs1 := { permutation ( all from tl_RoCS1 ) };
+  f_checkRoCSTemplateEquivalence(tl_rocs1,t_rocs1_eq);
+}
+
+testcase tc_CharstringTemplate1_eq_2dyn() runs on A
+{
+  var template RoCS tl_RoCS1 := { "apple","banana","","pear"};
+  var template RoCS tl_rocs1 := { permutation ( all from tl_RoCS1 ) };
+  f_checkRoCSTemplateEquivalence(tl_rocs1,t_rocs1_eq);
+}
+
+//=== 2 ===
+testcase tc_CharstringTemplate2_eq() runs on A
+{
+  f_checkRoCSTemplateEquivalence(t_rocs2,t_rocs2_eq);
+}
+testcase tc_CharstringTemplate2_eq_local() runs on A
+{
+  template RoCS tl_rocs2 := { permutation( "treeeeeeeeeeeeee",all from t_RoCS1, "dog", all from t_RoCS2) };
+  f_checkRoCSTemplateEquivalence(tl_rocs2,t_rocs2_eq);
+}
+testcase tc_CharstringTemplate2_eq_dyn() runs on A
+{
+  var template RoCS tl_rocs2 := { permutation( "treeeeeeeeeeeeee",all from t_RoCS1, "dog", all from t_RoCS2) };
+  f_checkRoCSTemplateEquivalence(tl_rocs2,t_rocs2_eq);
+}
+
+testcase tc_CharstringTemplate2_eq_local_dyn() runs on A
+{
+  template RoCS tl_RoCS1 := { "apple","banana","","pear"};
+  template RoCS tl_RoCS2 := { "apples","bananas","","pears"};
+  var template RoCS tl_rocs2 := { permutation( "treeeeeeeeeeeeee",all from tl_RoCS1, "dog", all from tl_RoCS2) }; 
+  f_checkRoCSTemplateEquivalence(tl_rocs2,t_rocs2_eq);
+}
+
+
+testcase tc_CharstringTemplate2_eq_2dyn() runs on A
+{
+  var template RoCS tl_RoCS1 := { "apple","banana","","pear"};
+  var template RoCS tl_RoCS2 := { "apples","bananas","","pears"};
+  var template RoCS tl_rocs2 := { permutation( "treeeeeeeeeeeeee",all from tl_RoCS1, "dog", all from tl_RoCS2) }; 
+  f_checkRoCSTemplateEquivalence(tl_rocs2,t_rocs2_eq);
+}
+
+//==== function reference =====
+testcase tc_functionRef_rof_p_eq() runs on A {
+  f_checkMyRoFRefTemplateEquivalence( t_fref_int2int_p,t_fref_int2int_p_eq);
+}
+
+// permutation all from with length restriction
+// 1. the target of 'all from' is foldable (known at compile-time)
+testcase tc_perm_varTemplate_len_res_foldable() runs on A
+{
+  template RoI tl_foldable := { 6, 9 };
+  var template RoI tl_len_res := { permutation ( 2, all from tl_foldable ) } length (3);
+  var template RoI tl_len_res_eq := { permutation ( 2, 6, 9 ) } length (3);
+  f_checkRoITemplateEquivalence(tl_len_res, tl_len_res_eq);
+}
+
+// 2. the target of 'all from' is unfoldable (not known at compile-time)
+testcase tc_perm_varTemplate_len_res_unfoldable() runs on A
+{
+  var template RoI tl_unfoldable := { 6, 9 };
+  var template RoI tl_len_res := { permutation ( 2, all from tl_unfoldable ) } length (3);
+  var template RoI tl_len_res_eq := { permutation ( 2, 6, 9 ) } length (3);
+  f_checkRoITemplateEquivalence(tl_len_res, tl_len_res_eq);
+}
+
+testcase tc_perm_varTemplate_two_var_unfoldable() runs on A
+{
+  var template RoI tl_unfoldable := { 6, 9 };
+  var template RoI tl_unfoldable2 := { 5, 7 };
+  var template RoI tl_unfoldable3 := { 10, 11 };
+  var template RoI tl_len_res := { permutation ( 2, all from tl_unfoldable, all from tl_unfoldable2), permutation (all from tl_unfoldable3) };
+  var template RoI tl_len_res_eq := { permutation ( 2, 6, 9, 5, 7 ), permutation (10, 11) };
+  f_checkRoITemplateEquivalence(tl_len_res, tl_len_res_eq);
+}
+
+testcase tc_perm_varTemplate_array_unfoldable() runs on A
+{
+  var template RoI tl_unfoldable4 := { 6 };
+  var template IntArray tl_arr_res := { 1, permutation ( 2, all from tl_unfoldable4, 3), 4, 5 };
+  var template IntArray tl_arr_res_eq := { 1, permutation ( 2, 6, 3 ), 4, 5 };
+  if (log2str(tl_arr_res) != log2str(tl_arr_res_eq)) {
+    setverdict(fail, match(log2str(tl_arr_res), log2str(tl_arr_res_eq)));
+  }
+  setverdict(pass);
+}
+
+control{
+  execute(tc_permut());
+execute(tc_permut1_eq());
+execute(tc_permutImporting1_eq());
+execute(tc_permut1());
+execute(tc_permutImporting1());
+execute(tc_permut2_eq());
+execute(tc_permutImporting2_eq());
+execute(tc_permut2());
+execute(tc_permutImporting2());
+execute(tc_permut3_eq());
+execute(tc_permutImporting3_eq());
+execute(tc_permut3());
+execute(tc_permut4_eq());
+execute(tc_permut4());
+execute(tc_permut5_eq());
+execute(tc_permut5());
+execute(tc_permut6_eq());
+execute(tc_permut6());
+execute(tc_permut7_eq());
+execute(tc_permut7());
+execute(tc_permut8_eq());
+execute(tc_permut8());
+execute(tc_permut13roi_eq());
+execute(tc_permut13roi());
+execute(tc_permut13soi_eq());
+execute(tc_permut13soi());
+execute(tc_permut13roi_c_eq());
+execute(tc_permut13roi_c());
+execute(tc_permut13soi_c_eq());
+execute(tc_permut13soi_c());
+execute(tc_permut1_eq_dyn());
+execute(tc_permut1_eq_2dyn());
+execute(tc_permut1_dyn());
+execute(tc_permut1_2dyn());
+execute(tc_permut2_eq_dyn());
+execute(tc_permut2_eq_2dyn());
+execute(tc_permut2_dyn());
+execute(tc_permut2_2dyn());
+execute(tc_permut3_eq_dyn());
+execute(tc_permut3_eq_2dyn());
+execute(tc_permut3_dyn());
+execute(tc_permut3_2dyn());
+execute(tc_permut3A_dyn());
+execute(tc_permut4_eq_dyn());
+execute(tc_permut4_eq_2dyn());
+execute(tc_permut4_dyn());
+execute(tc_permut4_2dyn());
+execute(tc_permut5_eq_dyn());
+execute(tc_permut5_eq_2dyn());
+execute(tc_permut5_dyn());
+execute(tc_permut5_2dyn());
+execute(tc_permut6_eq_dyn());
+execute(tc_permut6_eq_2dyn());
+execute(tc_permut6_dyn());
+execute(tc_permut6_2dyn());
+execute(tc_permut6A_dyn());
+execute(tc_permut7_eq_dyn());
+execute(tc_permut7_eq_2dyn());
+execute(tc_permut7_dyn());
+execute(tc_permut7_2dyn());
+execute(tc_permut8_eq_dyn());
+execute(tc_permut8_eq_2dyn());
+execute(tc_permut8_dyn());
+execute(tc_permut8_2dyn());
+execute(tc_permut1s_eq());
+execute(tc_permut1s());
+execute(tc_permut2s_eq());
+execute(tc_permut2s());
+execute(tc_permut3s_eq());
+execute(tc_permut3s());
+execute(tc_permut4s_eq());
+execute(tc_permut4s());
+execute(tc_permut5s_eq());
+execute(tc_permut5s());
+execute(tc_permut6s_eq());
+execute(tc_permut6s());
+execute(tc_permut7s_eq());
+execute(tc_permut7s());
+execute(tc_permut8s_eq());
+execute(tc_permut8s());
+execute(tc_permut1s_eq_dyn());
+execute(tc_permut1s_eq_2dyn());
+execute(tc_permut1s_dyn());
+execute(tc_permut1s_2dyn());
+execute(tc_permut2s_eq_dyn());
+execute(tc_permut2s_eq_2dyn());
+execute(tc_permut2s_dyn());
+execute(tc_permut2s_2dyn());
+execute(tc_permut3s_eq_dyn());
+execute(tc_permut3s_eq_2dyn());
+execute(tc_permut3s_dyn());
+execute(tc_permut3s_2dyn());
+execute(tc_permut3sA_dyn());
+execute(tc_permut4s_eq_dyn());
+execute(tc_permut4s_eq_2dyn());
+execute(tc_permut4s_dyn());
+execute(tc_permut4s_2dyn());
+execute(tc_permut5s_eq_dyn());
+execute(tc_permut5s_eq_2dyn());
+execute(tc_permut5s_dyn());
+execute(tc_permut5s_2dyn());
+execute(tc_permut6s_eq_dyn());
+execute(tc_permut6s_eq_2dyn());
+execute(tc_permut6s_dyn());
+execute(tc_permut6s_2dyn());
+execute(tc_permut6sA_dyn());
+execute(tc_permut7s_eq_dyn());
+execute(tc_permut7s_eq_2dyn());
+execute(tc_permut7s_dyn());
+execute(tc_permut7s_2dyn());
+execute(tc_permut8s_eq_dyn());
+execute(tc_permut8s_eq_2dyn());
+execute(tc_permut8s_dyn());
+execute(tc_permut8s_2dyn());
+execute(tc_CharstringTemplate1_eq());
+execute(tc_CharstringTemplate1_eq_local());
+execute(tc_CharstringTemplate1_eq_dyn());
+execute(tc_CharstringTemplate1_eq_local_dyn());
+execute(tc_CharstringTemplate1_eq_2dyn());
+execute(tc_CharstringTemplate2_eq());
+execute(tc_CharstringTemplate2_eq_local());
+execute(tc_CharstringTemplate2_eq_dyn());
+execute(tc_CharstringTemplate2_eq_local_dyn());
+execute(tc_CharstringTemplate2_eq_2dyn());
+execute(tc_functionRef_rof_p_eq());
+execute(tc_perm_varTemplate_len_res_foldable());
+execute(tc_perm_varTemplate_len_res_unfoldable());
+execute(tc_perm_varTemplate_two_var_unfoldable());
+execute(tc_perm_varTemplate_array_unfoldable());
+}
+}  // end of module
diff --git a/Regression_Test_java/src/all_from/all_from_subrefs.ttcn b/Regression_Test_java/src/all_from/all_from_subrefs.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..28f4fe300d8f041d5e049afaf8dcb1a4bf1a8aae
--- /dev/null
+++ b/Regression_Test_java/src/all_from/all_from_subrefs.ttcn
@@ -0,0 +1,289 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Baranyi, Botond
+ *
+ ******************************************************************************/
+
+module all_from_subrefs {
+
+// in these tests the targets of 'all from' contain subreferences (array indexes and/or fields names)
+
+import from types all;
+
+// source templates and constants
+template MyRecord t_rec := { i := omit, roi := { 1, 3, 5 }, soi := { 2, 4, 6 } };
+template RoRoI t_roroi := { { 1, 2, 3 }, { 4, 5 }, { 6, 7, 8 } };
+template RoSoI t_rosoi(in integer x) := { { 10, 20, 30 }, { x, x * 2 } };
+const RoMyRec c_rorec := { { i := omit, roi := { -1, -3, -5 }, soi := { -2, -4, -6 } }, { i := 0, roi := omit, soi := { -10, -20, -30 } } };
+const RoMyUnion c_rouni := { { roi := { 11, 22, 33 } }, { soi := { -11, -22, -33 } } };
+const MyUnion c_uni := { roi := { 7, 77, 777 } };
+
+// just 'all from'
+template integer t_sr1 := ( 0, all from t_rec.soi, 8, 10 );
+template integer t_sr1_exp := ( 0, 2, 4, 6, 8, 10 );
+
+template integer t_sr2 := ( all from t_rec.roi, all from t_roroi[2] );
+template integer t_sr2_exp := ( 1, 3, 5, 6, 7, 8 );
+
+template integer t_sr3 := ( all from t_rosoi(100)[0], all from c_rorec[1].soi );
+template integer t_sr3_exp := ( 10, 20, 30, -10, -20, -30 );
+
+template integer t_sr4 := ( 0, all from c_rouni[0].roi, 44 );
+template integer t_sr4_exp := ( 0, 11, 22, 33, 44 );
+
+template integer t_sr5 := ( all from c_uni.roi );
+template integer t_sr5_exp := ( 7, 77, 777 );
+
+testcase tc_all_from_subrefs() runs on A
+{
+  if (log2str(t_sr1) != log2str(t_sr1_exp)) {
+    setverdict(fail, "Expected: ", t_sr1_exp, ", got: ", t_sr1);
+  }
+  if (log2str(t_sr2) != log2str(t_sr2_exp)) {
+    setverdict(fail, "Expected: ", t_sr2_exp, ", got: ", t_sr2);
+  }
+  if (log2str(t_sr3) != log2str(t_sr3_exp)) {
+    setverdict(fail, "Expected: ", t_sr3_exp, ", got: ", t_sr3);
+  }
+  if (log2str(t_sr4) != log2str(t_sr4_exp)) {
+    setverdict(fail, "Expected: ", t_sr4_exp, ", got: ", t_sr4);
+  }
+  if (log2str(t_sr5) != log2str(t_sr5_exp)) {
+    setverdict(fail, "Expected: ", t_sr5_exp, ", got: ", t_sr5);
+  }
+  setverdict(pass);
+}
+
+// permutation + all from
+template RoI t_sr_perm1 := { permutation ( all from t_rec.roi ) };
+template RoI t_sr_perm1_exp := { permutation ( 1, 3, 5 ) };
+
+template RoI t_sr_perm2 := { permutation ( 3, all from t_roroi[1], all from t_roroi[2] ) };
+template RoI t_sr_perm2_exp := { permutation ( 3, 4, 5, 6, 7, 8 ) };
+
+template RoI t_sr_perm3 := { permutation ( all from c_rorec[0].roi, all from c_rorec[0].soi ) };
+template RoI t_sr_perm3_exp := { permutation ( -1, -3, -5, -2, -4, -6 ) };
+
+testcase tc_all_from_subrefs_permutation() runs on A
+{
+  if (log2str(t_sr_perm1) != log2str(t_sr_perm1_exp)) {
+    setverdict(fail, "Expected: ", t_sr_perm1_exp, ", got: ", t_sr_perm1);
+  }
+  if (log2str(t_sr_perm2) != log2str(t_sr_perm2_exp)) {
+    setverdict(fail, "Expected: ", t_sr_perm2_exp, ", got: ", t_sr_perm2);
+  }
+  if (log2str(t_sr_perm3) != log2str(t_sr_perm3_exp)) {
+    setverdict(fail, "Expected: ", t_sr_perm3_exp, ", got: ", t_sr_perm3);
+  }
+  setverdict(pass);
+}
+
+// subset + all from
+template SoI t_sr_sub1 := subset ( all from c_rouni[1].soi );
+template SoI t_sr_sub1_exp := subset ( -11, -22, -33 );
+
+template SoI t_sr_sub2 := subset ( all from t_rec.soi, 2, all from t_roroi[0] );
+template SoI t_sr_sub2_exp := subset ( 2, 4, 6, 2, 1, 2, 3 );
+
+template SoI t_sr_sub3 := subset ( all from t_rosoi(100)[1], all from c_rorec[0].roi, all from c_rorec[0].roi );
+template SoI t_sr_sub3_exp := subset ( 100, 200, -1, -3, -5, -1, -3, -5 );
+
+testcase tc_all_from_subrefs_subset() runs on A
+{
+  if (log2str(t_sr_sub1) != log2str(t_sr_sub1_exp)) {
+    setverdict(fail, "Expected: ", t_sr_sub1_exp, ", got: ", t_sr_sub1);
+  }
+  if (log2str(t_sr_sub2) != log2str(t_sr_sub2_exp)) {
+    setverdict(fail, "Expected: ", t_sr_sub2_exp, ", got: ", t_sr_sub2);
+  }
+  if (log2str(t_sr_sub3) != log2str(t_sr_sub3_exp)) {
+    setverdict(fail, "Expected: ", t_sr_sub3_exp, ", got: ", t_sr_sub3);
+  }
+  setverdict(pass);
+}
+
+// superset + all from
+template SoI t_sr_super1 := superset ( all from c_rouni[0].roi );
+template SoI t_sr_super1_exp := superset ( 11, 22, 33 );
+
+template SoI t_sr_super2 := superset ( all from t_rec.roi, 2, all from t_roroi[1] );
+template SoI t_sr_super2_exp := superset ( 1, 3, 5, 2, 4, 5 );
+
+template SoI t_sr_super3 := superset ( all from t_rosoi(100)[0], all from c_rorec[1].soi, all from c_rorec[1].soi );
+template SoI t_sr_super3_exp := superset ( 10, 20, 30, -10, -20, -30, -10, -20, -30 );
+
+testcase tc_all_from_subrefs_superset() runs on A
+{
+  if (log2str(t_sr_super1) != log2str(t_sr_super1_exp)) {
+    setverdict(fail, "Expected: ", t_sr_super1_exp, ", got: ", t_sr_super1);
+  }
+  if (log2str(t_sr_super2) != log2str(t_sr_super2_exp)) {
+    setverdict(fail, "Expected: ", t_sr_super2_exp, ", got: ", t_sr_super2);
+  }
+  if (log2str(t_sr_super3) != log2str(t_sr_super3_exp)) {
+    setverdict(fail, "Expected: ", t_sr_super3_exp, ", got: ", t_sr_super3);
+  }
+  setverdict(pass);
+}
+
+// all from + variables / template variables
+testcase tc_all_from_subrefs_var() runs on A
+{
+  // source variables
+  var MyRecord v_rec := { i := omit, roi := { 2, 1, 0 }, soi := { 7, 1, 5 } };
+  var RoSoI v_rosoi := { { 2, 4, 8, 16 } };
+  var template RoMyUnion vt_rouni := { { soi := { 1, 1, 1 } }, { soi := { -1, -3, -5 } } };
+  var template RoRoI vt_roroi := { { 10, 11 }, { 20, 26, 29 }, { 31, 33 } };
+  
+  // templates with 'all from'
+  var template integer vt_sr := ( 0, all from v_rec.soi, all from vt_roroi[1] );
+  var template integer vt_sr_exp := ( 0, 7, 1, 5, 20, 26, 29 );
+  var template RoI vt_sr_perm := { permutation ( 3, all from v_rec.roi, all from vt_rouni[1].soi ) };
+  var template RoI vt_sr_perm_exp := { permutation ( 3, 2, 1, 0, -1, -3, -5 ) };
+  var template SoI vt_sr_sub := subset ( all from v_rosoi[0], 6, all from vt_roroi[0] );
+  var template SoI vt_sr_sub_exp := subset ( 2, 4, 8, 16, 6, 10, 11 );
+  var template SoI vt_sr_super := superset ( all from vt_rouni[0].soi, all from vt_rouni[0].soi );
+  var template SoI vt_sr_super_exp := superset ( 1, 1, 1, 1, 1, 1 );
+  
+  // test templates with 'all from' against the expected templates
+  if (log2str(vt_sr) != log2str(vt_sr_exp)) {
+    setverdict(fail, "Expected: ", vt_sr_exp, ", got: ", vt_sr);
+  }
+  if (log2str(vt_sr_perm) != log2str(vt_sr_perm_exp)) {
+    setverdict(fail, "Expected: ", vt_sr_perm_exp, ", got: ", vt_sr_perm);
+  }
+  if (log2str(vt_sr_sub) != log2str(vt_sr_sub_exp)) {
+    setverdict(fail, "Expected: ", vt_sr_sub_exp, ", got: ", vt_sr_sub);
+  }
+  if (log2str(vt_sr_super) != log2str(vt_sr_super_exp)) {
+    setverdict(fail, "Expected: ", vt_sr_super_exp, ", got: ", vt_sr_super);
+  }
+  setverdict(pass);
+}
+
+// all from + module parameters
+modulepar MyRecord mp_rec := { i := omit, roi := { 2, 1, 0 }, soi := { 7, 1, 5 } };
+modulepar RoSoI mp_rosoi := { { 2, 4, 8, 16 } };
+modulepar template RoMyUnion mpt_rouni := { { soi := { 1, 1, 1 } }, { soi := { -1, -3, -5 } } };
+modulepar template RoRoI mpt_roroi := { { 10, 11 }, { 20, 26, 29 }, { 31, 33 } };
+
+testcase tc_all_from_subrefs_modulepar() runs on A
+{
+  // templates with 'all from'
+  var template integer vt_sr := ( 0, all from mp_rec.soi, all from mpt_roroi[1] );
+  var template integer vt_sr_exp := ( 0, 7, 1, 5, 20, 26, 29 );
+  var template RoI vt_sr_perm := { permutation ( 3, all from mp_rec.roi, all from mpt_rouni[1].soi ) };
+  var template RoI vt_sr_perm_exp := { permutation ( 3, 2, 1, 0, -1, -3, -5 ) };
+  var template SoI vt_sr_sub := subset ( all from mp_rosoi[0], 6, all from mpt_roroi[0] );
+  var template SoI vt_sr_sub_exp := subset ( 2, 4, 8, 16, 6, 10, 11 );
+  var template SoI vt_sr_super := superset ( all from mpt_rouni[0].soi, all from mpt_rouni[0].soi );
+  var template SoI vt_sr_super_exp := superset ( 1, 1, 1, 1, 1, 1 );
+
+  // test templates with 'all from' against the expected templates
+  if (log2str(vt_sr) != log2str(vt_sr_exp)) {
+    setverdict(fail, "Expected: ", vt_sr_exp, ", got: ", vt_sr);
+  }
+  if (log2str(vt_sr_perm) != log2str(vt_sr_perm_exp)) {
+    setverdict(fail, "Expected: ", vt_sr_perm_exp, ", got: ", vt_sr_perm);
+  }
+  if (log2str(vt_sr_sub) != log2str(vt_sr_sub_exp)) {
+    setverdict(fail, "Expected: ", vt_sr_sub_exp, ", got: ", vt_sr_sub);
+  }
+  if (log2str(vt_sr_super) != log2str(vt_sr_super_exp)) {
+    setverdict(fail, "Expected: ", vt_sr_super_exp, ", got: ", vt_sr_super);
+  }
+  setverdict(pass);
+}
+
+// all from + function parameters
+function f_test_all_from_param(RoMyRec p_rorec, in RoMyUnion p_rouni, inout MyUnion p_uni,
+  template RoSoI pt_rosoi, in template RoRoI pt_roroi, inout template MyRecord pt_rec)
+{
+  // templates with 'all from'
+  var template integer vt_sr := ( all from p_rorec[0].roi, 0, all from pt_rec.roi );
+  var template integer vt_sr_exp := ( -1, -3, -5, 0, 1, 3, 5 );
+  var template RoI vt_sr_perm := { permutation ( all from pt_rosoi[0], all from p_rouni[0].roi ) };
+  var template RoI vt_sr_perm_exp := { permutation ( 10, 20, 30, 11, 22, 33 ) };
+  var template SoI vt_sr_sub := subset ( all from p_uni.roi, all from p_uni.roi );
+  var template SoI vt_sr_sub_exp := subset ( 7, 77, 777, 7, 77, 777 );
+  var template SoI vt_sr_super := superset ( 0, all from pt_roroi[0], all from pt_roroi[1] );
+  var template SoI vt_sr_super_exp := superset ( 0, 1, 2, 3, 4, 5 );
+
+  // test templates with 'all from' against the expected templates
+  if (log2str(vt_sr) != log2str(vt_sr_exp)) {
+    setverdict(fail, "Expected: ", vt_sr_exp, ", got: ", vt_sr);
+  }
+  if (log2str(vt_sr_perm) != log2str(vt_sr_perm_exp)) {
+    setverdict(fail, "Expected: ", vt_sr_perm_exp, ", got: ", vt_sr_perm);
+  }
+  if (log2str(vt_sr_sub) != log2str(vt_sr_sub_exp)) {
+    setverdict(fail, "Expected: ", vt_sr_sub_exp, ", got: ", vt_sr_sub);
+  }
+  if (log2str(vt_sr_super) != log2str(vt_sr_super_exp)) {
+    setverdict(fail, "Expected: ", vt_sr_super_exp, ", got: ", vt_sr_super);
+  }
+  setverdict(pass);
+}
+
+testcase tc_all_from_subrefs_param() runs on A
+{
+  var MyUnion v_uni := c_uni;
+  var template MyRecord vt_rec := t_rec;
+  f_test_all_from_param(c_rorec, c_rouni, v_uni, t_rosoi(100), t_roroi, vt_rec);
+}
+
+// all from + function calls
+function f_rorec() return RoMyRec { return c_rorec; }
+function f_rouni() return RoMyUnion { return c_rouni; }
+function f_uni() return MyUnion { return c_uni; }
+function f_rosoi(in integer x) return template RoSoI { return t_rosoi(x); }
+function f_roroi() return template RoRoI { return t_roroi; }
+function f_rec() return template MyRecord { return t_rec; }
+
+testcase tc_all_from_subrefs_function() runs on A
+{
+  // templates with 'all from'
+  var template integer vt_sr := ( all from f_rorec()[0].roi, 0, all from f_rec().roi );
+  var template integer vt_sr_exp := ( -1, -3, -5, 0, 1, 3, 5 );
+  var template RoI vt_sr_perm := { permutation ( all from f_rosoi(100)[0], all from f_rouni()[0].roi ) };
+  var template RoI vt_sr_perm_exp := { permutation ( 10, 20, 30, 11, 22, 33 ) };
+  var template SoI vt_sr_sub := subset ( all from f_uni().roi, all from f_uni().roi );
+  var template SoI vt_sr_sub_exp := subset ( 7, 77, 777, 7, 77, 777 );
+  var template SoI vt_sr_super := superset ( 0, all from f_roroi()[0], all from f_roroi()[1] );
+  var template SoI vt_sr_super_exp := superset ( 0, 1, 2, 3, 4, 5 );
+
+  // test templates with 'all from' against the expected templates
+  if (log2str(vt_sr) != log2str(vt_sr_exp)) {
+    setverdict(fail, "Expected: ", vt_sr_exp, ", got: ", vt_sr);
+  }
+  if (log2str(vt_sr_perm) != log2str(vt_sr_perm_exp)) {
+    setverdict(fail, "Expected: ", vt_sr_perm_exp, ", got: ", vt_sr_perm);
+  }
+  if (log2str(vt_sr_sub) != log2str(vt_sr_sub_exp)) {
+    setverdict(fail, "Expected: ", vt_sr_sub_exp, ", got: ", vt_sr_sub);
+  }
+  if (log2str(vt_sr_super) != log2str(vt_sr_super_exp)) {
+    setverdict(fail, "Expected: ", vt_sr_super_exp, ", got: ", vt_sr_super);
+  }
+  setverdict(pass);
+}
+
+control {
+  execute(tc_all_from_subrefs());
+  execute(tc_all_from_subrefs_permutation());
+  execute(tc_all_from_subrefs_subset());
+  execute(tc_all_from_subrefs_superset());
+  execute(tc_all_from_subrefs_var());
+  execute(tc_all_from_subrefs_modulepar());
+  execute(tc_all_from_subrefs_param());
+  execute(tc_all_from_subrefs_function());
+}
+
+}
diff --git a/Regression_Test_java/src/all_from/all_from_subset.ttcn b/Regression_Test_java/src/all_from/all_from_subset.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..45f976f7fa991f0424cd7067ab4b854b9e26dde8
--- /dev/null
+++ b/Regression_Test_java/src/all_from/all_from_subset.ttcn
@@ -0,0 +1,2846 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Raduly, Csaba
+ *
+ ******************************************************************************/
+module all_from_subset
+{
+import from types all;
+import from functions all;
+
+template RoI t_imported_RoI1 := {1, 2, (6..9)};
+template RoI t_imported_RoI2 := {1, *, 3};
+template RoI t_imported_RoI3 := {20,21,22};
+template RoI t_imported_RoI4 := {1, ?, 3};
+//for permutation:
+template RoI t_imported_RoI1_P := {1, 2, *};
+template RoI t_imported_RoI3_P := {1, 2, 3};
+template RoI t_imported_RoI7_P := {1, 2, ?};
+
+//===========Set of Integer================================
+template SoI t_imported_SoI1 := {1,2,(6..9)};
+template SoI t_imported_SoI2 := {1, *, 3};
+template SoI t_imported_SoI3 := {20,21,22};
+
+// Test Target:
+// ETSI ES 201 873-1 v?.?
+// B.1.2.7    SubSet
+//just to test these types as well:
+modulepar RoI tsp_RoI3 := {20,21,22};
+modulepar RoI tsp_SoI3 := {20,21,22};
+
+const RoI c_RoI3 := {20,21,22};
+const SoI c_SoI3 := {20,21,22};
+
+group Csaba_group {
+  //template RoI t_RoI1 := {1, 2, (6..9)};
+  //template RoI t_RoI2 := {1, *, 3};
+
+  // B.1.2.7    SubSet
+  //EXAMPLE 1:
+  template MySetOfType MyTemplate1_ := subset (1, 2, 3);
+  // matches any sequence of integers which contains zero or one occurrences of the numbers
+  // 1, 2 and 3 in any order and position
+
+  template MySetOfType MyTemplate2_ := subset (1, 2, ?);
+  // matches any sequence of integers which contains zero or one occurrences of the numbers
+  // 1, 2 and a valid integer value (i.e. between 0 and 10, inclusive) in any order and position
+
+  template MySetOfType MyTemplate3_ := subset (1, 2, (3, 4));
+  // matches any sequence of integers which contains zero or one occurrences of the numbers
+  // 1, 2 and one of the numbers 3 or 4, in any order and position
+
+  template MySetOfType MyTemplate4_ := subset (1, 2, complement (3, 4));
+  // matches any sequence of integers which contains zero or one occurrences of the numbers
+  // 1, 2 and a valid integer number which is not 3 or 4, in any order and position
+
+  template MySetOfType MyTemplate5_ := subset (1, 2, 3) length (2);
+  // matches any sequence of two integers which contains zero or one occurrences of
+  // the numbers 1, 2 and 3, in any order and position
+
+  template MySetOfType MyTemplate6_ := subset (1, 2, ?) length (0 .. 2);
+  // matches any sequence of zero, one or two integers which contains zero or one occurrences of
+  // the numbers 1, 2 and of a valid integer value, in any order and position
+
+  template MySetOfType MyTemplate7_ := subset (1, 2, 3) length (0 .. 4);
+  // causes an error, the upper bound of length attribute contradicts to the maximum number of
+  // elements imposed by the subset argument
+
+  //EXAMPLE 2:
+  template RoI t_RoI1_ := {1, 2, ?};
+  template SoI t_SoI1_ := subset(all from t_RoI1_); 
+  // results in subset(1, 2, ?)
+
+  testcase tc_subset() runs on A
+  {
+    action("subset: ", t_SoI1_);
+    var SoI v;
+
+    v := {};
+    if (match(v, t_SoI1_)) { setverdict(pass); }
+    else { setverdict(fail, v, " should match ", t_SoI1_); }
+
+    v := { 1 };
+    if (match(v, t_SoI1_)) { setverdict(pass); }
+    else { setverdict(fail, v, " should match ", t_SoI1_); }
+
+    v := { 2 };
+    if (match(v, t_SoI1_)) { setverdict(pass); }
+    else { setverdict(fail, v, " should match ", t_SoI1_); }
+
+    v := { 42 };
+    if (match(v, t_SoI1_)) { setverdict(pass); }
+    else { setverdict(fail, v, " should match ", t_SoI1_); }
+
+    v := { 1, 2, 3 };
+    if (match(v, t_SoI1_)) { setverdict(pass); }
+    else { setverdict(fail, v, " should match ", t_SoI1_); }
+
+    v := { 1, 2, 3, 4, 5 };
+    if (not match(v, t_SoI1_)) { setverdict(pass); }
+    else { setverdict(fail, v, " should NOT match ", t_SoI1_); }
+  }
+
+}
+//Testcases by ethbaat:
+
+group Attilas_group {
+
+  //=============== Templates ==========================
+
+  //record of integers
+  template RoI t_RoI1 := {1, 2, (6..9)};
+  //template RoI t_RoI2 := {1, *, 3};
+  template RoI t_RoI3 := {20,21,22};
+  template RoI t_RoI4 := {1,2,?};
+  template RoI t_RoI5 := {1,2};
+  //SubSet of Integers
+  template SoI t_soi0 := subset (all from t_RoI3 );
+  template SoI t_soi0_eq := subset (20,21,22);
+  template SoI t_soi0_1 := subset ((all from t_RoI3 ));//i.e.: subset((20,21,22)); -it worked!
+  template SoI t_soi0_1_eq := subset ((20,21,22));
+  template SoI t_soi1 := subset (all from t_RoI1, 100);
+  template SoI t_soi1_eq := subset ( 1, 2, (6..9), 100);
+  template SoI t_soi2 := subset (-1,0,all from t_RoI1,100);
+  template SoI t_soi2_eq := subset (-1,0,1,2,(6..9),100);
+  template SoI t_soi3 := subset(-1,0,all from t_RoI1, all from t_RoI3,100);
+  template SoI t_soi3_eq := subset(-1,0,1,2,(6..9),20,21,22,100);
+  template SoI t_soi4 := subset(-1,0,all from t_RoI1, 100, all from t_RoI3);
+  template SoI t_soi4_eq := subset(-1,0,1,2,(6..9),100,20,21,22);
+  
+  template SoI t_soi5 := subset(-1,0,all from t_RoI1, 100, all from t_RoI3,all from t_RoI3 ); //repetition
+  template SoI t_soi5_eq := subset(-1,0,1,2,(6..9),100,20,21,22,20,21,22);
+  
+  template SoI t_soi6 := subset(-1,0,all from t_RoI1, 100, all from t_RoI3,all from t_RoI3,all from t_RoI3); //repetition
+  template SoI t_soi6_eq := subset(-1,0,1,2,(6..9),100,20,21,22,20,21,22,20,21,22);
+  
+  template SoI t_soi7 := subset(all from t_RoI1) length (2); 
+  template SoI t_soi7_eq := subset (1,2,(6..9)) length (2)
+  
+  template SoI t_soi8 := subset(all from t_RoI1, complement(8,9)) length (2);
+  template SoI t_soi8_eq := subset (1,2,(6..9),complement(8,9)) length (2)
+  
+  template SoI t_soi9 := subset(complement(all from t_RoI1)) ;
+  template SoI t_soi9_eq := subset (complement(1,2,(6..9))); //subset(-infinity..1,4,5,10,11,12,..}
+  
+  template SoI t_soi10 := subset(all from t_RoI1, complement(all from t_RoI1)) length (2);
+  template SoI t_soi10_eq := subset (1,2,(6..9),complement(1,2,(6..9))) length (2);
+  template SoI t_soi11    := subset(all from t_RoI1, complement(all from t_RoI5)) length (2);
+  template SoI t_soi11_eq := subset(1, 2, (6..9)   , complement(1,2)) length (2);
+  
+  template SoI t_soi12    := subset(all from t_RoI4);
+  template SoI t_soi12_eq := subset(1, 2, ?);
+
+  //template SoI t_soi13s    := subset(all from t_SoI2);
+  //template SoI t_soi13s_eq := subset(1,*,3);
+
+  //from modulepar:
+  template SoI t_soi13roi := subset(all from tsp_RoI3);  
+  template SoI t_soi13_eq := subset(20,21,22);
+  template SoI t_soi13soi := subset(all from tsp_SoI3); 
+
+  //from const:
+  template SoI t_soi13roi_c :=subset(all from c_RoI3);
+  template SoI t_soi13soi_c :=subset(all from c_SoI3);
+
+
+  //=== subset referring remote templates (imported templates)
+  template SoI t_importing_i0   := subset (all from t_imported_RoI3 );
+  template SoI t_importing_i0_1 := subset ((all from t_imported_RoI3 ));
+  template SoI t_importing_i1   := subset (all from t_imported_RoI1, 100);
+  template SoI t_importing_i2   := subset (-1,0,all from t_imported_RoI1,100);
+  
+  //========== set of integers ==================
+  template SoI t_SoI1 := {1, 2, (6..9)};
+  //template SoI t_SoI2 := {1, *, 3};
+  template SoI t_SoI3 := {20,21,22};
+  template SoI t_SoI4 := {1,2,?};
+  template SoI t_SoI5 := {1,2};
+  //SubSet of Integers
+  template SoI t_soi0s := subset (all from t_SoI3 );
+  template SoI t_soi0s_eq := subset (20,21,22);
+  template SoI t_soi0s_1 := subset ((all from t_SoI3 ));//i.e.: subset((20,21,22)); -it worked!
+  template SoI t_soi0s_1_eq := subset ((20,21,22));
+  template SoI t_soi1s := subset (all from t_SoI1, 100);
+  template SoI t_soi1s_eq := subset ( 1, 2, (6..9), 100);
+  template SoI t_soi2s := subset (-1,0,all from t_SoI1,100);
+  template SoI t_soi2s_eq := subset (-1,0,1,2,(6..9),100);
+  template SoI t_soi3s := subset(-1,0,all from t_SoI1, all from t_SoI3,100);
+  template SoI t_soi3s_eq := subset(-1,0,1,2,(6..9),20,21,22,100);
+  template SoI t_soi4s := subset(-1,0,all from t_SoI1, 100, all from t_SoI3);
+  template SoI t_soi4s_eq := subset(-1,0,1,2,(6..9),100,20,21,22);
+  
+  template SoI t_soi5s := subset(-1,0,all from t_SoI1, 100, all from t_SoI3,all from t_SoI3 ); //repetition
+  template SoI t_soi5s_eq := subset(-1,0,1,2,(6..9),100,20,21,22,20,21,22);
+  
+  template SoI t_soi6s := subset(-1,0,all from t_SoI1, 100, all from t_SoI3,all from t_SoI3,all from t_SoI3); //repetition
+  template SoI t_soi6s_eq := subset(-1,0,1,2,(6..9),100,20,21,22,20,21,22,20,21,22);
+  
+  template SoI t_soi7s := subset(all from t_SoI1) length (2); 
+  template SoI t_soi7s_eq := subset (1,2,(6..9)) length (2)
+  
+  template SoI t_soi8s := subset(all from t_SoI1, complement(8,9)) length (2);
+  template SoI t_soi8s_eq := subset (1,2,(6..9),complement(8,9)) length (2)
+  
+  template SoI t_soi9s := subset(complement(all from t_SoI1)) ;
+  template SoI t_soi9s_eq := subset (complement(1,2,(6..9))); //subset(-infinity..1,4,5,10,11,12,..}
+  
+  template SoI t_soi10s := subset(all from t_SoI1, complement(all from t_SoI1)) length (2);
+  template SoI t_soi10s_eq := subset (1,2,(6..9),complement(1,2,(6..9))) length (2);
+  template SoI t_soi11s    := subset(all from t_SoI1, complement(all from t_SoI5)) length (2);
+  template SoI t_soi11s_eq := subset(1, 2, (6..9)   , complement(1,2)) length (2);
+  
+  template SoI t_soi12s    := subset(all from t_SoI4);
+  template SoI t_soi12s_eq := subset(1, 2, ?);
+
+  //template SoI t_soi13s    := subset(all from t_SoI2);
+  //template SoI t_soi13s_eq := subset(1,*,3);
+
+  //================= Testcases ========================
+
+  //=============== Record of Integers ==================
+
+  //=== 0 ===
+  testcase tc_subset_soi0_eq() runs on A {
+    f_checkSoITemplateEquivalence(t_soi0,t_soi0_eq);
+  }
+  
+  testcase tc_subset_importing_i0_eq() runs on A {
+    f_checkSoITemplateEquivalence(t_importing_i0,t_soi0_eq);
+  }
+  //t_i0:=subset (20,21,22)
+  testcase tc_subset_i0() runs on A {
+    var RoSoI vl_goodValues := {{},{20},{21},{22},{20,21},{22,20},{22,21},{20,21,22}};
+    var RoSoI vl_badValues := {{0},{1},{-1},{1000},{1,19}};
+    f_checkSoITemplate(t_soi0,vl_goodValues,vl_badValues);
+  }
+  
+  testcase tc_subset_importing_i0() runs on A {
+    var RoSoI vl_goodValues := {{},{20},{21},{22},{20,21},{22,20},{22,21},{20,21,22}};
+    var RoSoI vl_badValues := {{0},{1},{-1},{1000},{1,19}};
+    f_checkSoITemplate(t_importing_i0,vl_goodValues,vl_badValues);
+  }
+  //subset ((20,21,22));
+  testcase tc_subset_soi0_1_eq() runs on A {
+    f_checkSoITemplateEquivalence(t_soi0_1,t_soi0_1_eq);
+  }
+
+  testcase tc_subset_importing_i0_1_eq() runs on A {
+    f_checkSoITemplateEquivalence(t_importing_i0_1,t_soi0_1_eq);
+  }
+  
+  testcase tc_subset_soi0_1() runs on A {
+    var RoSoI vl_goodValues := {{},{20},{21},{22} }
+    var RoSoI vl_badValues := {{0},{1},{-1},{1000},{1,20},{20,21},{22,20},{22,21},{20,21,22},{20,21,22,21}};
+    // subset((20,21,22)) {this test} is not the same as subset(20,21,22) {previous test}
+    f_checkSoITemplate(t_soi0_1,vl_goodValues,vl_badValues);
+  }
+
+  //=== 1 ===
+  testcase tc_subset_soi1_eq() runs on A {
+    f_checkSoITemplateEquivalence(t_soi1,t_soi1_eq);
+  }
+  
+  testcase tc_subset_importing_i1_eq() runs on A {
+    f_checkSoITemplateEquivalence(t_importing_i1,t_soi1_eq);
+  }
+  //t_i1={1,2,(6..9),100} - 2x2x5x2=40 good subsets
+  testcase tc_subset_i1() runs on A {
+    var RoSoI vl_goodValues := {
+      {},
+      {1},{2},{6},{7},{8},{9},{100},
+      {1,2},{1,6},{1,7},{1,8},{1,9},{1,100},
+      {2,6},{2,7},{2,8},{2,9},{2,100},
+      {6,100},{7,100},{8,100},{9,100},
+      {1,2,6},{1,2,7},{1,2,8},{1,2,9},{1,2,100},
+      {2,6,100},{2,7,100},{2,8,100},{2,9,100},
+      {1,6,100},{1,7,100},{1,8,100},{1,9,100},
+      {1,2,6,100}
+    };
+    var RoSoI vl_badValues := {{0}, {-1},{1000},{1,19},{6,7},{6,8},{6,9},{1,6,7,100},{1,2,200}, {1,1}};
+    f_checkSoITemplate(t_soi1,vl_goodValues,vl_badValues);
+  }
+  
+  testcase tc_subset_importing_i1() runs on A {
+    var RoSoI vl_goodValues := {
+      {},
+      {1},{2},{6},{7},{8},{9},{100},
+      {1,2},{1,6},{1,7},{1,8},{1,9},{1,100},
+      {2,6},{2,7},{2,8},{2,9},{2,100},
+      {6,100},{7,100},{8,100},{9,100},
+      {1,2,6},{1,2,7},{1,2,8},{1,2,9},{1,2,100},
+      {2,6,100},{2,7,100},{2,8,100},{2,9,100},
+      {1,6,100},{1,7,100},{1,8,100},{1,9,100},
+      {1,2,6,100}
+    };
+    var RoSoI vl_badValues := {{0}, {-1},{1000},{1,19},{6,7},{6,8},{6,9},{1,6,7,100},{1,2,200}, {1,1}};
+    f_checkSoITemplate(t_soi1,vl_goodValues,vl_badValues);
+  }
+  //=== 2 ===
+  testcase tc_subset_soi2_eq() runs on A {
+    f_checkSoITemplateEquivalence(t_soi2,t_soi2_eq);
+  }
+  
+  testcase tc_subset_importing_i2_eq() runs on A {
+    f_checkSoITemplateEquivalence(t_importing_i2,t_soi2_eq);
+  }
+  
+  testcase tc_subset_i2() runs on A {
+    var RoSoI vl_goodValues := {
+      {},
+      {-1},{0},{1},{2},{6},{7},{8},{9},{100},
+      {-1,0},{-1,1},{-1,2},{-1,6},{-1,7},{-1,8},{-1,9},{-1,100},
+      {0,2},{0,6},{0,7},{0,8},{0,9},{0,100},
+      {1,2},{1,6},{1,7},{1,8},{1,9},{1,100},
+      {2,6},{2,7},{2,8},{2,9},{2,100},
+      {6,100},{7,100},{8,100},{9,100},
+      {-1,0,1},{-1,0,2},{-1,0,6},{-1,0,7},{-1,0,8},{-1,0,9},{-1,0,100},
+      {-1,2,6},{-1,2,7},{-1,2,8},{-1,2,9},{-1,2,100},
+      {-1,6,100},{-1,7,100},{-1,8,100},{-1,9,100},
+      {1,2,6},{1,2,7},{1,2,8},{1,2,9},{1,2,100},
+      {0,1,2},{0,1,6}, {0,1,7},{0,1,8},{0,1,9},{0,1,100},
+      {0,2,6},{0,2,7},{0,2,8},{0,2,9},{0,2,100},
+      {2,6,100},{2,7,100},{2,8,100},{2,9,100},
+      {1,6,100},{1,7,100},{1,8,100},{1,9,100},
+      {1,2,6,100}
+    };
+    var RoSoI vl_badValues := {{1000},{1,19},{6,7},{6,8},{6,9},{1,6,7,100},{1,2,200}, {1,1},{-1,0,1,2,6,7,100}};
+    f_checkSoITemplate(t_soi2,vl_goodValues,vl_badValues);
+  }
+  //=== 3 ===
+  testcase tc_subset_soi3_eq() runs on A {
+    f_checkSoITemplateEquivalence(t_soi3,t_soi3_eq);
+  }
+
+  testcase tc_subset_i3() runs on A {
+    var RoSoI vl_goodValues := {
+      {},
+      {-1},{0},{1},{2},{6},{7},{8},{9},{100},
+      {-1,0},{-1,1},{-1,2},{-1,6},{-1,7},{-1,8},{-1,9},{-1,100},
+      {0,2},{0,6},{0,7},{0,8},{0,9},{0,100},
+      {1,2},{1,6},{1,7},{1,8},{1,9},{1,100},
+      {2,6},{2,7},{2,8},{2,9},{2,100},
+      {6,100},{7,100},{8,100},{9,100},
+      {-1,0,1},{-1,0,2},{-1,0,6},{-1,0,7},{-1,0,8},{-1,0,9},{-1,0,100},
+      {-1,2,6},{-1,2,7},{-1,2,8},{-1,2,9},{-1,2,100},
+      {-1,6,100},{-1,7,100},{-1,8,100},{-1,9,100},
+      {1,2,6},{1,2,7},{1,2,8},{1,2,9},{1,2,100},
+      {0,1,2},{0,1,6}, {0,1,7},{0,1,8},{0,1,9},{0,1,100},
+      {0,2,6},{0,2,7},{0,2,8},{0,2,9},{0,2,100},
+      {2,6,100},{2,7,100},{2,8,100},{2,9,100},
+      {1,6,100},{1,7,100},{1,8,100},{1,9,100},
+      {1,2,6,100},
+      {20},{21},{22},
+      {20,-1},{20,0},{20,1},{20,2},{20,6},{20,7},{20,8},{20,9},{20,100},
+      {21,-1},{21,0},{21,1},{21,2},{21,6},{21,7},{21,8},{21,9},{21,100},
+      {22,-1},{22,0},{22,1},{22,2},{22,6},{22,7},{22,8},{22,9},{22,100},
+      {20,21,22},{20,21,-1},{20,21,0},{20,21,1},{20,21,2},{20,21,6},{20,21,7},{20,21,8},{20,21,9},{20,21,100},
+      {20,22,0},{20,22,1},{20,22,2},
+      {20,0,2},{20,0,6},{20,0,7},{20,0,8},{20,0,9},{20,0,100},
+      {20,1,2},{20,1,6},{20,1,7},{20,1,8},{20,1,9},{20,1,100},
+      {20,2,6},{20,2,7},{20,2,8},{20,2,9},{20,2,100},
+      {20,6,100},{20,7,100},{20,8,100},{20,9,100},
+      {21,0,2},{21,0,6},{21,0,7},{21,0,8},{21,0,9},{21,0,100},
+      {21,1,2},{21,1,6},{21,1,7},{21,1,8},{21,1,9},{21,1,100},
+      {21,2,6},{21,2,7},{21,2,8},{21,2,9},{21,2,100},
+      {21,6,100},{21,7,100},{21,8,100},{21,9,100},
+      {22,0,2},{22,0,6},{22,0,7},{22,0,8},{22,0,9},{22,0,100},
+      {22,1,2},{22,1,6},{22,1,7},{22,1,8},{22,1,9},{22,1,100},
+      {22,2,6},{22,2,7},{22,2,8},{22,2,9},{22,2,100},
+      {22,6,100},{22,7,100},{22,8,100},{22,9,100},
+      {-1,0,1,2,  20,21,22,100},{-1,0,1,2,  20,21,22,100},
+      {-1,0,1,2,8,20,21,22,100},{-1,0,1,2,8,20,21,22,100},{-1,0,1,2,9,20,21,22,100},
+      {-1,0,1,2,6,20,21,22,100},{-1,0,1,2,7,20,21,22,100},{-1,0,1,2,8,20,21,22,100},
+      {-1,0,1,2,9,20,21,22,100},{-1,0,1,2,20,21,22,100}
+    };
+    var RoSoI vl_badValues := {{1000},{1,19},{6,7},{6,8},{6,9},{1,6,7,100},{1,2,200}, {1,1},{1,1},{-1,0,1,2,6,7,100}};
+    f_checkSoITemplate(t_soi3,vl_goodValues,vl_badValues);
+  }
+  //=== 4 ===
+  testcase tc_subset_soi4_eq() runs on A {
+    f_checkSoITemplateEquivalence(t_soi4,t_soi4_eq);
+  }
+  
+  testcase tc_subset_i4() runs on A {
+    var RoSoI vl_goodValues := {
+      {},
+      {-1},{0},{1},{2},{6},{7},{8},{9},{100},
+      {-1,0},{-1,1},{-1,2},{-1,6},{-1,7},{-1,8},{-1,9},{-1,100},
+      {0,2},{0,6},{0,7},{0,8},{0,9},{0,100},
+      {1,2},{1,6},{1,7},{1,8},{1,9},{1,100},
+      {2,6},{2,7},{2,8},{2,9},{2,100},
+      {6,100},{7,100},{8,100},{9,100},
+      {-1,0,1},{-1,0,2},{-1,0,6},{-1,0,7},{-1,0,8},{-1,0,9},{-1,0,100},
+      {-1,2,6},{-1,2,7},{-1,2,8},{-1,2,9},{-1,2,100},
+      {-1,6,100},{-1,7,100},{-1,8,100},{-1,9,100},
+      {1,2,6},{1,2,7},{1,2,8},{1,2,9},{1,2,100},
+      {0,1,2},{0,1,6}, {0,1,7},{0,1,8},{0,1,9},{0,1,100},
+      {0,2,6},{0,2,7},{0,2,8},{0,2,9},{0,2,100},
+      {2,6,100},{2,7,100},{2,8,100},{2,9,100},
+      {1,6,100},{1,7,100},{1,8,100},{1,9,100},
+      {1,2,6,100},
+      {20},{21},{22},
+      {20,-1},{20,0},{20,1},{20,2},{20,6},{20,7},{20,8},{20,9},{20,100},
+      {21,-1},{21,0},{21,1},{21,2},{21,6},{21,7},{21,8},{21,9},{21,100},
+      {22,-1},{22,0},{22,1},{22,2},{22,6},{22,7},{22,8},{22,9},{22,100},
+      {20,21,22},{20,21,-1},{20,21,0},{20,21,1},{20,21,2},{20,21,6},{20,21,7},{20,21,8},{20,21,9},{20,21,100},
+      {20,22,0},{20,22,1},{20,22,2},
+      {20,0,2},{20,0,6},{20,0,7},{20,0,8},{20,0,9},{20,0,100},
+      {20,1,2},{20,1,6},{20,1,7},{20,1,8},{20,1,9},{20,1,100},
+      {20,2,6},{20,2,7},{20,2,8},{20,2,9},{20,2,100},
+      {20,6,100},{20,7,100},{20,8,100},{20,9,100},
+      {21,0,2},{21,0,6},{21,0,7},{21,0,8},{21,0,9},{21,0,100},
+      {21,1,2},{21,1,6},{21,1,7},{21,1,8},{21,1,9},{21,1,100},
+      {21,2,6},{21,2,7},{21,2,8},{21,2,9},{21,2,100},
+      {21,6,100},{21,7,100},{21,8,100},{21,9,100},
+      {22,0,2},{22,0,6},{22,0,7},{22,0,8},{22,0,9},{22,0,100},
+      {22,1,2},{22,1,6},{22,1,7},{22,1,8},{22,1,9},{22,1,100},
+      {22,2,6},{22,2,7},{22,2,8},{22,2,9},{22,2,100},
+      {22,6,100},{22,7,100},{22,8,100},{22,9,100}
+    };
+    var RoSoI vl_badValues := {{1000},{1,19},{6,7},{6,8},{6,9},{1,6,7,100},{1,2,200}, {1,1},{1,1},{-1,0,1,2,6,7,100}};
+    f_checkSoITemplate(t_soi4,vl_goodValues,vl_badValues);
+  }
+  //=== 5 ===
+  testcase tc_subset_soi5_eq() runs on A {
+    f_checkSoITemplateEquivalence(t_soi5,t_soi5_eq);
+  }
+  
+  testcase tc_subset_i5() runs on A {
+    var RoSoI vl_goodValues := {
+      {},
+      {-1},{0},{1},{2},{6},{7},{8},{9},{100},
+      {-1,0},{-1,1},{-1,2},{-1,6},{-1,7},{-1,8},{-1,9},{-1,100},
+      {0,2},{0,6},{0,7},{0,8},{0,9},{0,100},
+      {1,2},{1,6},{1,7},{1,8},{1,9},{1,100},
+      {2,6},{2,7},{2,8},{2,9},{2,100},
+      {6,100},{7,100},{8,100},{9,100},
+      {-1,0,1},{-1,0,2},{-1,0,6},{-1,0,7},{-1,0,8},{-1,0,9},{-1,0,100},
+      {-1,2,6},{-1,2,7},{-1,2,8},{-1,2,9},{-1,2,100},
+      {-1,6,100},{-1,7,100},{-1,8,100},{-1,9,100},
+      {1,2,6},{1,2,7},{1,2,8},{1,2,9},{1,2,100},
+      {0,1,2},{0,1,6}, {0,1,7},{0,1,8},{0,1,9},{0,1,100},
+      {0,2,6},{0,2,7},{0,2,8},{0,2,9},{0,2,100},
+      {2,6,100},{2,7,100},{2,8,100},{2,9,100},
+      {1,6,100},{1,7,100},{1,8,100},{1,9,100},
+      {1,2,6,100},
+      {20},{21},{22},
+      {20,-1},{20,0},{20,1},{20,2},{20,6},{20,7},{20,8},{20,9},{20,100},
+      {21,-1},{21,0},{21,1},{21,2},{21,6},{21,7},{21,8},{21,9},{21,100},
+      {22,-1},{22,0},{22,1},{22,2},{22,6},{22,7},{22,8},{22,9},{22,100},
+      {20,21,22},{20,21,-1},{20,21,0},{20,21,1},{20,21,2},{20,21,6},{20,21,7},{20,21,8},{20,21,9},{20,21,100},
+      {20,22,0},{20,22,1},{20,22,2},
+      {20,0,2},{20,0,6},{20,0,7},{20,0,8},{20,0,9},{20,0,100},
+      {20,1,2},{20,1,6},{20,1,7},{20,1,8},{20,1,9},{20,1,100},
+      {20,2,6},{20,2,7},{20,2,8},{20,2,9},{20,2,100},
+      {20,6,100},{20,7,100},{20,8,100},{20,9,100},
+      {21,0,2},{21,0,6},{21,0,7},{21,0,8},{21,0,9},{21,0,100},
+      {21,1,2},{21,1,6},{21,1,7},{21,1,8},{21,1,9},{21,1,100},
+      {21,2,6},{21,2,7},{21,2,8},{21,2,9},{21,2,100},
+      {21,6,100},{21,7,100},{21,8,100},{21,9,100},
+      {22,0,2},{22,0,6},{22,0,7},{22,0,8},{22,0,9},{22,0,100},
+      {22,1,2},{22,1,6},{22,1,7},{22,1,8},{22,1,9},{22,1,100},
+      {22,2,6},{22,2,7},{22,2,8},{22,2,9},{22,2,100},
+      {22,6,100},{22,7,100},{22,8,100},{22,9,100},
+      {-1,0,1,2,6,20,21,22,20,21,22,100},{-1,0,1,2,7,20,21,22,20,21,22,100},{-1,0,1,2,8,20,21,22,20,21,22,100},{-1,0,1,2,9,20,21,22,20,21,22,100}
+    };
+    var RoSoI vl_badValues := {{1000},{1,19},{6,7},{6,8},{6,9},{1,6,7,100},{1,2,200}, {1,1},{1,1},{-1,0,1,2,6,7,100},
+      {-1,0,1,2,5,6,7,8,9,20,21,22,20,21,22,100},{-1,0,1,2,5,6,7,8,9,20,21,22,20,21,22,100,20}};
+    f_checkSoITemplate(t_soi5,vl_goodValues,vl_badValues);
+  }
+  //=== 6 ===
+  testcase tc_subset_soi6_eq() runs on A {
+    f_checkSoITemplateEquivalence(t_soi6,t_soi6_eq);
+  }
+  
+  testcase tc_subset_i6() runs on A {
+    var RoSoI vl_goodValues := {
+      {},
+      {-1},{0},{1},{2},{6},{7},{8},{9},{100},
+      {-1,0},{-1,1},{-1,2},{-1,6},{-1,7},{-1,8},{-1,9},{-1,100},
+      {0,2},{0,6},{0,7},{0,8},{0,9},{0,100},
+      {1,2},{1,6},{1,7},{1,8},{1,9},{1,100},
+      {2,6},{2,7},{2,8},{2,9},{2,100},
+      {6,100},{7,100},{8,100},{9,100},
+      {-1,0,1},{-1,0,2},{-1,0,6},{-1,0,7},{-1,0,8},{-1,0,9},{-1,0,100},
+      {-1,2,6},{-1,2,7},{-1,2,8},{-1,2,9},{-1,2,100},
+      {-1,6,100},{-1,7,100},{-1,8,100},{-1,9,100},
+      {1,2,6},{1,2,7},{1,2,8},{1,2,9},{1,2,100},
+      {0,1,2},{0,1,6}, {0,1,7},{0,1,8},{0,1,9},{0,1,100},
+      {0,2,6},{0,2,7},{0,2,8},{0,2,9},{0,2,100},
+      {2,6,100},{2,7,100},{2,8,100},{2,9,100},
+      {1,6,100},{1,7,100},{1,8,100},{1,9,100},
+      {1,2,6,100},
+      {20},{21},{22},
+      {20,-1},{20,0},{20,1},{20,2},{20,6},{20,7},{20,8},{20,9},{20,100},
+      {21,-1},{21,0},{21,1},{21,2},{21,6},{21,7},{21,8},{21,9},{21,100},
+      {22,-1},{22,0},{22,1},{22,2},{22,6},{22,7},{22,8},{22,9},{22,100},
+      {20,21,22},{20,21,-1},{20,21,0},{20,21,1},{20,21,2},{20,21,6},{20,21,7},{20,21,8},{20,21,9},{20,21,100},
+      {20,22,0},{20,22,1},{20,22,2},
+      {20,0,2},{20,0,6},{20,0,7},{20,0,8},{20,0,9},{20,0,100},
+      {20,1,2},{20,1,6},{20,1,7},{20,1,8},{20,1,9},{20,1,100},
+      {20,2,6},{20,2,7},{20,2,8},{20,2,9},{20,2,100},
+      {20,6,100},{20,7,100},{20,8,100},{20,9,100},
+      {21,0,2},{21,0,6},{21,0,7},{21,0,8},{21,0,9},{21,0,100},
+      {21,1,2},{21,1,6},{21,1,7},{21,1,8},{21,1,9},{21,1,100},
+      {21,2,6},{21,2,7},{21,2,8},{21,2,9},{21,2,100},
+      {21,6,100},{21,7,100},{21,8,100},{21,9,100},
+      {22,0,2},{22,0,6},{22,0,7},{22,0,8},{22,0,9},{22,0,100},
+      {22,1,2},{22,1,6},{22,1,7},{22,1,8},{22,1,9},{22,1,100},
+      {22,2,6},{22,2,7},{22,2,8},{22,2,9},{22,2,100},
+      {22,6,100},{22,7,100},{22,8,100},{22,9,100},
+      {-1,0,1,2,6,20,21,22,20,21,22,100},{-1,0,1,2,7,20,21,22,20,21,22,100},{-1,0,1,2,8,20,21,22,20,21,22,100},{-1,0,1,2,9,20,21,22,20,21,22,100},
+      {-1,0,1,2,6,20,21,22,20,21,22,100,20,22,21},
+      {-1,0,1,2,7,20,21,22,20,21,22,100,20,22,21},{-1,0,1,2,8,20,21,22,20,21,22,100,20,22,21}
+    };
+    var RoSoI vl_badValues := {{1000},{1,19},{6,7},{6,8},{6,9},{1,6,7,100},{1,2,200}, {1,1},{1,1},{-1,0,1,2,6,7,100},
+      {-1,0,1,2,6,7,8,9,20,21,22,20,21,22,100,20,1,22,20},{1,2,200,1}};
+    f_checkSoITemplate(t_soi6,vl_goodValues,vl_badValues);
+  }
+  //=== 7 ===
+  testcase tc_subset_soi7_eq() runs on A {
+    f_checkSoITemplateEquivalence(t_soi7,t_soi7_eq);
+  }
+  
+  //subset (1,2,(6..9)) length (2)
+  testcase tc_subset_i7() runs on A {
+    var RoSoI vl_goodValues := {      
+      {1,2},{1,6},{1,7},{1,8},{1,9},
+      {2,6},{2,7},{2,8},{2,9}
+    };
+    var RoSoI vl_badValues := {
+      {},{1},{2},{6},{7},{8},{9},{1000},
+      {1,19},{6,7},{6,8},{6,9},{1,6,7,100},{1,2,200}, {1,1},{-1,0,1,2,6,7,100}};
+    f_checkSoITemplate(t_soi7,vl_goodValues,vl_badValues);
+  }
+  //=== 8 ===
+  testcase tc_subset_soi8_eq() runs on A {
+    f_checkSoITemplateEquivalence(t_soi8,t_soi8_eq);
+  }
+  
+  testcase tc_subset_i8() runs on A {
+    var RoSoI vl_goodValues := {      
+      {1,1},{1,2},{1,6},{1,7},{1,8},{1,9},
+      {2,6},{2,7},{2,8},{2,9},
+      {1,-1},{1,0},{1,1},{1,3},{1,4},{1,5},{1,10},{1,11},{1,100},
+      {2,-2},{2,-1},{2,0},{2,1},{2,2},{2,3},{2,4},{2,5},{2,10},{6,7},{6,10},
+      {7,7},{7,10},{7,11},
+      {8,6},{8,7},{8,10},{8,11},
+      {9,6},{9,7},{9,11}
+    };
+    var RoSoI vl_badValues := {
+      {},{1},{2},{6},{7},{8},{9},{1000},
+      {1,6,7,100},{1,2,200},{-1,0,1,2,6,7,100}};
+    f_checkSoITemplate(t_soi8,vl_goodValues,vl_badValues);
+  } 
+  //=== 9 ===
+  testcase tc_subset_soi9_eq() runs on A {
+    f_checkSoITemplateEquivalence(t_soi9,t_soi9_eq);
+  }
+
+  //subset(complement(1,2,(6..9)))  == (-1, 0,3,4,5,10,11 ) 
+  testcase tc_subset_i9() runs on A {
+    var RoSoI vl_goodValues := { {}, {-2},{-1},{0},{3},{4},{5},{10},{11},{1000}};
+    var RoSoI vl_badValues := {
+      {1,-3},{1,-2},{1,-1},{1,0},{1,1},{1,2},{1,3},{1,4},{1,5},{1,6},{1,7},{1,8},{1,9},{1,10},{1,11}, //...
+      {2,-3},{2,-2},{2,-1},{2,0},{2,1},{2,3},{2,4},{2,5},{2,6},{2,7},{2,8},{2,9},{2,10},{2,11}, //...
+      {1},{2},{6},{7},{8},{9},
+      {1,6,7,100},{1,2,200},{-1,0,1,2,6,7,100},
+      {1,6,7,8,9}, {1,2,6,7,8,9},{-1,-2},{-1,-2,0},{-1,0,3,4,5,10,11} 
+    };
+    f_checkSoITemplate(t_soi9,vl_goodValues,vl_badValues);
+  }  
+  //=== 10 ===
+  testcase tc_subset_soi10_eq() runs on A {
+    f_checkSoITemplateEquivalence(t_soi10,t_soi10_eq);
+  }
+  
+  //t_i10=subset(1, 2, (6..9),complement(1, 2, (6..9)))
+  testcase tc_subset_i10() runs on A {
+    var RoSoI vl_goodValues := {      
+      {1,-3},{1,-2},{1,-1},{1,0},{1,2},{1,3},{1,4},{1,5},{1,6},{1,7},{1,8},{1,9},{1,10},{1,11}, //...
+      {2,-3},{2,-2},{2,-1},{2,0},{2,1},{2,3},{2,4},{2,5},{2,6},{2,7},{2,8},{2,9},{2,10},{2,11}, //...
+      {6,-3},{6,-2},{6,-1},{6,0},{6,3},{6,4}
+    };
+    var RoSoI vl_badValues := {
+      {},{1},{2},{3},{4},{6},{7},{8},{9},{1000},{1,1},{2,2},{6,6},{6,9},{9,6},
+      {1,6,7,100},{1,2,200},{-1,0,1,2,6,7,100}};
+    f_checkSoITemplate(t_soi10,vl_goodValues,vl_badValues);
+  } 
+  //=== 11 ===
+  testcase tc_subset_soi11_eq() runs on A {
+    f_checkSoITemplateEquivalence(t_soi11,t_soi11_eq);
+  }
+  
+  //t_i11=subset( 1,2,(6..9),complement(1,2))
+  testcase tc_subset_i11() runs on A {
+    var RoSoI vl_goodValues := {      
+      {1,2},{1,6},{1,7},{1,8},{1,9},
+      {2,6},{2,7},{2,8},{2,9},
+      {1,-1},{1,0},{1,3},{1,4},{1,5},{1,10},{1,11},{1,100},
+      {2,-2},{2,-1},{2,0},{2,1},{2,3},{2,4},{2,5},{2,10},{6,7},{6,10},
+      {7,7},{7,10},{7,11},
+      {8,6},{8,7},{8,10},{8,11},{6,6},
+      {9,6},{9,7},{9,11}
+    };
+    var RoSoI vl_badValues := {
+      {},{1},{2},{6},{7},{8},{9},{1000},{1,1},{2,2},{6,6,7},
+      {1,6,7,100},{1,2,200},{-1,0,1,2,6,7,100}};
+    f_checkSoITemplate(t_soi11,vl_goodValues,vl_badValues);
+  }
+
+  //=== i12 ===
+  //subset(1, 2, ?);
+  testcase tc_subset_soi12_eq() runs on A {
+    f_checkSoITemplateEquivalence(t_soi12,t_soi12_eq);
+  }
+  
+  testcase tc_subset_i12() runs on A {
+    var RoSoI vl_goodValues := { 
+      {},{1},{2},{3},{4},{5},{6},
+      {1,1},{1,2},{1,3},{1,4},{1,6},
+      {2,3},{2,4},{2,5},{2,6},{2,7},
+      {1,2,3},{1,2,4},{1,2,5},{3,2,1},{3,1,2}
+    }
+    var RoSoI vl_badValues := {
+      {1,1,1}, {1,3,4},{1,3,5},{1,3,6},{1,2,3,4}
+    };
+    f_checkSoITemplate(t_soi12,vl_goodValues,vl_badValues);
+  }    
+
+  //===i13===
+  //subset(1, *, 3);
+  /*
+  testcase tc_subset_soi13_eq() runs on A {
+    f_checkSoITemplateEquivalence(t_soi13s,t_soi13s_eq);
+  }
+  
+  testcase tc_subset_i13() runs on A {
+    var RoSoI vl_goodValues := { 
+      {},{1},{2},{3},{4},{5},{6},
+      {1,1},{1,2},{1,3},{1,4},{1,6},
+      {2,3},{2,4},{2,5},{2,6},{2,7},
+      {1,2,3},{1,2,4},{1,2,5},{3,2,1},{3,1,2}
+    }
+    var RoSoI vl_badValues := {
+      {1,1,1}, {1,3,4},{1,3,5},{1,3,6},{1,2,3,4}
+    };
+    f_checkSoITemplate(t_soi13s,vl_goodValues,vl_badValues);
+  } */
+
+  //=== i13 ===
+  //modulepar, const
+  
+  testcase tc_subset_soi13roi_eq() runs on A {
+    f_checkSoITemplateEquivalence(t_soi13roi,t_soi13_eq);
+  }
+  
+  testcase tc_subset_soi13roi() runs on A {
+    var RoSoI vl_goodValues := { 
+      {},{20},{21},{22},{20,21},{21,20},{21,22},
+      {20,21,22},{21,20,22} 
+    }
+    var RoSoI vl_badValues := {
+      {1,1,1}, {1,3,4},{1,3,5},{1,3,6},{1,2,3,4}
+    };
+    f_checkSoITemplate(t_soi13roi,vl_goodValues,vl_badValues);
+  }
+  
+  testcase tc_subset_soi13roi_c_eq() runs on A {
+    f_checkSoITemplateEquivalence(t_soi13roi_c,t_soi13_eq);
+  }
+  
+  testcase tc_subset_soi13roi_c() runs on A {
+    var RoSoI vl_goodValues := { 
+      {},{20},{21},{22},{20,21},{21,20},{21,22},
+      {20,21,22},{21,20,22} 
+    }
+    var RoSoI vl_badValues := {
+      {1,1,1}, {1,3,4},{1,3,5},{1,3,6},{1,2,3,4}
+    };
+    f_checkSoITemplate(t_soi13roi_c,vl_goodValues,vl_badValues);
+  }    
+  //========== (The Same) Testcases for Dynamic Templates================
+
+  
+  //=== i0 ===
+  testcase tc_subset_soi0_eq_dyn() runs on A {
+    var template SoI tl_i0s := subset (all from t_SoI3 );
+    f_checkSoITemplateEquivalence(tl_i0s,t_soi0s_eq);
+  }
+
+  //double dyn: source and result are dynamic:
+  testcase tc_subset_soi0_eq_2dyn() runs on A {
+    var template SoI tl_SoI3 := {20,21,22};
+    var template SoI tl_i0s := subset (all from tl_SoI3 );
+    f_checkSoITemplateEquivalence(tl_i0s,t_soi0s_eq);
+  }
+    
+  testcase tc_subset_soi0_dyn() runs on A {
+    var template SoI tl_i0s := subset (all from t_SoI3 );
+    var RoSoI vl_goodValues := {{},{20},{21},{22},{20,21},{22,20},{22,21},{20,21,22}};
+    var RoSoI vl_badValues := {{0},{1},{-1},{1000},{1,19}};
+    f_checkSoITemplate(tl_i0s,vl_goodValues,vl_badValues);
+  }
+  
+  testcase tc_subset_soi0_2dyn() runs on A {
+    var template SoI tl_i0s := subset (all from t_SoI3 );
+    var RoSoI vl_goodValues := {{},{20},{21},{22},{20,21},{22,20},{22,21},{20,21,22}};
+    var RoSoI vl_badValues := {{0},{1},{-1},{1000},{1,19}};
+    f_checkSoITemplate(tl_i0s,vl_goodValues,vl_badValues);
+  }
+
+  //=== i1 ===
+  testcase tc_subset_soi1_eq_dyn() runs on A {
+    var template SoI tl_i1s :=  subset (all from t_SoI1, 100);
+    f_checkSoITemplateEquivalence(tl_i1s,t_soi1s_eq);
+  }
+  
+  testcase tc_subset_soi1_eq_2dyn() runs on A {
+    template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_i1s :=  subset (all from tl_SoI1, 100);
+    f_checkSoITemplateEquivalence(tl_i1s,t_soi1s_eq);
+  }
+
+  testcase tc_subset_soi1_dyn() runs on A {
+    var template SoI tl_i1s :=  subset (all from t_SoI1, 100);
+    var RoSoI vl_goodValues := {
+      {},
+      {1},{2},{6},{7},{8},{9},{100},
+      {1,2},{1,6},{1,7},{1,8},{1,9},{1,100},
+      {2,6},{2,7},{2,8},{2,9},{2,100},
+      {6,100},{7,100},{8,100},{9,100},
+      {1,2,6},{1,2,7},{1,2,8},{1,2,9},{1,2,100},
+      {2,6,100},{2,7,100},{2,8,100},{2,9,100},
+      {1,6,100},{1,7,100},{1,8,100},{1,9,100},
+      {1,2,6,100}
+    };
+    var RoSoI vl_badValues := {{0}, {-1},{1000},{1,19},{6,7},{6,8},{6,9},{1,6,7,100},{1,2,200}, {1,1}};
+    f_checkSoITemplate(tl_i1s,vl_goodValues,vl_badValues);
+  }
+  
+  testcase tc_subset_soi1_2dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_i1s :=  subset (all from tl_SoI1, 100);
+    var RoSoI vl_goodValues := {
+      {},
+      {1},{2},{6},{7},{8},{9},{100},
+      {1,2},{1,6},{1,7},{1,8},{1,9},{1,100},
+      {2,6},{2,7},{2,8},{2,9},{2,100},
+      {6,100},{7,100},{8,100},{9,100},
+      {1,2,6},{1,2,7},{1,2,8},{1,2,9},{1,2,100},
+      {2,6,100},{2,7,100},{2,8,100},{2,9,100},
+      {1,6,100},{1,7,100},{1,8,100},{1,9,100},
+      {1,2,6,100}
+    };
+    var RoSoI vl_badValues := {{0}, {-1},{1000},{1,19},{6,7},{6,8},{6,9},{1,6,7,100},{1,2,200}, {1,1}};
+    f_checkSoITemplate(tl_i1s,vl_goodValues,vl_badValues);
+  }
+
+  //=== i2 ===
+  testcase tc_subset_soi2_eq_dyn() runs on A {
+    var template SoI vt_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_i2s := subset (-1,0,all from vt_SoI1,100);
+    f_checkSoITemplateEquivalence(tl_i2s,t_soi2s_eq);
+
+    var RoSoI vl_goodValues := {
+      {},
+      {-1},{0},{1},{2},{6},{7},{8},{9},{100},
+      {-1,0},{-1,1},{-1,2},{-1,6},{-1,7},{-1,8},{-1,9},{-1,100},
+      {0,2},{0,6},{0,7},{0,8},{0,9},{0,100},
+      {1,2},{1,6},{1,7},{1,8},{1,9},{1,100},
+      {2,6},{2,7},{2,8},{2,9},{2,100},
+      {6,100},{7,100},{8,100},{9,100},
+      {-1,0,1},{-1,0,2},{-1,0,6},{-1,0,7},{-1,0,8},{-1,0,9},{-1,0,100},
+      {-1,2,6},{-1,2,7},{-1,2,8},{-1,2,9},{-1,2,100},
+      {-1,6,100},{-1,7,100},{-1,8,100},{-1,9,100},
+      {1,2,6},{1,2,7},{1,2,8},{1,2,9},{1,2,100},
+      {0,1,2},{0,1,6}, {0,1,7},{0,1,8},{0,1,9},{0,1,100},
+      {0,2,6},{0,2,7},{0,2,8},{0,2,9},{0,2,100},
+      {2,6,100},{2,7,100},{2,8,100},{2,9,100},
+      {1,6,100},{1,7,100},{1,8,100},{1,9,100},
+      {1,2,6,100}
+    };
+    var RoSoI vl_badValues := {{1000},{1,19},{6,7},{6,8},{6,9},{1,6,7,100},{1,2,200}, {1,1},{-1,0,1,2,6,7,100}};
+    f_checkSoITemplate(tl_i2s,vl_goodValues,vl_badValues);
+
+  }
+  
+  testcase tc_subset_soi2_eq_2dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_i2s := subset (-1,0,all from tl_SoI1,100);
+    f_checkSoITemplateEquivalence(tl_i2s,t_soi2s_eq);
+  }
+
+  testcase tc_subset_soi2_dyn() runs on A {
+    var template SoI tl_i2s := subset (-1,0,all from t_SoI1,100);
+    var RoSoI vl_goodValues := {
+      {},
+      {-1},{0},{1},{2},{6},{7},{8},{9},{100},
+      {-1,0},{-1,1},{-1,2},{-1,6},{-1,7},{-1,8},{-1,9},{-1,100},
+      {0,2},{0,6},{0,7},{0,8},{0,9},{0,100},
+      {1,2},{1,6},{1,7},{1,8},{1,9},{1,100},
+      {2,6},{2,7},{2,8},{2,9},{2,100},
+      {6,100},{7,100},{8,100},{9,100},
+      {-1,0,1},{-1,0,2},{-1,0,6},{-1,0,7},{-1,0,8},{-1,0,9},{-1,0,100},
+      {-1,2,6},{-1,2,7},{-1,2,8},{-1,2,9},{-1,2,100},
+      {-1,6,100},{-1,7,100},{-1,8,100},{-1,9,100},
+      {1,2,6},{1,2,7},{1,2,8},{1,2,9},{1,2,100},
+      {0,1,2},{0,1,6}, {0,1,7},{0,1,8},{0,1,9},{0,1,100},
+      {0,2,6},{0,2,7},{0,2,8},{0,2,9},{0,2,100},
+      {2,6,100},{2,7,100},{2,8,100},{2,9,100},
+      {1,6,100},{1,7,100},{1,8,100},{1,9,100},
+      {1,2,6,100}
+    };
+    var RoSoI vl_badValues := {{1000},{1,19},{6,7},{6,8},{6,9},{1,6,7,100},{1,2,200}, {1,1},{-1,0,1,2,6,7,100}};
+    f_checkSoITemplate(tl_i2s,vl_goodValues,vl_badValues);
+  }
+  
+  testcase tc_subset_soi2_2dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_i2s := subset (-1,0,all from t_SoI1,100);
+    var RoSoI vl_goodValues := {
+      {},
+      {-1},{0},{1},{2},{6},{7},{8},{9},{100},
+      {-1,0},{-1,1},{-1,2},{-1,6},{-1,7},{-1,8},{-1,9},{-1,100},
+      {0,2},{0,6},{0,7},{0,8},{0,9},{0,100},
+      {1,2},{1,6},{1,7},{1,8},{1,9},{1,100},
+      {2,6},{2,7},{2,8},{2,9},{2,100},
+      {6,100},{7,100},{8,100},{9,100},
+      {-1,0,1},{-1,0,2},{-1,0,6},{-1,0,7},{-1,0,8},{-1,0,9},{-1,0,100},
+      {-1,2,6},{-1,2,7},{-1,2,8},{-1,2,9},{-1,2,100},
+      {-1,6,100},{-1,7,100},{-1,8,100},{-1,9,100},
+      {1,2,6},{1,2,7},{1,2,8},{1,2,9},{1,2,100},
+      {0,1,2},{0,1,6}, {0,1,7},{0,1,8},{0,1,9},{0,1,100},
+      {0,2,6},{0,2,7},{0,2,8},{0,2,9},{0,2,100},
+      {2,6,100},{2,7,100},{2,8,100},{2,9,100},
+      {1,6,100},{1,7,100},{1,8,100},{1,9,100},
+      {1,2,6,100}
+    };
+    var RoSoI vl_badValues := {{1000},{1,19},{6,7},{6,8},{6,9},{1,6,7,100},{1,2,200}, {1,1},{-1,0,1,2,6,7,100}};
+    f_checkSoITemplate(tl_i2s,vl_goodValues,vl_badValues);
+  }  
+
+  //=== i3 ===
+  testcase tc_subset_soi3_eq_dyn() runs on A {
+    var template SoI tl_i3s := subset(-1,0,all from t_SoI1, all from t_SoI3,100);
+    f_checkSoITemplateEquivalence(tl_i3s,t_soi3s_eq);
+  }
+  
+  testcase tc_subset_soi3_eq_2dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_SoI3 := {20,21,22};
+    var template SoI tl_i3s := subset(-1,0,all from tl_SoI1, all from tl_SoI3,100);
+    f_checkSoITemplateEquivalence(tl_i3s,t_soi3s_eq);
+  }
+
+  testcase tc_subset_soi3_dyn() runs on A {
+    var template SoI tl_i3s := subset(-1,0,all from t_SoI1, all from t_SoI3,100);
+    var RoSoI vl_goodValues := {
+      {},
+      {-1},{0},{1},{2},{6},{7},{8},{9},{100},
+      {-1,0},{-1,1},{-1,2},{-1,6},{-1,7},{-1,8},{-1,9},{-1,100},
+      {0,2},{0,6},{0,7},{0,8},{0,9},{0,100},
+      {1,2},{1,6},{1,7},{1,8},{1,9},{1,100},
+      {2,6},{2,7},{2,8},{2,9},{2,100},
+      {6,100},{7,100},{8,100},{9,100},
+      {-1,0,1},{-1,0,2},{-1,0,6},{-1,0,7},{-1,0,8},{-1,0,9},{-1,0,100},
+      {-1,2,6},{-1,2,7},{-1,2,8},{-1,2,9},{-1,2,100},
+      {-1,6,100},{-1,7,100},{-1,8,100},{-1,9,100},
+      {1,2,6},{1,2,7},{1,2,8},{1,2,9},{1,2,100},
+      {0,1,2},{0,1,6}, {0,1,7},{0,1,8},{0,1,9},{0,1,100},
+      {0,2,6},{0,2,7},{0,2,8},{0,2,9},{0,2,100},
+      {2,6,100},{2,7,100},{2,8,100},{2,9,100},
+      {1,6,100},{1,7,100},{1,8,100},{1,9,100},
+      {1,2,6,100},
+      {20},{21},{22},
+      {20,-1},{20,0},{20,1},{20,2},{20,6},{20,7},{20,8},{20,9},{20,100},
+      {21,-1},{21,0},{21,1},{21,2},{21,6},{21,7},{21,8},{21,9},{21,100},
+      {22,-1},{22,0},{22,1},{22,2},{22,6},{22,7},{22,8},{22,9},{22,100},
+      {20,21,22},{20,21,-1},{20,21,0},{20,21,1},{20,21,2},{20,21,6},{20,21,7},{20,21,8},{20,21,9},{20,21,100},
+      {20,22,0},{20,22,1},{20,22,2},
+      {20,0,2},{20,0,6},{20,0,7},{20,0,8},{20,0,9},{20,0,100},
+      {20,1,2},{20,1,6},{20,1,7},{20,1,8},{20,1,9},{20,1,100},
+      {20,2,6},{20,2,7},{20,2,8},{20,2,9},{20,2,100},
+      {20,6,100},{20,7,100},{20,8,100},{20,9,100},
+      {21,0,2},{21,0,6},{21,0,7},{21,0,8},{21,0,9},{21,0,100},
+      {21,1,2},{21,1,6},{21,1,7},{21,1,8},{21,1,9},{21,1,100},
+      {21,2,6},{21,2,7},{21,2,8},{21,2,9},{21,2,100},
+      {21,6,100},{21,7,100},{21,8,100},{21,9,100},
+      {22,0,2},{22,0,6},{22,0,7},{22,0,8},{22,0,9},{22,0,100},
+      {22,1,2},{22,1,6},{22,1,7},{22,1,8},{22,1,9},{22,1,100},
+      {22,2,6},{22,2,7},{22,2,8},{22,2,9},{22,2,100},
+      {22,6,100},{22,7,100},{22,8,100},{22,9,100},
+      {-1,0,1,2,  20,21,22,100},{-1,0,1,2,  20,21,22,100},
+      {-1,0,1,2,8,20,21,22,100},{-1,0,1,2,8,20,21,22,100},{-1,0,1,2,9,20,21,22,100},
+      {-1,0,1,2,6,20,21,22,100},{-1,0,1,2,7,20,21,22,100},{-1,0,1,2,8,20,21,22,100},
+      {-1,0,1,2,9,20,21,22,100},{-1,0,1,2,20,21,22,100}
+    };
+    var RoSoI vl_badValues := {{1000},{1,19},{6,7},{6,8},{6,9},{1,6,7,100},{1,2,200}, {1,1},{1,1},{-1,0,1,2,6,7,100}};
+    f_checkSoITemplate(tl_i3s,vl_goodValues,vl_badValues);
+  }
+  
+  testcase tc_subset_soi3_2dyn() runs on A {    
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_SoI3 := {20,21,22};
+    var template SoI tl_i3s := subset(-1,0,all from tl_SoI1, all from tl_SoI3,100);
+    var RoSoI vl_goodValues := {
+      {},
+      {-1},{0},{1},{2},{6},{7},{8},{9},{100},
+      {-1,0},{-1,1},{-1,2},{-1,6},{-1,7},{-1,8},{-1,9},{-1,100},
+      {0,2},{0,6},{0,7},{0,8},{0,9},{0,100},
+      {1,2},{1,6},{1,7},{1,8},{1,9},{1,100},
+      {2,6},{2,7},{2,8},{2,9},{2,100},
+      {6,100},{7,100},{8,100},{9,100},
+      {-1,0,1},{-1,0,2},{-1,0,6},{-1,0,7},{-1,0,8},{-1,0,9},{-1,0,100},
+      {-1,2,6},{-1,2,7},{-1,2,8},{-1,2,9},{-1,2,100},
+      {-1,6,100},{-1,7,100},{-1,8,100},{-1,9,100},
+      {1,2,6},{1,2,7},{1,2,8},{1,2,9},{1,2,100},
+      {0,1,2},{0,1,6}, {0,1,7},{0,1,8},{0,1,9},{0,1,100},
+      {0,2,6},{0,2,7},{0,2,8},{0,2,9},{0,2,100},
+      {2,6,100},{2,7,100},{2,8,100},{2,9,100},
+      {1,6,100},{1,7,100},{1,8,100},{1,9,100},
+      {1,2,6,100},
+      {20},{21},{22},
+      {20,-1},{20,0},{20,1},{20,2},{20,6},{20,7},{20,8},{20,9},{20,100},
+      {21,-1},{21,0},{21,1},{21,2},{21,6},{21,7},{21,8},{21,9},{21,100},
+      {22,-1},{22,0},{22,1},{22,2},{22,6},{22,7},{22,8},{22,9},{22,100},
+      {20,21,22},{20,21,-1},{20,21,0},{20,21,1},{20,21,2},{20,21,6},{20,21,7},{20,21,8},{20,21,9},{20,21,100},
+      {20,22,0},{20,22,1},{20,22,2},
+      {20,0,2},{20,0,6},{20,0,7},{20,0,8},{20,0,9},{20,0,100},
+      {20,1,2},{20,1,6},{20,1,7},{20,1,8},{20,1,9},{20,1,100},
+      {20,2,6},{20,2,7},{20,2,8},{20,2,9},{20,2,100},
+      {20,6,100},{20,7,100},{20,8,100},{20,9,100},
+      {21,0,2},{21,0,6},{21,0,7},{21,0,8},{21,0,9},{21,0,100},
+      {21,1,2},{21,1,6},{21,1,7},{21,1,8},{21,1,9},{21,1,100},
+      {21,2,6},{21,2,7},{21,2,8},{21,2,9},{21,2,100},
+      {21,6,100},{21,7,100},{21,8,100},{21,9,100},
+      {22,0,2},{22,0,6},{22,0,7},{22,0,8},{22,0,9},{22,0,100},
+      {22,1,2},{22,1,6},{22,1,7},{22,1,8},{22,1,9},{22,1,100},
+      {22,2,6},{22,2,7},{22,2,8},{22,2,9},{22,2,100},
+      {22,6,100},{22,7,100},{22,8,100},{22,9,100},
+      {-1,0,1,2,  20,21,22,100},{-1,0,1,2,  20,21,22,100},
+      {-1,0,1,2,8,20,21,22,100},{-1,0,1,2,8,20,21,22,100},{-1,0,1,2,9,20,21,22,100},
+      {-1,0,1,2,6,20,21,22,100},{-1,0,1,2,7,20,21,22,100},{-1,0,1,2,8,20,21,22,100},
+      {-1,0,1,2,9,20,21,22,100},{-1,0,1,2,20,21,22,100}
+    };
+    var RoSoI vl_badValues := {{1000},{1,19},{6,7},{6,8},{6,9},{1,6,7,100},{1,2,200}, {1,1},{1,1},{-1,0,1,2,6,7,100}};
+    f_checkSoITemplate(tl_i3s,vl_goodValues,vl_badValues);
+  }
+
+  //=== i4 ===
+  testcase tc_subset_soi4_eq_dyn() runs on A {
+    var template SoI tl_i4s := subset(-1,0,all from t_SoI1, 100, all from t_SoI3);
+    f_checkSoITemplateEquivalence(tl_i4s,t_soi4s_eq);
+  }
+  
+  testcase tc_subset_soi4_eq_2dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_SoI3 := {20,21,22};
+    var template SoI tl_i4s := subset(-1,0,all from tl_SoI1, 100, all from tl_SoI3);
+    f_checkSoITemplateEquivalence(tl_i4s,t_soi4s_eq);
+  }
+  
+  testcase tc_subset_soi4_dyn() runs on A {
+    var template SoI tl_i4s := subset(-1,0,all from t_SoI1, 100, all from t_SoI3);
+    var RoSoI vl_goodValues := {
+      {},
+      {-1},{0},{1},{2},{6},{7},{8},{9},{100},
+      {-1,0},{-1,1},{-1,2},{-1,6},{-1,7},{-1,8},{-1,9},{-1,100},
+      {0,2},{0,6},{0,7},{0,8},{0,9},{0,100},
+      {1,2},{1,6},{1,7},{1,8},{1,9},{1,100},
+      {2,6},{2,7},{2,8},{2,9},{2,100},
+      {6,100},{7,100},{8,100},{9,100},
+      {-1,0,1},{-1,0,2},{-1,0,6},{-1,0,7},{-1,0,8},{-1,0,9},{-1,0,100},
+      {-1,2,6},{-1,2,7},{-1,2,8},{-1,2,9},{-1,2,100},
+      {-1,6,100},{-1,7,100},{-1,8,100},{-1,9,100},
+      {1,2,6},{1,2,7},{1,2,8},{1,2,9},{1,2,100},
+      {0,1,2},{0,1,6}, {0,1,7},{0,1,8},{0,1,9},{0,1,100},
+      {0,2,6},{0,2,7},{0,2,8},{0,2,9},{0,2,100},
+      {2,6,100},{2,7,100},{2,8,100},{2,9,100},
+      {1,6,100},{1,7,100},{1,8,100},{1,9,100},
+      {1,2,6,100},
+      {20},{21},{22},
+      {20,-1},{20,0},{20,1},{20,2},{20,6},{20,7},{20,8},{20,9},{20,100},
+      {21,-1},{21,0},{21,1},{21,2},{21,6},{21,7},{21,8},{21,9},{21,100},
+      {22,-1},{22,0},{22,1},{22,2},{22,6},{22,7},{22,8},{22,9},{22,100},
+      {20,21,22},{20,21,-1},{20,21,0},{20,21,1},{20,21,2},{20,21,6},{20,21,7},{20,21,8},{20,21,9},{20,21,100},
+      {20,22,0},{20,22,1},{20,22,2},
+      {20,0,2},{20,0,6},{20,0,7},{20,0,8},{20,0,9},{20,0,100},
+      {20,1,2},{20,1,6},{20,1,7},{20,1,8},{20,1,9},{20,1,100},
+      {20,2,6},{20,2,7},{20,2,8},{20,2,9},{20,2,100},
+      {20,6,100},{20,7,100},{20,8,100},{20,9,100},
+      {21,0,2},{21,0,6},{21,0,7},{21,0,8},{21,0,9},{21,0,100},
+      {21,1,2},{21,1,6},{21,1,7},{21,1,8},{21,1,9},{21,1,100},
+      {21,2,6},{21,2,7},{21,2,8},{21,2,9},{21,2,100},
+      {21,6,100},{21,7,100},{21,8,100},{21,9,100},
+      {22,0,2},{22,0,6},{22,0,7},{22,0,8},{22,0,9},{22,0,100},
+      {22,1,2},{22,1,6},{22,1,7},{22,1,8},{22,1,9},{22,1,100},
+      {22,2,6},{22,2,7},{22,2,8},{22,2,9},{22,2,100},
+      {22,6,100},{22,7,100},{22,8,100},{22,9,100}
+    };
+    var RoSoI vl_badValues := {{1000},{1,19},{6,7},{6,8},{6,9},{1,6,7,100},{1,2,200}, {1,1},{1,1},{-1,0,1,2,6,7,100}};
+    f_checkSoITemplate(tl_i4s,vl_goodValues,vl_badValues);
+  }
+  
+  testcase tc_subset_soi4_2dyn() runs on A {    
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_SoI3 := {20,21,22};
+    var template SoI tl_i4s := subset(-1,0,all from tl_SoI1, 100, all from tl_SoI3);
+    var RoSoI vl_goodValues := {
+      {},
+      {-1},{0},{1},{2},{6},{7},{8},{9},{100},
+      {-1,0},{-1,1},{-1,2},{-1,6},{-1,7},{-1,8},{-1,9},{-1,100},
+      {0,2},{0,6},{0,7},{0,8},{0,9},{0,100},
+      {1,2},{1,6},{1,7},{1,8},{1,9},{1,100},
+      {2,6},{2,7},{2,8},{2,9},{2,100},
+      {6,100},{7,100},{8,100},{9,100},
+      {-1,0,1},{-1,0,2},{-1,0,6},{-1,0,7},{-1,0,8},{-1,0,9},{-1,0,100},
+      {-1,2,6},{-1,2,7},{-1,2,8},{-1,2,9},{-1,2,100},
+      {-1,6,100},{-1,7,100},{-1,8,100},{-1,9,100},
+      {1,2,6},{1,2,7},{1,2,8},{1,2,9},{1,2,100},
+      {0,1,2},{0,1,6}, {0,1,7},{0,1,8},{0,1,9},{0,1,100},
+      {0,2,6},{0,2,7},{0,2,8},{0,2,9},{0,2,100},
+      {2,6,100},{2,7,100},{2,8,100},{2,9,100},
+      {1,6,100},{1,7,100},{1,8,100},{1,9,100},
+      {1,2,6,100},
+      {20},{21},{22},
+      {20,-1},{20,0},{20,1},{20,2},{20,6},{20,7},{20,8},{20,9},{20,100},
+      {21,-1},{21,0},{21,1},{21,2},{21,6},{21,7},{21,8},{21,9},{21,100},
+      {22,-1},{22,0},{22,1},{22,2},{22,6},{22,7},{22,8},{22,9},{22,100},
+      {20,21,22},{20,21,-1},{20,21,0},{20,21,1},{20,21,2},{20,21,6},{20,21,7},{20,21,8},{20,21,9},{20,21,100},
+      {20,22,0},{20,22,1},{20,22,2},
+      {20,0,2},{20,0,6},{20,0,7},{20,0,8},{20,0,9},{20,0,100},
+      {20,1,2},{20,1,6},{20,1,7},{20,1,8},{20,1,9},{20,1,100},
+      {20,2,6},{20,2,7},{20,2,8},{20,2,9},{20,2,100},
+      {20,6,100},{20,7,100},{20,8,100},{20,9,100},
+      {21,0,2},{21,0,6},{21,0,7},{21,0,8},{21,0,9},{21,0,100},
+      {21,1,2},{21,1,6},{21,1,7},{21,1,8},{21,1,9},{21,1,100},
+      {21,2,6},{21,2,7},{21,2,8},{21,2,9},{21,2,100},
+      {21,6,100},{21,7,100},{21,8,100},{21,9,100},
+      {22,0,2},{22,0,6},{22,0,7},{22,0,8},{22,0,9},{22,0,100},
+      {22,1,2},{22,1,6},{22,1,7},{22,1,8},{22,1,9},{22,1,100},
+      {22,2,6},{22,2,7},{22,2,8},{22,2,9},{22,2,100},
+      {22,6,100},{22,7,100},{22,8,100},{22,9,100}
+    };
+    var RoSoI vl_badValues := {{1000},{1,19},{6,7},{6,8},{6,9},{1,6,7,100},{1,2,200}, {1,1},{1,1},{-1,0,1,2,6,7,100}};
+    f_checkSoITemplate(tl_i4s,vl_goodValues,vl_badValues);
+  }
+
+
+  //=== i5 ===
+  testcase tc_subset_soi5_eq_dyn() runs on A {
+    var template SoI tl_i5s := subset(-1,0,all from t_SoI1, 100, all from t_SoI3,all from t_SoI3 ); //repetition
+    f_checkSoITemplateEquivalence(tl_i5s,t_soi5s_eq);
+  }
+  
+  testcase tc_subset_soi5_eq_2dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_SoI3 := {20,21,22};
+    var template SoI tl_i5s := subset(-1,0,all from tl_SoI1, 100, all from tl_SoI3,all from tl_SoI3 ); //repetition
+    f_checkSoITemplateEquivalence(tl_i5s,t_soi5s_eq);
+  }
+  
+  testcase tc_subset_soi5_dyn() runs on A {
+    var template SoI tl_i5s := subset(-1,0,all from t_SoI1, 100, all from t_SoI3,all from t_SoI3 ); //repetition
+    var RoSoI vl_goodValues := {
+      {},
+      {-1},{0},{1},{2},{6},{7},{8},{9},{100},
+      {-1,0},{-1,1},{-1,2},{-1,6},{-1,7},{-1,8},{-1,9},{-1,100},
+      {0,2},{0,6},{0,7},{0,8},{0,9},{0,100},
+      {1,2},{1,6},{1,7},{1,8},{1,9},{1,100},
+      {2,6},{2,7},{2,8},{2,9},{2,100},
+      {6,100},{7,100},{8,100},{9,100},
+      {-1,0,1},{-1,0,2},{-1,0,6},{-1,0,7},{-1,0,8},{-1,0,9},{-1,0,100},
+      {-1,2,6},{-1,2,7},{-1,2,8},{-1,2,9},{-1,2,100},
+      {-1,6,100},{-1,7,100},{-1,8,100},{-1,9,100},
+      {1,2,6},{1,2,7},{1,2,8},{1,2,9},{1,2,100},
+      {0,1,2},{0,1,6}, {0,1,7},{0,1,8},{0,1,9},{0,1,100},
+      {0,2,6},{0,2,7},{0,2,8},{0,2,9},{0,2,100},
+      {2,6,100},{2,7,100},{2,8,100},{2,9,100},
+      {1,6,100},{1,7,100},{1,8,100},{1,9,100},
+      {1,2,6,100},
+      {20},{21},{22},
+      {20,-1},{20,0},{20,1},{20,2},{20,6},{20,7},{20,8},{20,9},{20,100},
+      {21,-1},{21,0},{21,1},{21,2},{21,6},{21,7},{21,8},{21,9},{21,100},
+      {22,-1},{22,0},{22,1},{22,2},{22,6},{22,7},{22,8},{22,9},{22,100},
+      {20,21,22},{20,21,-1},{20,21,0},{20,21,1},{20,21,2},{20,21,6},{20,21,7},{20,21,8},{20,21,9},{20,21,100},
+      {20,22,0},{20,22,1},{20,22,2},
+      {20,0,2},{20,0,6},{20,0,7},{20,0,8},{20,0,9},{20,0,100},
+      {20,1,2},{20,1,6},{20,1,7},{20,1,8},{20,1,9},{20,1,100},
+      {20,2,6},{20,2,7},{20,2,8},{20,2,9},{20,2,100},
+      {20,6,100},{20,7,100},{20,8,100},{20,9,100},
+      {21,0,2},{21,0,6},{21,0,7},{21,0,8},{21,0,9},{21,0,100},
+      {21,1,2},{21,1,6},{21,1,7},{21,1,8},{21,1,9},{21,1,100},
+      {21,2,6},{21,2,7},{21,2,8},{21,2,9},{21,2,100},
+      {21,6,100},{21,7,100},{21,8,100},{21,9,100},
+      {22,0,2},{22,0,6},{22,0,7},{22,0,8},{22,0,9},{22,0,100},
+      {22,1,2},{22,1,6},{22,1,7},{22,1,8},{22,1,9},{22,1,100},
+      {22,2,6},{22,2,7},{22,2,8},{22,2,9},{22,2,100},
+      {22,6,100},{22,7,100},{22,8,100},{22,9,100},
+      {-1,0,1,2,6,20,21,22,20,21,22,100},{-1,0,1,2,7,20,21,22,20,21,22,100},{-1,0,1,2,8,20,21,22,20,21,22,100},{-1,0,1,2,9,20,21,22,20,21,22,100}
+    };
+    var RoSoI vl_badValues := {{1000},{1,19},{6,7},{6,8},{6,9},{1,6,7,100},{1,2,200}, {1,1},{1,1},{-1,0,1,2,6,7,100},
+      {-1,0,1,2,5,6,7,8,9,20,21,22,20,21,22,100},{-1,0,1,2,5,6,7,8,9,20,21,22,20,21,22,100,20}};
+    f_checkSoITemplate(tl_i5s,vl_goodValues,vl_badValues);
+  }
+  
+  testcase tc_subset_soi5_2dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_SoI3 := {20,21,22};   
+    var template SoI tl_i5s := subset(-1,0,all from t_SoI1, 100, all from t_SoI3,all from t_SoI3 ); //repetition
+    var RoSoI vl_goodValues := {
+      {},
+      {-1},{0},{1},{2},{6},{7},{8},{9},{100},
+      {-1,0},{-1,1},{-1,2},{-1,6},{-1,7},{-1,8},{-1,9},{-1,100},
+      {0,2},{0,6},{0,7},{0,8},{0,9},{0,100},
+      {1,2},{1,6},{1,7},{1,8},{1,9},{1,100},
+      {2,6},{2,7},{2,8},{2,9},{2,100},
+      {6,100},{7,100},{8,100},{9,100},
+      {-1,0,1},{-1,0,2},{-1,0,6},{-1,0,7},{-1,0,8},{-1,0,9},{-1,0,100},
+      {-1,2,6},{-1,2,7},{-1,2,8},{-1,2,9},{-1,2,100},
+      {-1,6,100},{-1,7,100},{-1,8,100},{-1,9,100},
+      {1,2,6},{1,2,7},{1,2,8},{1,2,9},{1,2,100},
+      {0,1,2},{0,1,6}, {0,1,7},{0,1,8},{0,1,9},{0,1,100},
+      {0,2,6},{0,2,7},{0,2,8},{0,2,9},{0,2,100},
+      {2,6,100},{2,7,100},{2,8,100},{2,9,100},
+      {1,6,100},{1,7,100},{1,8,100},{1,9,100},
+      {1,2,6,100},
+      {20},{21},{22},
+      {20,-1},{20,0},{20,1},{20,2},{20,6},{20,7},{20,8},{20,9},{20,100},
+      {21,-1},{21,0},{21,1},{21,2},{21,6},{21,7},{21,8},{21,9},{21,100},
+      {22,-1},{22,0},{22,1},{22,2},{22,6},{22,7},{22,8},{22,9},{22,100},
+      {20,21,22},{20,21,-1},{20,21,0},{20,21,1},{20,21,2},{20,21,6},{20,21,7},{20,21,8},{20,21,9},{20,21,100},
+      {20,22,0},{20,22,1},{20,22,2},
+      {20,0,2},{20,0,6},{20,0,7},{20,0,8},{20,0,9},{20,0,100},
+      {20,1,2},{20,1,6},{20,1,7},{20,1,8},{20,1,9},{20,1,100},
+      {20,2,6},{20,2,7},{20,2,8},{20,2,9},{20,2,100},
+      {20,6,100},{20,7,100},{20,8,100},{20,9,100},
+      {21,0,2},{21,0,6},{21,0,7},{21,0,8},{21,0,9},{21,0,100},
+      {21,1,2},{21,1,6},{21,1,7},{21,1,8},{21,1,9},{21,1,100},
+      {21,2,6},{21,2,7},{21,2,8},{21,2,9},{21,2,100},
+      {21,6,100},{21,7,100},{21,8,100},{21,9,100},
+      {22,0,2},{22,0,6},{22,0,7},{22,0,8},{22,0,9},{22,0,100},
+      {22,1,2},{22,1,6},{22,1,7},{22,1,8},{22,1,9},{22,1,100},
+      {22,2,6},{22,2,7},{22,2,8},{22,2,9},{22,2,100},
+      {22,6,100},{22,7,100},{22,8,100},{22,9,100},
+      {-1,0,1,2,6,20,21,22,20,21,22,100},{-1,0,1,2,7,20,21,22,20,21,22,100},{-1,0,1,2,8,20,21,22,20,21,22,100},{-1,0,1,2,9,20,21,22,20,21,22,100}
+    };
+    var RoSoI vl_badValues := {{1000},{1,19},{6,7},{6,8},{6,9},{1,6,7,100},{1,2,200}, {1,1},{1,1},{-1,0,1,2,6,7,100},
+      {-1,0,1,2,5,6,7,8,9,20,21,22,20,21,22,100},{-1,0,1,2,5,6,7,8,9,20,21,22,20,21,22,100,20}};
+    f_checkSoITemplate(tl_i5s,vl_goodValues,vl_badValues);
+  }
+
+  //=== i6 =====
+  testcase tc_subset_soi6_eq_dyn() runs on A {
+    var template SoI tl_i6s := subset(-1,0,all from t_SoI1, 100, all from t_SoI3,all from t_SoI3,all from t_SoI3); //repetition
+    f_checkSoITemplateEquivalence(tl_i6s,t_soi6s_eq);
+  }
+
+  testcase tc_subset_soi6_eq_2dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_SoI3 := {20,21,22};   
+    var template SoI tl_i6s := subset(-1,0,all from tl_SoI1, 100, all from tl_SoI3,all from tl_SoI3,all from tl_SoI3); //repetition
+    f_checkSoITemplateEquivalence(tl_i6s,t_soi6s_eq);
+  }
+  
+  testcase tc_subset_soi6_dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_SoI3 := {20,21,22};
+    var template SoI tl_i6s := subset(-1,0,all from tl_SoI1, 100, all from tl_SoI3,all from tl_SoI3,all from tl_SoI3); //repetition
+    var RoSoI vl_goodValues := {
+      {},
+      {-1},{0},{1},{2},{6},{7},{8},{9},{100},
+      {-1,0},{-1,1},{-1,2},{-1,6},{-1,7},{-1,8},{-1,9},{-1,100},
+      {0,2},{0,6},{0,7},{0,8},{0,9},{0,100},
+      {1,2},{1,6},{1,7},{1,8},{1,9},{1,100},
+      {2,6},{2,7},{2,8},{2,9},{2,100},
+      {6,100},{7,100},{8,100},{9,100},
+      {-1,0,1},{-1,0,2},{-1,0,6},{-1,0,7},{-1,0,8},{-1,0,9},{-1,0,100},
+      {-1,2,6},{-1,2,7},{-1,2,8},{-1,2,9},{-1,2,100},
+      {-1,6,100},{-1,7,100},{-1,8,100},{-1,9,100},
+      {1,2,6},{1,2,7},{1,2,8},{1,2,9},{1,2,100},
+      {0,1,2},{0,1,6}, {0,1,7},{0,1,8},{0,1,9},{0,1,100},
+      {0,2,6},{0,2,7},{0,2,8},{0,2,9},{0,2,100},
+      {2,6,100},{2,7,100},{2,8,100},{2,9,100},
+      {1,6,100},{1,7,100},{1,8,100},{1,9,100},
+      {1,2,6,100},
+      {20},{21},{22},
+      {20,-1},{20,0},{20,1},{20,2},{20,6},{20,7},{20,8},{20,9},{20,100},
+      {21,-1},{21,0},{21,1},{21,2},{21,6},{21,7},{21,8},{21,9},{21,100},
+      {22,-1},{22,0},{22,1},{22,2},{22,6},{22,7},{22,8},{22,9},{22,100},
+      {20,21,22},{20,21,-1},{20,21,0},{20,21,1},{20,21,2},{20,21,6},{20,21,7},{20,21,8},{20,21,9},{20,21,100},
+      {20,22,0},{20,22,1},{20,22,2},
+      {20,0,2},{20,0,6},{20,0,7},{20,0,8},{20,0,9},{20,0,100},
+      {20,1,2},{20,1,6},{20,1,7},{20,1,8},{20,1,9},{20,1,100},
+      {20,2,6},{20,2,7},{20,2,8},{20,2,9},{20,2,100},
+      {20,6,100},{20,7,100},{20,8,100},{20,9,100},
+      {21,0,2},{21,0,6},{21,0,7},{21,0,8},{21,0,9},{21,0,100},
+      {21,1,2},{21,1,6},{21,1,7},{21,1,8},{21,1,9},{21,1,100},
+      {21,2,6},{21,2,7},{21,2,8},{21,2,9},{21,2,100},
+      {21,6,100},{21,7,100},{21,8,100},{21,9,100},
+      {22,0,2},{22,0,6},{22,0,7},{22,0,8},{22,0,9},{22,0,100},
+      {22,1,2},{22,1,6},{22,1,7},{22,1,8},{22,1,9},{22,1,100},
+      {22,2,6},{22,2,7},{22,2,8},{22,2,9},{22,2,100},
+      {22,6,100},{22,7,100},{22,8,100},{22,9,100},
+      {-1,0,1,2,6,20,21,22,20,21,22,100},{-1,0,1,2,7,20,21,22,20,21,22,100},{-1,0,1,2,8,20,21,22,20,21,22,100},{-1,0,1,2,9,20,21,22,20,21,22,100},
+      {-1,0,1,2,6,20,21,22,20,21,22,100,20,22,21},
+      {-1,0,1,2,7,20,21,22,20,21,22,100,20,22,21},{-1,0,1,2,8,20,21,22,20,21,22,100,20,22,21}
+    };
+    var RoSoI vl_badValues := {{1000},{1,19},{6,7},{6,8},{6,9},{1,6,7,100},{1,2,200}, {1,1},{1,1},{-1,0,1,2,6,7,100},
+      {-1,0,1,2,6,7,8,9,20,21,22,20,21,22,100,20,1,22,20},{1,2,200,1}};
+    f_checkSoITemplate(tl_i6s,vl_goodValues,vl_badValues);
+  }
+
+
+  //=== i7 =====
+  //subset (1,2,(6..9)) length (2)
+  
+  testcase tc_subset_soi7_eq_dyn() runs on A {
+    var template SoI tl_i7s := subset(all from t_SoI1) length (2);
+    f_checkSoITemplateEquivalence(tl_i7s,t_soi7s_eq);
+  }
+  
+  testcase tc_subset_soi7_eq_2dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_i7s := subset(all from tl_SoI1) length (2);
+    f_checkSoITemplateEquivalence(tl_i7s,t_soi7s_eq);
+  }
+  
+  //subset (1,2,(6..9)) length (2)
+  testcase tc_subset_soi7_dyn() runs on A {
+    var template SoI tl_i7s := subset(all from t_SoI1) length (2);
+    var RoSoI vl_goodValues := {      
+      {1,2},{1,6},{1,7},{1,8},{1,9},
+      {2,6},{2,7},{2,8},{2,9}
+    };
+    var RoSoI vl_badValues := {
+      {},{1},{2},{6},{7},{8},{9},{1000},
+      {1,19},{6,7},{6,8},{6,9},{1,6,7,100},{1,2,200}, {1,1},{-1,0,1,2,6,7,100}};
+    f_checkSoITemplate(tl_i7s,vl_goodValues,vl_badValues);
+  }
+  
+  testcase tc_subset_soi7_2dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_i7s := subset(all from tl_SoI1) length (2);
+    var RoSoI vl_goodValues := {      
+      {1,2},{1,6},{1,7},{1,8},{1,9},
+      {2,6},{2,7},{2,8},{2,9}
+    };
+    var RoSoI vl_badValues := {
+      {},{1},{2},{6},{7},{8},{9},{1000},
+      {1,19},{6,7},{6,8},{6,9},{1,6,7,100},{1,2,200}, {1,1},{-1,0,1,2,6,7,100}};
+    f_checkSoITemplate(tl_i7s,vl_goodValues,vl_badValues);
+  }
+  //=== i8 ===
+
+  testcase tc_subset_soi8_eq_dyn() runs on A {
+    var template SoI tl_i8s := subset(all from t_SoI1, complement(8,9)) length (2);
+    f_checkSoITemplateEquivalence(tl_i8s,t_soi8s_eq);
+  }
+  
+  testcase tc_subset_soi8_eq_2dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_i8s := subset(all from tl_SoI1, complement(8,9)) length (2);
+    f_checkSoITemplateEquivalence(tl_i8s,t_soi8s_eq);
+  }
+    
+  testcase tc_subset_soi8_dyn() runs on A {
+    var template SoI tl_i8s := subset(all from t_SoI1, complement(8,9)) length (2);
+    var RoSoI vl_goodValues := {      
+      {1,1},{1,2},{1,6},{1,7},{1,8},{1,9},
+      {2,6},{2,7},{2,8},{2,9},
+      {1,-1},{1,0},{1,1},{1,3},{1,4},{1,5},{1,10},{1,11},{1,100},
+      {2,-2},{2,-1},{2,0},{2,1},{2,2},{2,3},{2,4},{2,5},{2,10},{6,7},{6,10},
+      {7,7},{7,10},{7,11},
+      {8,6},{8,7},{8,10},{8,11},
+      {9,6},{9,7},{9,11}
+    };
+    var RoSoI vl_badValues := {
+      {},{1},{2},{6},{7},{8},{9},{1000},
+      {1,6,7,100},{1,2,200},{-1,0,1,2,6,7,100}};
+    f_checkSoITemplate(tl_i8s,vl_goodValues,vl_badValues);
+  } 
+  
+  testcase tc_subset_soi8_2dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_i8s := subset(all from tl_SoI1, complement(8,9)) length (2);
+    var RoSoI vl_goodValues := {      
+      {1,1},{1,2},{1,6},{1,7},{1,8},{1,9},
+      {2,6},{2,7},{2,8},{2,9},
+      {1,-1},{1,0},{1,1},{1,3},{1,4},{1,5},{1,10},{1,11},{1,100},
+      {2,-2},{2,-1},{2,0},{2,1},{2,2},{2,3},{2,4},{2,5},{2,10},{6,7},{6,10},
+      {7,7},{7,10},{7,11},
+      {8,6},{8,7},{8,10},{8,11},
+      {9,6},{9,7},{9,11}
+    };
+    var RoSoI vl_badValues := {
+      {},{1},{2},{6},{7},{8},{9},{1000},
+      {1,6,7,100},{1,2,200},{-1,0,1,2,6,7,100}};
+    f_checkSoITemplate(tl_i8s,vl_goodValues,vl_badValues);
+  }
+
+  //===i9===
+
+  testcase tc_subset_soi9_eq_dyn() runs on A {
+    var template SoI tl_i9s := subset(complement(all from t_SoI1)) ;
+    f_checkSoITemplateEquivalence(tl_i9s,t_soi9s_eq);
+  }
+  
+  testcase tc_subset_soi9_eq_2dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_i9s := subset(complement(all from tl_SoI1)) ;
+    f_checkSoITemplateEquivalence(tl_i9s,t_soi9s_eq);
+  }
+  
+
+  //subset(complement(1,2,(6..9)))  == (-1, 0,3,4,5,10,11 ) 
+  testcase tc_subset_soi9_dyn() runs on A {
+    var template SoI tl_i9s := subset(complement(all from t_SoI1)) ; 
+    var RoSoI vl_goodValues := { {}, {-2},{-1},{0},{3},{4},{5},{10},{11},{1000}};
+    var RoSoI vl_badValues := {
+      {1,-3},{1,-2},{1,-1},{1,0},{1,1},{1,2},{1,3},{1,4},{1,5},{1,6},{1,7},{1,8},{1,9},{1,10},{1,11}, //...
+      {2,-3},{2,-2},{2,-1},{2,0},{2,1},{2,3},{2,4},{2,5},{2,6},{2,7},{2,8},{2,9},{2,10},{2,11}, //...
+      {1},{2},{6},{7},{8},{9},
+      {1,6,7,100},{1,2,200},{-1,0,1,2,6,7,100},
+      {1,6,7,8,9}, {1,2,6,7,8,9},{-1,-2},{-1,-2,0},{-1,0,3,4,5,10,11} 
+    };
+    f_checkSoITemplate(tl_i9s,vl_goodValues,vl_badValues);
+  }
+  
+  testcase tc_subset_soi9_2dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_i9s := subset(complement(all from tl_SoI1)) ; 
+    var RoSoI vl_goodValues := { {}, {-2},{-1},{0},{3},{4},{5},{10},{11},{1000}};
+    var RoSoI vl_badValues := {
+      {1,-3},{1,-2},{1,-1},{1,0},{1,1},{1,2},{1,3},{1,4},{1,5},{1,6},{1,7},{1,8},{1,9},{1,10},{1,11}, //...
+      {2,-3},{2,-2},{2,-1},{2,0},{2,1},{2,3},{2,4},{2,5},{2,6},{2,7},{2,8},{2,9},{2,10},{2,11}, //...
+      {1},{2},{6},{7},{8},{9},
+      {1,6,7,100},{1,2,200},{-1,0,1,2,6,7,100},
+      {1,6,7,8,9}, {1,2,6,7,8,9},{-1,-2},{-1,-2,0},{-1,0,3,4,5,10,11} 
+    };
+    f_checkSoITemplate(tl_i9s,vl_goodValues,vl_badValues);
+  }
+
+  //===i10===
+
+  testcase tc_subset_soi10_eq_dyn() runs on A {
+    var template SoI tl_i10s := subset(all from t_SoI1, complement(all from t_SoI1)) length (2);
+    f_checkSoITemplateEquivalence(tl_i10s,t_soi10s_eq);
+  }
+  
+  testcase tc_subset_soi10_eq_2dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_i10s := subset(all from tl_SoI1, complement(all from tl_SoI1)) length (2);
+    f_checkSoITemplateEquivalence(tl_i10s,t_soi10s_eq);
+  }
+  
+  
+  //t_soi10s=subset(1, 2, (6..9),complement(1, 2, (6..9)))
+  testcase tc_subset_soi10_dyn() runs on A {
+    var template SoI tl_i10s := subset(all from t_SoI1, complement(all from t_SoI1)) length (2);
+    var RoSoI vl_goodValues := {      
+      {1,-3},{1,-2},{1,-1},{1,0},{1,2},{1,3},{1,4},{1,5},{1,6},{1,7},{1,8},{1,9},{1,10},{1,11}, //...
+      {2,-3},{2,-2},{2,-1},{2,0},{2,1},{2,3},{2,4},{2,5},{2,6},{2,7},{2,8},{2,9},{2,10},{2,11}, //...
+      {6,-3},{6,-2},{6,-1},{6,0},{6,3},{6,4}
+    };
+    var RoSoI vl_badValues := {
+      {},{1},{2},{3},{4},{6},{7},{8},{9},{1000},{1,1},{2,2},{6,6},{6,9},{9,6},
+      {1,6,7,100},{1,2,200},{-1,0,1,2,6,7,100}};
+    f_checkSoITemplate(t_soi10s,vl_goodValues,vl_badValues);
+  }
+  
+  testcase tc_subset_soi10_2dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_i10s := subset(all from tl_SoI1, complement(all from tl_SoI1)) length (2);
+    var RoSoI vl_goodValues := {      
+      {1,-3},{1,-2},{1,-1},{1,0},{1,2},{1,3},{1,4},{1,5},{1,6},{1,7},{1,8},{1,9},{1,10},{1,11}, //...
+      {2,-3},{2,-2},{2,-1},{2,0},{2,1},{2,3},{2,4},{2,5},{2,6},{2,7},{2,8},{2,9},{2,10},{2,11}, //...
+      {6,-3},{6,-2},{6,-1},{6,0},{6,3},{6,4}
+    };
+    var RoSoI vl_badValues := {
+      {},{1},{2},{3},{4},{6},{7},{8},{9},{1000},{1,1},{2,2},{6,6},{6,9},{9,6},
+      {1,6,7,100},{1,2,200},{-1,0,1,2,6,7,100}};
+    f_checkSoITemplate(t_soi10s,vl_goodValues,vl_badValues);
+  } 
+  //===i11===
+  testcase tc_subset_soi11_eq_dyn() runs on A {
+    template SoI tl_i11s    := subset(all from t_SoI1, complement(all from t_SoI5)) length (2);
+    f_checkSoITemplateEquivalence(tl_i11s,t_soi11s_eq);
+  }
+  
+  testcase tc_subset_soi11_eq_2dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_SoI5 := {1,2};
+    template SoI tl_i11s    := subset(all from tl_SoI1, complement(all from tl_SoI5)) length (2);
+    f_checkSoITemplateEquivalence(tl_i11s,t_soi11s_eq);
+  }
+  
+  //t_soi11s=subset( 1,2,(6..9),complement(1,2))
+  testcase tc_subset_soi11_dyn() runs on A {
+    template SoI tl_i11s    := subset(all from t_SoI1, complement(all from t_SoI5)) length (2);
+    var RoSoI vl_goodValues := {      
+      {1,2},{1,6},{1,7},{1,8},{1,9},
+      {2,6},{2,7},{2,8},{2,9},
+      {1,-1},{1,0},{1,3},{1,4},{1,5},{1,10},{1,11},{1,100},
+      {2,-2},{2,-1},{2,0},{2,1},{2,3},{2,4},{2,5},{2,10},{6,7},{6,10},
+      {7,7},{7,10},{7,11},
+      {8,6},{8,7},{8,10},{8,11},{6,6},
+      {9,6},{9,7},{9,11}
+    };
+    var RoSoI vl_badValues := {
+      {},{1},{2},{6},{7},{8},{9},{1000},{1,1},{2,2},{6,6,7},
+      {1,6,7,100},{1,2,200},{-1,0,1,2,6,7,100}};
+    f_checkSoITemplate(t_soi11s,vl_goodValues,vl_badValues);
+  } 
+  
+  testcase tc_subset_soi11_2dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_SoI5 := {1,2};
+    template SoI tl_i11s    := subset(all from tl_SoI1, complement(all from tl_SoI5)) length (2);
+    var RoSoI vl_goodValues := {      
+      {1,2},{1,6},{1,7},{1,8},{1,9},
+      {2,6},{2,7},{2,8},{2,9},
+      {1,-1},{1,0},{1,3},{1,4},{1,5},{1,10},{1,11},{1,100},
+      {2,-2},{2,-1},{2,0},{2,1},{2,3},{2,4},{2,5},{2,10},{6,7},{6,10},
+      {7,7},{7,10},{7,11},
+      {8,6},{8,7},{8,10},{8,11},{6,6},
+      {9,6},{9,7},{9,11}
+    };
+    var RoSoI vl_badValues := {
+      {},{1},{2},{6},{7},{8},{9},{1000},{1,1},{2,2},{6,6,7},
+      {1,6,7,100},{1,2,200},{-1,0,1,2,6,7,100}};
+    f_checkSoITemplate(t_soi11s,vl_goodValues,vl_badValues);
+  } 
+
+    //=== i12 ===
+  //subset(1, 2, ?);
+  testcase tc_subset_soi12_eq_dyn() runs on A {
+    var template SoI tl_i12s    := subset(all from t_SoI4);
+    f_checkSoITemplateEquivalence(tl_i12s,t_soi12s_eq);
+  }
+  
+  testcase tc_subset_soi12_eq_2dyn() runs on A {
+    var template SoI tl_SoI4 := {1,2,?};
+    var template SoI tl_i12s    := subset(all from tl_SoI4);
+    f_checkSoITemplateEquivalence(tl_i12s,t_soi12s_eq);
+  }
+  
+  testcase tc_subset_soi12_dyn() runs on A {
+    var template SoI tl_i12s    := subset(all from t_SoI4);
+    var RoSoI vl_goodValues := { 
+      {},{1},{2},{3},{4},{5},{6},
+      {1,1},{1,2},{1,3},{1,4},{1,6},
+      {2,3},{2,4},{2,5},{2,6},{2,7},
+      {1,2,3},{1,2,4},{1,2,5},{3,2,1},{3,1,2}
+    }
+    var RoSoI vl_badValues := {
+      {1,1,1}, {1,3,4},{1,3,5},{1,3,6},{1,2,3,4}
+    };
+    f_checkSoITemplate(tl_i12s,vl_goodValues,vl_badValues);
+  }    
+  
+  testcase tc_subset_soi12_2dyn() runs on A {
+    var template SoI tl_SoI4 := {1,2,?};
+    var template SoI tl_i12s    := subset(all from tl_SoI4);
+    var RoSoI vl_goodValues := { 
+      {},{1},{2},{3},{4},{5},{6},
+      {1,1},{1,2},{1,3},{1,4},{1,6},
+      {2,3},{2,4},{2,5},{2,6},{2,7},
+      {1,2,3},{1,2,4},{1,2,5},{3,2,1},{3,1,2}
+    }
+    var RoSoI vl_badValues := {
+      {1,1,1}, {1,3,4},{1,3,5},{1,3,6},{1,2,3,4}
+    };
+    f_checkSoITemplate(t_soi12s,vl_goodValues,vl_badValues);
+  }     
+  
+  //================== Set of Integers ==================
+  testcase tc_subset_soi0s_eq() runs on A {
+    f_checkSoITemplateEquivalence(t_soi0s,t_soi0s_eq);
+  }
+  
+  //t_soi0s:=subset (20,21,22)
+  testcase tc_subset_soi0s() runs on A {
+    var RoSoI vl_goodValues := {{},{20},{21},{22},{20,21},{22,20},{22,21},{20,21,22}};
+    var RoSoI vl_badValues := {{0},{1},{-1},{1000},{1,19}};
+    f_checkSoITemplate(t_soi0s,vl_goodValues,vl_badValues);
+  }
+  
+  //subset ((20,21,22));
+  testcase tc_subset_soi0s_1_eq() runs on A {
+    f_checkSoITemplateEquivalence(t_soi0s_1,t_soi0s_1_eq);
+  }
+  testcase tc_subset_soi0s_1() runs on A {
+    var RoSoI vl_goodValues := {{},{20},{21},{22} }
+    var RoSoI vl_badValues := {{0},{1},{-1},{1000},{1,20},{20,21},{22,20},{22,21},{20,21,22},{20,21,22,21}};
+    // subset((20,21,22)) {this test} is not the same as subset(20,21,22) {previous test}
+    f_checkSoITemplate(t_soi0s_1,vl_goodValues,vl_badValues);
+  }
+  
+  testcase tc_subset_soi1ss_eq() runs on A {
+    f_checkSoITemplateEquivalence(t_soi1s,t_soi1s_eq);
+  }
+  //t_soi1s={1,2,(6..9),100} - 2x2x5x2=40 good subsets
+  testcase tc_subset_soi1s() runs on A {
+    var RoSoI vl_goodValues := {
+      {},
+      {1},{2},{6},{7},{8},{9},{100},
+      {1,2},{1,6},{1,7},{1,8},{1,9},{1,100},
+      {2,6},{2,7},{2,8},{2,9},{2,100},
+      {6,100},{7,100},{8,100},{9,100},
+      {1,2,6},{1,2,7},{1,2,8},{1,2,9},{1,2,100},
+      {2,6,100},{2,7,100},{2,8,100},{2,9,100},
+      {1,6,100},{1,7,100},{1,8,100},{1,9,100},
+      {1,2,6,100}
+    };
+    var RoSoI vl_badValues := {{0}, {-1},{1000},{1,19},{6,7},{6,8},{6,9},{1,6,7,100},{1,2,200}, {1,1}};
+    f_checkSoITemplate(t_soi1s,vl_goodValues,vl_badValues);
+  }
+  
+  testcase tc_subset_soi2s_eq() runs on A {
+    f_checkSoITemplateEquivalence(t_soi2s,t_soi2s_eq);
+  }
+  
+  testcase tc_subset_soi2s() runs on A {
+    var RoSoI vl_goodValues := {
+      {},
+      {-1},{0},{1},{2},{6},{7},{8},{9},{100},
+      {-1,0},{-1,1},{-1,2},{-1,6},{-1,7},{-1,8},{-1,9},{-1,100},
+      {0,2},{0,6},{0,7},{0,8},{0,9},{0,100},
+      {1,2},{1,6},{1,7},{1,8},{1,9},{1,100},
+      {2,6},{2,7},{2,8},{2,9},{2,100},
+      {6,100},{7,100},{8,100},{9,100},
+      {-1,0,1},{-1,0,2},{-1,0,6},{-1,0,7},{-1,0,8},{-1,0,9},{-1,0,100},
+      {-1,2,6},{-1,2,7},{-1,2,8},{-1,2,9},{-1,2,100},
+      {-1,6,100},{-1,7,100},{-1,8,100},{-1,9,100},
+      {1,2,6},{1,2,7},{1,2,8},{1,2,9},{1,2,100},
+      {0,1,2},{0,1,6}, {0,1,7},{0,1,8},{0,1,9},{0,1,100},
+      {0,2,6},{0,2,7},{0,2,8},{0,2,9},{0,2,100},
+      {2,6,100},{2,7,100},{2,8,100},{2,9,100},
+      {1,6,100},{1,7,100},{1,8,100},{1,9,100},
+      {1,2,6,100}
+    };
+    var RoSoI vl_badValues := {{1000},{1,19},{6,7},{6,8},{6,9},{1,6,7,100},{1,2,200}, {1,1},{-1,0,1,2,6,7,100}};
+    f_checkSoITemplate(t_soi2s,vl_goodValues,vl_badValues);
+  }
+  
+  testcase tc_subset_soi3s_eq() runs on A {
+    f_checkSoITemplateEquivalence(t_soi3s,t_soi3s_eq);
+  }
+
+  testcase tc_subset_soi3s() runs on A {
+    var RoSoI vl_goodValues := {
+      {},
+      {-1},{0},{1},{2},{6},{7},{8},{9},{100},
+      {-1,0},{-1,1},{-1,2},{-1,6},{-1,7},{-1,8},{-1,9},{-1,100},
+      {0,2},{0,6},{0,7},{0,8},{0,9},{0,100},
+      {1,2},{1,6},{1,7},{1,8},{1,9},{1,100},
+      {2,6},{2,7},{2,8},{2,9},{2,100},
+      {6,100},{7,100},{8,100},{9,100},
+      {-1,0,1},{-1,0,2},{-1,0,6},{-1,0,7},{-1,0,8},{-1,0,9},{-1,0,100},
+      {-1,2,6},{-1,2,7},{-1,2,8},{-1,2,9},{-1,2,100},
+      {-1,6,100},{-1,7,100},{-1,8,100},{-1,9,100},
+      {1,2,6},{1,2,7},{1,2,8},{1,2,9},{1,2,100},
+      {0,1,2},{0,1,6}, {0,1,7},{0,1,8},{0,1,9},{0,1,100},
+      {0,2,6},{0,2,7},{0,2,8},{0,2,9},{0,2,100},
+      {2,6,100},{2,7,100},{2,8,100},{2,9,100},
+      {1,6,100},{1,7,100},{1,8,100},{1,9,100},
+      {1,2,6,100},
+      {20},{21},{22},
+      {20,-1},{20,0},{20,1},{20,2},{20,6},{20,7},{20,8},{20,9},{20,100},
+      {21,-1},{21,0},{21,1},{21,2},{21,6},{21,7},{21,8},{21,9},{21,100},
+      {22,-1},{22,0},{22,1},{22,2},{22,6},{22,7},{22,8},{22,9},{22,100},
+      {20,21,22},{20,21,-1},{20,21,0},{20,21,1},{20,21,2},{20,21,6},{20,21,7},{20,21,8},{20,21,9},{20,21,100},
+      {20,22,0},{20,22,1},{20,22,2},
+      {20,0,2},{20,0,6},{20,0,7},{20,0,8},{20,0,9},{20,0,100},
+      {20,1,2},{20,1,6},{20,1,7},{20,1,8},{20,1,9},{20,1,100},
+      {20,2,6},{20,2,7},{20,2,8},{20,2,9},{20,2,100},
+      {20,6,100},{20,7,100},{20,8,100},{20,9,100},
+      {21,0,2},{21,0,6},{21,0,7},{21,0,8},{21,0,9},{21,0,100},
+      {21,1,2},{21,1,6},{21,1,7},{21,1,8},{21,1,9},{21,1,100},
+      {21,2,6},{21,2,7},{21,2,8},{21,2,9},{21,2,100},
+      {21,6,100},{21,7,100},{21,8,100},{21,9,100},
+      {22,0,2},{22,0,6},{22,0,7},{22,0,8},{22,0,9},{22,0,100},
+      {22,1,2},{22,1,6},{22,1,7},{22,1,8},{22,1,9},{22,1,100},
+      {22,2,6},{22,2,7},{22,2,8},{22,2,9},{22,2,100},
+      {22,6,100},{22,7,100},{22,8,100},{22,9,100},
+      {-1,0,1,2,  20,21,22,100},{-1,0,1,2,  20,21,22,100},
+      {-1,0,1,2,8,20,21,22,100},{-1,0,1,2,8,20,21,22,100},{-1,0,1,2,9,20,21,22,100},
+      {-1,0,1,2,6,20,21,22,100},{-1,0,1,2,7,20,21,22,100},{-1,0,1,2,8,20,21,22,100},
+      {-1,0,1,2,9,20,21,22,100},{-1,0,1,2,20,21,22,100}
+    };
+    var RoSoI vl_badValues := {{1000},{1,19},{6,7},{6,8},{6,9},{1,6,7,100},{1,2,200}, {1,1},{1,1},{-1,0,1,2,6,7,100}};
+    f_checkSoITemplate(t_soi3s,vl_goodValues,vl_badValues);
+  }
+  
+  testcase tc_subset_soi4ss_eq() runs on A {
+    f_checkSoITemplateEquivalence(t_soi4s,t_soi4s_eq);
+  }
+  
+  testcase tc_subset_soi4s() runs on A {
+    var RoSoI vl_goodValues := {
+      {},
+      {-1},{0},{1},{2},{6},{7},{8},{9},{100},
+      {-1,0},{-1,1},{-1,2},{-1,6},{-1,7},{-1,8},{-1,9},{-1,100},
+      {0,2},{0,6},{0,7},{0,8},{0,9},{0,100},
+      {1,2},{1,6},{1,7},{1,8},{1,9},{1,100},
+      {2,6},{2,7},{2,8},{2,9},{2,100},
+      {6,100},{7,100},{8,100},{9,100},
+      {-1,0,1},{-1,0,2},{-1,0,6},{-1,0,7},{-1,0,8},{-1,0,9},{-1,0,100},
+      {-1,2,6},{-1,2,7},{-1,2,8},{-1,2,9},{-1,2,100},
+      {-1,6,100},{-1,7,100},{-1,8,100},{-1,9,100},
+      {1,2,6},{1,2,7},{1,2,8},{1,2,9},{1,2,100},
+      {0,1,2},{0,1,6}, {0,1,7},{0,1,8},{0,1,9},{0,1,100},
+      {0,2,6},{0,2,7},{0,2,8},{0,2,9},{0,2,100},
+      {2,6,100},{2,7,100},{2,8,100},{2,9,100},
+      {1,6,100},{1,7,100},{1,8,100},{1,9,100},
+      {1,2,6,100},
+      {20},{21},{22},
+      {20,-1},{20,0},{20,1},{20,2},{20,6},{20,7},{20,8},{20,9},{20,100},
+      {21,-1},{21,0},{21,1},{21,2},{21,6},{21,7},{21,8},{21,9},{21,100},
+      {22,-1},{22,0},{22,1},{22,2},{22,6},{22,7},{22,8},{22,9},{22,100},
+      {20,21,22},{20,21,-1},{20,21,0},{20,21,1},{20,21,2},{20,21,6},{20,21,7},{20,21,8},{20,21,9},{20,21,100},
+      {20,22,0},{20,22,1},{20,22,2},
+      {20,0,2},{20,0,6},{20,0,7},{20,0,8},{20,0,9},{20,0,100},
+      {20,1,2},{20,1,6},{20,1,7},{20,1,8},{20,1,9},{20,1,100},
+      {20,2,6},{20,2,7},{20,2,8},{20,2,9},{20,2,100},
+      {20,6,100},{20,7,100},{20,8,100},{20,9,100},
+      {21,0,2},{21,0,6},{21,0,7},{21,0,8},{21,0,9},{21,0,100},
+      {21,1,2},{21,1,6},{21,1,7},{21,1,8},{21,1,9},{21,1,100},
+      {21,2,6},{21,2,7},{21,2,8},{21,2,9},{21,2,100},
+      {21,6,100},{21,7,100},{21,8,100},{21,9,100},
+      {22,0,2},{22,0,6},{22,0,7},{22,0,8},{22,0,9},{22,0,100},
+      {22,1,2},{22,1,6},{22,1,7},{22,1,8},{22,1,9},{22,1,100},
+      {22,2,6},{22,2,7},{22,2,8},{22,2,9},{22,2,100},
+      {22,6,100},{22,7,100},{22,8,100},{22,9,100}
+    };
+    var RoSoI vl_badValues := {{1000},{1,19},{6,7},{6,8},{6,9},{1,6,7,100},{1,2,200}, {1,1},{1,1},{-1,0,1,2,6,7,100}};
+    f_checkSoITemplate(t_soi4s,vl_goodValues,vl_badValues);
+  }
+  
+  testcase tc_subset_soi5ss_eq() runs on A {
+    f_checkSoITemplateEquivalence(t_soi5s,t_soi5s_eq);
+  }
+  
+  testcase tc_subset_soi5s() runs on A {
+    var RoSoI vl_goodValues := {
+      {},
+      {-1},{0},{1},{2},{6},{7},{8},{9},{100},
+      {-1,0},{-1,1},{-1,2},{-1,6},{-1,7},{-1,8},{-1,9},{-1,100},
+      {0,2},{0,6},{0,7},{0,8},{0,9},{0,100},
+      {1,2},{1,6},{1,7},{1,8},{1,9},{1,100},
+      {2,6},{2,7},{2,8},{2,9},{2,100},
+      {6,100},{7,100},{8,100},{9,100},
+      {-1,0,1},{-1,0,2},{-1,0,6},{-1,0,7},{-1,0,8},{-1,0,9},{-1,0,100},
+      {-1,2,6},{-1,2,7},{-1,2,8},{-1,2,9},{-1,2,100},
+      {-1,6,100},{-1,7,100},{-1,8,100},{-1,9,100},
+      {1,2,6},{1,2,7},{1,2,8},{1,2,9},{1,2,100},
+      {0,1,2},{0,1,6}, {0,1,7},{0,1,8},{0,1,9},{0,1,100},
+      {0,2,6},{0,2,7},{0,2,8},{0,2,9},{0,2,100},
+      {2,6,100},{2,7,100},{2,8,100},{2,9,100},
+      {1,6,100},{1,7,100},{1,8,100},{1,9,100},
+      {1,2,6,100},
+      {20},{21},{22},
+      {20,-1},{20,0},{20,1},{20,2},{20,6},{20,7},{20,8},{20,9},{20,100},
+      {21,-1},{21,0},{21,1},{21,2},{21,6},{21,7},{21,8},{21,9},{21,100},
+      {22,-1},{22,0},{22,1},{22,2},{22,6},{22,7},{22,8},{22,9},{22,100},
+      {20,21,22},{20,21,-1},{20,21,0},{20,21,1},{20,21,2},{20,21,6},{20,21,7},{20,21,8},{20,21,9},{20,21,100},
+      {20,22,0},{20,22,1},{20,22,2},
+      {20,0,2},{20,0,6},{20,0,7},{20,0,8},{20,0,9},{20,0,100},
+      {20,1,2},{20,1,6},{20,1,7},{20,1,8},{20,1,9},{20,1,100},
+      {20,2,6},{20,2,7},{20,2,8},{20,2,9},{20,2,100},
+      {20,6,100},{20,7,100},{20,8,100},{20,9,100},
+      {21,0,2},{21,0,6},{21,0,7},{21,0,8},{21,0,9},{21,0,100},
+      {21,1,2},{21,1,6},{21,1,7},{21,1,8},{21,1,9},{21,1,100},
+      {21,2,6},{21,2,7},{21,2,8},{21,2,9},{21,2,100},
+      {21,6,100},{21,7,100},{21,8,100},{21,9,100},
+      {22,0,2},{22,0,6},{22,0,7},{22,0,8},{22,0,9},{22,0,100},
+      {22,1,2},{22,1,6},{22,1,7},{22,1,8},{22,1,9},{22,1,100},
+      {22,2,6},{22,2,7},{22,2,8},{22,2,9},{22,2,100},
+      {22,6,100},{22,7,100},{22,8,100},{22,9,100},
+      {-1,0,1,2,6,20,21,22,20,21,22,100},{-1,0,1,2,7,20,21,22,20,21,22,100},{-1,0,1,2,8,20,21,22,20,21,22,100},{-1,0,1,2,9,20,21,22,20,21,22,100}
+    };
+    var RoSoI vl_badValues := {{1000},{1,19},{6,7},{6,8},{6,9},{1,6,7,100},{1,2,200}, {1,1},{1,1},{-1,0,1,2,6,7,100},
+      {-1,0,1,2,5,6,7,8,9,20,21,22,20,21,22,100},{-1,0,1,2,5,6,7,8,9,20,21,22,20,21,22,100,20}};
+    f_checkSoITemplate(t_soi5s,vl_goodValues,vl_badValues);
+  }
+  
+  testcase tc_subset_soi6ss_eq() runs on A {
+    f_checkSoITemplateEquivalence(t_soi6s,t_soi6s_eq);
+  }
+  
+  testcase tc_subset_soi6s() runs on A {
+    var RoSoI vl_goodValues := {
+      {},
+      {-1},{0},{1},{2},{6},{7},{8},{9},{100},
+      {-1,0},{-1,1},{-1,2},{-1,6},{-1,7},{-1,8},{-1,9},{-1,100},
+      {0,2},{0,6},{0,7},{0,8},{0,9},{0,100},
+      {1,2},{1,6},{1,7},{1,8},{1,9},{1,100},
+      {2,6},{2,7},{2,8},{2,9},{2,100},
+      {6,100},{7,100},{8,100},{9,100},
+      {-1,0,1},{-1,0,2},{-1,0,6},{-1,0,7},{-1,0,8},{-1,0,9},{-1,0,100},
+      {-1,2,6},{-1,2,7},{-1,2,8},{-1,2,9},{-1,2,100},
+      {-1,6,100},{-1,7,100},{-1,8,100},{-1,9,100},
+      {1,2,6},{1,2,7},{1,2,8},{1,2,9},{1,2,100},
+      {0,1,2},{0,1,6}, {0,1,7},{0,1,8},{0,1,9},{0,1,100},
+      {0,2,6},{0,2,7},{0,2,8},{0,2,9},{0,2,100},
+      {2,6,100},{2,7,100},{2,8,100},{2,9,100},
+      {1,6,100},{1,7,100},{1,8,100},{1,9,100},
+      {1,2,6,100},
+      {20},{21},{22},
+      {20,-1},{20,0},{20,1},{20,2},{20,6},{20,7},{20,8},{20,9},{20,100},
+      {21,-1},{21,0},{21,1},{21,2},{21,6},{21,7},{21,8},{21,9},{21,100},
+      {22,-1},{22,0},{22,1},{22,2},{22,6},{22,7},{22,8},{22,9},{22,100},
+      {20,21,22},{20,21,-1},{20,21,0},{20,21,1},{20,21,2},{20,21,6},{20,21,7},{20,21,8},{20,21,9},{20,21,100},
+      {20,22,0},{20,22,1},{20,22,2},
+      {20,0,2},{20,0,6},{20,0,7},{20,0,8},{20,0,9},{20,0,100},
+      {20,1,2},{20,1,6},{20,1,7},{20,1,8},{20,1,9},{20,1,100},
+      {20,2,6},{20,2,7},{20,2,8},{20,2,9},{20,2,100},
+      {20,6,100},{20,7,100},{20,8,100},{20,9,100},
+      {21,0,2},{21,0,6},{21,0,7},{21,0,8},{21,0,9},{21,0,100},
+      {21,1,2},{21,1,6},{21,1,7},{21,1,8},{21,1,9},{21,1,100},
+      {21,2,6},{21,2,7},{21,2,8},{21,2,9},{21,2,100},
+      {21,6,100},{21,7,100},{21,8,100},{21,9,100},
+      {22,0,2},{22,0,6},{22,0,7},{22,0,8},{22,0,9},{22,0,100},
+      {22,1,2},{22,1,6},{22,1,7},{22,1,8},{22,1,9},{22,1,100},
+      {22,2,6},{22,2,7},{22,2,8},{22,2,9},{22,2,100},
+      {22,6,100},{22,7,100},{22,8,100},{22,9,100},
+      {-1,0,1,2,6,20,21,22,20,21,22,100},{-1,0,1,2,7,20,21,22,20,21,22,100},{-1,0,1,2,8,20,21,22,20,21,22,100},{-1,0,1,2,9,20,21,22,20,21,22,100},
+      {-1,0,1,2,6,20,21,22,20,21,22,100,20,22,21},
+      {-1,0,1,2,7,20,21,22,20,21,22,100,20,22,21},{-1,0,1,2,8,20,21,22,20,21,22,100,20,22,21}
+    };
+    var RoSoI vl_badValues := {{1000},{1,19},{6,7},{6,8},{6,9},{1,6,7,100},{1,2,200}, {1,1},{1,1},{-1,0,1,2,6,7,100},
+      {-1,0,1,2,6,7,8,9,20,21,22,20,21,22,100,20,1,22,20},{1,2,200,1}};
+    f_checkSoITemplate(t_soi6s,vl_goodValues,vl_badValues);
+  }
+  
+  testcase tc_subset_soi7ss_eq() runs on A {
+    f_checkSoITemplateEquivalence(t_soi7s,t_soi7s_eq);
+  }
+  
+  //subset (1,2,(6..9)) length (2)
+  testcase tc_subset_soi7s() runs on A {
+    var RoSoI vl_goodValues := {      
+      {1,2},{1,6},{1,7},{1,8},{1,9},
+      {2,6},{2,7},{2,8},{2,9}
+    };
+    var RoSoI vl_badValues := {
+      {},{1},{2},{6},{7},{8},{9},{1000},
+      {1,19},{6,7},{6,8},{6,9},{1,6,7,100},{1,2,200}, {1,1},{-1,0,1,2,6,7,100}};
+    f_checkSoITemplate(t_soi7s,vl_goodValues,vl_badValues);
+  }
+  
+  testcase tc_subset_soi8ss_eq() runs on A {
+    f_checkSoITemplateEquivalence(t_soi8s,t_soi8s_eq);
+  }
+  
+  testcase tc_subset_soi8s() runs on A {
+    var RoSoI vl_goodValues := {      
+      {1,1},{1,2},{1,6},{1,7},{1,8},{1,9},
+      {2,6},{2,7},{2,8},{2,9},
+      {1,-1},{1,0},{1,1},{1,3},{1,4},{1,5},{1,10},{1,11},{1,100},
+      {2,-2},{2,-1},{2,0},{2,1},{2,2},{2,3},{2,4},{2,5},{2,10},{6,7},{6,10},
+      {7,7},{7,10},{7,11},
+      {8,6},{8,7},{8,10},{8,11},
+      {9,6},{9,7},{9,11}
+    };
+    var RoSoI vl_badValues := {
+      {},{1},{2},{6},{7},{8},{9},{1000},
+      {1,6,7,100},{1,2,200},{-1,0,1,2,6,7,100}};
+    f_checkSoITemplate(t_soi8s,vl_goodValues,vl_badValues);
+  } 
+
+  testcase tc_subset_soi9ss_eq() runs on A {
+    f_checkSoITemplateEquivalence(t_soi9s,t_soi9s_eq);
+  }
+
+  //subset(complement(1,2,(6..9)))  == (-1, 0,3,4,5,10,11 ) 
+  testcase tc_subset_soi9s() runs on A {
+    var RoSoI vl_goodValues := { {}, {-2},{-1},{0},{3},{4},{5},{10},{11},{1000}};
+    var RoSoI vl_badValues := {
+      {1,-3},{1,-2},{1,-1},{1,0},{1,1},{1,2},{1,3},{1,4},{1,5},{1,6},{1,7},{1,8},{1,9},{1,10},{1,11}, //...
+      {2,-3},{2,-2},{2,-1},{2,0},{2,1},{2,3},{2,4},{2,5},{2,6},{2,7},{2,8},{2,9},{2,10},{2,11}, //...
+      {1},{2},{6},{7},{8},{9},
+      {1,6,7,100},{1,2,200},{-1,0,1,2,6,7,100},
+      {1,6,7,8,9}, {1,2,6,7,8,9},{-1,-2},{-1,-2,0},{-1,0,3,4,5,10,11} 
+    };
+    f_checkSoITemplate(t_soi9s,vl_goodValues,vl_badValues);
+  }  
+
+  testcase tc_subset_soi10ss_eq() runs on A {
+    f_checkSoITemplateEquivalence(t_soi10s,t_soi10s_eq);
+  }
+  
+  //t_soi10s=subset(1, 2, (6..9),complement(1, 2, (6..9)))
+  testcase tc_subset_soi10s() runs on A {
+    var RoSoI vl_goodValues := {      
+      {1,-3},{1,-2},{1,-1},{1,0},{1,2},{1,3},{1,4},{1,5},{1,6},{1,7},{1,8},{1,9},{1,10},{1,11}, //...
+      {2,-3},{2,-2},{2,-1},{2,0},{2,1},{2,3},{2,4},{2,5},{2,6},{2,7},{2,8},{2,9},{2,10},{2,11}, //...
+      {6,-3},{6,-2},{6,-1},{6,0},{6,3},{6,4}
+    };
+    var RoSoI vl_badValues := {
+      {},{1},{2},{3},{4},{6},{7},{8},{9},{1000},{1,1},{2,2},{6,6},{6,9},{9,6},
+      {1,6,7,100},{1,2,200},{-1,0,1,2,6,7,100}};
+    f_checkSoITemplate(t_soi10s,vl_goodValues,vl_badValues);
+  } 
+
+  testcase tc_subset_soi11s_eq() runs on A {
+    f_checkSoITemplateEquivalence(t_soi11s,t_soi11s_eq);
+  }
+  
+  //t_soi11s=subset( 1,2,(6..9),complement(1,2))
+  testcase tc_subset_soi11s() runs on A {
+    var RoSoI vl_goodValues := {      
+      {1,2},{1,6},{1,7},{1,8},{1,9},
+      {2,6},{2,7},{2,8},{2,9},
+      {1,-1},{1,0},{1,3},{1,4},{1,5},{1,10},{1,11},{1,100},
+      {2,-2},{2,-1},{2,0},{2,1},{2,3},{2,4},{2,5},{2,10},{6,7},{6,10},
+      {7,7},{7,10},{7,11},
+      {8,6},{8,7},{8,10},{8,11},{6,6},
+      {9,6},{9,7},{9,11}
+    };
+    var RoSoI vl_badValues := {
+      {},{1},{2},{6},{7},{8},{9},{1000},{1,1},{2,2},{6,6,7},
+      {1,6,7,100},{1,2,200},{-1,0,1,2,6,7,100}};
+    f_checkSoITemplate(t_soi11s,vl_goodValues,vl_badValues);
+  }
+
+  //===i12s===
+  //subset(1, 2, ?);
+  testcase tc_subset_soi12s_eq() runs on A {
+    f_checkSoITemplateEquivalence(t_soi12s,t_soi12s_eq);
+  }
+  
+  testcase tc_subset_soi12s() runs on A {
+    var RoSoI vl_goodValues := { 
+      {},{1},{2},{3},{4},{5},{6},
+      {1,1},{1,2},{1,3},{1,4},{1,6},
+      {2,3},{2,4},{2,5},{2,6},{2,7},
+      {1,2,3},{1,2,4},{1,2,5},{3,2,1},{3,1,2}
+    }
+    var RoSoI vl_badValues := {
+      {1,1,1}, {1,3,4},{1,3,5},{1,3,6},{1,2,3,4}
+    };
+    f_checkSoITemplate(t_soi12s,vl_goodValues,vl_badValues);
+  }    
+
+  //===i13===
+  //subset(1, *, 3);
+  /*
+  testcase tc_subset_soi13s_eq() runs on A {
+    f_checkSoITemplateEquivalence(t_soi13s,t_soi13s_eq);
+  }
+  
+  testcase tc_subset_soi13s() runs on A {
+    var RoSoI vl_goodValues := { 
+      {},{1},{2},{3},{4},{5},{6},
+      {1,1},{1,2},{1,3},{1,4},{1,6},
+      {2,3},{2,4},{2,5},{2,6},{2,7},
+      {1,2,3},{1,2,4},{1,2,5},{3,2,1},{3,1,2}
+    }
+    var RoSoI vl_badValues := {
+      {1,1,1}, {1,3,4},{1,3,5},{1,3,6},{1,2,3,4}
+    };
+    f_checkSoITemplate(t_soi13s,vl_goodValues,vl_badValues);
+  } */
+
+  
+
+  
+  //========== (The Same) Testcases for Dynamic Templates================
+
+  
+  //=== i0 ===
+  testcase tc_subset_soi0s_eq_dyn() runs on A {
+    var template SoI tl_i0s := subset (all from t_SoI3 );
+    f_checkSoITemplateEquivalence(tl_i0s,t_soi0s_eq);
+  }
+
+  //double dyn: source and result are dynamic:
+  testcase tc_subset_soi0s_eq_2dyn() runs on A {
+    var template SoI tl_SoI3 := {20,21,22};
+    var template SoI tl_i0s := subset (all from tl_SoI3 );
+    f_checkSoITemplateEquivalence(tl_i0s,t_soi0s_eq);
+  }
+    
+  testcase tc_subset_soi0s_dyn() runs on A {
+    var template SoI tl_i0s := subset (all from t_SoI3 );
+    var RoSoI vl_goodValues := {{},{20},{21},{22},{20,21},{22,20},{22,21},{20,21,22}};
+    var RoSoI vl_badValues := {{0},{1},{-1},{1000},{1,19}};
+    f_checkSoITemplate(tl_i0s,vl_goodValues,vl_badValues);
+  }
+  
+  testcase tc_subset_soi0s_2dyn() runs on A {
+    var template SoI tl_i0s := subset (all from t_SoI3 );
+    var RoSoI vl_goodValues := {{},{20},{21},{22},{20,21},{22,20},{22,21},{20,21,22}};
+    var RoSoI vl_badValues := {{0},{1},{-1},{1000},{1,19}};
+    f_checkSoITemplate(tl_i0s,vl_goodValues,vl_badValues);
+  }
+
+  //=== i1 ===
+  testcase tc_subset_soi1s_eq_dyn() runs on A {
+    var template SoI tl_i1s :=  subset (all from t_SoI1, 100);
+    f_checkSoITemplateEquivalence(tl_i1s,t_soi1s_eq);
+  }
+  
+  testcase tc_subset_soi1s_eq_2dyn() runs on A {
+    template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_i1s :=  subset (all from tl_SoI1, 100);
+    f_checkSoITemplateEquivalence(tl_i1s,t_soi1s_eq);
+  }
+
+  testcase tc_subset_soi1s_dyn() runs on A {
+    var template SoI tl_i1s :=  subset (all from t_SoI1, 100);
+    var RoSoI vl_goodValues := {
+      {},
+      {1},{2},{6},{7},{8},{9},{100},
+      {1,2},{1,6},{1,7},{1,8},{1,9},{1,100},
+      {2,6},{2,7},{2,8},{2,9},{2,100},
+      {6,100},{7,100},{8,100},{9,100},
+      {1,2,6},{1,2,7},{1,2,8},{1,2,9},{1,2,100},
+      {2,6,100},{2,7,100},{2,8,100},{2,9,100},
+      {1,6,100},{1,7,100},{1,8,100},{1,9,100},
+      {1,2,6,100}
+    };
+    var RoSoI vl_badValues := {{0}, {-1},{1000},{1,19},{6,7},{6,8},{6,9},{1,6,7,100},{1,2,200}, {1,1}};
+    f_checkSoITemplate(tl_i1s,vl_goodValues,vl_badValues);
+  }
+  
+  testcase tc_subset_soi1s_2dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_i1s :=  subset (all from tl_SoI1, 100);
+    var RoSoI vl_goodValues := {
+      {},
+      {1},{2},{6},{7},{8},{9},{100},
+      {1,2},{1,6},{1,7},{1,8},{1,9},{1,100},
+      {2,6},{2,7},{2,8},{2,9},{2,100},
+      {6,100},{7,100},{8,100},{9,100},
+      {1,2,6},{1,2,7},{1,2,8},{1,2,9},{1,2,100},
+      {2,6,100},{2,7,100},{2,8,100},{2,9,100},
+      {1,6,100},{1,7,100},{1,8,100},{1,9,100},
+      {1,2,6,100}
+    };
+    var RoSoI vl_badValues := {{0}, {-1},{1000},{1,19},{6,7},{6,8},{6,9},{1,6,7,100},{1,2,200}, {1,1}};
+    f_checkSoITemplate(tl_i1s,vl_goodValues,vl_badValues);
+  }
+
+  //=== i2 ===
+  testcase tc_subset_soi2s_eq_dyn() runs on A {
+    var template SoI vt_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_i2s := subset (-1,0,all from vt_SoI1,100);
+    f_checkSoITemplateEquivalence(tl_i2s,t_soi2s_eq);
+
+    var RoSoI vl_goodValues := {
+      {},
+      {-1},{0},{1},{2},{6},{7},{8},{9},{100},
+      {-1,0},{-1,1},{-1,2},{-1,6},{-1,7},{-1,8},{-1,9},{-1,100},
+      {0,2},{0,6},{0,7},{0,8},{0,9},{0,100},
+      {1,2},{1,6},{1,7},{1,8},{1,9},{1,100},
+      {2,6},{2,7},{2,8},{2,9},{2,100},
+      {6,100},{7,100},{8,100},{9,100},
+      {-1,0,1},{-1,0,2},{-1,0,6},{-1,0,7},{-1,0,8},{-1,0,9},{-1,0,100},
+      {-1,2,6},{-1,2,7},{-1,2,8},{-1,2,9},{-1,2,100},
+      {-1,6,100},{-1,7,100},{-1,8,100},{-1,9,100},
+      {1,2,6},{1,2,7},{1,2,8},{1,2,9},{1,2,100},
+      {0,1,2},{0,1,6}, {0,1,7},{0,1,8},{0,1,9},{0,1,100},
+      {0,2,6},{0,2,7},{0,2,8},{0,2,9},{0,2,100},
+      {2,6,100},{2,7,100},{2,8,100},{2,9,100},
+      {1,6,100},{1,7,100},{1,8,100},{1,9,100},
+      {1,2,6,100}
+    };
+    var RoSoI vl_badValues := {{1000},{1,19},{6,7},{6,8},{6,9},{1,6,7,100},{1,2,200}, {1,1},{-1,0,1,2,6,7,100}};
+    f_checkSoITemplate(tl_i2s,vl_goodValues,vl_badValues);
+
+  }
+  
+  testcase tc_subset_soi2s_eq_2dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_i2s := subset (-1,0,all from tl_SoI1,100);
+    f_checkSoITemplateEquivalence(tl_i2s,t_soi2s_eq);
+  }
+
+  testcase tc_subset_soi2s_dyn() runs on A {
+    var template SoI tl_i2s := subset (-1,0,all from t_SoI1,100);
+    var RoSoI vl_goodValues := {
+      {},
+      {-1},{0},{1},{2},{6},{7},{8},{9},{100},
+      {-1,0},{-1,1},{-1,2},{-1,6},{-1,7},{-1,8},{-1,9},{-1,100},
+      {0,2},{0,6},{0,7},{0,8},{0,9},{0,100},
+      {1,2},{1,6},{1,7},{1,8},{1,9},{1,100},
+      {2,6},{2,7},{2,8},{2,9},{2,100},
+      {6,100},{7,100},{8,100},{9,100},
+      {-1,0,1},{-1,0,2},{-1,0,6},{-1,0,7},{-1,0,8},{-1,0,9},{-1,0,100},
+      {-1,2,6},{-1,2,7},{-1,2,8},{-1,2,9},{-1,2,100},
+      {-1,6,100},{-1,7,100},{-1,8,100},{-1,9,100},
+      {1,2,6},{1,2,7},{1,2,8},{1,2,9},{1,2,100},
+      {0,1,2},{0,1,6}, {0,1,7},{0,1,8},{0,1,9},{0,1,100},
+      {0,2,6},{0,2,7},{0,2,8},{0,2,9},{0,2,100},
+      {2,6,100},{2,7,100},{2,8,100},{2,9,100},
+      {1,6,100},{1,7,100},{1,8,100},{1,9,100},
+      {1,2,6,100}
+    };
+    var RoSoI vl_badValues := {{1000},{1,19},{6,7},{6,8},{6,9},{1,6,7,100},{1,2,200}, {1,1},{-1,0,1,2,6,7,100}};
+    f_checkSoITemplate(tl_i2s,vl_goodValues,vl_badValues);
+  }
+  
+  testcase tc_subset_soi2s_2dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_i2s := subset (-1,0,all from t_SoI1,100);
+    var RoSoI vl_goodValues := {
+      {},
+      {-1},{0},{1},{2},{6},{7},{8},{9},{100},
+      {-1,0},{-1,1},{-1,2},{-1,6},{-1,7},{-1,8},{-1,9},{-1,100},
+      {0,2},{0,6},{0,7},{0,8},{0,9},{0,100},
+      {1,2},{1,6},{1,7},{1,8},{1,9},{1,100},
+      {2,6},{2,7},{2,8},{2,9},{2,100},
+      {6,100},{7,100},{8,100},{9,100},
+      {-1,0,1},{-1,0,2},{-1,0,6},{-1,0,7},{-1,0,8},{-1,0,9},{-1,0,100},
+      {-1,2,6},{-1,2,7},{-1,2,8},{-1,2,9},{-1,2,100},
+      {-1,6,100},{-1,7,100},{-1,8,100},{-1,9,100},
+      {1,2,6},{1,2,7},{1,2,8},{1,2,9},{1,2,100},
+      {0,1,2},{0,1,6}, {0,1,7},{0,1,8},{0,1,9},{0,1,100},
+      {0,2,6},{0,2,7},{0,2,8},{0,2,9},{0,2,100},
+      {2,6,100},{2,7,100},{2,8,100},{2,9,100},
+      {1,6,100},{1,7,100},{1,8,100},{1,9,100},
+      {1,2,6,100}
+    };
+    var RoSoI vl_badValues := {{1000},{1,19},{6,7},{6,8},{6,9},{1,6,7,100},{1,2,200}, {1,1},{-1,0,1,2,6,7,100}};
+    f_checkSoITemplate(tl_i2s,vl_goodValues,vl_badValues);
+  }  
+
+  //=== i3 ===
+  testcase tc_subset_soi3ss_eq_dyn() runs on A {
+    var template SoI tl_i3s := subset(-1,0,all from t_SoI1, all from t_SoI3,100);
+    f_checkSoITemplateEquivalence(tl_i3s,t_soi3s_eq);
+  }
+  
+  testcase tc_subset_soi3ss_eq_2dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_SoI3 := {20,21,22};
+    var template SoI tl_i3s := subset(-1,0,all from tl_SoI1, all from tl_SoI3,100);
+    f_checkSoITemplateEquivalence(tl_i3s,t_soi3s_eq);
+  }
+
+  testcase tc_subset_soi3s_dyn() runs on A {
+    var template SoI tl_i3s := subset(-1,0,all from t_SoI1, all from t_SoI3,100);
+    var RoSoI vl_goodValues := {
+      {},
+      {-1},{0},{1},{2},{6},{7},{8},{9},{100},
+      {-1,0},{-1,1},{-1,2},{-1,6},{-1,7},{-1,8},{-1,9},{-1,100},
+      {0,2},{0,6},{0,7},{0,8},{0,9},{0,100},
+      {1,2},{1,6},{1,7},{1,8},{1,9},{1,100},
+      {2,6},{2,7},{2,8},{2,9},{2,100},
+      {6,100},{7,100},{8,100},{9,100},
+      {-1,0,1},{-1,0,2},{-1,0,6},{-1,0,7},{-1,0,8},{-1,0,9},{-1,0,100},
+      {-1,2,6},{-1,2,7},{-1,2,8},{-1,2,9},{-1,2,100},
+      {-1,6,100},{-1,7,100},{-1,8,100},{-1,9,100},
+      {1,2,6},{1,2,7},{1,2,8},{1,2,9},{1,2,100},
+      {0,1,2},{0,1,6}, {0,1,7},{0,1,8},{0,1,9},{0,1,100},
+      {0,2,6},{0,2,7},{0,2,8},{0,2,9},{0,2,100},
+      {2,6,100},{2,7,100},{2,8,100},{2,9,100},
+      {1,6,100},{1,7,100},{1,8,100},{1,9,100},
+      {1,2,6,100},
+      {20},{21},{22},
+      {20,-1},{20,0},{20,1},{20,2},{20,6},{20,7},{20,8},{20,9},{20,100},
+      {21,-1},{21,0},{21,1},{21,2},{21,6},{21,7},{21,8},{21,9},{21,100},
+      {22,-1},{22,0},{22,1},{22,2},{22,6},{22,7},{22,8},{22,9},{22,100},
+      {20,21,22},{20,21,-1},{20,21,0},{20,21,1},{20,21,2},{20,21,6},{20,21,7},{20,21,8},{20,21,9},{20,21,100},
+      {20,22,0},{20,22,1},{20,22,2},
+      {20,0,2},{20,0,6},{20,0,7},{20,0,8},{20,0,9},{20,0,100},
+      {20,1,2},{20,1,6},{20,1,7},{20,1,8},{20,1,9},{20,1,100},
+      {20,2,6},{20,2,7},{20,2,8},{20,2,9},{20,2,100},
+      {20,6,100},{20,7,100},{20,8,100},{20,9,100},
+      {21,0,2},{21,0,6},{21,0,7},{21,0,8},{21,0,9},{21,0,100},
+      {21,1,2},{21,1,6},{21,1,7},{21,1,8},{21,1,9},{21,1,100},
+      {21,2,6},{21,2,7},{21,2,8},{21,2,9},{21,2,100},
+      {21,6,100},{21,7,100},{21,8,100},{21,9,100},
+      {22,0,2},{22,0,6},{22,0,7},{22,0,8},{22,0,9},{22,0,100},
+      {22,1,2},{22,1,6},{22,1,7},{22,1,8},{22,1,9},{22,1,100},
+      {22,2,6},{22,2,7},{22,2,8},{22,2,9},{22,2,100},
+      {22,6,100},{22,7,100},{22,8,100},{22,9,100},
+      {-1,0,1,2,  20,21,22,100},{-1,0,1,2,  20,21,22,100},
+      {-1,0,1,2,8,20,21,22,100},{-1,0,1,2,8,20,21,22,100},{-1,0,1,2,9,20,21,22,100},
+      {-1,0,1,2,6,20,21,22,100},{-1,0,1,2,7,20,21,22,100},{-1,0,1,2,8,20,21,22,100},
+      {-1,0,1,2,9,20,21,22,100},{-1,0,1,2,20,21,22,100}
+    };
+    var RoSoI vl_badValues := {{1000},{1,19},{6,7},{6,8},{6,9},{1,6,7,100},{1,2,200}, {1,1},{1,1},{-1,0,1,2,6,7,100}};
+    f_checkSoITemplate(tl_i3s,vl_goodValues,vl_badValues);
+  }
+  
+  testcase tc_subset_soi3s_2dyn() runs on A {    
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_SoI3 := {20,21,22};
+    var template SoI tl_i3s := subset(-1,0,all from tl_SoI1, all from tl_SoI3,100);
+    var RoSoI vl_goodValues := {
+      {},
+      {-1},{0},{1},{2},{6},{7},{8},{9},{100},
+      {-1,0},{-1,1},{-1,2},{-1,6},{-1,7},{-1,8},{-1,9},{-1,100},
+      {0,2},{0,6},{0,7},{0,8},{0,9},{0,100},
+      {1,2},{1,6},{1,7},{1,8},{1,9},{1,100},
+      {2,6},{2,7},{2,8},{2,9},{2,100},
+      {6,100},{7,100},{8,100},{9,100},
+      {-1,0,1},{-1,0,2},{-1,0,6},{-1,0,7},{-1,0,8},{-1,0,9},{-1,0,100},
+      {-1,2,6},{-1,2,7},{-1,2,8},{-1,2,9},{-1,2,100},
+      {-1,6,100},{-1,7,100},{-1,8,100},{-1,9,100},
+      {1,2,6},{1,2,7},{1,2,8},{1,2,9},{1,2,100},
+      {0,1,2},{0,1,6}, {0,1,7},{0,1,8},{0,1,9},{0,1,100},
+      {0,2,6},{0,2,7},{0,2,8},{0,2,9},{0,2,100},
+      {2,6,100},{2,7,100},{2,8,100},{2,9,100},
+      {1,6,100},{1,7,100},{1,8,100},{1,9,100},
+      {1,2,6,100},
+      {20},{21},{22},
+      {20,-1},{20,0},{20,1},{20,2},{20,6},{20,7},{20,8},{20,9},{20,100},
+      {21,-1},{21,0},{21,1},{21,2},{21,6},{21,7},{21,8},{21,9},{21,100},
+      {22,-1},{22,0},{22,1},{22,2},{22,6},{22,7},{22,8},{22,9},{22,100},
+      {20,21,22},{20,21,-1},{20,21,0},{20,21,1},{20,21,2},{20,21,6},{20,21,7},{20,21,8},{20,21,9},{20,21,100},
+      {20,22,0},{20,22,1},{20,22,2},
+      {20,0,2},{20,0,6},{20,0,7},{20,0,8},{20,0,9},{20,0,100},
+      {20,1,2},{20,1,6},{20,1,7},{20,1,8},{20,1,9},{20,1,100},
+      {20,2,6},{20,2,7},{20,2,8},{20,2,9},{20,2,100},
+      {20,6,100},{20,7,100},{20,8,100},{20,9,100},
+      {21,0,2},{21,0,6},{21,0,7},{21,0,8},{21,0,9},{21,0,100},
+      {21,1,2},{21,1,6},{21,1,7},{21,1,8},{21,1,9},{21,1,100},
+      {21,2,6},{21,2,7},{21,2,8},{21,2,9},{21,2,100},
+      {21,6,100},{21,7,100},{21,8,100},{21,9,100},
+      {22,0,2},{22,0,6},{22,0,7},{22,0,8},{22,0,9},{22,0,100},
+      {22,1,2},{22,1,6},{22,1,7},{22,1,8},{22,1,9},{22,1,100},
+      {22,2,6},{22,2,7},{22,2,8},{22,2,9},{22,2,100},
+      {22,6,100},{22,7,100},{22,8,100},{22,9,100},
+      {-1,0,1,2,  20,21,22,100},{-1,0,1,2,  20,21,22,100},
+      {-1,0,1,2,8,20,21,22,100},{-1,0,1,2,8,20,21,22,100},{-1,0,1,2,9,20,21,22,100},
+      {-1,0,1,2,6,20,21,22,100},{-1,0,1,2,7,20,21,22,100},{-1,0,1,2,8,20,21,22,100},
+      {-1,0,1,2,9,20,21,22,100},{-1,0,1,2,20,21,22,100}
+    };
+    var RoSoI vl_badValues := {{1000},{1,19},{6,7},{6,8},{6,9},{1,6,7,100},{1,2,200}, {1,1},{1,1},{-1,0,1,2,6,7,100}};
+    f_checkSoITemplate(tl_i3s,vl_goodValues,vl_badValues);
+  }
+
+  //=== i4 ===
+  testcase tc_subset_soi4ss_eq_dyn() runs on A {
+    var template SoI tl_i4s := subset(-1,0,all from t_SoI1, 100, all from t_SoI3);
+    f_checkSoITemplateEquivalence(tl_i4s,t_soi4s_eq);
+  }
+  
+  testcase tc_subset_soi4ss_eq_2dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_SoI3 := {20,21,22};
+    var template SoI tl_i4s := subset(-1,0,all from tl_SoI1, 100, all from tl_SoI3);
+    f_checkSoITemplateEquivalence(tl_i4s,t_soi4s_eq);
+  }
+  
+  testcase tc_subset_soi4s_dyn() runs on A {
+    var template SoI tl_i4s := subset(-1,0,all from t_SoI1, 100, all from t_SoI3);
+    var RoSoI vl_goodValues := {
+      {},
+      {-1},{0},{1},{2},{6},{7},{8},{9},{100},
+      {-1,0},{-1,1},{-1,2},{-1,6},{-1,7},{-1,8},{-1,9},{-1,100},
+      {0,2},{0,6},{0,7},{0,8},{0,9},{0,100},
+      {1,2},{1,6},{1,7},{1,8},{1,9},{1,100},
+      {2,6},{2,7},{2,8},{2,9},{2,100},
+      {6,100},{7,100},{8,100},{9,100},
+      {-1,0,1},{-1,0,2},{-1,0,6},{-1,0,7},{-1,0,8},{-1,0,9},{-1,0,100},
+      {-1,2,6},{-1,2,7},{-1,2,8},{-1,2,9},{-1,2,100},
+      {-1,6,100},{-1,7,100},{-1,8,100},{-1,9,100},
+      {1,2,6},{1,2,7},{1,2,8},{1,2,9},{1,2,100},
+      {0,1,2},{0,1,6}, {0,1,7},{0,1,8},{0,1,9},{0,1,100},
+      {0,2,6},{0,2,7},{0,2,8},{0,2,9},{0,2,100},
+      {2,6,100},{2,7,100},{2,8,100},{2,9,100},
+      {1,6,100},{1,7,100},{1,8,100},{1,9,100},
+      {1,2,6,100},
+      {20},{21},{22},
+      {20,-1},{20,0},{20,1},{20,2},{20,6},{20,7},{20,8},{20,9},{20,100},
+      {21,-1},{21,0},{21,1},{21,2},{21,6},{21,7},{21,8},{21,9},{21,100},
+      {22,-1},{22,0},{22,1},{22,2},{22,6},{22,7},{22,8},{22,9},{22,100},
+      {20,21,22},{20,21,-1},{20,21,0},{20,21,1},{20,21,2},{20,21,6},{20,21,7},{20,21,8},{20,21,9},{20,21,100},
+      {20,22,0},{20,22,1},{20,22,2},
+      {20,0,2},{20,0,6},{20,0,7},{20,0,8},{20,0,9},{20,0,100},
+      {20,1,2},{20,1,6},{20,1,7},{20,1,8},{20,1,9},{20,1,100},
+      {20,2,6},{20,2,7},{20,2,8},{20,2,9},{20,2,100},
+      {20,6,100},{20,7,100},{20,8,100},{20,9,100},
+      {21,0,2},{21,0,6},{21,0,7},{21,0,8},{21,0,9},{21,0,100},
+      {21,1,2},{21,1,6},{21,1,7},{21,1,8},{21,1,9},{21,1,100},
+      {21,2,6},{21,2,7},{21,2,8},{21,2,9},{21,2,100},
+      {21,6,100},{21,7,100},{21,8,100},{21,9,100},
+      {22,0,2},{22,0,6},{22,0,7},{22,0,8},{22,0,9},{22,0,100},
+      {22,1,2},{22,1,6},{22,1,7},{22,1,8},{22,1,9},{22,1,100},
+      {22,2,6},{22,2,7},{22,2,8},{22,2,9},{22,2,100},
+      {22,6,100},{22,7,100},{22,8,100},{22,9,100}
+    };
+    var RoSoI vl_badValues := {{1000},{1,19},{6,7},{6,8},{6,9},{1,6,7,100},{1,2,200}, {1,1},{1,1},{-1,0,1,2,6,7,100}};
+    f_checkSoITemplate(tl_i4s,vl_goodValues,vl_badValues);
+  }
+  
+  testcase tc_subset_soi4s_2dyn() runs on A {    
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_SoI3 := {20,21,22};
+    var template SoI tl_i4s := subset(-1,0,all from tl_SoI1, 100, all from tl_SoI3);
+    var RoSoI vl_goodValues := {
+      {},
+      {-1},{0},{1},{2},{6},{7},{8},{9},{100},
+      {-1,0},{-1,1},{-1,2},{-1,6},{-1,7},{-1,8},{-1,9},{-1,100},
+      {0,2},{0,6},{0,7},{0,8},{0,9},{0,100},
+      {1,2},{1,6},{1,7},{1,8},{1,9},{1,100},
+      {2,6},{2,7},{2,8},{2,9},{2,100},
+      {6,100},{7,100},{8,100},{9,100},
+      {-1,0,1},{-1,0,2},{-1,0,6},{-1,0,7},{-1,0,8},{-1,0,9},{-1,0,100},
+      {-1,2,6},{-1,2,7},{-1,2,8},{-1,2,9},{-1,2,100},
+      {-1,6,100},{-1,7,100},{-1,8,100},{-1,9,100},
+      {1,2,6},{1,2,7},{1,2,8},{1,2,9},{1,2,100},
+      {0,1,2},{0,1,6}, {0,1,7},{0,1,8},{0,1,9},{0,1,100},
+      {0,2,6},{0,2,7},{0,2,8},{0,2,9},{0,2,100},
+      {2,6,100},{2,7,100},{2,8,100},{2,9,100},
+      {1,6,100},{1,7,100},{1,8,100},{1,9,100},
+      {1,2,6,100},
+      {20},{21},{22},
+      {20,-1},{20,0},{20,1},{20,2},{20,6},{20,7},{20,8},{20,9},{20,100},
+      {21,-1},{21,0},{21,1},{21,2},{21,6},{21,7},{21,8},{21,9},{21,100},
+      {22,-1},{22,0},{22,1},{22,2},{22,6},{22,7},{22,8},{22,9},{22,100},
+      {20,21,22},{20,21,-1},{20,21,0},{20,21,1},{20,21,2},{20,21,6},{20,21,7},{20,21,8},{20,21,9},{20,21,100},
+      {20,22,0},{20,22,1},{20,22,2},
+      {20,0,2},{20,0,6},{20,0,7},{20,0,8},{20,0,9},{20,0,100},
+      {20,1,2},{20,1,6},{20,1,7},{20,1,8},{20,1,9},{20,1,100},
+      {20,2,6},{20,2,7},{20,2,8},{20,2,9},{20,2,100},
+      {20,6,100},{20,7,100},{20,8,100},{20,9,100},
+      {21,0,2},{21,0,6},{21,0,7},{21,0,8},{21,0,9},{21,0,100},
+      {21,1,2},{21,1,6},{21,1,7},{21,1,8},{21,1,9},{21,1,100},
+      {21,2,6},{21,2,7},{21,2,8},{21,2,9},{21,2,100},
+      {21,6,100},{21,7,100},{21,8,100},{21,9,100},
+      {22,0,2},{22,0,6},{22,0,7},{22,0,8},{22,0,9},{22,0,100},
+      {22,1,2},{22,1,6},{22,1,7},{22,1,8},{22,1,9},{22,1,100},
+      {22,2,6},{22,2,7},{22,2,8},{22,2,9},{22,2,100},
+      {22,6,100},{22,7,100},{22,8,100},{22,9,100}
+    };
+    var RoSoI vl_badValues := {{1000},{1,19},{6,7},{6,8},{6,9},{1,6,7,100},{1,2,200}, {1,1},{1,1},{-1,0,1,2,6,7,100}};
+    f_checkSoITemplate(tl_i4s,vl_goodValues,vl_badValues);
+  }
+
+
+  //=== i5 ===
+  testcase tc_subset_soi5ss_eq_dyn() runs on A {
+    var template SoI tl_i5s := subset(-1,0,all from t_SoI1, 100, all from t_SoI3,all from t_SoI3 ); //repetition
+    f_checkSoITemplateEquivalence(tl_i5s,t_soi5s_eq);
+  }
+  
+  testcase tc_subset_soi5ss_eq_2dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_SoI3 := {20,21,22};
+    var template SoI tl_i5s := subset(-1,0,all from tl_SoI1, 100, all from tl_SoI3,all from tl_SoI3 ); //repetition
+    f_checkSoITemplateEquivalence(tl_i5s,t_soi5s_eq);
+  }
+  
+  testcase tc_subset_soi5s_dyn() runs on A {
+    var template SoI tl_i5s := subset(-1,0,all from t_SoI1, 100, all from t_SoI3,all from t_SoI3 ); //repetition
+    var RoSoI vl_goodValues := {
+      {},
+      {-1},{0},{1},{2},{6},{7},{8},{9},{100},
+      {-1,0},{-1,1},{-1,2},{-1,6},{-1,7},{-1,8},{-1,9},{-1,100},
+      {0,2},{0,6},{0,7},{0,8},{0,9},{0,100},
+      {1,2},{1,6},{1,7},{1,8},{1,9},{1,100},
+      {2,6},{2,7},{2,8},{2,9},{2,100},
+      {6,100},{7,100},{8,100},{9,100},
+      {-1,0,1},{-1,0,2},{-1,0,6},{-1,0,7},{-1,0,8},{-1,0,9},{-1,0,100},
+      {-1,2,6},{-1,2,7},{-1,2,8},{-1,2,9},{-1,2,100},
+      {-1,6,100},{-1,7,100},{-1,8,100},{-1,9,100},
+      {1,2,6},{1,2,7},{1,2,8},{1,2,9},{1,2,100},
+      {0,1,2},{0,1,6}, {0,1,7},{0,1,8},{0,1,9},{0,1,100},
+      {0,2,6},{0,2,7},{0,2,8},{0,2,9},{0,2,100},
+      {2,6,100},{2,7,100},{2,8,100},{2,9,100},
+      {1,6,100},{1,7,100},{1,8,100},{1,9,100},
+      {1,2,6,100},
+      {20},{21},{22},
+      {20,-1},{20,0},{20,1},{20,2},{20,6},{20,7},{20,8},{20,9},{20,100},
+      {21,-1},{21,0},{21,1},{21,2},{21,6},{21,7},{21,8},{21,9},{21,100},
+      {22,-1},{22,0},{22,1},{22,2},{22,6},{22,7},{22,8},{22,9},{22,100},
+      {20,21,22},{20,21,-1},{20,21,0},{20,21,1},{20,21,2},{20,21,6},{20,21,7},{20,21,8},{20,21,9},{20,21,100},
+      {20,22,0},{20,22,1},{20,22,2},
+      {20,0,2},{20,0,6},{20,0,7},{20,0,8},{20,0,9},{20,0,100},
+      {20,1,2},{20,1,6},{20,1,7},{20,1,8},{20,1,9},{20,1,100},
+      {20,2,6},{20,2,7},{20,2,8},{20,2,9},{20,2,100},
+      {20,6,100},{20,7,100},{20,8,100},{20,9,100},
+      {21,0,2},{21,0,6},{21,0,7},{21,0,8},{21,0,9},{21,0,100},
+      {21,1,2},{21,1,6},{21,1,7},{21,1,8},{21,1,9},{21,1,100},
+      {21,2,6},{21,2,7},{21,2,8},{21,2,9},{21,2,100},
+      {21,6,100},{21,7,100},{21,8,100},{21,9,100},
+      {22,0,2},{22,0,6},{22,0,7},{22,0,8},{22,0,9},{22,0,100},
+      {22,1,2},{22,1,6},{22,1,7},{22,1,8},{22,1,9},{22,1,100},
+      {22,2,6},{22,2,7},{22,2,8},{22,2,9},{22,2,100},
+      {22,6,100},{22,7,100},{22,8,100},{22,9,100},
+      {-1,0,1,2,6,20,21,22,20,21,22,100},{-1,0,1,2,7,20,21,22,20,21,22,100},{-1,0,1,2,8,20,21,22,20,21,22,100},{-1,0,1,2,9,20,21,22,20,21,22,100}
+    };
+    var RoSoI vl_badValues := {{1000},{1,19},{6,7},{6,8},{6,9},{1,6,7,100},{1,2,200}, {1,1},{1,1},{-1,0,1,2,6,7,100},
+      {-1,0,1,2,5,6,7,8,9,20,21,22,20,21,22,100},{-1,0,1,2,5,6,7,8,9,20,21,22,20,21,22,100,20}};
+    f_checkSoITemplate(tl_i5s,vl_goodValues,vl_badValues);
+  }
+  
+  testcase tc_subset_soi5s_2dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_SoI3 := {20,21,22};   
+    var template SoI tl_i5s := subset(-1,0,all from t_SoI1, 100, all from t_SoI3,all from t_SoI3 ); //repetition
+    var RoSoI vl_goodValues := {
+      {},
+      {-1},{0},{1},{2},{6},{7},{8},{9},{100},
+      {-1,0},{-1,1},{-1,2},{-1,6},{-1,7},{-1,8},{-1,9},{-1,100},
+      {0,2},{0,6},{0,7},{0,8},{0,9},{0,100},
+      {1,2},{1,6},{1,7},{1,8},{1,9},{1,100},
+      {2,6},{2,7},{2,8},{2,9},{2,100},
+      {6,100},{7,100},{8,100},{9,100},
+      {-1,0,1},{-1,0,2},{-1,0,6},{-1,0,7},{-1,0,8},{-1,0,9},{-1,0,100},
+      {-1,2,6},{-1,2,7},{-1,2,8},{-1,2,9},{-1,2,100},
+      {-1,6,100},{-1,7,100},{-1,8,100},{-1,9,100},
+      {1,2,6},{1,2,7},{1,2,8},{1,2,9},{1,2,100},
+      {0,1,2},{0,1,6}, {0,1,7},{0,1,8},{0,1,9},{0,1,100},
+      {0,2,6},{0,2,7},{0,2,8},{0,2,9},{0,2,100},
+      {2,6,100},{2,7,100},{2,8,100},{2,9,100},
+      {1,6,100},{1,7,100},{1,8,100},{1,9,100},
+      {1,2,6,100},
+      {20},{21},{22},
+      {20,-1},{20,0},{20,1},{20,2},{20,6},{20,7},{20,8},{20,9},{20,100},
+      {21,-1},{21,0},{21,1},{21,2},{21,6},{21,7},{21,8},{21,9},{21,100},
+      {22,-1},{22,0},{22,1},{22,2},{22,6},{22,7},{22,8},{22,9},{22,100},
+      {20,21,22},{20,21,-1},{20,21,0},{20,21,1},{20,21,2},{20,21,6},{20,21,7},{20,21,8},{20,21,9},{20,21,100},
+      {20,22,0},{20,22,1},{20,22,2},
+      {20,0,2},{20,0,6},{20,0,7},{20,0,8},{20,0,9},{20,0,100},
+      {20,1,2},{20,1,6},{20,1,7},{20,1,8},{20,1,9},{20,1,100},
+      {20,2,6},{20,2,7},{20,2,8},{20,2,9},{20,2,100},
+      {20,6,100},{20,7,100},{20,8,100},{20,9,100},
+      {21,0,2},{21,0,6},{21,0,7},{21,0,8},{21,0,9},{21,0,100},
+      {21,1,2},{21,1,6},{21,1,7},{21,1,8},{21,1,9},{21,1,100},
+      {21,2,6},{21,2,7},{21,2,8},{21,2,9},{21,2,100},
+      {21,6,100},{21,7,100},{21,8,100},{21,9,100},
+      {22,0,2},{22,0,6},{22,0,7},{22,0,8},{22,0,9},{22,0,100},
+      {22,1,2},{22,1,6},{22,1,7},{22,1,8},{22,1,9},{22,1,100},
+      {22,2,6},{22,2,7},{22,2,8},{22,2,9},{22,2,100},
+      {22,6,100},{22,7,100},{22,8,100},{22,9,100},
+      {-1,0,1,2,6,20,21,22,20,21,22,100},{-1,0,1,2,7,20,21,22,20,21,22,100},{-1,0,1,2,8,20,21,22,20,21,22,100},{-1,0,1,2,9,20,21,22,20,21,22,100}
+    };
+    var RoSoI vl_badValues := {{1000},{1,19},{6,7},{6,8},{6,9},{1,6,7,100},{1,2,200}, {1,1},{1,1},{-1,0,1,2,6,7,100},
+      {-1,0,1,2,5,6,7,8,9,20,21,22,20,21,22,100},{-1,0,1,2,5,6,7,8,9,20,21,22,20,21,22,100,20}};
+    f_checkSoITemplate(tl_i5s,vl_goodValues,vl_badValues);
+  }
+
+  //=== i6 =====
+  testcase tc_subset_soi6ss_eq_dyn() runs on A {
+    var template SoI tl_i6s := subset(-1,0,all from t_SoI1, 100, all from t_SoI3,all from t_SoI3,all from t_SoI3); //repetition
+    f_checkSoITemplateEquivalence(tl_i6s,t_soi6s_eq);
+  }
+
+  testcase tc_subset_soi6ss_eq_2dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_SoI3 := {20,21,22};   
+    var template SoI tl_i6s := subset(-1,0,all from tl_SoI1, 100, all from tl_SoI3,all from tl_SoI3,all from tl_SoI3); //repetition
+    f_checkSoITemplateEquivalence(tl_i6s,t_soi6s_eq);
+  }
+  
+  testcase tc_subset_soi6s_dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_SoI3 := {20,21,22};
+    var template SoI tl_i6s := subset(-1,0,all from tl_SoI1, 100, all from tl_SoI3,all from tl_SoI3,all from tl_SoI3); //repetition
+    var RoSoI vl_goodValues := {
+      {},
+      {-1},{0},{1},{2},{6},{7},{8},{9},{100},
+      {-1,0},{-1,1},{-1,2},{-1,6},{-1,7},{-1,8},{-1,9},{-1,100},
+      {0,2},{0,6},{0,7},{0,8},{0,9},{0,100},
+      {1,2},{1,6},{1,7},{1,8},{1,9},{1,100},
+      {2,6},{2,7},{2,8},{2,9},{2,100},
+      {6,100},{7,100},{8,100},{9,100},
+      {-1,0,1},{-1,0,2},{-1,0,6},{-1,0,7},{-1,0,8},{-1,0,9},{-1,0,100},
+      {-1,2,6},{-1,2,7},{-1,2,8},{-1,2,9},{-1,2,100},
+      {-1,6,100},{-1,7,100},{-1,8,100},{-1,9,100},
+      {1,2,6},{1,2,7},{1,2,8},{1,2,9},{1,2,100},
+      {0,1,2},{0,1,6}, {0,1,7},{0,1,8},{0,1,9},{0,1,100},
+      {0,2,6},{0,2,7},{0,2,8},{0,2,9},{0,2,100},
+      {2,6,100},{2,7,100},{2,8,100},{2,9,100},
+      {1,6,100},{1,7,100},{1,8,100},{1,9,100},
+      {1,2,6,100},
+      {20},{21},{22},
+      {20,-1},{20,0},{20,1},{20,2},{20,6},{20,7},{20,8},{20,9},{20,100},
+      {21,-1},{21,0},{21,1},{21,2},{21,6},{21,7},{21,8},{21,9},{21,100},
+      {22,-1},{22,0},{22,1},{22,2},{22,6},{22,7},{22,8},{22,9},{22,100},
+      {20,21,22},{20,21,-1},{20,21,0},{20,21,1},{20,21,2},{20,21,6},{20,21,7},{20,21,8},{20,21,9},{20,21,100},
+      {20,22,0},{20,22,1},{20,22,2},
+      {20,0,2},{20,0,6},{20,0,7},{20,0,8},{20,0,9},{20,0,100},
+      {20,1,2},{20,1,6},{20,1,7},{20,1,8},{20,1,9},{20,1,100},
+      {20,2,6},{20,2,7},{20,2,8},{20,2,9},{20,2,100},
+      {20,6,100},{20,7,100},{20,8,100},{20,9,100},
+      {21,0,2},{21,0,6},{21,0,7},{21,0,8},{21,0,9},{21,0,100},
+      {21,1,2},{21,1,6},{21,1,7},{21,1,8},{21,1,9},{21,1,100},
+      {21,2,6},{21,2,7},{21,2,8},{21,2,9},{21,2,100},
+      {21,6,100},{21,7,100},{21,8,100},{21,9,100},
+      {22,0,2},{22,0,6},{22,0,7},{22,0,8},{22,0,9},{22,0,100},
+      {22,1,2},{22,1,6},{22,1,7},{22,1,8},{22,1,9},{22,1,100},
+      {22,2,6},{22,2,7},{22,2,8},{22,2,9},{22,2,100},
+      {22,6,100},{22,7,100},{22,8,100},{22,9,100},
+      {-1,0,1,2,6,20,21,22,20,21,22,100},{-1,0,1,2,7,20,21,22,20,21,22,100},{-1,0,1,2,8,20,21,22,20,21,22,100},{-1,0,1,2,9,20,21,22,20,21,22,100},
+      {-1,0,1,2,6,20,21,22,20,21,22,100,20,22,21},
+      {-1,0,1,2,7,20,21,22,20,21,22,100,20,22,21},{-1,0,1,2,8,20,21,22,20,21,22,100,20,22,21}
+    };
+    var RoSoI vl_badValues := {{1000},{1,19},{6,7},{6,8},{6,9},{1,6,7,100},{1,2,200}, {1,1},{1,1},{-1,0,1,2,6,7,100},
+      {-1,0,1,2,6,7,8,9,20,21,22,20,21,22,100,20,1,22,20},{1,2,200,1}};
+    f_checkSoITemplate(tl_i6s,vl_goodValues,vl_badValues);
+  }
+
+
+  //=== i7 =====
+  //subset (1,2,(6..9)) length (2)
+  
+  testcase tc_subset_soi7ss_eq_dyn() runs on A {
+    var template SoI tl_i7s := subset(all from t_SoI1) length (2);
+    f_checkSoITemplateEquivalence(tl_i7s,t_soi7s_eq);
+  }
+  
+  testcase tc_subset_soi7ss_eq_2dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_i7s := subset(all from tl_SoI1) length (2);
+    f_checkSoITemplateEquivalence(tl_i7s,t_soi7s_eq);
+  }
+  
+  //subset (1,2,(6..9)) length (2)
+  testcase tc_subset_soi7s_dyn() runs on A {
+    var template SoI tl_i7s := subset(all from t_SoI1) length (2);
+    var RoSoI vl_goodValues := {      
+      {1,2},{1,6},{1,7},{1,8},{1,9},
+      {2,6},{2,7},{2,8},{2,9}
+    };
+    var RoSoI vl_badValues := {
+      {},{1},{2},{6},{7},{8},{9},{1000},
+      {1,19},{6,7},{6,8},{6,9},{1,6,7,100},{1,2,200}, {1,1},{-1,0,1,2,6,7,100}};
+    f_checkSoITemplate(tl_i7s,vl_goodValues,vl_badValues);
+  }
+  
+  testcase tc_subset_soi7s_2dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_i7s := subset(all from tl_SoI1) length (2);
+    var RoSoI vl_goodValues := {      
+      {1,2},{1,6},{1,7},{1,8},{1,9},
+      {2,6},{2,7},{2,8},{2,9}
+    };
+    var RoSoI vl_badValues := {
+      {},{1},{2},{6},{7},{8},{9},{1000},
+      {1,19},{6,7},{6,8},{6,9},{1,6,7,100},{1,2,200}, {1,1},{-1,0,1,2,6,7,100}};
+    f_checkSoITemplate(tl_i7s,vl_goodValues,vl_badValues);
+  }
+  //=== i8 ===
+
+  testcase tc_subset_soi8ss_eq_dyn() runs on A {
+    var template SoI tl_i8s := subset(all from t_SoI1, complement(8,9)) length (2);
+    f_checkSoITemplateEquivalence(tl_i8s,t_soi8s_eq);
+  }
+  
+  testcase tc_subset_soi8ss_eq_2dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_i8s := subset(all from tl_SoI1, complement(8,9)) length (2);
+    f_checkSoITemplateEquivalence(tl_i8s,t_soi8s_eq);
+  }
+    
+  testcase tc_subset_soi8s_dyn() runs on A {
+    var template SoI tl_i8s := subset(all from t_SoI1, complement(8,9)) length (2);
+    var RoSoI vl_goodValues := {      
+      {1,1},{1,2},{1,6},{1,7},{1,8},{1,9},
+      {2,6},{2,7},{2,8},{2,9},
+      {1,-1},{1,0},{1,1},{1,3},{1,4},{1,5},{1,10},{1,11},{1,100},
+      {2,-2},{2,-1},{2,0},{2,1},{2,2},{2,3},{2,4},{2,5},{2,10},{6,7},{6,10},
+      {7,7},{7,10},{7,11},
+      {8,6},{8,7},{8,10},{8,11},
+      {9,6},{9,7},{9,11}
+    };
+    var RoSoI vl_badValues := {
+      {},{1},{2},{6},{7},{8},{9},{1000},
+      {1,6,7,100},{1,2,200},{-1,0,1,2,6,7,100}};
+    f_checkSoITemplate(tl_i8s,vl_goodValues,vl_badValues);
+  } 
+  
+  testcase tc_subset_soi8s_2dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_i8s := subset(all from tl_SoI1, complement(8,9)) length (2);
+    var RoSoI vl_goodValues := {      
+      {1,1},{1,2},{1,6},{1,7},{1,8},{1,9},
+      {2,6},{2,7},{2,8},{2,9},
+      {1,-1},{1,0},{1,1},{1,3},{1,4},{1,5},{1,10},{1,11},{1,100},
+      {2,-2},{2,-1},{2,0},{2,1},{2,2},{2,3},{2,4},{2,5},{2,10},{6,7},{6,10},
+      {7,7},{7,10},{7,11},
+      {8,6},{8,7},{8,10},{8,11},
+      {9,6},{9,7},{9,11}
+    };
+    var RoSoI vl_badValues := {
+      {},{1},{2},{6},{7},{8},{9},{1000},
+      {1,6,7,100},{1,2,200},{-1,0,1,2,6,7,100}};
+    f_checkSoITemplate(tl_i8s,vl_goodValues,vl_badValues);
+  }
+
+  //===i9===
+
+  testcase tc_subset_soi9ss_eq_dyn() runs on A {
+    var template SoI tl_i9s := subset(complement(all from t_SoI1)) ;
+    f_checkSoITemplateEquivalence(tl_i9s,t_soi9s_eq);
+  }
+  
+  testcase tc_subset_soi9ss_eq_2dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_i9s := subset(complement(all from tl_SoI1)) ;
+    f_checkSoITemplateEquivalence(tl_i9s,t_soi9s_eq);
+  }
+  
+
+  //subset(complement(1,2,(6..9)))  == (-1, 0,3,4,5,10,11 ) 
+  testcase tc_subset_soi9s_dyn() runs on A {
+    var template SoI tl_i9s := subset(complement(all from t_SoI1)) ; 
+    var RoSoI vl_goodValues := { {}, {-2},{-1},{0},{3},{4},{5},{10},{11},{1000}};
+    var RoSoI vl_badValues := {
+      {1,-3},{1,-2},{1,-1},{1,0},{1,1},{1,2},{1,3},{1,4},{1,5},{1,6},{1,7},{1,8},{1,9},{1,10},{1,11}, //...
+      {2,-3},{2,-2},{2,-1},{2,0},{2,1},{2,3},{2,4},{2,5},{2,6},{2,7},{2,8},{2,9},{2,10},{2,11}, //...
+      {1},{2},{6},{7},{8},{9},
+      {1,6,7,100},{1,2,200},{-1,0,1,2,6,7,100},
+      {1,6,7,8,9}, {1,2,6,7,8,9},{-1,-2},{-1,-2,0},{-1,0,3,4,5,10,11} 
+    };
+    f_checkSoITemplate(tl_i9s,vl_goodValues,vl_badValues);
+  }
+  
+  testcase tc_subset_soi9s_2dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_i9s := subset(complement(all from tl_SoI1)) ; 
+    var RoSoI vl_goodValues := { {}, {-2},{-1},{0},{3},{4},{5},{10},{11},{1000}};
+    var RoSoI vl_badValues := {
+      {1,-3},{1,-2},{1,-1},{1,0},{1,1},{1,2},{1,3},{1,4},{1,5},{1,6},{1,7},{1,8},{1,9},{1,10},{1,11}, //...
+      {2,-3},{2,-2},{2,-1},{2,0},{2,1},{2,3},{2,4},{2,5},{2,6},{2,7},{2,8},{2,9},{2,10},{2,11}, //...
+      {1},{2},{6},{7},{8},{9},
+      {1,6,7,100},{1,2,200},{-1,0,1,2,6,7,100},
+      {1,6,7,8,9}, {1,2,6,7,8,9},{-1,-2},{-1,-2,0},{-1,0,3,4,5,10,11} 
+    };
+    f_checkSoITemplate(tl_i9s,vl_goodValues,vl_badValues);
+  }
+
+  //===i10===
+
+  testcase tc_subset_soi10ss_eq_dyn() runs on A {
+    var template SoI tl_i10s := subset(all from t_SoI1, complement(all from t_SoI1)) length (2);
+    f_checkSoITemplateEquivalence(tl_i10s,t_soi10s_eq);
+  }
+  
+  testcase tc_subset_soi10ss_eq_2dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_i10s := subset(all from tl_SoI1, complement(all from tl_SoI1)) length (2);
+    f_checkSoITemplateEquivalence(tl_i10s,t_soi10s_eq);
+  }
+  
+  
+  //t_soi10s=subset(1, 2, (6..9),complement(1, 2, (6..9)))
+  testcase tc_subset_soi10s_dyn() runs on A {
+    var template SoI tl_i10s := subset(all from t_SoI1, complement(all from t_SoI1)) length (2);
+    var RoSoI vl_goodValues := {      
+      {1,-3},{1,-2},{1,-1},{1,0},{1,2},{1,3},{1,4},{1,5},{1,6},{1,7},{1,8},{1,9},{1,10},{1,11}, //...
+      {2,-3},{2,-2},{2,-1},{2,0},{2,1},{2,3},{2,4},{2,5},{2,6},{2,7},{2,8},{2,9},{2,10},{2,11}, //...
+      {6,-3},{6,-2},{6,-1},{6,0},{6,3},{6,4}
+    };
+    var RoSoI vl_badValues := {
+      {},{1},{2},{3},{4},{6},{7},{8},{9},{1000},{1,1},{2,2},{6,6},{6,9},{9,6},
+      {1,6,7,100},{1,2,200},{-1,0,1,2,6,7,100}};
+    f_checkSoITemplate(t_soi10s,vl_goodValues,vl_badValues);
+  }
+  
+  testcase tc_subset_soi10s_2dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_i10s := subset(all from tl_SoI1, complement(all from tl_SoI1)) length (2);
+    var RoSoI vl_goodValues := {      
+      {1,-3},{1,-2},{1,-1},{1,0},{1,2},{1,3},{1,4},{1,5},{1,6},{1,7},{1,8},{1,9},{1,10},{1,11}, //...
+      {2,-3},{2,-2},{2,-1},{2,0},{2,1},{2,3},{2,4},{2,5},{2,6},{2,7},{2,8},{2,9},{2,10},{2,11}, //...
+      {6,-3},{6,-2},{6,-1},{6,0},{6,3},{6,4}
+    };
+    var RoSoI vl_badValues := {
+      {},{1},{2},{3},{4},{6},{7},{8},{9},{1000},{1,1},{2,2},{6,6},{6,9},{9,6},
+      {1,6,7,100},{1,2,200},{-1,0,1,2,6,7,100}};
+    f_checkSoITemplate(t_soi10s,vl_goodValues,vl_badValues);
+  } 
+  //===i11===
+  testcase tc_subset_soi11ss_eq_dyn() runs on A {
+    template SoI tl_i11s    := subset(all from t_SoI1, complement(all from t_SoI5)) length (2);
+    f_checkSoITemplateEquivalence(tl_i11s,t_soi11s_eq);
+  }
+  
+  testcase tc_subset_soi11ss_eq_2dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_SoI5 := {1,2};
+    template SoI tl_i11s    := subset(all from tl_SoI1, complement(all from tl_SoI5)) length (2);
+    f_checkSoITemplateEquivalence(tl_i11s,t_soi11s_eq);
+  }
+  
+  //t_soi11s=subset( 1,2,(6..9),complement(1,2))
+  testcase tc_subset_soi11s_dyn() runs on A {
+    template SoI tl_i11s    := subset(all from t_SoI1, complement(all from t_SoI5)) length (2);
+    var RoSoI vl_goodValues := {      
+      {1,2},{1,6},{1,7},{1,8},{1,9},
+      {2,6},{2,7},{2,8},{2,9},
+      {1,-1},{1,0},{1,3},{1,4},{1,5},{1,10},{1,11},{1,100},
+      {2,-2},{2,-1},{2,0},{2,1},{2,3},{2,4},{2,5},{2,10},{6,7},{6,10},
+      {7,7},{7,10},{7,11},
+      {8,6},{8,7},{8,10},{8,11},{6,6},
+      {9,6},{9,7},{9,11}
+    };
+    var RoSoI vl_badValues := {
+      {},{1},{2},{6},{7},{8},{9},{1000},{1,1},{2,2},{6,6,7},
+      {1,6,7,100},{1,2,200},{-1,0,1,2,6,7,100}};
+    f_checkSoITemplate(t_soi11s,vl_goodValues,vl_badValues);
+  } 
+  
+  testcase tc_subset_soi11s_2dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_SoI5 := {1,2};
+    template SoI tl_i11s    := subset(all from tl_SoI1, complement(all from tl_SoI5)) length (2);
+    var RoSoI vl_goodValues := {      
+      {1,2},{1,6},{1,7},{1,8},{1,9},
+      {2,6},{2,7},{2,8},{2,9},
+      {1,-1},{1,0},{1,3},{1,4},{1,5},{1,10},{1,11},{1,100},
+      {2,-2},{2,-1},{2,0},{2,1},{2,3},{2,4},{2,5},{2,10},{6,7},{6,10},
+      {7,7},{7,10},{7,11},
+      {8,6},{8,7},{8,10},{8,11},{6,6},
+      {9,6},{9,7},{9,11}
+    };
+    var RoSoI vl_badValues := {
+      {},{1},{2},{6},{7},{8},{9},{1000},{1,1},{2,2},{6,6,7},
+      {1,6,7,100},{1,2,200},{-1,0,1,2,6,7,100}};
+    f_checkSoITemplate(t_soi11s,vl_goodValues,vl_badValues);
+  } 
+
+    //=== i12 ===
+  //subset(1, 2, ?);
+  testcase tc_subset_soi12ss_eq_dyn() runs on A {
+    var template SoI tl_i12s    := subset(all from t_SoI4);
+    f_checkSoITemplateEquivalence(tl_i12s,t_soi12s_eq);
+  }
+  
+  testcase tc_subset_soi12ss_eq_2dyn() runs on A {
+    var template SoI tl_SoI4 := {1,2,?};
+    var template SoI tl_i12s    := subset(all from tl_SoI4);
+    f_checkSoITemplateEquivalence(tl_i12s,t_soi12s_eq);
+  }
+  
+  testcase tc_subset_soi12s_dyn() runs on A {
+    var template SoI tl_i12s    := subset(all from t_SoI4);
+    var RoSoI vl_goodValues := { 
+      {},{1},{2},{3},{4},{5},{6},
+      {1,1},{1,2},{1,3},{1,4},{1,6},
+      {2,3},{2,4},{2,5},{2,6},{2,7},
+      {1,2,3},{1,2,4},{1,2,5},{3,2,1},{3,1,2}
+    }
+    var RoSoI vl_badValues := {
+      {1,1,1}, {1,3,4},{1,3,5},{1,3,6},{1,2,3,4}
+    };
+    f_checkSoITemplate(tl_i12s,vl_goodValues,vl_badValues);
+  }    
+  
+  testcase tc_subset_soi12s_2dyn() runs on A {
+    var template SoI tl_SoI4 := {1,2,?};
+    var template SoI tl_i12s    := subset(all from tl_SoI4);
+    var RoSoI vl_goodValues := { 
+      {},{1},{2},{3},{4},{5},{6},
+      {1,1},{1,2},{1,3},{1,4},{1,6},
+      {2,3},{2,4},{2,5},{2,6},{2,7},
+      {1,2,3},{1,2,4},{1,2,5},{3,2,1},{3,1,2}
+    }
+    var RoSoI vl_badValues := {
+      {1,1,1}, {1,3,4},{1,3,5},{1,3,6},{1,2,3,4}
+    };
+    f_checkSoITemplate(t_soi12s,vl_goodValues,vl_badValues);
+  }    
+}//Attila_group
+
+control{
+  execute(tc_subset());
+execute(tc_subset_soi0_eq());
+execute(tc_subset_importing_i0_eq());
+execute(tc_subset_i0());
+execute(tc_subset_importing_i0());
+execute(tc_subset_soi0_1_eq());
+execute(tc_subset_importing_i0_1_eq());
+execute(tc_subset_soi0_1());
+execute(tc_subset_soi1_eq());
+execute(tc_subset_importing_i1_eq());
+execute(tc_subset_i1());
+execute(tc_subset_importing_i1());
+execute(tc_subset_soi2_eq());
+execute(tc_subset_importing_i2_eq());
+execute(tc_subset_i2());
+execute(tc_subset_soi3_eq());
+execute(tc_subset_i3());
+execute(tc_subset_soi4_eq());
+execute(tc_subset_i4());
+execute(tc_subset_soi5_eq());
+execute(tc_subset_i5());
+execute(tc_subset_soi6_eq());
+execute(tc_subset_i6());
+execute(tc_subset_soi7_eq());
+execute(tc_subset_i7());
+execute(tc_subset_soi8_eq());
+execute(tc_subset_i8());
+execute(tc_subset_soi9_eq());
+execute(tc_subset_i9());
+execute(tc_subset_soi10_eq());
+execute(tc_subset_i10());
+execute(tc_subset_soi11_eq());
+execute(tc_subset_i11());
+execute(tc_subset_soi12_eq());
+execute(tc_subset_i12());
+execute(tc_subset_soi13roi_eq());
+execute(tc_subset_soi13roi());
+execute(tc_subset_soi13roi_c_eq());
+execute(tc_subset_soi13roi_c());
+execute(tc_subset_soi0_eq_dyn());
+execute(tc_subset_soi0_eq_2dyn());
+execute(tc_subset_soi0_dyn());
+execute(tc_subset_soi0_2dyn());
+execute(tc_subset_soi1_eq_dyn());
+execute(tc_subset_soi1_eq_2dyn());
+execute(tc_subset_soi1_dyn());
+execute(tc_subset_soi1_2dyn());
+execute(tc_subset_soi2_eq_dyn());
+execute(tc_subset_soi2_eq_2dyn());
+execute(tc_subset_soi2_dyn());
+execute(tc_subset_soi2_2dyn());
+execute(tc_subset_soi3_eq_dyn());
+execute(tc_subset_soi3_eq_2dyn());
+execute(tc_subset_soi3_dyn());
+execute(tc_subset_soi3_2dyn());
+execute(tc_subset_soi4_eq_dyn());
+execute(tc_subset_soi4_eq_2dyn());
+execute(tc_subset_soi4_dyn());
+execute(tc_subset_soi4_2dyn());
+execute(tc_subset_soi5_eq_dyn());
+execute(tc_subset_soi5_eq_2dyn());
+execute(tc_subset_soi5_dyn());
+execute(tc_subset_soi5_2dyn());
+execute(tc_subset_soi6_eq_dyn());
+execute(tc_subset_soi6_eq_2dyn());
+execute(tc_subset_soi6_dyn());
+execute(tc_subset_soi7_eq_dyn());
+execute(tc_subset_soi7_eq_2dyn());
+execute(tc_subset_soi7_dyn());
+execute(tc_subset_soi7_2dyn());
+execute(tc_subset_soi8_eq_dyn());
+execute(tc_subset_soi8_eq_2dyn());
+execute(tc_subset_soi8_dyn());
+execute(tc_subset_soi8_2dyn());
+execute(tc_subset_soi9_eq_dyn());
+execute(tc_subset_soi9_eq_2dyn());
+execute(tc_subset_soi9_dyn());
+execute(tc_subset_soi9_2dyn());
+execute(tc_subset_soi10_eq_dyn());
+execute(tc_subset_soi10_eq_2dyn());
+execute(tc_subset_soi10_dyn());
+execute(tc_subset_soi10_2dyn());
+execute(tc_subset_soi11_eq_dyn());
+execute(tc_subset_soi11_eq_2dyn());
+execute(tc_subset_soi11_dyn());
+execute(tc_subset_soi11_2dyn());
+execute(tc_subset_soi12_eq_dyn());
+execute(tc_subset_soi12_eq_2dyn());
+execute(tc_subset_soi12_dyn());
+execute(tc_subset_soi12_2dyn());
+execute(tc_subset_soi0s_eq());
+execute(tc_subset_soi0s());
+execute(tc_subset_soi0s_1_eq());
+execute(tc_subset_soi0s_1());
+execute(tc_subset_soi1ss_eq());
+execute(tc_subset_soi1s());
+execute(tc_subset_soi2s_eq());
+execute(tc_subset_soi2s());
+execute(tc_subset_soi3s_eq());
+execute(tc_subset_soi3s());
+execute(tc_subset_soi4ss_eq());
+execute(tc_subset_soi4s());
+execute(tc_subset_soi5ss_eq());
+execute(tc_subset_soi5s());
+execute(tc_subset_soi6ss_eq());
+execute(tc_subset_soi6s());
+execute(tc_subset_soi7ss_eq());
+execute(tc_subset_soi7s());
+execute(tc_subset_soi8ss_eq());
+execute(tc_subset_soi8s());
+execute(tc_subset_soi9ss_eq());
+execute(tc_subset_soi9s());
+execute(tc_subset_soi10ss_eq());
+execute(tc_subset_soi10s());
+execute(tc_subset_soi11s_eq());
+execute(tc_subset_soi11s());
+execute(tc_subset_soi12s_eq());
+execute(tc_subset_soi12s());
+execute(tc_subset_soi0s_eq_dyn());
+execute(tc_subset_soi0s_eq_2dyn());
+execute(tc_subset_soi0s_dyn());
+execute(tc_subset_soi0s_2dyn());
+execute(tc_subset_soi1s_eq_dyn());
+execute(tc_subset_soi1s_eq_2dyn());
+execute(tc_subset_soi1s_dyn());
+execute(tc_subset_soi1s_2dyn());
+execute(tc_subset_soi2s_eq_dyn());
+execute(tc_subset_soi2s_eq_2dyn());
+execute(tc_subset_soi2s_dyn());
+execute(tc_subset_soi2s_2dyn());
+execute(tc_subset_soi3ss_eq_dyn());
+execute(tc_subset_soi3ss_eq_2dyn());
+execute(tc_subset_soi3s_dyn());
+execute(tc_subset_soi3s_2dyn());
+execute(tc_subset_soi4ss_eq_dyn());
+execute(tc_subset_soi4ss_eq_2dyn());
+execute(tc_subset_soi4s_dyn());
+execute(tc_subset_soi4s_2dyn());
+execute(tc_subset_soi5ss_eq_dyn());
+execute(tc_subset_soi5ss_eq_2dyn());
+execute(tc_subset_soi5s_dyn());
+execute(tc_subset_soi5s_2dyn());
+execute(tc_subset_soi6ss_eq_dyn());
+execute(tc_subset_soi6ss_eq_2dyn());
+execute(tc_subset_soi6s_dyn());
+execute(tc_subset_soi7ss_eq_dyn());
+execute(tc_subset_soi7ss_eq_2dyn());
+execute(tc_subset_soi7s_dyn());
+execute(tc_subset_soi7s_2dyn());
+execute(tc_subset_soi8ss_eq_dyn());
+execute(tc_subset_soi8ss_eq_2dyn());
+execute(tc_subset_soi8s_dyn());
+execute(tc_subset_soi8s_2dyn());
+execute(tc_subset_soi9ss_eq_dyn());
+execute(tc_subset_soi9ss_eq_2dyn());
+execute(tc_subset_soi9s_dyn());
+execute(tc_subset_soi9s_2dyn());
+execute(tc_subset_soi10ss_eq_dyn());
+execute(tc_subset_soi10ss_eq_2dyn());
+execute(tc_subset_soi10s_dyn());
+execute(tc_subset_soi10s_2dyn());
+execute(tc_subset_soi11ss_eq_dyn());
+execute(tc_subset_soi11ss_eq_2dyn());
+execute(tc_subset_soi11s_dyn());
+execute(tc_subset_soi11s_2dyn());
+execute(tc_subset_soi12ss_eq_dyn());
+execute(tc_subset_soi12ss_eq_2dyn());
+execute(tc_subset_soi12s_dyn());
+execute(tc_subset_soi12s_2dyn());
+  
+}
+} with {extension "version R1A01";} // end of module
diff --git a/Regression_Test_java/src/all_from/all_from_subtype.ttcn b/Regression_Test_java/src/all_from/all_from_subtype.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..f1c2ffb69418b1f4ae77add14a1131f680e83906
--- /dev/null
+++ b/Regression_Test_java/src/all_from/all_from_subtype.ttcn
@@ -0,0 +1,196 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Baranyi, Botond
+ *
+ ******************************************************************************/
+
+// subtyping and the 'all from' clause
+module all_from_subtype {
+
+import from types all;
+
+
+/* * * * integer * * * */
+template RoI t_RoI1 := { 1, 2, (6..9) };
+template RoI t_RoI2 := { 1, ?, 3 };
+const RoI c_RoI := { 20, 21, 22 };
+
+template PosInt t_posint1 := (0, all from t_RoI1);
+template PosInt t_posint1_exp := (0, 1, 2, (6..9));
+
+template PosInt t_posint2 := (all from c_RoI, 50, 100);
+template PosInt t_posint2_exp := (20, 21, 22, 50, 100);
+
+template PosInt t_posint3 := (10, all from c_RoI, 30, all from t_RoI1);
+template PosInt t_posint3_exp := (10, 20, 21, 22, 30, 1, 2, (6..9));
+
+template ShortRoI t_sroi1 := { 0, (all from t_RoI1, 10), 20 };
+template ShortRoI t_sroi1_exp := { 0, (1, 2, (6..9), 10), 20 };
+
+template ShortRoI t_sroi2 := ( { 1, 2, 3 }, { permutation (all from t_RoI2) } );
+template ShortRoI t_sroi2_exp := ( { 1, 2, 3 }, { permutation (1, ?, 3) } );
+
+testcase tc_all_from_subtype_integer() runs on A
+{
+  if (log2str(t_posint1) != log2str(t_posint1_exp)) {
+    setverdict(fail, "Expected: ", t_posint1_exp, ", got: ", t_posint1);
+  }
+  if (log2str(t_posint2) != log2str(t_posint2_exp)) {
+    setverdict(fail, "Expected: ", t_posint2_exp, ", got: ", t_posint2);
+  }
+  if (log2str(t_posint3) != log2str(t_posint3_exp)) {
+    setverdict(fail, "Expected: ", t_posint3_exp, ", got: ", t_posint3);
+  }
+  if (log2str(t_sroi1) != log2str(t_sroi1_exp)) {
+    setverdict(fail, "Expected: ", t_sroi1_exp, ", got: ", t_sroi1);
+  }
+  if (log2str(t_sroi2) != log2str(t_sroi2_exp)) {
+    setverdict(fail, "Expected: ", t_sroi2_exp, ", got: ", t_sroi2);
+  }
+  setverdict(pass);
+}
+
+/* * * * float * * * */
+template RoF t_RoF := { (-10.0..-2.5), -1.0, 0.0 };
+const RoF c_RoF := { -0.3, -0.2, -0.1 };
+
+template NegFloat t_negfloat := (all from t_RoF, -2.0, all from c_RoF, -100.0);
+template NegFloat t_negfloat_exp := ((-10.0..-2.5), -1.0, 0.0, -2.0, -0.3, -0.2, -0.1, -100.0);
+
+template ShortRoF t_srof := { permutation (all from c_RoF) };
+template ShortRoF t_srof_exp := { permutation (-0.3, -0.2, -0.1) };
+
+testcase tc_all_from_subtype_float() runs on A
+{
+  if (log2str(t_negfloat) != log2str(t_negfloat_exp)) {
+    setverdict(fail, "Expected: ", t_negfloat_exp, ", got: ", t_negfloat);
+  }
+  if (log2str(t_srof) != log2str(t_srof_exp)) {
+    setverdict(fail, "Expected: ", t_srof_exp, ", got: ", t_srof);
+  }
+  setverdict(pass);
+}
+
+/* * * * bitstring * * * */
+template RoBS t_RoBS := { '1010'B, ? };
+const RoBS c_RoBS := { '11011000'B, '00110011'B, '10101010'B };
+
+template ByteString t_bytestr := ('00000000'B, all from c_RoBS, '11111111'B);
+template ByteString t_bytestr_exp := ('00000000'B, '11011000'B, '00110011'B, '10101010'B, '11111111'B);
+
+template ShortRoBS t_srobs := { '1'B, permutation (all from t_RoBS) };
+template ShortRoBS t_srobs_exp := { '1'B, permutation ('1010'B, ?) };
+
+testcase tc_all_from_subtype_bitstring() runs on A
+{
+  if (log2str(t_bytestr) != log2str(t_bytestr_exp)) {
+    setverdict(fail, "Expected: ", t_bytestr_exp, ", got: ", t_bytestr);
+  }
+  if (log2str(t_srobs) != log2str(t_srobs_exp)) {
+    setverdict(fail, "Expected: ", t_srobs_exp, ", got: ", t_srobs);
+  }
+  setverdict(pass);
+}
+
+/* * * * hexstring * * * */
+template RoHS t_RoHS := { '100'H, 'ABC'H };
+const RoHS c_RoHS := { '19A6'H, '999D'H, '1337'H };
+
+template WordString t_wordstr := ('A000'H, 'FFFF'H, all from c_RoHS, '0000'H);
+template WordString t_wordstr_exp := ('A000'H, 'FFFF'H, '19A6'H, '999D'H, '1337'H, '0000'H);
+
+template ShortRoHS t_srohs := { permutation (all from t_RoHS, '180DD'H) };
+template ShortRoHS t_srohs_exp := { permutation ('100'H, 'ABC'H, '180DD'H) };
+
+testcase tc_all_from_subtype_hexstring() runs on A
+{
+  if (log2str(t_wordstr) != log2str(t_wordstr_exp)) {
+    setverdict(fail, "Expected: ", t_wordstr_exp, ", got: ", t_wordstr);
+  }
+  if (log2str(t_srohs) != log2str(t_srohs_exp)) {
+    setverdict(fail, "Expected: ", t_srohs_exp, ", got: ", t_srohs);
+  }
+  setverdict(pass);
+}
+
+/* * * * octetstring * * * */
+template RoOS t_RoOS := { '00'O, 'FF'O };
+const RoOS c_RoOS := { 'E77FB41C'O, 'DEADBEEF'O, 'CDCDCDCD'O };
+
+template DWordString t_dwordstr := (all from c_RoOS, '0FFFFFFF'O);
+template DWordString t_dwordstr_exp := ('E77FB41C'O, 'DEADBEEF'O, 'CDCDCDCD'O, '0FFFFFFF'O);
+
+template ShortRoOS t_sroos := { permutation (?, all from t_RoOS) };
+template ShortRoOS t_sroos_exp := { permutation (?, '00'O, 'FF'O) };
+
+testcase tc_all_from_subtype_octetstring() runs on A
+{
+  if (log2str(t_dwordstr) != log2str(t_dwordstr_exp)) {
+    setverdict(fail, "Expected: ", t_dwordstr_exp, ", got: ", t_dwordstr);
+  }
+  if (log2str(t_sroos) != log2str(t_sroos_exp)) {
+    setverdict(fail, "Expected: ", t_sroos_exp, ", got: ", t_sroos);
+  }
+  setverdict(pass);
+}
+
+/* * * * charstring * * * */
+template RoCS t_RoCS := { ("a".."z"), ("0".."9"), ("A".."Z") };
+const RoCS c_RoCS := { "all_from.ttcn", "types.ttcn", "functions.ttcn", "sapc.ttcn" };
+
+template TtcnFileName t_ttcnfiles := (all from c_RoCS);
+template TtcnFileName t_ttcnfiles_exp := ("all_from.ttcn", "types.ttcn", "functions.ttcn", "sapc.ttcn");
+
+template ShortRoCS t_srocs := { permutation (all from t_RoCS) };
+template ShortRoCS t_srocs_exp := { permutation (("a".."z"), ("0".."9"), ("A".."Z")) };
+
+testcase tc_all_from_subtype_charstring() runs on A
+{
+  if (log2str(t_ttcnfiles) != log2str(t_ttcnfiles_exp)) {
+    setverdict(fail, "Expected: ", t_ttcnfiles_exp, ", got: ", t_ttcnfiles);
+  }
+  if (log2str(t_srocs) != log2str(t_srocs_exp)) {
+    setverdict(fail, "Expected: ", t_srocs_exp, ", got: ", t_srocs);
+  }
+  setverdict(pass);
+}
+
+/* * * * universal charstring * * * */
+template RoUCS t_RoUCS := { "abc", ?, "cba" };
+const RoUCS c_RoUCS := { "nothing", "special", "here" };
+
+template XsdString t_xsdstr := (pattern "<*>", all from c_RoUCS);
+template XsdString t_xsdstr_exp := (pattern "<*>", "nothing", "special", "here");
+
+template ShortRoUCS t_sroucs := { all from t_RoUCS };
+template ShortRoUCS t_sroucs_exp := { "abc", ?, "cba" };
+
+testcase tc_all_from_subtype_universal_charstring() runs on A
+{
+  if (log2str(t_xsdstr) != log2str(t_xsdstr_exp)) {
+    setverdict(fail, "Expected: ", t_xsdstr_exp, ", got: ", t_xsdstr);
+  }
+  if (log2str(t_sroucs) != log2str(t_sroucs_exp)) {
+    setverdict(fail, "Expected: ", t_sroucs_exp, ", got: ", t_sroucs);
+  }
+  setverdict(pass);
+}
+
+control {
+  execute(tc_all_from_subtype_integer());
+  execute(tc_all_from_subtype_float());
+  execute(tc_all_from_subtype_bitstring());
+  execute(tc_all_from_subtype_hexstring());
+  execute(tc_all_from_subtype_octetstring());
+  execute(tc_all_from_subtype_charstring());
+  execute(tc_all_from_subtype_universal_charstring());
+}
+
+}
diff --git a/Regression_Test_java/src/all_from/all_from_superset.ttcn b/Regression_Test_java/src/all_from/all_from_superset.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..069918aebb9ad870338eba3f664feeccd1fa6506
--- /dev/null
+++ b/Regression_Test_java/src/all_from/all_from_superset.ttcn
@@ -0,0 +1,1104 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Raduly, Csaba
+ *
+ ******************************************************************************/
+module all_from_superset
+{
+import from types all;
+import from functions all;
+
+template RoI t_imported_RoI1 := {1, 2, (6..9)};
+template RoI t_imported_RoI2 := {1, *, 3};
+template RoI t_imported_RoI3 := {20,21,22};
+template RoI t_imported_RoI4 := {1, ?, 3};
+//for permutation:
+template RoI t_imported_RoI1_P := {1, 2, *};
+template RoI t_imported_RoI3_P := {1, 2, 3};
+template RoI t_imported_RoI7_P := {1, 2, ?};
+
+//===========Set of Integer================================
+template SoI t_imported_SoI1 := {1,2,(6..9)};
+template SoI t_imported_SoI2 := {1, *, 3};
+template SoI t_imported_SoI3 := {20,21,22};
+
+template RoI t_RoI1 := {1, 2, (6..9)};
+template RoI t_RoI2 := {1, *, 3};
+
+group Csaba_group {
+  // B 1.2.6 Superset
+
+  //EXAMPLE 1:
+
+  template MySetOfType MyTemplate1 := superset (1, 2, 3);
+  // matches any sequence of integers which contains at least one occurrences of the numbers
+  // 1, 2 and 3 in any order and position
+
+  template MySetOfType MyTemplate2_AnyValue := superset (1, 2, ?);
+  // matches any sequence of integers which contains at least one occurrences of the numbers
+  // 1, 2 and at least one more valid integer value (i.e. between 0 and 10, inclusively), in any
+  // order and position
+
+  template MySetOfType MyTemplate3 := superset (1, 2, (3, 4));
+  // matches any sequence of integers which contains at least one occurrences of the numbers
+  // 1, 2 and a number with the value 3 or 4, in any order and position
+
+  template MySetOfType MyTemplate4 := superset (1, 2, complement(3, 4));
+  // any sequence of integers matches which contains at least one occurrences of the numbers
+  // 1, 2 and a valid integer value which is not 3 or 4, in any order and position
+
+  template MySetOfType MyTemplate6 := superset (1, 2, 3) length (7);
+  // matches any sequence of 7 integers which contains at least one occurrences of the numbers
+  // 1, 2 and 3 in any order and position
+
+  template MySetOfType MyTemplate7 := superset (1, 2, ?) length (7 .. infinity);
+  // matches any sequence of at least 7 integers which contains at least one occurrences of the
+  // numbers 1, 2 and 3 in any order and position
+
+  template MySetOfType MyTemplate8 := superset (1, 2, 3) length (2 .. 7);
+  // causes an error, the lower bound of the length attribute contradicts to the minimum number
+  // of elements imposed by the superset argument
+
+  //EXAMPLE 2:
+  template RoI t_RoI1s := {1, 2, ?};
+  template SoI t_SoI1s := superset(all from t_RoI1s); 
+  // results in superset(1, 2, ?)
+
+  testcase tc_superset() runs on A
+  {
+    action("superset: ", t_SoI1s);
+    var SoI v;
+
+    v := {};
+    if (not match(v, t_SoI1s)) { setverdict(pass); }
+    else { setverdict(fail, v, " should NOT match ", t_SoI1s); }
+
+    v := { 1 };
+    if (not match(v, t_SoI1s)) { setverdict(pass); }
+    else { setverdict(fail, v, " should NOT match ", t_SoI1s); }
+
+    v := { 1, 2 };
+    if (not match(v, t_SoI1s)) { setverdict(pass); }
+    else { setverdict(fail, v, " should NOT match ", t_SoI1s); }
+
+    v := { 1, 2, 3 };
+    if (match(v, t_SoI1s)) { setverdict(pass); }
+    else { setverdict(fail, v, " should match ", t_SoI1s); }
+
+    v := { 1, 2, 4, 8, 16, 32 };
+    if (match(v, t_SoI1s)) { setverdict(pass); }
+    else { setverdict(fail, v, " should match ", t_SoI1s); }
+
+    v := { 16, 8, 4, 2, 1 };
+    if (match(v, t_SoI1s)) { setverdict(pass); }
+    else { setverdict(fail, v, " should match ", t_SoI1s); }
+
+    v := { 1, 2, 1 };
+    if (match(v, t_SoI1s)) { setverdict(pass); }
+    else { setverdict(fail, v, " should match ", t_SoI1s); }
+
+    v := { 10, 2, 3 };
+    if (not match(v, t_SoI1s)) { setverdict(pass); }
+    else { setverdict(fail, v, " should NOT match ", t_SoI1s); }
+  }
+
+}//Csaba_group
+
+group Attila_group {
+
+  //=============== Templates ==========================
+  //set of integers
+  template SoI t_SoI1 := {1, 2, (6..9)};
+  template SoI t_SoI2 := {1, *, 3};
+  template SoI t_SoI3 := {20,21,22};
+  template SoI t_SoI4 := {1,2,?};
+  template SoI t_SoI5 := {1,2}; 
+
+  //Superset of Integers
+  template SoI t_i0sup      := superset (all from t_SoI3 );
+  template SoI t_i0sup_eq   := superset (20,21,22);
+  template SoI t_i0sup_1    := superset ((all from t_SoI3 ));//i.e.: superset((20,21,22)); -it worked!
+  template SoI t_i0sup_1_eq := superset ((20,21,22));
+  template SoI t_i1sup      := superset (all from t_SoI1, 100);
+  template SoI t_i1sup_eq   := superset (1, 2, (6..9), 100);
+  template SoI t_i2sup      := superset (-1,0,all from t_SoI1, 100);
+  template SoI t_i2sup_eq   := superset (-1,0,1,2,(6..9),100);
+  template SoI t_i3sup      := superset(-1,0,all from t_SoI1, all from t_SoI3, 100);
+  template SoI t_i3sup_eq   := superset (-1,0,1,2,(6..9),20,21,22, 100);
+  
+  template SoI t_i4sup      := superset(-1,0,all from t_SoI1, 100, all from t_SoI3);
+  template SoI t_i4sup_eq   := superset (-1,0,1,2,(6..9),100,20,21,22);
+  
+  template SoI t_i5sup      := superset(-1,0,all from t_SoI1, 100, all from t_SoI3,all from t_SoI3 ); //repetition
+  template SoI t_i5sup_eq   := superset (-1,0,1,2,(6..9),100,20,21,22,20,21,22);
+  
+  template SoI t_i6sup      := superset(-1,0,all from t_SoI1, 100, all from t_SoI3,all from t_SoI3,all from t_SoI3); //repetition
+  template SoI t_i6sup_eq   := superset (-1,0,1,2,(6..9),100,20,21,22,20,21,22,20,21,22);
+  
+  template SoI t_i7sup      := superset(all from t_SoI1) length (7);
+  template SoI t_i7sup_eq   := superset(1,2,(6..9)) length (7);
+  
+  template SoI t_i7sup_1    := superset(all from t_SoI1) length (6);
+  template SoI t_i7sup_1_eq := superset(1,2,(6..9)) length (6);
+  
+  template SoI t_i8sup      := superset(all from t_SoI1, complement(8,9)) length (4);
+  template SoI t_i8sup_eq   := superset(1,2,(6..9),complement(8,9)) length (4);
+  
+  template SoI t_i9sup      := superset(complement(all from t_SoI1)) //length (4);
+  template SoI t_i9sup_eq   := superset(complement(1,2,(6..9))) //length (4);
+    
+  template SoI t_i9sup_1      := superset(complement(all from t_SoI1)) length (4);
+  template SoI t_i9sup_1_eq   := superset(complement(1,2,(6..9))) length (4);
+  
+  template SoI t_i10sup     := superset(all from t_SoI1, complement(all from t_SoI1)) length (4);
+  template SoI t_i10sup_eq  := superset(1,2,(6..9),complement(1,2,(6..9) )) length (4);
+  
+  template SoI t_i11sup     := superset(all from t_SoI1, complement(all from t_SoI5)) length (4);
+  template SoI t_i11sup_eq  := superset(1,2,(6..9), complement(1,2)) length (4);
+
+  // compile error (correct behaviour):
+  // template SoI t_i7sup_err := superset(all from t_SoI1) length (2); 
+  // There are more (at least 3) elements in the template than it is allowed by the length restriction (2)
+  //template SoI t_i9sup_err := superset(complement(all from t_SoI1)) length (2);
+  //There are more (at least 4) elements in the template than it is allowed by the length restriction (2) <== correct 4 for 7
+  // It is ready, see tc_superset_i7
+
+  template SoI t_importing_i0sup   := superset (all from t_imported_RoI3 );
+  template SoI t_importing_i0sup_1 := superset ((all from t_imported_RoI3 ));
+  template SoI t_importing_i1sup   := superset (all from t_imported_RoI1, 100);
+  template SoI t_importing_i2sup   := superset (-1,0,all from t_imported_RoI1,100);
+  
+  //================= Testcases for Static Templates ========================
+  
+  //=== i0 ===
+  //t_i0s:=superset (20,21,22)
+  testcase tc_superset_i0_eq() runs on A {
+    f_checkSoITemplateEquivalence(t_i0sup,t_i0sup_eq);
+  }
+  
+  testcase tc_superset_importing_i0_eq() runs on A {
+    f_checkSoITemplateEquivalence(t_importing_i0sup,t_i0sup_eq);
+  }
+  //local template
+  testcase tc_superset_i0_eq_local() runs on A {
+    template SoI tl_i0sup := superset (all from t_SoI3 );
+    f_checkSoITemplateEquivalence(tl_i0sup,t_i0sup_eq);
+  }
+  testcase tc_superset_importing_i0_eq_local() runs on A {
+    template SoI tl_importing_i0sup := superset (all from t_imported_RoI3 );
+    f_checkSoITemplateEquivalence(tl_importing_i0sup,t_i0sup_eq);
+  }
+  testcase tc_superset_i0_eq_2local() runs on A {
+    template SoI tl_SoI3 := {20,21,22};
+    template SoI tl_i0sup := superset (all from tl_SoI3 );
+    f_checkSoITemplateEquivalence(tl_i0sup,t_i0sup_eq);
+  }
+  
+  testcase tc_superset_i0() runs on A {
+    var RoSoI vl_goodValues := {{20,21,22},{20,21,22,23}, {24,23,22,21,20,19}};
+    var RoSoI vl_badValues := {{0},{1},{-1},{1000},{1,19},{},{20},{21},{22},{20,21},{22,20},{22,21}};
+    f_checkSoITemplate(t_i0sup,vl_goodValues,vl_badValues);
+  }
+  
+  testcase tc_superset_importing_i0() runs on A {
+    var RoSoI vl_goodValues := {{20,21,22},{20,21,22,23}, {24,23,22,21,20,19}};
+    var RoSoI vl_badValues := {{0},{1},{-1},{1000},{1,19},{},{20},{21},{22},{20,21},{22,20},{22,21}};
+    f_checkSoITemplate(t_importing_i0sup,vl_goodValues,vl_badValues);
+  }
+  
+  //=== i0sup_1===
+  //superset ((20,21,22))
+  testcase tc_superset_i0_1_eq() runs on A {
+    f_checkSoITemplateEquivalence(t_i0sup_1,t_i0sup_1_eq);
+  }
+  
+  testcase tc_superset_i0_1_eq_local() runs on A {
+    template SoI tl_i0sup_1    := superset ((all from t_SoI3 ))
+    f_checkSoITemplateEquivalence(tl_i0sup_1,t_i0sup_1_eq);
+  }
+  
+  testcase tc_superset_i0_1_eq_2local() runs on A {
+    template SoI tl_SoI3 := {20,21,22};
+    template SoI tl_i0sup_1    := superset ((all from tl_SoI3 ))
+    f_checkSoITemplateEquivalence(tl_i0sup_1,t_i0sup_1_eq);
+  }
+  
+  //superset ((20,21,22));
+  testcase tc_superset_i0_1() runs on A {
+    var RoSoI vl_goodValues := {{20},{21},{22},{20,21},{22,20},{22,21},{20,21,22},{20,21,22,23},{24,23,22,21,20,19}};
+    var RoSoI vl_badValues := {{0},{1},{-1},{1000},{1,19},{}};
+    f_checkSoITemplate(t_i0sup_1,vl_goodValues,vl_badValues);
+  }
+
+  testcase tc_superset_i0_1_2local() runs on A {
+    template SoI tl_SoI3 := {20,21,22};
+    template SoI tl_i0sup_1    := superset ((all from tl_SoI3 ))
+    var RoSoI vl_goodValues := {{20},{21},{22},{20,21},{22,20},{22,21},{20,21,22},{20,21,22,23},{24,23,22,21,20,19}};
+    var RoSoI vl_badValues := {{0},{1},{-1},{1000},{1,19},{}};
+    f_checkSoITemplate(tl_i0sup_1,vl_goodValues,vl_badValues);
+  }
+  //=== i1sup ===
+  testcase tc_superset_i1_eq() runs on A {
+    f_checkSoITemplateEquivalence(t_i1sup,t_i1sup_eq);
+  }
+  
+  testcase tc_superset_i1() runs on A {
+    var RoSoI vl_goodValues := {{1,2,6,100}, {1,2,7,100},{1,2,8,100},{1,2,9,100}, {1,2,3,4,5,6,7,8,9,100}, {1,2,3,4,5,6,7,8,9,100}};
+    var RoSoI vl_badValues := {{0},{1},{-1},{1000},{1,19},{},{20},{21},{22},{20,21},{22,20},{22,21,100},{2,6,100}, {2,6,7,8,9,100},{1,6,7,8,9,100}};
+    f_checkSoITemplate(t_i1sup,vl_goodValues,vl_badValues);
+  }
+
+  //=== i2 ===
+  testcase tc_superset_i2_eq() runs on A {
+    f_checkSoITemplateEquivalence(t_i2sup,t_i2sup_eq);
+  }
+  
+  testcase tc_superset_i2() runs on A {
+    var RoSoI vl_goodValues := {{-1,0,1,2,6,20,21,22,100},{-1,0,1,2,7,20,21,22,100},{-1,0,1,2,8,20,21,22,100},{-1,0,1,2,9,20,21,22,100},
+      {-1,0,1,2,6,7,8,9,20,21,22,100},{1,-1,2,0,3,4,5,6,7,8,9,20,21,22,100}, {1,2,3,4,5,6,7,8,9,20,21,22,100,-1,0}};
+    var RoSoI vl_badValues := {{0},{1},{-1},{1000},{1,19},{},{20},{21},{22},{20,21},{22,20},{22,21,100}, {2,6,7,8,9,100},{1,6,7,8,9,100}};
+    f_checkSoITemplate(t_i2sup,vl_goodValues,vl_badValues);
+  }
+
+  //=== i3 ===
+  //superset (-1,0,1,2,(6..9),20,21,22, 100);
+  testcase tc_superset_i3_eq() runs on A {
+    f_checkSoITemplateEquivalence(t_i3sup,t_i3sup_eq);
+  }
+  
+  testcase tc_superset_i3() runs on A {
+    var RoSoI vl_goodValues := {{20,21,22,-1,0,1,2,6,7,8,9,100},{20,21,22,1,-1,2,0,3,4,5,6,20,21,22,7,8,9,100}, {1,20,21,22,2,3,4,5,6,7,8,9,100,-1,0}}; 
+    var RoSoI vl_badValues := {{0},{1},{-1},{1000},{1,19},{},{20},{21},{22},{20,21},{22,20},{22,21,100}, {2,6,7,8,9,20,21,22,100},{20,21,22,1,6,7,8,9,100}};
+    f_checkSoITemplate(t_i3sup,vl_goodValues,vl_badValues);
+  }
+
+  //=== i4 ===
+  //superset (-1,0,1,2,(6..9),100,20,21,22); //order
+  testcase tc_superset_i4_eq() runs on A {
+    f_checkSoITemplateEquivalence(t_i4sup,t_i4sup_eq);
+  }
+  
+  testcase tc_superset_i4() runs on A {
+    var RoSoI vl_goodValues := {
+      {20,21,22,-1,0,1,2,6,100},{20,21,22,-1,0,1,2,7,100},{20,21,22,-1,0,1,2,6,100},{20,21,22,-1,0,1,2,8,100},{20,21,22,-1,0,1,2,9,100},
+      {20,21,22,-1,0,1,2,6,7,8,9,100},
+      {20,21,22,1,-1,2,0,3,4,5,6,20,21,22,7,8,9,100}, 
+      {1,20,21,22,2,3,4,5,6,7,8,9,100,-1,0}}; 
+    var RoSoI vl_badValues := {{0},{1},{-1},{1000},{1,19},{},{20},{21},{22},{20,21},{22,20},{22,21,100}, {2,6,7,8,9,20,21,22,100},{20,21,22,1,6,7,8,9,100}};
+    f_checkSoITemplate(t_i4sup,vl_goodValues,vl_badValues);
+  }
+
+  //=== i5 ===
+  //superset (-1,0,1,2,(6..9),100,20,21,22,20,21,22);
+  testcase tc_superset_i5_eq() runs on A {
+    f_checkSoITemplateEquivalence(t_i5sup,t_i5sup_eq);
+  }
+  
+  testcase tc_superset_i5() runs on A {
+    var RoSoI vl_goodValues := {
+      {20,21,22,-1,0,1,2,6,100,20,21,22},{20,21,22,-1,0,1,2,7,100,20,21,22},{20,21,22,-1,0,1,2,8,100,20,21,22},{20,21,22,-1,0,1,2,9,100,20,21,22},
+      {20,21,22,-1,0,1,2,6,7,100,20,21,22},
+      {20,21,22,-1,0,1,2,6,7,8,9,100,20,21,22},
+      {20,21,22,20,21,22,1,-1,2,0,3,4,5,6,20,21,22,7,8,9,100}, 
+      {20,21,22,1,20,21,22,2,3,4,5,6,7,8,9,100,-1,0}}; 
+    var RoSoI vl_badValues := {{0},{1},{-1},{1000},{1,19},{},{20},{21},{22},{20,21},{22,20},{22,21,100}, {2,6,7,8,9,20,21,22,100},{20,21,22,1,6,7,8,9,100}};
+    f_checkSoITemplate(t_i5sup,vl_goodValues,vl_badValues);
+  }
+
+  //=== i6 ===
+  //superset (-1,0,1,2,(6..9),100,20,21,22,20,21,22,20,21,22);
+  testcase tc_superset_i6_eq() runs on A {
+    f_checkSoITemplateEquivalence(t_i6sup,t_i6sup_eq);
+  }
+  
+  testcase tc_superset_i6() runs on A {
+    var RoSoI vl_goodValues :=
+    {
+      {20,21,22,20,21,22,-1,0,1,2,6,100,20,21,22},{20,21,22,20,21,22,-1,0,1,2,7,100,20,21,22},
+      {20,21,22,20,21,22,-1,0,1,2,8,9,100,20,21,22},{20,21,22,20,21,22,-1,0,1,2,6,7,8,100,20,21,22},
+      {20,21,22,20,21,22,-1,0,1,2,6,7,8,9,100,20,21,22},
+      {20,21,22,1,-1,2,0,3,4,5,6,20,21,22,7,20,21,22,8,9,100,20,21,22},
+      {1,20,21,22,2,3,4,5,6,7,8,9,100,-1,0,20,21,22,20,21,22}}; 
+    var RoSoI vl_badValues := {{0},{1},{-1},{1000},{1,19},{},{20},{21},{22},{20,21},{22,20},{22,21,100}, {2,6,7,8,9,20,21,22,100},{20,21,22,1,6,7,8,9,100}};
+    f_checkSoITemplate(t_i6sup,vl_goodValues,vl_badValues);
+  }
+
+  //=== i7 ===
+  //superset(1,2,(6..9)) length (7);
+  testcase tc_superset_i7_eq() runs on A {
+    f_checkSoITemplateEquivalence(t_i7sup,t_i7sup_eq);
+  }
+  
+  testcase tc_superset_i7() runs on A {
+    var RoSoI vl_goodValues := {
+      {1,2,6,100,200,300,400},{1,2,7,100,200,300,400},{1,2,8,100,200,300,400},{1,2,9,100,200,300,400},
+      {2,1,6,100,200,300,400},
+      {1,2,6,7,8,9,0},{1,2,6,7,8,9,1000},{1,2,-1,6,7,8,9}};
+    var RoSoI vl_badValues := {{1,2,3,4,5,6,7,8,9},{0},{1},{-1},{1000},{1,19},{},
+      {20},{21},{22},{20,21},
+      {22,20},{22,21,100}, 
+      {2,6,7,8,9,100},{1,6,7,8,9,100}};
+    f_checkSoITemplate(t_i7sup,vl_goodValues,vl_badValues);
+  }
+  
+  //=== i7sup_1 ===
+  //superset(1,2,(6..9)) length (6);
+  testcase tc_superset_i7_1_eq() runs on A {
+    f_checkSoITemplateEquivalence(t_i7sup_1,t_i7sup_1_eq);
+  }
+  testcase tc_superset_i7_1() runs on A {
+    var RoSoI vl_goodValues := {{1,2,6,7,8,9},
+      {1,2,6,100,200,300},{1,2,7,100,200,300},{1,2,7,100,200,300},{1,2,8,100,200,300},{1,2,9,100,200,300}};
+    var RoSoI vl_badValues := {{1,2,3,4,5,6,7,8,9},
+      {0},{1},{-1},{1000},
+      {1,19},{},{20},{21},{22},{20,21},{22,20},
+      {22,21,100}, 
+      {2,6,7,8,9,100},{1,6,7,8,9,100}};
+    f_checkSoITemplate(t_i7sup_1,vl_goodValues,vl_badValues);
+  }
+
+  //=== i8 ===
+  //superset(1,2,(6..9),complement(8,9)) length (4);
+  testcase tc_superset_i8_eq() runs on A {
+    f_checkSoITemplateEquivalence(t_i8sup,t_i8sup_eq);
+  }
+
+  testcase tc_superset_i8() runs on A {
+    var RoSoI vl_goodValues := {
+      {1,2,6,6},{1,2,7,6},{1,2,8,6},{1,2,9,6},
+      {1,2,6,7},{1,2,7,7},{1,2,8,7},{1,2,9,7},
+      {1,2,6,10},{1,2,7,10},{1,2,8,10},{1,2,9,10},
+      {1,2,8,6},{1,2,8,7}
+    };
+    var RoSoI vl_badValues := {
+      {1,2,8,9},{1,2,9,9},
+      {1,2,8,9},{1,2,9,9},
+      {1,2,6,10,11},{1,2,7,10,12,13},{1,2,5,10},{1,2,4,10},
+
+      {},
+      {0},{1},{2},{1000},
+      {1,2},{1,6},{20,21},{22,20},
+      {22,21,100},{1,2,6},
+      {1,2,3,4,5,6,7,8,9},
+      {2,6,7,8,9,100},{1,6,7,8,9,100},{1,2,3,4,5,6,7,8,9} };
+    f_checkSoITemplate(t_i8sup,vl_goodValues,vl_badValues);
+  }
+
+  //=== i9 ===
+  //superset(complement(1,2,(6..9)))                //length (4);
+  // It matches all set of integers which contains at least one integer which is not 1,2,6,7,8 or 9
+  testcase tc_superset_i9_eq() runs on A {
+    f_checkSoITemplateEquivalence(t_i9sup,t_i9sup_eq);
+  }
+  testcase tc_superset_i9() runs on A {
+    var RoSoI vl_goodValues := {
+      {0,3,4,5},{0,10,11,12},{0},{3},{4},{5},{10},{11},{3,4},{1,2,3},{1,2,6,10},{1,2,6,7,8,9,10}
+    };
+    var RoSoI vl_badValues := {
+      {},{1},{2},{6},{7},{8},{9},{1,2},{1,6},{1,7},{1,8},{1,9},{2,6},{2,7},{2,8},{2,9},{1,2,6},{1,2,6,9}
+    }
+    f_checkSoITemplate(t_i9sup,vl_goodValues,vl_badValues);
+  }  
+  
+  //=== i9sup_1 ===
+  //superset(complement(1,2,(6..9)))       length (4);
+  // It matches all set of integers with length 4 which contains at least one integer which is not 1,2,6,7,8 or 9
+  testcase tc_superset_i9_1_eq() runs on A {
+    f_checkSoITemplateEquivalence(t_i9sup_1,t_i9sup_1_eq);
+  }
+  testcase tc_superset_i9_1() runs on A {
+    var RoSoI vl_goodValues := {
+      {0,3,4,5},{0,10,11,12}, //4matches to compl
+      {1,3,4,5},{2,3,4,5},{6,3,4,5},  //3 matches
+      {1,2,10,11}, //2matches to compl value list
+      {1,2,6,10} //1matches
+    };
+    var RoSoI vl_badValues := {{0},{3},{4},{5},{10},{11},{3,4},{1,2,3}, 
+      {},{1},{2},{6},{7},{8},{9},{1,2},{1,6},{1,7},{1,8},{1,9},{2,6},{2,7},{2,8},{2,9},{1,2,6},{1,2,6,9},{1,2,6,7,8,9,10}
+    }
+    f_checkSoITemplate(t_i9sup_1,vl_goodValues,vl_badValues);
+  }
+  //=== i10 ===
+  //superset(1,2,(6..9),complement(1,2,(6..9) )) length (4);
+  //This matches with set of values (with length of 4) which contains at least once values from the list 1,2,(6..9) furthermore one value which does not matches
+  // with that list
+  testcase tc_superset_i10_eq() runs on A {
+    f_checkSoITemplateEquivalence(t_i10sup,t_i10sup_eq);
+  }
+
+  testcase tc_superset_i10() runs on A {
+    var RoSoI vl_goodValues := {       
+      {1,2,6,10},{1,2,7,11},{1,2,8,-1},{1,2,9,0},{1,2,9,1000}
+    };
+    var RoSoI vl_badValues := {
+      {0},{3},{4},{5},{10},{11},{3,4},{1,2,3}, 
+      {},{1},{2},{6},{7},{8},{9},{1,2},{1,6},{1,7},{1,8},{1,9},{2,6},{2,7},{2,8},{2,9},{1,2,6},
+      {1,2,6,9},{0,3,4,5},{0,10,11,12}, //4matches to compl
+      {1,3,4,5},{2,3,4,5},{6,3,4,5},  //3 matches{1,2,6,7,8,9,10}
+      {1,3,4,5},
+      {2,3,4,5},
+      {6,3,4,5},   
+      {1,2,10,11}
+    }
+    f_checkSoITemplate(t_i10sup,vl_goodValues,vl_badValues);
+  }
+
+  //=== i11 ===
+  // superset(1,2,(6..9), complement(1,2)) length (4);
+  
+  testcase tc_superset_i11_eq() runs on A {
+    f_checkSoITemplateEquivalence(t_i11sup,t_i11sup_eq);
+  }
+  
+  testcase tc_superset_i11() runs on A {
+    var RoSoI vl_goodValues := {       
+      {1,2,6,0},{1,2,7,3},{1,2,8,3},{1,2,9,4},{1,2,9,1000}
+    };
+    var RoSoI vl_badValues := {
+      {0},{3},{4},{5},{10},{11},{3,4},{1,2,3}, 
+      {},{1},{2},{6},{7},{8},{9},{1,2},{1,6},{1,7},{1,8},{1,9},{2,6},{2,7},{2,8},{2,9},{1,2,6},
+      {1,2,6,1},{0,3,4,5},{0,10,11,12},  
+      {1,3,4,5},{2,3,4,5},{6,3,4,5},   
+      {1,3,4,5},
+      {2,3,4,5},
+      {6,3,4,5},   
+      {1,2,10,11}
+    }
+    f_checkSoITemplate(t_i11sup,vl_goodValues,vl_badValues);
+  }
+  //========== Testcases for Dynamic Templates ==============
+
+  //=== i0 ===
+  testcase tc_superset_i0_eq_dyn() runs on A {
+    var template SoI tl_i0sup := superset (all from t_SoI3 );
+    f_checkSoITemplateEquivalence(tl_i0sup,t_i0sup_eq);
+  }
+  testcase tc_superset_importing_i0_eq_dyn() runs on A {
+    var template SoI tl_importing_i0sup   := superset (all from t_imported_RoI3 );
+    f_checkSoITemplateEquivalence(tl_importing_i0sup,t_i0sup_eq);
+  }
+  
+  testcase tc_superset_i0_eq_2dyn() runs on A {
+    var template SoI tl_SoI3 := {20,21,22};
+    var template SoI tl_i0sup := superset (all from tl_SoI3 );
+    f_checkSoITemplateEquivalence(tl_i0sup,t_i0sup_eq);
+  }
+  
+  testcase tc_superset_i0_dyn() runs on A {
+    var template SoI tl_i0sup := superset (all from t_SoI3 );
+    var RoSoI vl_goodValues := {{20,21,22},{20,21,22,23}, {24,23,22,21,20,19}};
+    var RoSoI vl_badValues := {{0},{1},{-1},{1000},{1,19},{},{20},{21},{22},{20,21},{22,20},{22,21}};
+    f_checkSoITemplate(tl_i0sup,vl_goodValues,vl_badValues);
+  }
+  
+  testcase tc_superset_i0_2dyn() runs on A {
+    var template SoI tl_SoI3 := {20,21,22};
+    var template SoI tl_i0sup := superset (all from tl_SoI3 );
+    var RoSoI vl_goodValues := {{20,21,22},{20,21,22,23}, {24,23,22,21,20,19}};
+    var RoSoI vl_badValues := {{0},{1},{-1},{1000},{1,19},{},{20},{21},{22},{20,21},{22,20},{22,21}};
+    f_checkSoITemplate(tl_i0sup,vl_goodValues,vl_badValues);
+  }
+  //=== i1 ===
+  //superset (1, 2, (6..9), 100);
+  
+  testcase tc_superset_i1_eq_dyn() runs on A {
+    var template SoI tl_i1sup := superset (all from t_SoI1, 100);
+    f_checkSoITemplateEquivalence(tl_i1sup,t_i1sup_eq);
+  }  
+  
+  testcase tc_superset_importing_i1_eq_dyn() runs on A {
+    var template SoI tl_importing_i1sup   := superset (all from t_imported_RoI1, 100);
+    f_checkSoITemplateEquivalence(tl_importing_i1sup,t_i1sup_eq);
+  }
+  testcase tc_superset_i1_eq_2dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_i1sup := superset (all from tl_SoI1, 100);
+    f_checkSoITemplateEquivalence(tl_i1sup,t_i1sup_eq);
+  }
+
+  testcase tc_superset_i1_dyn() runs on A {
+    var template SoI tl_i1sup := superset (all from t_SoI1, 100);
+    var RoSoI vl_goodValues := {{1,2,6,100}, {1,2,7,100},{1,2,8,100},{1,2,9,100}, {1,2,3,4,5,6,7,8,9,100}, {1,2,3,4,5,6,7,8,9,100}};
+    var RoSoI vl_badValues := {{0},{1},{-1},{1000},{1,19},{},{20},{21},{22},{20,21},{22,20},{22,21,100},{2,6,100}, {2,6,7,8,9,100},{1,6,7,8,9,100}};
+    f_checkSoITemplate(tl_i1sup,vl_goodValues,vl_badValues);
+  }
+  
+  testcase tc_superset_i1_2dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_i1sup := superset (all from tl_SoI1, 100);
+    var RoSoI vl_goodValues := {{1,2,6,100}, {1,2,7,100},{1,2,8,100},{1,2,9,100}, {1,2,3,4,5,6,7,8,9,100}, {1,2,3,4,5,6,7,8,9,100}};
+    var RoSoI vl_badValues := {{0},{1},{-1},{1000},{1,19},{},{20},{21},{22},{20,21},{22,20},{22,21,100},{2,6,100}, {2,6,7,8,9,100},{1,6,7,8,9,100}};
+    f_checkSoITemplate(tl_i1sup,vl_goodValues,vl_badValues);
+  }
+  //=== i2 ===
+  testcase tc_superset_i2_eq_dyn() runs on A {
+    var template SoI tl_i2sup := superset (-1,0,all from t_SoI1, 100);
+    f_checkSoITemplateEquivalence(tl_i2sup,t_i2sup_eq);
+  }
+  
+  testcase tc_superset_importing_i2_eq_dyn() runs on A {
+    var template SoI tl_importing_i2sup   := superset (-1,0,all from t_imported_RoI1,100);
+    f_checkSoITemplateEquivalence(tl_importing_i2sup,t_i2sup_eq);
+  }
+  
+  testcase tc_superset_i2_eq_2dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_i2sup := superset (-1,0,all from tl_SoI1, 100);
+    f_checkSoITemplateEquivalence(tl_i2sup,t_i2sup_eq);
+  }
+
+  testcase tc_superset_i2_dyn() runs on A {
+    var template SoI tl_i2sup := superset (-1,0,all from t_SoI1, 100);
+    var RoSoI vl_goodValues := {{-1,0,1,2,6,20,21,22,100},{-1,0,1,2,7,20,21,22,100},{-1,0,1,2,8,20,21,22,100},{-1,0,1,2,9,20,21,22,100},
+      {-1,0,1,2,6,7,8,9,20,21,22,100},{1,-1,2,0,3,4,5,6,7,8,9,20,21,22,100}, {1,2,3,4,5,6,7,8,9,20,21,22,100,-1,0}};
+    var RoSoI vl_badValues := {{0},{1},{-1},{1000},{1,19},{},{20},{21},{22},{20,21},{22,20},{22,21,100}, {2,6,7,8,9,100},{1,6,7,8,9,100}};
+    f_checkSoITemplate(tl_i2sup,vl_goodValues,vl_badValues);
+  }
+  
+  testcase tc_superset_i2_2dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_i2sup := superset (-1,0,all from tl_SoI1, 100);
+    var RoSoI vl_goodValues := {{-1,0,1,2,6,20,21,22,100},{-1,0,1,2,7,20,21,22,100},{-1,0,1,2,8,20,21,22,100},{-1,0,1,2,9,20,21,22,100},
+      {-1,0,1,2,6,7,8,9,20,21,22,100},{1,-1,2,0,3,4,5,6,7,8,9,20,21,22,100}, {1,2,3,4,5,6,7,8,9,20,21,22,100,-1,0}};
+    var RoSoI vl_badValues := {{0},{1},{-1},{1000},{1,19},{},{20},{21},{22},{20,21},{22,20},{22,21,100}, {2,6,7,8,9,100},{1,6,7,8,9,100}};
+    f_checkSoITemplate(tl_i2sup,vl_goodValues,vl_badValues);
+  }
+
+  //=== i3 ===
+  //superset (-1,0,1,2,(6..9),20,21,22, 100);
+  testcase tc_superset_i3_eq_dyn() runs on A {
+    var template SoI tl_i3sup      := superset(-1,0,all from t_SoI1, all from t_SoI3, 100);
+    f_checkSoITemplateEquivalence(tl_i3sup,t_i3sup_eq);
+  }
+  
+  testcase tc_superset_i3_eq_2dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_SoI3 := {20,21,22};
+    var template SoI tl_i3sup      := superset(-1,0,all from tl_SoI1, all from tl_SoI3, 100);
+    f_checkSoITemplateEquivalence(tl_i3sup,t_i3sup_eq);
+  }
+  
+  testcase tc_superset_i3_dyn() runs on A {
+    var template SoI tl_i3sup      := superset(-1,0,all from t_SoI1, all from t_SoI3, 100);
+    var RoSoI vl_goodValues := {{20,21,22,-1,0,1,2,6,7,8,9,100},{20,21,22,1,-1,2,0,3,4,5,6,20,21,22,7,8,9,100}, {1,20,21,22,2,3,4,5,6,7,8,9,100,-1,0}}; 
+    var RoSoI vl_badValues := {{0},{1},{-1},{1000},{1,19},{},{20},{21},{22},{20,21},{22,20},{22,21,100}, {2,6,7,8,9,20,21,22,100},{20,21,22,1,6,7,8,9,100}};
+    f_checkSoITemplate(t_i3sup,vl_goodValues,vl_badValues);
+  }
+  
+  testcase tc_superset_i3_2dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_SoI3 := {20,21,22};
+    var template SoI tl_i3sup  := superset(-1,0,all from tl_SoI1, all from tl_SoI3, 100);
+    var RoSoI vl_goodValues := {{20,21,22,-1,0,1,2,6,7,8,9,100},{20,21,22,1,-1,2,0,3,4,5,6,20,21,22,7,8,9,100}, {1,20,21,22,2,3,4,5,6,7,8,9,100,-1,0}}; 
+    var RoSoI vl_badValues := {{0},{1},{-1},{1000},{1,19},{},{20},{21},{22},{20,21},{22,20},{22,21,100}, {2,6,7,8,9,20,21,22,100},{20,21,22,1,6,7,8,9,100}};
+    f_checkSoITemplate(t_i3sup,vl_goodValues,vl_badValues);
+  }
+
+
+  //=== i4 ===
+  //superset (-1,0,1,2,(6..9),100,20,21,22);
+  
+  testcase tc_superset_i4_eq_dyn() runs on A {
+    var template SoI tl_i4sup := superset(-1,0,all from t_SoI1, 100, all from t_SoI3);
+    f_checkSoITemplateEquivalence(tl_i4sup,t_i4sup_eq);
+  }
+  testcase tc_superset_i4_eq_2dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_SoI3 := {20,21,22};
+    var template SoI tl_i4sup := superset(-1,0,all from tl_SoI1, 100, all from tl_SoI3);
+    f_checkSoITemplateEquivalence(tl_i4sup,t_i4sup_eq);
+  }
+
+  testcase tc_superset_i4_dyn() runs on A {
+    var template SoI tl_i4sup := superset(-1,0,all from t_SoI1, 100, all from t_SoI3);
+    var RoSoI vl_goodValues := {
+      {20,21,22,-1,0,1,2,6,100},{20,21,22,-1,0,1,2,7,100},{20,21,22,-1,0,1,2,6,100},{20,21,22,-1,0,1,2,8,100},{20,21,22,-1,0,1,2,9,100},
+      {20,21,22,-1,0,1,2,6,7,8,9,100},
+      {20,21,22,1,-1,2,0,3,4,5,6,20,21,22,7,8,9,100}, 
+      {1,20,21,22,2,3,4,5,6,7,8,9,100,-1,0}}; 
+    var RoSoI vl_badValues := {{0},{1},{-1},{1000},{1,19},{},{20},{21},{22},{20,21},{22,20},{22,21,100}, {2,6,7,8,9,20,21,22,100},{20,21,22,1,6,7,8,9,100}};
+    f_checkSoITemplate(tl_i4sup,vl_goodValues,vl_badValues);
+  }
+
+  testcase tc_superset_i4_2dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_SoI3 := {20,21,22};
+    var template SoI tl_i4sup := superset(-1,0,all from tl_SoI1, 100, all from tl_SoI3);
+    var RoSoI vl_goodValues := {
+      {20,21,22,-1,0,1,2,6,100},{20,21,22,-1,0,1,2,7,100},{20,21,22,-1,0,1,2,6,100},{20,21,22,-1,0,1,2,8,100},{20,21,22,-1,0,1,2,9,100},
+      {20,21,22,-1,0,1,2,6,7,8,9,100},
+      {20,21,22,1,-1,2,0,3,4,5,6,20,21,22,7,8,9,100}, 
+      {1,20,21,22,2,3,4,5,6,7,8,9,100,-1,0}}; 
+    var RoSoI vl_badValues := {{0},{1},{-1},{1000},{1,19},{},{20},{21},{22},{20,21},{22,20},{22,21,100}, {2,6,7,8,9,20,21,22,100},{20,21,22,1,6,7,8,9,100}};
+    f_checkSoITemplate(tl_i4sup,vl_goodValues,vl_badValues);
+  }
+
+  //=== i5 ===
+  //superset (-1,0,1,2,(6..9),100,20,21,22,20,21,22);
+  
+  testcase tc_superset_i5_eq_dyn() runs on A {
+    template SoI tl_i5sup      := superset(-1,0,all from t_SoI1, 100, all from t_SoI3,all from t_SoI3 ); //repetition
+    f_checkSoITemplateEquivalence(tl_i5sup,t_i5sup_eq);
+  }
+  
+  testcase tc_superset_i5_eq_2dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_SoI3 := {20,21,22};
+    template SoI tl_i5sup      := superset(-1,0,all from tl_SoI1, 100, all from tl_SoI3,all from tl_SoI3 ); //repetition
+    f_checkSoITemplateEquivalence(tl_i5sup,t_i5sup_eq);
+  }
+  
+  testcase tc_superset_i5_dyn() runs on A {
+    template SoI tl_i5sup      := superset(-1,0,all from t_SoI1, 100, all from t_SoI3,all from t_SoI3 );
+    
+    var RoSoI vl_goodValues := {
+      {20,21,22,-1,0,1,2,6,100,20,21,22},
+      {20,21,22,-1,0,1,2,7,100,20,21,22},
+      {20,21,22,-1,0,1,2,8,100,20,21,22},
+      {20,21,22,-1,0,1,2,9,100,20,21,22},
+      {20,21,22,-1,0,1,2,6,7,100,20,21,22},
+      {20,21,22,-1,0,1,2,6,7,8,9,100,20,21,22},
+      {20,21,22,20,21,22,1,-1,2,0,3,4,5,6,20,21,22,7,8,9,100}, 
+      {20,21,22,1,20,21,22,2,3,4,5,6,7,8,9,100,-1,0}}; 
+    var RoSoI vl_badValues := {{0},{1},{-1},{1000},{1,19},{},
+      {20},{21},{22},{20,21},{22,20},{22,21,100}, 
+      {2,6,7,8,9,20,21,22,100},{20,21,22,1,6,7,8,9,100}};
+    f_checkSoITemplate(tl_i5sup,vl_goodValues,vl_badValues);
+  }
+  
+  testcase tc_superset_i5_2dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_SoI3 := {20,21,22};
+    template SoI tl_i5sup      := superset(-1,0,all from tl_SoI1, 100, all from tl_SoI3,all from tl_SoI3 );
+
+    var RoSoI vl_goodValues := {
+      {20,21,22,-1,0,1,2,6,100,20,21,22},
+      {20,21,22,-1,0,1,2,7,100,20,21,22},
+      {20,21,22,-1,0,1,2,8,100,20,21,22},
+      {20,21,22,-1,0,1,2,9,100,20,21,22},
+      {20,21,22,-1,0,1,2,6,7,100,20,21,22},
+      {20,21,22,-1,0,1,2,6,7,8,9,100,20,21,22},
+      {20,21,22,20,21,22,1,-1,2,0,3,4,5,6,20,21,22,7,8,9,100}, 
+      {20,21,22,1,20,21,22,2,3,4,5,6,7,8,9,100,-1,0}}; 
+    var RoSoI vl_badValues := {{0},{1},{-1},{1000},{1,19},{},
+      {20},{21},{22},{20,21},{22,20},{22,21,100}, 
+      {2,6,7,8,9,20,21,22,100},{20,21,22,1,6,7,8,9,100}};
+    f_checkSoITemplate(tl_i5sup,vl_goodValues,vl_badValues);
+  }
+
+  //=== i6 ===
+  // superset (-1,0,1,2,(6..9),100,20,21,22,20,21,22,20,21,22);
+  testcase tc_superset_i6_eq_dyn() runs on A {
+    var template SoI tl_i6sup  := superset(-1,0,all from t_SoI1, 100, all from t_SoI3,all from t_SoI3,all from t_SoI3); //repetition
+    f_checkSoITemplateEquivalence(tl_i6sup,t_i6sup_eq);
+  }
+  
+  testcase tc_superset_i6_dyn() runs on A {
+    var RoSoI vl_goodValues :=
+    {
+      {20,21,22,20,21,22,-1,0,1,2,6,100,20,21,22},{20,21,22,20,21,22,-1,0,1,2,7,100,20,21,22},
+      {20,21,22,20,21,22,-1,0,1,2,8,9,100,20,21,22},{20,21,22,20,21,22,-1,0,1,2,6,7,8,100,20,21,22},
+      {20,21,22,20,21,22,-1,0,1,2,6,7,8,9,100,20,21,22},
+      {20,21,22,1,-1,2,0,3,4,5,6,20,21,22,7,20,21,22,8,9,100,20,21,22},
+      {1,20,21,22,2,3,4,5,6,7,8,9,100,-1,0,20,21,22,20,21,22}}; 
+    var RoSoI vl_badValues := {{0},{1},{-1},{1000},{1,19},{},{20},{21},{22},{20,21},{22,20},
+      {22,21,100}, 
+      {2,6,7,8,9,20,21,22,100},{20,21,22,1,6,7,8,9,100},{20,21,22,1,6,7,8,9,100}
+    };
+    f_checkSoITemplate(t_i6sup,vl_goodValues,vl_badValues);
+  }
+
+  //=== i7 ===
+  //superset(1,2,(6..9)) length (7);
+  
+  testcase tc_superset_i7_eq_dyn() runs on A {
+    var template SoI tl_i7sup      := superset(all from t_SoI1) length (7);
+    f_checkSoITemplateEquivalence(tl_i7sup,t_i7sup_eq);
+  }
+  
+  testcase tc_superset_i7_eq_2dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_i7sup      := superset(all from tl_SoI1) length (7);
+    f_checkSoITemplateEquivalence(tl_i7sup,t_i7sup_eq);
+  }
+  testcase tc_superset_i7_dyn() runs on A {
+    var template SoI tl_i7sup      := superset(all from t_SoI1) length (7);
+    var RoSoI vl_goodValues := {
+      {1,2,6,100,200,300,400},{1,2,7,100,200,300,400},{1,2,8,100,200,300,400},{1,2,9,100,200,300,400},
+      {2,1,6,100,200,300,400},
+      {1,2,6,7,8,9,0},{1,2,6,7,8,9,1000},{1,2,-1,6,7,8,9}};
+    var RoSoI vl_badValues := {{1,2,3,4,5,6,7,8,9},{0},{1},{-1},{1000},{1,19},{},
+      {20},{21},{22},{20,21},
+      {22,20},{22,21,100}, 
+      {2,6,7,8,9,100},{1,6,7,8,9,100}};
+    f_checkSoITemplate(tl_i7sup,vl_goodValues,vl_badValues);
+  }  
+  
+  testcase tc_superset_i7_2dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_i7sup      := superset(all from tl_SoI1) length (7);
+    var RoSoI vl_goodValues := {
+      {1,2,6,100,200,300,400},{1,2,7,100,200,300,400},{1,2,8,100,200,300,400},{1,2,9,100,200,300,400},
+      {2,1,6,100,200,300,400},
+      {1,2,6,7,8,9,0},{1,2,6,7,8,9,1000},{1,2,-1,6,7,8,9}};
+    var RoSoI vl_badValues := {{1,2,3,4,5,6,7,8,9},{0},{1},{-1},{1000},{1,19},{},
+      {20},{21},{22},{20,21},
+      {22,20},{22,21,100}, 
+      {2,6,7,8,9,100},{1,6,7,8,9,100}};
+    f_checkSoITemplate(tl_i7sup,vl_goodValues,vl_badValues);
+  } 
+
+  //=== i7sup_1 ===
+  //superset(1,2,(6..9)) length (6);
+  testcase tc_superset_i7_1_eq_dyn() runs on A {
+    template SoI tl_i7sup_1    := superset(all from t_SoI1) length (6);
+    f_checkSoITemplateEquivalence(tl_i7sup_1,t_i7sup_1_eq);
+  }  
+  
+  testcase tc_superset_i7_1_eq_2dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_i7sup_1    := superset(all from tl_SoI1) length (6);
+    f_checkSoITemplateEquivalence(tl_i7sup_1,t_i7sup_1_eq);
+  }
+  
+  testcase tc_superset_i7_1_dyn() runs on A {    
+    template SoI tl_i7sup_1    := superset(all from t_SoI1) length (6);
+    var RoSoI vl_goodValues := {{1,2,6,7,8,9},
+      {1,2,6,100,200,300},{1,2,7,100,200,300},{1,2,7,100,200,300},{1,2,8,100,200,300},{1,2,9,100,200,300}};
+    var RoSoI vl_badValues := {{1,2,3,4,5,6,7,8,9},
+      {0},{1},{-1},{1000},
+      {1,19},{},{20},{21},{22},{20,21},{22,20},
+      {22,21,100}, 
+      {2,6,7,8,9,100},{1,6,7,8,9,100}};
+    f_checkSoITemplate(tl_i7sup_1,vl_goodValues,vl_badValues);
+  }
+  
+  testcase tc_superset_i7_1_2dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_i7sup_1    := superset(all from tl_SoI1) length (6);
+    var RoSoI vl_goodValues := {{1,2,6,7,8,9},
+      {1,2,6,100,200,300},{1,2,7,100,200,300},{1,2,7,100,200,300},{1,2,8,100,200,300},{1,2,9,100,200,300}};
+    var RoSoI vl_badValues := {{1,2,3,4,5,6,7,8,9},
+      {0},{1},{-1},{1000},
+      {1,19},{},{20},{21},{22},{20,21},{22,20},
+      {22,21,100}, 
+      {2,6,7,8,9,100},{1,6,7,8,9,100}};
+    f_checkSoITemplate(tl_i7sup_1,vl_goodValues,vl_badValues);
+  } 
+
+  //=== i8 ===
+    //superset(1,2,(6..9),complement(8,9)) length (4);
+  testcase tc_superset_i8_eq_dyn() runs on A {
+    var template SoI tl_i8sup      := superset(all from t_SoI1, complement(8,9)) length (4);
+    f_checkSoITemplateEquivalence(tl_i8sup,t_i8sup_eq);
+  }
+  testcase tc_superset_i8_eq_2dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_i8sup      := superset(all from tl_SoI1, complement(8,9)) length (4);
+    f_checkSoITemplateEquivalence(tl_i8sup,t_i8sup_eq);
+  }
+  
+  testcase tc_superset_i8_dyn() runs on A {
+    var template SoI tl_i8sup      := superset(all from t_SoI1, complement(8,9)) length (4);
+    var RoSoI vl_goodValues := {
+      {1,2,6,6},{1,2,7,6},{1,2,8,6},{1,2,9,6},
+      {1,2,6,7},{1,2,7,7},{1,2,8,7},{1,2,9,7},
+      {1,2,6,10},{1,2,7,10},{1,2,8,10},{1,2,9,10},
+      {1,2,8,6},{1,2,8,7}
+    };
+    var RoSoI vl_badValues := {
+      {1,2,8,9},{1,2,9,9},
+      {1,2,8,9},{1,2,9,9},
+      {1,2,6,10,11},{1,2,7,10,12,13},{1,2,5,10},{1,2,4,10},
+
+      {},
+      {0},{1},{2},{1000},
+      {1,2},{1,6},{20,21},{22,20},
+      {22,21,100},{1,2,6},
+      {1,2,3,4,5,6,7,8,9},
+      {2,6,7,8,9,100},{1,6,7,8,9,100},{1,2,3,4,5,6,7,8,9} };
+    f_checkSoITemplate(tl_i8sup,vl_goodValues,vl_badValues);
+  }
+  testcase tc_superset_i8_2dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_i8sup      := superset(all from tl_SoI1, complement(8,9)) length (4);
+    var RoSoI vl_goodValues := {
+      {1,2,6,6},{1,2,7,6},{1,2,8,6},{1,2,9,6},
+      {1,2,6,7},{1,2,7,7},{1,2,8,7},{1,2,9,7},
+      {1,2,6,10},{1,2,7,10},{1,2,8,10},{1,2,9,10},
+      {1,2,8,6},{1,2,8,7}
+    };
+    var RoSoI vl_badValues := {
+      {1,2,8,9},{1,2,9,9},
+      {1,2,8,9},{1,2,9,9},
+      {1,2,6,10,11},{1,2,7,10,12,13},{1,2,5,10},{1,2,4,10},
+
+      {},
+      {0},{1},{2},{1000},
+      {1,2},{1,6},{20,21},{22,20},
+      {22,21,100},{1,2,6},
+      {1,2,3,4,5,6,7,8,9},
+      {2,6,7,8,9,100},{1,6,7,8,9,100},{1,2,3,4,5,6,7,8,9} };
+    f_checkSoITemplate(tl_i8sup,vl_goodValues,vl_badValues);
+  }
+
+  //=== i9 ===
+  //superset(complement(1,2,(6..9)))                //length (4);
+  // It matches all set of integers which contains at least one integer which is not 1,2,6,7,8 or 9
+  testcase tc_superset_i9_eq_dyn() runs on A {
+    var template SoI tl_i9sup      := superset(complement(all from t_SoI1)) 
+    f_checkSoITemplateEquivalence(tl_i9sup,t_i9sup_eq);
+  }
+  testcase tc_superset_i9_eq_2dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_i9sup      := superset(complement(all from tl_SoI1)) 
+    f_checkSoITemplateEquivalence(tl_i9sup,t_i9sup_eq);
+  }
+  
+  testcase tc_superset_i9_dyn() runs on A {
+    var template SoI tl_i9sup      := superset(complement(all from t_SoI1)) 
+    var RoSoI vl_goodValues := {
+      {0,3,4,5},{0,10,11,12},{0},{3},{4},{5},{10},{11},{3,4},{1,2,3},{1,2,6,10},{1,2,6,7,8,9,10}
+    };
+    var RoSoI vl_badValues := {
+      {},{1},{2},{6},{7},{8},{9},{1,2},{1,6},{1,7},{1,8},{1,9},{2,6},{2,7},{2,8},{2,9},{1,2,6},{1,2,6,9}
+    }
+    f_checkSoITemplate(tl_i9sup,vl_goodValues,vl_badValues);
+  }  
+  testcase tc_superset_i9_2dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_i9sup      := superset(complement(all from tl_SoI1)) 
+    var RoSoI vl_goodValues := {
+      {0,3,4,5},{0,10,11,12},{0},{3},{4},{5},{10},{11},{3,4},{1,2,3},{1,2,6,10},{1,2,6,7,8,9,10}
+    };
+    var RoSoI vl_badValues := {
+      {},{1},{2},{6},{7},{8},{9},{1,2},{1,6},{1,7},{1,8},{1,9},{2,6},{2,7},{2,8},{2,9},{1,2,6},{1,2,6,9}
+    }
+    f_checkSoITemplate(tl_i9sup,vl_goodValues,vl_badValues);
+  }
+
+  //=== i9sup_1 ===
+  //superset(complement(1,2,(6..9)))       length (4);
+  // It matches all set of integers with length 4 which contains at least one integer which is not 1,2,6,7,8 or 9
+  testcase tc_superset_i9_1_eq_dyn() runs on A {
+    var template SoI tl_i9sup_1      := superset(complement(all from t_SoI1)) length (4);
+    f_checkSoITemplateEquivalence(tl_i9sup_1,t_i9sup_1_eq);
+  }
+  testcase tc_superset_i9_1_eq_2dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_i9sup_1      := superset(complement(all from tl_SoI1)) length (4);
+    f_checkSoITemplateEquivalence(tl_i9sup_1,t_i9sup_1_eq);
+  }
+  
+  testcase tc_superset_i9_1_dyn() runs on A {
+    var template SoI tl_i9sup_1      := superset(complement(all from t_SoI1)) length (4);
+    var RoSoI vl_goodValues := {
+      {0,3,4,5},{0,10,11,12}, //4matches to compl
+      {1,3,4,5},{2,3,4,5},{6,3,4,5},  //3 matches
+      {1,2,10,11}, //2matches to compl value list
+      {1,2,6,10} //1matches
+    };
+    var RoSoI vl_badValues := {{0},{3},{4},{5},{10},{11},{3,4},{1,2,3}, 
+      {},{1},{2},{6},{7},{8},{9},{1,2},{1,6},{1,7},{1,8},{1,9},{2,6},{2,7},{2,8},{2,9},{1,2,6},{1,2,6,9},{1,2,6,7,8,9,10}
+    }
+    f_checkSoITemplate(tl_i9sup_1,vl_goodValues,vl_badValues);
+  }
+  
+  testcase tc_superset_i9_1_2dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_i9sup_1      := superset(complement(all from tl_SoI1)) length (4);
+    var RoSoI vl_goodValues := {
+      {0,3,4,5},{0,10,11,12}, //4matches to compl
+      {1,3,4,5},{2,3,4,5},{6,3,4,5},  //3 matches
+      {1,2,10,11}, //2matches to compl value list
+      {1,2,6,10} //1matches
+    };
+    var RoSoI vl_badValues := {{0},{3},{4},{5},{10},{11},{3,4},{1,2,3}, 
+      {},{1},{2},{6},{7},{8},{9},{1,2},{1,6},{1,7},{1,8},{1,9},{2,6},{2,7},{2,8},{2,9},{1,2,6},{1,2,6,9},{1,2,6,7,8,9,10}
+    }
+    f_checkSoITemplate(tl_i9sup_1,vl_goodValues,vl_badValues);
+  }
+
+  //=== i10 ===
+  //superset(1,2,(6..9),complement(1,2,(6..9) )) length (4);
+  //This matches with set of values (with length of 4) which contains at least once values from the list 1,2,(6..9) furthermore one value which does not matches
+  // with that list
+  testcase tc_superset_i10_eq_dyn() runs on A {
+    var template SoI tl_i10sup     := superset(all from t_SoI1, complement(all from t_SoI1)) length (4);
+    f_checkSoITemplateEquivalence(tl_i10sup,t_i10sup_eq);
+  }
+  
+  testcase tc_superset_i10_eq_2dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_i10sup     := superset(all from tl_SoI1, complement(all from tl_SoI1)) length (4);
+    f_checkSoITemplateEquivalence(tl_i10sup,t_i10sup_eq);
+  }
+  
+  testcase tc_superset_i10_dyn() runs on A {
+    var template SoI tl_i10sup     := superset(all from t_SoI1, complement(all from t_SoI1)) length (4);
+    var RoSoI vl_goodValues := {       
+      {1,2,6,10},{1,2,7,11},{1,2,8,-1},{1,2,9,0},{1,2,9,1000}
+    };
+    var RoSoI vl_badValues := {
+      {0},{3},{4},{5},{10},{11},{3,4},{1,2,3}, 
+      {},{1},{2},{6},{7},{8},{9},{1,2},{1,6},{1,7},{1,8},{1,9},{2,6},{2,7},{2,8},{2,9},{1,2,6},
+      {1,2,6,9},{0,3,4,5},{0,10,11,12}, //4matches to compl
+      {1,3,4,5},{2,3,4,5},{6,3,4,5},  //3 matches{1,2,6,7,8,9,10}
+      {1,3,4,5},
+      {2,3,4,5},
+      {6,3,4,5},   
+      {1,2,10,11}
+    }
+    f_checkSoITemplate(tl_i10sup,vl_goodValues,vl_badValues);
+  }
+  testcase tc_superset_i10_2dyn() runs on A {
+    var template SoI tl_SoI1 := {1, 2, (6..9)};
+    var template SoI tl_i10sup     := superset(all from t_SoI1, complement(all from t_SoI1)) length (4);
+    var RoSoI vl_goodValues := {       
+      {1,2,6,10},{1,2,7,11},{1,2,8,-1},{1,2,9,0},{1,2,9,1000}
+    };
+    var RoSoI vl_badValues := {
+      {0},{3},{4},{5},{10},{11},{3,4},{1,2,3}, 
+      {},{1},{2},{6},{7},{8},{9},{1,2},{1,6},{1,7},{1,8},{1,9},{2,6},{2,7},{2,8},{2,9},{1,2,6},
+      {1,2,6,9},{0,3,4,5},{0,10,11,12}, //4matches to compl
+      {1,3,4,5},{2,3,4,5},{6,3,4,5},  //3 matches{1,2,6,7,8,9,10}
+      {1,3,4,5},
+      {2,3,4,5},
+      {6,3,4,5},   
+      {1,2,10,11}
+    }
+    f_checkSoITemplate(tl_i10sup,vl_goodValues,vl_badValues);
+  } 
+
+  //=== i11 ===
+  // superset(1,2,(6..9), complement(1,2)) length (4);
+  
+  testcase tc_superset_i11_eq_dyn() runs on A {
+    var template SoI tl_i11sup     := superset(all from t_SoI1, complement(all from t_SoI5)) length (4);
+    f_checkSoITemplateEquivalence(tl_i11sup,t_i11sup_eq);
+  }
+  
+  testcase tc_superset_i11_dyn() runs on A {
+    var template SoI tl_i11sup     := superset(all from t_SoI1, complement(all from t_SoI5)) length (4);
+    var RoSoI vl_goodValues := {       
+      {1,2,6,0},{1,2,7,3},{1,2,8,3},{1,2,9,4},{1,2,9,1000}
+    };
+    var RoSoI vl_badValues := {
+      {0},{3},{4},{5},{10},{11},{3,4},{1,2,3}, 
+      {},{1},{2},{6},{7},{8},{9},{1,2},{1,6},{1,7},{1,8},{1,9},{2,6},{2,7},{2,8},{2,9},{1,2,6},
+      {1,2,6,1},{0,3,4,5},{0,10,11,12},  
+      {1,3,4,5},{2,3,4,5},{6,3,4,5},   
+      {1,3,4,5},
+      {2,3,4,5},
+      {6,3,4,5},   
+      {1,2,10,11}
+    }
+    f_checkSoITemplate(tl_i11sup,vl_goodValues,vl_badValues);
+  }
+  
+}
+
+control {
+  execute(tc_superset());
+execute(tc_superset_i0_eq());
+execute(tc_superset_importing_i0_eq());
+execute(tc_superset_i0_eq_local());
+execute(tc_superset_importing_i0_eq_local());
+execute(tc_superset_i0_eq_2local());
+execute(tc_superset_i0());
+execute(tc_superset_importing_i0());
+execute(tc_superset_i0_1_eq());
+execute(tc_superset_i0_1_eq_local());
+execute(tc_superset_i0_1_eq_2local());
+execute(tc_superset_i0_1());
+execute(tc_superset_i0_1_2local());
+execute(tc_superset_i1_eq());
+execute(tc_superset_i1());
+execute(tc_superset_i2_eq());
+execute(tc_superset_i2());
+execute(tc_superset_i3_eq());
+execute(tc_superset_i3());
+execute(tc_superset_i4_eq());
+execute(tc_superset_i4());
+execute(tc_superset_i5_eq());
+execute(tc_superset_i5());
+execute(tc_superset_i6_eq());
+execute(tc_superset_i6());
+execute(tc_superset_i7_eq());
+execute(tc_superset_i7());
+execute(tc_superset_i7_1_eq());
+execute(tc_superset_i7_1());
+execute(tc_superset_i8_eq());
+execute(tc_superset_i8());
+execute(tc_superset_i9_eq());
+execute(tc_superset_i9());
+execute(tc_superset_i9_1_eq());
+execute(tc_superset_i9_1());
+execute(tc_superset_i10_eq());
+execute(tc_superset_i10());
+execute(tc_superset_i11_eq());
+execute(tc_superset_i11());
+execute(tc_superset_i0_eq_dyn());
+execute(tc_superset_importing_i0_eq_dyn());
+execute(tc_superset_i0_eq_2dyn());
+execute(tc_superset_i0_dyn());
+execute(tc_superset_i0_2dyn());
+execute(tc_superset_i1_eq_dyn());
+execute(tc_superset_importing_i1_eq_dyn());
+execute(tc_superset_i1_eq_2dyn());
+execute(tc_superset_i1_dyn());
+execute(tc_superset_i1_2dyn());
+execute(tc_superset_i2_eq_dyn());
+execute(tc_superset_importing_i2_eq_dyn());
+execute(tc_superset_i2_eq_2dyn());
+execute(tc_superset_i2_dyn());
+execute(tc_superset_i2_2dyn());
+execute(tc_superset_i3_eq_dyn());
+execute(tc_superset_i3_eq_2dyn());
+execute(tc_superset_i3_dyn());
+execute(tc_superset_i3_2dyn());
+execute(tc_superset_i4_eq_dyn());
+execute(tc_superset_i4_eq_2dyn());
+execute(tc_superset_i4_dyn());
+execute(tc_superset_i4_2dyn());
+execute(tc_superset_i5_eq_dyn());
+execute(tc_superset_i5_eq_2dyn());
+execute(tc_superset_i5_dyn());
+execute(tc_superset_i5_2dyn());
+execute(tc_superset_i6_eq_dyn());
+execute(tc_superset_i6_dyn());
+execute(tc_superset_i7_eq_dyn());
+execute(tc_superset_i7_eq_2dyn());
+execute(tc_superset_i7_dyn());
+execute(tc_superset_i7_2dyn());
+execute(tc_superset_i7_1_eq_dyn());
+execute(tc_superset_i7_1_eq_2dyn());
+execute(tc_superset_i7_1_dyn());
+execute(tc_superset_i7_1_2dyn());
+execute(tc_superset_i8_eq_dyn());
+execute(tc_superset_i8_eq_2dyn());
+execute(tc_superset_i8_dyn());
+execute(tc_superset_i8_2dyn());
+execute(tc_superset_i9_eq_dyn());
+execute(tc_superset_i9_eq_2dyn());
+execute(tc_superset_i9_dyn());
+execute(tc_superset_i9_2dyn());
+execute(tc_superset_i9_1_eq_dyn());
+execute(tc_superset_i9_1_eq_2dyn());
+execute(tc_superset_i9_1_dyn());
+execute(tc_superset_i9_1_2dyn());
+execute(tc_superset_i10_eq_dyn());
+execute(tc_superset_i10_eq_2dyn());
+execute(tc_superset_i10_dyn());
+execute(tc_superset_i10_2dyn());
+execute(tc_superset_i11_eq_dyn());
+execute(tc_superset_i11_dyn());
+}
+}  // end of module
diff --git a/Regression_Test_java/src/all_from/all_from_var.ttcn b/Regression_Test_java/src/all_from/all_from_var.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..3075195d262a22f0c4309d9cfd15a0079e09e4be
--- /dev/null
+++ b/Regression_Test_java/src/all_from/all_from_var.ttcn
@@ -0,0 +1,308 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Baranyi, Botond
+ *
+ ******************************************************************************/
+module all_from_var {  // HR17266
+  
+  import from types all;
+  import from functions all;
+
+  // Testing 'all from' on variables, constants and template variables
+  testcase tc_checkVar() runs on A {
+    var RoI v_roi1 := { 1, 2, 6, 7, 9 };
+    var template integer v_af := ( 8, all from v_roi1 );
+
+    var RoI vl_goodValues := { 1, 2, 6, 7, 8, 9 };
+    var RoI vl_badValues := { -99, -10, -1, 0, 3, 4, 5, 10, 11, 20, 99, 100, 101, 102, 200, 1000, 100000000000000 };
+    f_checkIntegerTemplate(v_af, vl_goodValues, vl_badValues);
+  }
+
+  testcase tc_checkConst() runs on A {
+    const RoI c_roi1 := { 1, 2, 6, 7, 9 };
+    var template integer v_af := ( 8, all from c_roi1 );
+
+    var RoI vl_goodValues := { 1, 2, 6, 7, 8, 9 };
+    var RoI vl_badValues := { -99, -10, -1, 0, 3, 4, 5, 10, 11, 20, 99, 100, 101, 102, 200, 1000, 100000000000000 };
+    f_checkIntegerTemplate(v_af, vl_goodValues, vl_badValues);
+  }
+
+  testcase tc_checkTempVar() runs on A {
+    var template RoI vt_roi1 := { 1, 2, (6 .. 9) };
+    var template integer v_af := ( 11, all from vt_roi1 );
+
+    var RoI vl_goodValues := { 1, 2, 6, 7, 8, 9 };
+    var RoI vl_badValues := { -99, -10, -1, 0, 3, 4, 5, 10, 20, 99, 100, 101, 102, 200, 1000, 100000000000000 };
+    f_checkIntegerTemplate(v_af, vl_goodValues, vl_badValues);
+  }
+
+  // Testing the complement of an 'all from' (used on variables, constants and template variables)
+  testcase tc_checkVarComplement() runs on A {
+    var RoI v_roi1 := { 1, 2, 6, 7, 9 };
+    var template integer v_af := complement ( 8, all from v_roi1 );
+
+    var RoI vl_badValues := { 1, 2, 6, 7, 8, 9 };
+    var RoI vl_goodValues := { -99, -10, -1, 0, 3, 4, 5, 10, 11, 20, 99, 100, 101, 102, 200, 1000, 100000000000000 };
+    f_checkIntegerTemplate(v_af, vl_goodValues, vl_badValues);
+  }
+
+  testcase tc_checkConstComplement() runs on A {
+    const RoI c_roi1 := { 1, 2, 6, 7, 9 };
+    var template integer v_af := complement ( 8, all from c_roi1 );
+
+    var RoI vl_badValues := { 1, 2, 6, 7, 8, 9 };
+    var RoI vl_goodValues := { -99, -10, -1, 0, 3, 4, 5, 10, 11, 20, 99, 100, 101, 102, 200, 1000, 100000000000000 };
+    f_checkIntegerTemplate(v_af, vl_goodValues, vl_badValues);
+  }
+
+  testcase tc_checkTempVarComplement() runs on A {
+    var template RoI vt_roi1 := { 1, 2, (6 .. 9) };
+    var template integer v_af := complement ( 11, all from vt_roi1 );
+
+    var RoI vl_badValues := { 1, 2, 6, 7, 8, 9 };
+    var RoI vl_goodValues := { -99, -10, -1, 0, 3, 4, 5, 10, 20, 99, 100, 101, 102, 200, 1000, 100000000000000 };
+    f_checkIntegerTemplate(v_af, vl_goodValues, vl_badValues);
+  }
+
+  // Testing the permutation of an 'all from' (used on variables, constants and template variables)
+  testcase tc_checkVarPermutation() runs on A {
+    var RoI v_roi1 := { 1, 2 };
+    var template RoI v_af := { permutation ( 6, all from v_roi1 ), 7 };
+
+    var RoRoI vl_goodValues := { {1, 2, 6, 7}, {1, 6, 2, 7}, {2, 1, 6, 7}, {2, 6, 1, 7}, {6, 1, 2, 7}, {6, 2, 1, 7}};
+    var RoRoI vl_badValues := { {}, {1}, {1, 2, 6}, {1, 2, 7}, {7, 2, 1, 6}, {-5, 1, 2, 6, 7}, {1, 2, 3, 4}, {7, 6}, {19000000000000, 107, 66, 18} }
+    f_checkRoITemplate(v_af, vl_goodValues, vl_badValues);
+  }
+
+  testcase tc_checkConstPermutation() runs on A {
+    const RoI c_roi1 := { 1, 2 };
+    var template RoI v_af := { permutation ( 6, all from c_roi1 ), 7 };
+
+    var RoRoI vl_goodValues := { {1, 2, 6, 7}, {1, 6, 2, 7}, {2, 1, 6, 7}, {2, 6, 1, 7}, {6, 1, 2, 7}, {6, 2, 1, 7}};
+    var RoRoI vl_badValues := { {}, {1}, {1, 2, 6}, {1, 2, 7}, {7, 2, 1, 6}, {-5, 1, 2, 6, 7}, {1, 2, 3, 4}, {7, 6}, {19000000000000, 107, 66, 18} };
+    f_checkRoITemplate(v_af, vl_goodValues, vl_badValues);
+  }
+
+  testcase tc_checkTempVarPermutation() runs on A {
+    var template RoI vt_roi1 := { (1..3), (2..4) };
+    var template RoI v_af := { permutation ( all from vt_roi1 ), 7 };
+
+    var RoRoI vl_goodValues := { {1, 2, 7}, {2, 2, 7}, {3, 2, 7}, {1, 3, 7}, {2, 3, 7}, {3, 3, 7}, {1, 4, 7}, {2, 4, 7}, {3, 4, 7} };
+    var RoRoI vl_badValues := { {}, {1}, {1, 2, 6}, {1, 2, 3, 7}, {7, 2, 1, 6}, {-5, 1, 2, 7}, {1, 2, 3, 4}, {7, 6}, {19000000000000, 107, 66} };
+    f_checkRoITemplate(v_af, vl_goodValues, vl_badValues);
+  }
+
+  // Testing the subset of an 'all from' (used on variables, constants and template variables)
+  testcase tc_checkVarSubset() runs on A {
+    var RoI v_roi1 := { 1, 2, 3 };
+    var template SoI v_af := subset (all from v_roi1);
+
+    var RoSoI vl_goodValues := { {}, {1}, {2}, {3}, {1, 2}, {1, 3}, {2, 3}, {1, 2 ,3} };
+    var RoSoI vl_badValues := { {4}, {-8}, {6300000000000000000}, {1, 2, 6}, {1, 2, 3, 6}, {1, 1, 2, 3}, {0, 2, 3}, {100, 77777777777, 45454213414} };
+    f_checkSoITemplate(v_af, vl_goodValues, vl_badValues);
+  }
+
+  testcase tc_checkConstSubset() runs on A {
+    const RoI c_roi1 := { 1, 2, 3 };
+    var template SoI v_af := subset (all from c_roi1);
+
+    var RoSoI vl_goodValues := { {}, {1}, {2}, {3}, {1, 2}, {1, 3}, {2, 3}, {1, 2 ,3} };
+    var RoSoI vl_badValues := { {4}, {-8}, {6300000000000000000}, {1, 2, 6}, {1, 2, 3, 6}, {1, 1, 2, 3}, {0, 2, 3}, {100, 77777777777, 45454213414} };
+    f_checkSoITemplate(v_af, vl_goodValues, vl_badValues);
+  }
+
+  testcase tc_checkTempVarSubset() runs on A {
+    var template RoI vt_roi1 := { 1, (2..4) };
+    var template SoI v_af := subset (all from vt_roi1);
+
+    var RoSoI vl_goodValues := { {}, {1}, {2}, {3}, {4}, {1, 2}, {1, 3}, {1, 4} };
+    var RoSoI vl_badValues := { {-8}, {6300000000000000000}, {2, 3}, {1, 2 ,3}, {1, 2, 6}, {1, 2, 3, 6}, {1, 1, 4}, {0, 2, 3}, {77777777777, 45454213414} };
+    f_checkSoITemplate(v_af, vl_goodValues, vl_badValues);
+  }
+
+  // Testing the superset of an 'all from' (used on variables, constants and template variables)
+  testcase tc_checkVarSuperset() runs on A {
+    var RoI v_roi1 := { 1, 2, 3 };
+    var template SoI v_af := superset (all from v_roi1);
+
+    var RoSoI vl_goodValues := { {1, 2, 3}, {1, 2, 3, 0}, {1, 2, 3, 10}, {8, 2, 1, 3}, {3, 2, 1, 0}, {1, 1, 2, 3}, {1, 100, 77777777777, 2, 3, 45454213414} };
+    var RoSoI vl_badValues := { {}, {1}, {2}, {3}, {1, 2}, {1, 3}, {2, 3}, {4}, {-8}, {6300000000000000000}, {1, 2, 6}, {0, 2, 3}, {100, 77777777777, 45454213414} };
+    f_checkSoITemplate(v_af, vl_goodValues, vl_badValues);
+  }
+
+  testcase tc_checkConstSuperset() runs on A {
+    const RoI c_roi1 := { 1, 2, 3 };
+    var template SoI v_af := superset (all from c_roi1);
+
+    var RoSoI vl_goodValues := { {1, 2, 3}, {1, 2, 3, 0}, {1, 2, 3, 10}, {8, 2, 1, 3}, {3, 2, 1, 0}, {1, 1, 2, 3}, {1, 100, 77777777777, 2, 3, 45454213414} };
+    var RoSoI vl_badValues := { {}, {1}, {2}, {3}, {1, 2}, {1, 3}, {2, 3}, {4}, {-8}, {6300000000000000000}, {1, 2, 6}, {0, 2, 3}, {100, 77777777777, 45454213414} };
+    f_checkSoITemplate(v_af, vl_goodValues, vl_badValues);
+  }
+
+  testcase tc_checkTempVarSuperset() runs on A {
+    var template RoI vt_roi1 := { 1, (2..4) };
+    var template SoI v_af := superset (all from vt_roi1);
+
+    var RoSoI vl_goodValues := { {1, 2}, {1, 3}, {1, 2, 3}, {1, 3, 0}, {1, 2, 3, 10}, {8, 2, 1}, {3, 2, 1, 0}, {1, 1, 3}, {1, 100, 77777777777, 3, 45454213414} };
+    var RoSoI vl_badValues := { {}, {1}, {2}, {3},  {2, 3}, {4}, {-8}, {6300000000000000000}, {0, 2, 3}, {100, 77777777777, 45454213414}, {7, 6}, {3, 4} };
+    f_checkSoITemplate(v_af, vl_goodValues, vl_badValues);
+  }
+
+  // Testing 'all from' on template variables that reference themselves
+  // (same with permutation, subset and superset)
+  testcase tc_checkTempVarSelf() runs on A {
+    var template RoI v_af := { 1, (2..4) };
+    v_af := { 7, (all from v_af) };
+
+    var RoRoI vl_goodValues := { {7, 1}, {7, 2}, {7, 3}, {7, 4} };
+    var RoRoI vl_badValues := { {}, {7}, {1}, {2}, {3}, {4}, {7, 0}, {7, 5}, {7, 10}, {7, 98765432123456789}, {1, 2, 3} };
+    f_checkRoITemplate(v_af, vl_goodValues, vl_badValues);
+  }
+
+  testcase tc_checkTempVarSelfPermutation() runs on A {
+    var template RoI v_af := { (1..3), (2..4) };
+    v_af := { permutation ( all from v_af ), 7 };
+
+    var RoRoI vl_goodValues := { {1, 2, 7}, {2, 2, 7}, {3, 2, 7}, {1, 3, 7}, {2, 3, 7}, {3, 3, 7}, {1, 4, 7}, {2, 4, 7}, {3, 4, 7} };
+    var RoRoI vl_badValues := { {}, {1}, {1, 2, 6}, {1, 2, 3, 7}, {7, 2, 1, 6}, {-5, 1, 2, 7}, {1, 2, 3, 4}, {7, 6}, {19000000000000, 107, 66} };
+    f_checkRoITemplate(v_af, vl_goodValues, vl_badValues);
+  }
+
+  testcase tc_checkTempVarSelfSubset() runs on A {
+    var template SoI v_af := { 1, (2..4) };
+    v_af := subset (all from v_af);
+
+    var RoSoI vl_goodValues := { {}, {1}, {2}, {3}, {4}, {1, 2}, {1, 3}, {1, 4} };
+    var RoSoI vl_badValues := { {-8}, {6300000000000000000}, {2, 3}, {1, 2 ,3}, {1, 2, 6}, {1, 2, 3, 6}, {1, 1, 4}, {0, 2, 3}, {77777777777, 45454213414} };
+    f_checkSoITemplate(v_af, vl_goodValues, vl_badValues);
+  }
+
+  testcase tc_checkTempVarSelfSuperset() runs on A {
+    var template SoI v_af := { 1, (2..4) };
+    v_af := superset (all from v_af);
+
+    var RoSoI vl_goodValues := { {1, 2}, {1, 3}, {1, 2, 3}, {1, 3, 0}, {1, 2, 3, 10}, {8, 2, 1}, {3, 2, 1, 0}, {1, 1, 3}, {1, 100, 77777777777, 3, 45454213414} };
+    var RoSoI vl_badValues := { {}, {1}, {2}, {3},  {2, 3}, {4}, {-8}, {6300000000000000000}, {0, 2, 3}, {100, 77777777777, 45454213414}, {7, 6}, {3, 4} };
+    f_checkSoITemplate(v_af, vl_goodValues, vl_badValues);
+  }
+
+  // Testing 'all from' and self referencing on function parameters
+  function f_all_from_par(inout template RoI p_af) runs on A {
+    p_af := { 7, (all from p_af) };
+  }
+
+  testcase tc_checkTempParSelf() runs on A {
+    var template RoI v_af := { 1, (2..4) };
+    f_all_from_par(v_af);
+    
+    var RoRoI vl_goodValues := { {7, 1}, {7, 2}, {7, 3}, {7, 4} };
+    var RoRoI vl_badValues := { {}, {7}, {1}, {2}, {3}, {4}, {7, 0}, {7, 5}, {7, 10}, {7, 98765432123456789}, {1, 2, 3} };
+    f_checkRoITemplate(v_af, vl_goodValues, vl_badValues);
+  }
+
+  // Testing 'all from' and self referencing on template variables in the parameter lists of
+  // function calls and parametrised templates
+  function f_do_nothing(in template RoI p_temp) runs on A return template RoI {
+    return p_temp;
+  }
+
+  function f_do_nothing2(in template integer p_ti, in template RoI p_temp) runs on A return template RoI {
+    return p_temp;
+  }
+
+  function f_do_nothing_io(inout template RoI p_temp) runs on A return template RoI {
+    return p_temp;
+  }
+
+  testcase tc_checkTempVarFuncSelf() runs on A {
+    var template RoI v_af := { 1, (2..4) };
+    v_af := { 7, ( all from f_do_nothing(v_af) ) };
+
+    var RoRoI vl_goodValues := { {7, 1}, {7, 2}, {7, 3}, {7, 4} };
+    var RoRoI vl_badValues := { {}, {7}, {1}, {2}, {3}, {4}, {7, 0}, {7, 5}, {7, 10}, {7, 98765432123456789}, {1, 2, 3} };
+    f_checkRoITemplate(v_af, vl_goodValues, vl_badValues);
+  }
+
+  testcase tc_checkTempVarFuncSelf2() runs on A {
+    var template RoI v_af := { 1, (2..4) };
+    v_af := { 7, ( all from f_do_nothing_io(v_af) ) };
+
+    var RoRoI vl_goodValues := { {7, 1}, {7, 2}, {7, 3}, {7, 4} };
+    var RoRoI vl_badValues := { {}, {7}, {1}, {2}, {3}, {4}, {7, 0}, {7, 5}, {7, 10}, {7, 98765432123456789}, {1, 2, 3} };
+    f_checkRoITemplate(v_af, vl_goodValues, vl_badValues);
+  }
+
+  testcase tc_checkTempVarFuncSelf3() runs on A {
+    var template RoI v_af := { 1, (2..4) };
+    v_af := { 7, ( all from f_do_nothing2(0, v_af) ) };
+
+    var RoRoI vl_goodValues := { {7, 1}, {7, 2}, {7, 3}, {7, 4} };
+    var RoRoI vl_badValues := { {}, {7}, {1}, {2}, {3}, {4}, {7, 0}, {7, 5}, {7, 10}, {7, 98765432123456789}, {1, 2, 3} };
+    f_checkRoITemplate(v_af, vl_goodValues, vl_badValues);
+  }
+
+  testcase tc_checkTempVarFuncSelf4() runs on A {
+    var template RoI v_af := { 1, (2..4) };
+    v_af := { 7, ( all from f_do_nothing(f_do_nothing2(0, f_do_nothing(f_do_nothing2(7, v_af)))) ) };
+
+    var RoRoI vl_goodValues := { {7, 1}, {7, 2}, {7, 3}, {7, 4} };
+    var RoRoI vl_badValues := { {}, {7}, {1}, {2}, {3}, {4}, {7, 0}, {7, 5}, {7, 10}, {7, 98765432123456789}, {1, 2, 3} };
+    f_checkRoITemplate(v_af, vl_goodValues, vl_badValues);
+  }
+
+  template RoI t_pard(in template RoI t_r) := t_r;
+
+  testcase tc_checkTempVarTempPardSelf() runs on A {
+    var template RoI v_af := { 1, (2..4) };
+    v_af := { 7, ( all from t_pard(v_af) ) };
+
+    var RoRoI vl_goodValues := { {7, 1}, {7, 2}, {7, 3}, {7, 4} };
+    var RoRoI vl_badValues := { {}, {7}, {1}, {2}, {3}, {4}, {7, 0}, {7, 5}, {7, 10}, {7, 98765432123456789}, {1, 2, 3} };
+    f_checkRoITemplate(v_af, vl_goodValues, vl_badValues);
+  }
+
+  testcase tc_checkTempVarComboSelf() runs on A {
+    var template RoI v_af := { 1, (2..4) };
+    v_af := { 7, ( all from f_do_nothing2(5, t_pard(f_do_nothing(v_af))) ) };
+
+    var RoRoI vl_goodValues := { {7, 1}, {7, 2}, {7, 3}, {7, 4} };
+    var RoRoI vl_badValues := { {}, {7}, {1}, {2}, {3}, {4}, {7, 0}, {7, 5}, {7, 10}, {7, 98765432123456789}, {1, 2, 3} };
+    f_checkRoITemplate(v_af, vl_goodValues, vl_badValues);
+  }
+
+  control {
+    execute(tc_checkVar());
+    execute(tc_checkConst());
+    execute(tc_checkTempVar());
+    execute(tc_checkVarComplement());
+    execute(tc_checkConstComplement());
+    execute(tc_checkTempVarComplement());
+    execute(tc_checkVarPermutation());
+    execute(tc_checkConstPermutation());
+    execute(tc_checkTempVarPermutation());
+    execute(tc_checkVarSubset());
+    execute(tc_checkConstSubset());
+    execute(tc_checkTempVarSubset());
+    execute(tc_checkVarSuperset());
+    execute(tc_checkConstSuperset());
+    execute(tc_checkTempVarSuperset());
+    execute(tc_checkTempVarSelf());
+    execute(tc_checkTempVarSelfPermutation());
+    execute(tc_checkTempVarSelfSubset());
+    execute(tc_checkTempVarSuperset());
+    execute(tc_checkTempParSelf());
+    execute(tc_checkTempVarFuncSelf());
+    execute(tc_checkTempVarFuncSelf2());
+    execute(tc_checkTempVarFuncSelf3());
+    execute(tc_checkTempVarFuncSelf4());
+    execute(tc_checkTempVarTempPardSelf());
+    execute(tc_checkTempVarComboSelf());
+  }
+}
diff --git a/Regression_Test_java/src/all_from/all_from_with_functions.ttcn b/Regression_Test_java/src/all_from/all_from_with_functions.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..2c3145f9cf30c4121a42d4d4749b5d61fc3fd9e4
--- /dev/null
+++ b/Regression_Test_java/src/all_from/all_from_with_functions.ttcn
@@ -0,0 +1,195 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Baranyi, Botond
+ *
+ ******************************************************************************/
+module all_from_with_functions {
+
+//for TR: HR91302 - compiler core dump if function called in "all from"
+
+//external function f_ext(in template RoI r) return template RoI;
+
+type record of integer RoI with { encode "JSON" };
+type set of integer SoI;
+
+type record Rec {
+  integer i,
+  charstring s
+}
+type record of Rec RoRec;
+
+function f_dummy(in template RoI r) return template RoI
+{
+  return r;
+}
+
+function f_dummy2(in template RoI r, in template RoI p) return template RoI
+{
+  return p;
+}
+
+function f_set(in template SoI s) return template SoI
+{
+  return s;
+}
+
+function f_rec(in template RoRec tr) return template RoRec
+{
+  return tr;
+}
+
+type port PT_Empty message 
+{
+  inout integer;
+} with {extension "internal"}
+
+type component CT_Empty {
+  port PT_Empty pt;
+}
+
+function square(in integer i) return integer {
+  return i * i;
+}
+
+template RoI t_roi(integer i) := { 1, 2, 3, i };
+template RoI t_roi2(integer i) := { 1, 2, 3, square(i) }
+
+testcase tc_all_from_with_functions() runs on CT_Empty {
+  var template RoI t1 := { permutation ( all from f_dummy2( {1, 2}, {3, 4} ) ) };
+  var template RoI t2 := f_dummy2( { 1, 2}, {3, 4} );
+  var template RoI t3 := { permutation (all from t2) };
+//  var template RoI t4 := { permutation ( all from f_ext( {1, 2} ) ) };
+  var template integer t5 := (1, 2, all from f_dummy( {1, 2, (6..9)} ), 10);
+  var template integer t6 := complement (1, 2, all from f_dummy( {1, 2, (6..9)} ), 10);
+  var template SoI t7 := subset (1, 2, all from f_dummy( {3, 4} ), 5) length (2..3);
+  var template SoI t8 := superset (1, 2, all from f_dummy( {3, 4} ), 5) length (6..8);
+  var template integer t9 := (1, 2, all from f_set( {3, 4} ), 6);
+  var template SoI t10 := { t9, ( all from f_set( { (20..30) } ) ) };
+  var template Rec t11 := ( {10, "ten"}, all from f_rec( { {1, "one"}, {2, "two"}, {3, "three"} } ) );
+  var template integer t12 := ( all from t_roi(6) );
+  var template integer t13 := ( all from t_roi2(4) );
+
+  //log("t1=", t1);
+  //log("t2=", t2);
+  //log("t3=", t3);
+  //log("t4=", t4);
+  //log("t5=", t5);
+  //log("t6=", t6);
+  //log("t7=", t7);
+  //log("t8=", t8);
+  //log("t9=", t9);
+  //log("t10=", t10);
+  //log("t11=", t11);
+  //log("t12=", t12);
+  //log("t13=", t13);
+
+  if (log2str(t1) == "{ permutation(3, 4) }" and log2str(t2) == "{ 3, 4 }" and
+    log2str(t3) == "{ permutation(3, 4) }" /*and log2str(t4) == "{ permutation(1, 2) }"*/ and
+    log2str(t5) == "(1, 2, 1, 2, (6 .. 9), 10)" and 
+    log2str(t6) == "complement(1, 2, 1, 2, (6 .. 9), 10)" and
+    log2str(t7) == "subset(1, 2, 3, 4, 5) length (2 .. 3)" and
+    log2str(t8) == "superset(1, 2, 3, 4, 5) length (6 .. 8)" and
+    log2str(t9) == "(1, 2, 3, 4, 6)" and log2str(t10) == "{ (1, 2, 3, 4, 6), ((20 .. 30)) }" and
+    log2str(t11) == "({ i := 10, s := \"ten\" }, { i := 1, s := \"one\" }, " &
+      "{ i := 2, s := \"two\" }, { i := 3, s := \"three\" })" and
+    log2str(t12) == "(1, 2, 3, 6)" and log2str(t13) == "(1, 2, 3, 16)")
+  { setverdict(pass) }
+  else { setverdict(fail) }
+}
+
+// all from with function (formal) parameters
+function f_all_from_params(in RoI p_in, inout RoI p_inout,
+                           in template RoI pt_in, inout template RoI pt_inout)
+                           runs on CT_Empty
+                           return template integer {
+  return (1, 2, all from p_in, all from p_inout, all from pt_in, all from pt_inout);
+}
+
+testcase tc_all_from_func_params() runs on CT_Empty {
+  const RoI c_twenties := { 20, 21, 22 };
+  var RoI v_thirties := { 30, 31, 32, 33 };
+  template RoI t_fifties := { 50, 56, 59 };
+  var template RoI vt_sixties := { 63, 64, 66, 67 };
+
+  var template integer vt_res := f_all_from_params(c_twenties, v_thirties, t_fifties, vt_sixties);
+  const charstring c_res_log := "(1, 2, 20, 21, 22, 30, 31, 32, 33, 50, 56, 59, 63, 64, 66, 67)";
+  if (log2str(vt_res) == c_res_log) { setverdict(pass); }
+  else { setverdict(fail, "Expected: ", c_res_log, ", got: ", vt_res); }
+}
+
+function f_non_templ(in RoI x) return RoI
+{
+  return x;
+}
+
+//external function f_dec_roi(in octetstring os) return RoI
+//  with { extension "prototype(convert) decode(JSON)" }
+
+// all from used on regular (non-template) functions
+//testcase tc_all_from_with_functions2() runs on CT_Empty
+//{
+//  var template RoI vt_func_roi := { permutation ( all from f_non_templ( { 1, 4, 7, 10 } ) ) };
+//  var template integer vt_func_int := ( 0, 1, all from f_non_templ( { 3, 6, 9 } ) );
+//
+//  var octetstring v_enc := char2oct("[ 4, 2, 10, 100 ]");
+//  var template RoI vt_ext_func_roi := { permutation ( all from f_dec_roi(v_enc) ) };
+//  var template integer vt_ext_func_int := ( 0, 1, all from f_dec_roi(v_enc) );
+//
+//  var charstring v_res_log := "{ permutation(1, 4, 7, 10) }";
+//  if (log2str(vt_func_roi) != v_res_log) {
+//    setverdict(fail, "Expected: ", v_res_log, ", got: ", vt_func_roi);
+//  }
+//
+//  v_res_log := "(0, 1, 3, 6, 9)";
+//  if (log2str(vt_func_int) != v_res_log) {
+//    setverdict(fail, "Expected: ", v_res_log, ", got: ", vt_func_int);
+//  }
+//
+//  v_res_log := "{ permutation(4, 2, 10, 100) }";
+//  if (log2str(vt_ext_func_roi) != v_res_log) {
+//    setverdict(fail, "Expected: ", v_res_log, ", got: ", vt_ext_func_roi);
+//  }
+//
+//  v_res_log := "(0, 1, 4, 2, 10, 100)";
+//  if (log2str(vt_ext_func_int) != v_res_log) {
+//    setverdict(fail, "Expected: ", v_res_log, ", got: ", vt_ext_func_int);
+//  }
+//
+//  setverdict(pass);
+//}
+
+// all from used in function actual parameters
+template RoI t := { 6, 8 };
+template RoI t_func_par := f_dummy( { 1, 2, all from t });
+template RoI t_func_par_exp := { 1, 2, 6, 8 };
+
+testcase tc_all_from_func_params2() runs on CT_Empty
+{
+  if (log2str(t_func_par) != log2str(t_func_par_exp)) {
+    setverdict(fail, "Template test failed. Expected: ", t_func_par_exp, ", got: ", t_func_par);
+  }
+  
+  var template RoI vt_func_par := f_dummy( { 1, 2, all from t });
+  if (log2str(vt_func_par) != log2str(t_func_par_exp)) {
+    setverdict(fail, "Var template test failed. Expected: ", t_func_par_exp, ", got: ", vt_func_par);
+  }
+  
+  setverdict(pass);
+}
+
+
+control {
+  execute(tc_all_from_with_functions());
+  execute(tc_all_from_func_params());
+//  execute(tc_all_from_with_functions2());
+  execute(tc_all_from_func_params2());
+}
+
+}
diff --git a/Regression_Test_java/src/all_from/everything.ttcn b/Regression_Test_java/src/all_from/everything.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..a9045ba2003d5b731b5512fc242527e0210240dc
--- /dev/null
+++ b/Regression_Test_java/src/all_from/everything.ttcn
@@ -0,0 +1,317 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Raduly, Csaba
+ *
+ ******************************************************************************/
+module everything
+{
+type record of integer RoI;
+type set    of integer SoI;
+
+type set of integer MySetOfType (0 .. 10);
+
+type component A {}
+
+/****************************************************************/
+
+// B 1.2.1 Template List
+
+template RoI t_RoI1 := {1, 2, (6..9)};
+template RoI t_RoI2 := {1, *, 3};
+
+template integer t_i1 := (all from t_RoI1, 100);
+// equivalent to         (1, 2, (6..9)   , 100);
+
+testcase tc1() runs on A
+{
+  var integer v_i;
+  action("t_i1=", t_i1);
+
+  v_i := 1;
+  if (match(v_i, t_i1)) { setverdict(pass); }
+  else { setverdict(fail, v_i, " should match ", t_i1); }
+
+  v_i := 2;
+  if (match(v_i, t_i1)) { setverdict(pass); }
+  else { setverdict(fail, v_i, " should match ", t_i1); }
+
+  v_i := 3;
+  if (not match(v_i, t_i1)) { setverdict(pass); }
+  else { setverdict(fail, v_i, " should NOT match ", t_i1); }
+
+  v_i := 4;
+  if (not match(v_i, t_i1)) { setverdict(pass); }
+  else { setverdict(fail, v_i, " should NOT match ", t_i1); }
+
+  v_i := 5;
+  if (not match(v_i, t_i1)) { setverdict(pass); }
+  else { setverdict(fail, v_i, " should NOT match ", t_i1); }
+
+  v_i := 6;
+  if (match(v_i, t_i1)) { setverdict(pass); }
+  else { setverdict(fail, v_i, " should match ", t_i1); }
+
+  v_i := 10;
+  if (not match(v_i, t_i1)) { setverdict(pass); }
+  else { setverdict(fail, v_i, " should NOT match ", t_i1); }
+
+  v_i := 100;
+  if (match(v_i, t_i1)) { setverdict(pass); }
+  else { setverdict(fail, v_i, " should match ", t_i1); }
+}
+
+// now correctly reported by Titan
+//template integer t_i2 := (0, all from t_RoI2); // causes an error because t_RoI2 contains AnyElementsOrNone
+
+//testcase tc2() runs on A
+//{
+//  action ("t_i2=", t_i2)
+//}
+
+/* TODO: different errors are reported
+template RoI t_RoI3 := (all from t_RoI1); // causes an error because member type of
+                                          // t_RoI1 (integer) is not compatible with the list template type (RoI)
+
+template RoI t_RoI4 := ?;
+
+template RoI t_RoI5 := (all from t_RoI4); // causes an error because t_RoI4 resolves into a matching mechanism
+*/
+
+//template RoI t_RoI1 := {1, 2, (6..9)};
+//template RoI t_RoI2 := {1, *, 3};
+
+// B 1.2.2 Complemented Template List
+/*
+template RoI t_RoI1c := {1, 2, (6..9)};
+template RoI t_RoI2c := {1, *, 3};
+*/
+template integer t_i1c := complement(all from t_RoI1, 100); // results in (1, 2, (6..9), 100)
+
+// This is exactly the opposite of the testcase in all_from
+testcase tc_compl() runs on A
+{
+  var integer v_i;
+  action("t_i1c=", t_i1c);
+
+  v_i := 1;
+  if (not match(v_i, t_i1c)) { setverdict(pass); }
+  else { setverdict(fail, v_i, " should NOT match ", t_i1c); }
+
+  v_i := 2;
+  if (not match(v_i, t_i1c)) { setverdict(pass); }
+  else { setverdict(fail, v_i, " should NOT match ", t_i1c); }
+
+  v_i := 3;
+  if (match(v_i, t_i1c)) { setverdict(pass); }
+  else { setverdict(fail, v_i, " should match ", t_i1c); }
+
+  v_i := 4;
+  if (match(v_i, t_i1c)) { setverdict(pass); }
+  else { setverdict(fail, v_i, " should match ", t_i1c); }
+
+  v_i := 5;
+  if (match(v_i, t_i1c)) { setverdict(pass); }
+  else { setverdict(fail, v_i, " should match ", t_i1c); }
+
+  v_i := 6;
+  if (not match(v_i, t_i1c)) { setverdict(pass); }
+  else { setverdict(fail, v_i, " should NOT match ", t_i1c); }
+
+  v_i := 10;
+  if (match(v_i, t_i1c)) { setverdict(pass); }
+  else { setverdict(fail, v_i, " should match ", t_i1c); }
+
+  v_i := 100;
+  if (not match(v_i, t_i1c)) { setverdict(pass); }
+  else { setverdict(fail, v_i, " should NOT match ", t_i1c); }
+}
+
+// correctly diagnosed by Titan
+//template integer t_i2c := complement(0, all from t_RoI2);   // causes an error because t_RoI2 contains AnyElementsOrNone
+
+//template RoI   t_RoI3c := complement(all from t_RoI1);      // causes an error because member type of t_RoI1 (integer) is not compatible
+//                                                            // with the complemented list template type (RoI)
+//
+// The errors for the above are the same as the errors for the one below :)
+//
+//template RoI t_RoI3c_direct := complement(1, 2, (6..9))
+
+/*
+template RoI t_RoI4c   := ?;
+template RoI t_RoI5c   := complement (all from t_RoI4c); 
+    // causes an error because t_RoI4 resolves into a matching mechanism
+    // now correctly signalled by titan
+*/
+//template RoI t_RoI1 := {1, 2, (6..9)};
+//template RoI t_RoI2 := {1, *, 3};
+
+// B 1.2.6 Superset
+
+//EXAMPLE 1:
+
+    template MySetOfType MyTemplate1 := superset (1, 2, 3);
+    // matches any sequence of integers which contains at least one occurrences of the numbers
+    // 1, 2 and 3 in any order and position
+
+    template MySetOfType MyTemplate2_AnyValue := superset (1, 2, ?);
+    // matches any sequence of integers which contains at least one occurrences of the numbers
+    // 1, 2 and at least one more valid integer value (i.e. between 0 and 10, inclusively), in any
+    // order and position
+
+    template MySetOfType MyTemplate3 := superset (1, 2, (3, 4));
+    // matches any sequence of integers which contains at least one occurrences of the numbers
+    // 1, 2 and a number with the value 3 or 4, in any order and position
+
+    template MySetOfType MyTemplate4 := superset (1, 2, complement(3, 4));
+    // any sequence of integers matches which contains at least one occurrences of the numbers
+    // 1, 2 and a valid integer value which is not 3 or 4, in any order and position
+
+    template MySetOfType MyTemplate6 := superset (1, 2, 3) length (7);
+    // matches any sequence of 7 integers which contains at least one occurrences of the numbers
+    // 1, 2 and 3 in any order and position
+
+    template MySetOfType MyTemplate7 := superset (1, 2, ?) length (7 .. infinity);
+    // matches any sequence of at least 7 integers which contains at least one occurrences of the
+    // numbers 1, 2 and 3 in any order and position
+
+    template MySetOfType MyTemplate8 := superset (1, 2, 3) length (2 .. 7);
+    // causes an error, the lower bound of the length attribute contradicts to the minimum number
+    // of elements imposed by the superset argument
+
+//EXAMPLE 2:
+    template RoI t_RoI1s := {1, 2, ?};
+    template SoI t_SoI1s := superset(all from t_RoI1s); 
+        // results in superset(1, 2, ?)
+
+testcase tc_superset() runs on A
+{
+  action("superset: ", t_SoI1s);
+}
+
+//template RoI t_RoI1 := {1, 2, (6..9)};
+//template RoI t_RoI2 := {1, *, 3};
+
+// B.1.2.7    SubSet
+//EXAMPLE 1:
+    template MySetOfType MyTemplate1_ := subset (1, 2, 3);
+    // matches any sequence of integers which contains zero or one occurrences of the numbers
+    // 1, 2 and 3 in any order and position
+
+    template MySetOfType MyTemplate2_ := subset (1, 2, ?);
+    // matches any sequence of integers which contains zero or one occurrences of the numbers
+    // 1, 2 and a valid integer value (i.e. between 0 and 10, inclusive) in any order and position
+
+    template MySetOfType MyTemplate3_ := subset (1, 2, (3, 4));
+    // matches any sequence of integers which contains zero or one occurrences of the numbers
+    // 1, 2 and one of the numbers 3 or 4, in any order and position
+
+    template MySetOfType MyTemplate4_ := subset (1, 2, complement (3, 4));
+    // matches any sequence of integers which contains zero or one occurrences of the numbers
+    // 1, 2 and a valid integer number which is not 3 or 4, in any order and position
+
+    template MySetOfType MyTemplate5_ := subset (1, 2, 3) length (2);
+    // matches any sequence of two integers which contains zero or one occurrences of
+    // the numbers 1, 2 and 3, in any order and position
+
+    template MySetOfType MyTemplate6_ := subset (1, 2, ?) length (0 .. 2);
+    // matches any sequence of zero, one or two integers which contains zero or one occurrences of
+    // the numbers 1, 2 and of a valid integer value, in any order and position
+
+    template MySetOfType MyTemplate7_ := subset (1, 2, 3) length (0 .. 4);
+    // causes an error, the upper bound of length attribute contradicts to the maximum number of
+    // elements imposed by the subset argument
+
+//EXAMPLE 2:
+    template RoI t_RoI1_ := {1, 2, ?};
+    template SoI t_SoI1_ := subset(all from t_RoI1_); 
+    // results in subset(1, 2, ?)
+
+testcase tc_subset() runs on A
+{
+  action("subset: ", t_SoI1_);
+}
+
+//template RoI t_RoI1 := {1, 2, (6..9)};
+//template RoI t_RoI2 := {1, *, 3};
+
+// B.1.3.3    Permutation
+//EXAMPLE 1:
+    type RoI MySequenceOfType;
+
+    template MySequenceOfType MyTemplate1p := { permutation ( 1, 2, 3 ), 5 };
+    // matches any of the following sequences of 4 integers: 1,2,3,5; 1,3,2,5; 2,1,3,5;
+    // 2,3,1,5; 3,1,2,5; or 3,2,1,5
+
+    template MySequenceOfType MyTemplate2p := { permutation ( 1, 2, ? ), 5 };
+    // matches any sequence of 4 integers that ends with 5 and contains 1 and 2 at least once in
+    // other positions
+
+    template MySequenceOfType MyTemplate3p := { permutation ( 1, 2, 3 ), * };
+    // matches any sequence of integers starting with 1,2,3; 1,3,2; 2,1,3; 2,3,1; 3,1,2 or 3,2,1
+
+    template MySequenceOfType MyTemplate4p := { *, permutation ( 1, 2, 3 )};
+    // matches any sequence of integers ending with 1,2,3; 1,3,2; 2,1,3; 2,3,1; 3,1,2 or 3,2,1
+
+    template MySequenceOfType MyTemplate5p := { *, permutation ( 1, 2, 3 ),* };
+    // matches any sequence of integers containing any of the following substrings at any position:
+    // 1,2,3; 1,3,2; 2,1,3; 2,3,1; 3,1,2 or 3,2,1 
+
+    template MySequenceOfType MyTemplate6p := { permutation ( 1, 2, * ), 5 };
+    // matches any sequence of integers that ends with 5 and containing 1 and 2 at least once in
+    // other positions
+
+//error by Titan: Length restriction cannot be used in a template of type `integer'
+//    template MySequenceOfType MyTemplate7p := { permutation ( 1, 2, 3 ), * length (0..5) };
+    // matches any sequence of three to eight integers starting with 1,2,3; 1,3,2; 2,1,3; 2,3,1;
+    // 3,1,2 or 3,2,1
+
+    template integer MyInt1 := (1,2,3);
+    template integer MyInt2 := (1,2,?);
+    template integer MyInt3 := ?;
+    template integer MyInt4 := *;
+
+    template MySequenceOfType MyTemplate10 := { permutation (MyInt1, 2, 3 ), 5 };
+    // matches any of the sequences of 4 integers:
+    //        1,3,2,5; 2,1,3,5; 2,3,1,5; 3,1,2,5; or 3,2,1,5;
+    //        2,3,2,5; 2,2,3,5; 2,3,2,5; 3,2,2,5; or 3,2,2,5;
+    //        3,3,2,5; 2,3,3,5; 2,3,3,5; 3,3,2,5; or 3,2,3,5;
+
+    template MySequenceOfType MyTemplate11 := { permutation (MyInt2, 2, 3 ), 5 };
+    // matches any sequence of 4 integers that ends with 5 and contains 2 and 3 at least once in
+    // other positions
+
+    template MySequenceOfType MyTemplate12 := { permutation (MyInt3, 2, 3 ), 5 };
+    // matches any sequence of 4 integers that ends with 5 and contains 2 and 3 at least once in
+    // other positions
+
+    template MySequenceOfType MyTemplate13 := { permutation (MyInt4, 2, 3 ), 5 };
+    // matches any sequence of integers that ends with 5 and containing 2 and 3 at least once in
+    // other positions
+
+    template MySequenceOfType MyTemplate14 := { permutation (MyInt3, 2, ? ), 5 };
+    // matches any sequence of 4 integers that ends with 5 and contains 2 at least once in
+    // other positions
+
+    template MySequenceOfType MyTemplate15 := { permutation (MyInt4, 2, * ), 5 };
+    // matches any sequence of integers that ends with 5 and contains 2 at least once in
+    // other positions
+
+//EXAMPLE 2:
+    template RoI t_RoI1p := {1, 2, *};
+    template RoI t_RoI2p := {permutation(0, all from t_RoI1p), 4, 5}; 
+    // results in {permutation(0, 1, 2, *), 4, 5}
+
+testcase tc_permut() runs on A
+{
+  action("permut: ", t_RoI2p);
+}
+
+
+}  // end of module
diff --git a/Regression_Test_java/src/all_from/functions.ttcn b/Regression_Test_java/src/all_from/functions.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..babedf9c38db9b528d4f89cf7f8b174112963388
--- /dev/null
+++ b/Regression_Test_java/src/all_from/functions.ttcn
@@ -0,0 +1,234 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Raduly, Csaba
+ *
+ ******************************************************************************/
+module functions {
+import from types all;
+
+//************************* Functions ******************************
+
+
+function f_checkIntegerTemplate(in template integer pl_template,in RoI pl_goodValues, in RoI pl_badValues) {
+
+  action("template=", pl_template, " will be checked against ",pl_goodValues);
+  
+  var integer N:=sizeof(pl_goodValues);
+  for(var integer i:=0;i<N;i:=i+1) {
+    if (match(pl_goodValues[i], pl_template)) { setverdict(pass); }
+    else { setverdict(fail,pl_goodValues[i], " should match ", pl_template); }
+  }
+
+  action("template=", pl_template, " will be checked against ",pl_badValues);
+  N:=sizeof(pl_badValues);
+  for(var integer i:=0;i<N;i:=i+1) {
+    if (not match(pl_badValues[i], pl_template)) { setverdict(pass); }
+    else { setverdict(fail,pl_badValues[i], " should not match ", pl_template); }
+  }
+  
+}
+with { extension "transparent" }
+
+function f_checkCharstringTemplate(in template charstring pl_template,in RoCS pl_goodValues, in RoCS pl_badValues) {
+
+  action("template=", pl_template, " will be checked against ",pl_goodValues);
+
+  var integer N:=sizeof(pl_goodValues);
+  for(var integer i:=0;i<N;i:=i+1) {
+    if (match(pl_goodValues[i], pl_template)) { setverdict(pass); }
+    else { setverdict(fail,pl_goodValues[i], " should match ", pl_template); }
+  }
+
+  action("template=", pl_template, " will be checked against ",pl_badValues);
+  N:=sizeof(pl_badValues);
+  for(var integer i:=0;i<N;i:=i+1) {
+    if (not match(pl_badValues[i], pl_template)) { setverdict(pass); }
+    else { setverdict(fail,pl_badValues[i], " should not match ", pl_template); }
+  }
+
+}
+with { extension "transparent" }
+
+function f_checkOctetstringTemplate(in template octetstring pl_template,in RoOS pl_goodValues, in RoOS pl_badValues) {
+
+  action("template=", pl_template, " will be checked against ",pl_goodValues);
+
+  var integer N:=sizeof(pl_goodValues);
+  for(var integer i:=0;i<N;i:=i+1) {
+    if (match(pl_goodValues[i], pl_template)) { setverdict(pass); }
+    else { setverdict(fail,pl_goodValues[i], " should match ", pl_template); }
+  }
+
+  action("template=", pl_template, " will be checked against ",pl_badValues);
+  N:=sizeof(pl_badValues);
+  for(var integer i:=0;i<N;i:=i+1) {
+    if (not match(pl_badValues[i], pl_template)) { setverdict(pass); }
+    else { setverdict(fail,pl_badValues[i], " should not match ", pl_template); }
+  }
+
+}
+function f_checkRoITemplate(in template RoI pl_template,in RoRoI pl_goodValues, in RoRoI pl_badValues) {
+
+  action("template=", pl_template, " will be checked against ",pl_goodValues);
+  
+  var integer N:=sizeof(pl_goodValues);
+  for(var integer i:=0;i<N;i:=i+1) {
+    if (match(pl_goodValues[i], pl_template)) { setverdict(pass); }
+    else { setverdict(fail,pl_goodValues[i], " should match ", pl_template); }
+  }
+
+  action("template=", pl_template, " will be checked against ",pl_badValues);
+  N:=sizeof(pl_badValues);
+  for(var integer i:=0;i<N;i:=i+1) {
+    if (not match(pl_badValues[i], pl_template)) { setverdict(pass); }
+    else { setverdict(fail,pl_badValues[i], " should not match ", pl_template); }
+  }
+
+}
+with { extension "transparent" }
+
+function f_checkSoITemplate(in template SoI pl_template,in RoSoI pl_goodValues, in RoSoI pl_badValues) {
+
+  action("template=", pl_template, " will be checked against ",pl_goodValues);
+
+  var integer N:=sizeof(pl_goodValues);
+  for(var integer i:=0;i<N;i:=i+1) {
+    if (match(pl_goodValues[i], pl_template)) { setverdict(pass); }
+    else { setverdict(fail,pl_goodValues[i], " should match ", pl_template); }
+  }
+
+  action("template=", pl_template, " will be checked against ",pl_badValues);
+  N:=sizeof(pl_badValues);
+  for(var integer i:=0;i<N;i:=i+1) {
+    if (not match(pl_badValues[i], pl_template)) { setverdict(pass); }
+    else { setverdict(fail,pl_badValues[i], " should not match ", pl_template); }
+  }
+
+}
+with { extension "transparent" }
+
+function f_checkMyRecTemplate(in template MyRecord pl_template,in RoMyRec pl_goodValues, in RoMyRec pl_badValues) {
+
+  action("template=", pl_template, " will be checked against ",pl_goodValues);
+
+  var integer N:=sizeof(pl_goodValues);
+  for(var integer i:=0;i<N;i:=i+1) {
+    if (match(pl_goodValues[i], pl_template)) { setverdict(pass); }
+    else { setverdict(fail,pl_goodValues[i], " should match ", pl_template); }
+  }
+
+  action("template=", pl_template, " will be checked against ",pl_badValues);
+  N:=sizeof(pl_badValues);
+  for(var integer i:=0;i<N;i:=i+1) {
+    if (not match(pl_badValues[i], pl_template)) { setverdict(pass); }
+    else { setverdict(fail,pl_badValues[i], " should not match ", pl_template); }
+  }
+
+}
+
+function f_checkMyUnionTemplate(in template MyUnion pl_template,in RoMyUnion pl_goodValues, in RoMyUnion pl_badValues) {
+
+  action("template=", pl_template, " will be checked against ",pl_goodValues);
+
+  var integer N:=sizeof(pl_goodValues);
+  for(var integer i:=0;i<N;i:=i+1) {
+    if (match(pl_goodValues[i], pl_template)) { setverdict(pass); }
+    else { setverdict(fail,pl_goodValues[i], " should match ", pl_template); }
+  }
+
+  action("template=", pl_template, " will be checked against ",pl_badValues);
+  N:=sizeof(pl_badValues);
+  for(var integer i:=0;i<N;i:=i+1) {
+    if (not match(pl_badValues[i], pl_template)) { setverdict(pass); }
+    else { setverdict(fail,pl_badValues[i], " should not match ", pl_template); }
+  }
+
+}
+//==== Equivalence ====
+
+function f_checkSoITemplateEquivalence(in template SoI pl_template1, in template SoI pl_template2) {
+  action("template1=",pl_template1," check against ",pl_template2);
+  if(log2str(pl_template1)==log2str(pl_template2)) {setverdict(pass);} else {setverdict(fail,"template1=",pl_template1," should match against ",pl_template2 );}
+}
+with { extension "transparent" }
+
+function f_checkRoITemplateEquivalence(in template RoI pl_template1, in template RoI pl_template2) {
+  action("template1=",pl_template1," check against ",pl_template2);
+  if(log2str(pl_template1)==log2str(pl_template2)) {setverdict(pass);} else {setverdict(fail,"template1=",pl_template1," should match against ",pl_template2 );}
+}
+with { extension "transparent" }
+
+function f_checkRoCSTemplateEquivalence(in template RoCS pl_template1, in template RoCS pl_template2) {
+  action("template1=",pl_template1," check against ",pl_template2);
+  if(log2str(pl_template1)==log2str(pl_template2)) {setverdict(pass);} else {setverdict(fail,"template1=",pl_template1," should match against ",pl_template2 );}
+}
+function f_checkIntTemplateEquivalence(in template integer pl_template1, in template integer pl_template2) {
+  action("template1=",pl_template1," check against ",pl_template2);
+  if(log2str(pl_template1)==log2str(pl_template2)) {setverdict(pass);} else {setverdict(fail,"template1=",pl_template1," should match against ",pl_template2 );}
+}
+with { extension "transparent" }
+
+function f_checkCharstringTemplateEquivalence(in template charstring pl_template1, in template charstring pl_template2) {
+  action("template1=",pl_template1," check against ",pl_template2);
+  if(log2str(pl_template1)==log2str(pl_template2)) {setverdict(pass);} else {setverdict(fail,"template1=",pl_template1," should match against ",pl_template2 );}
+}
+with { extension "transparent" }
+
+function f_checkOctetstringTemplateEquivalence(in template octetstring pl_template1, in template octetstring pl_template2) {
+  action("template1=",pl_template1," check against ",pl_template2);
+  if(log2str(pl_template1)==log2str(pl_template2)) {setverdict(pass);} else {setverdict(fail,"template1=",pl_template1," should match against ",pl_template2 );}
+}
+with { extension "transparent" }
+
+function f_checkMyRecordTemplateEquivalence(in template MyRecord pl_template1, in template MyRecord pl_template2) {
+  action("template1=",pl_template1," check against ",pl_template2);
+  if(log2str(pl_template1)==log2str(pl_template2)) {setverdict(pass);} else {setverdict(fail,"template1=",pl_template1," should match against ",pl_template2 );}
+}
+with { extension "transparent" }
+
+function f_checkMyUnionTemplateEquivalence(in template MyUnion pl_template1, in template MyUnion pl_template2) {
+  action("template1=",pl_template1," check against ",pl_template2);
+  if(log2str(pl_template1)==log2str(pl_template2)) {setverdict(pass);} else {setverdict(fail,"template1=",pl_template1," should match against ",pl_template2 );}
+}
+with { extension "transparent" }
+
+function f_checkMyFunctionRefTemplateEquivalence(in template F_int2int pl_template1, in template F_int2int pl_template2) {
+  action("template1=",pl_template1," check against ",pl_template2);
+  if(log2str(pl_template1)==log2str(pl_template2)) {setverdict(pass);} else {setverdict(fail,"template1=",pl_template1," should match against ",pl_template2 );}
+}
+with { extension "transparent" }
+
+function f_checkMyRoFRefTemplateEquivalence(in template RoF_int2int pl_template1, in template RoF_int2int pl_template2) {
+  action("template1=",pl_template1," check against ",pl_template2);
+  if(log2str(pl_template1)==log2str(pl_template2)) {setverdict(pass);} else {setverdict(fail,"template1=",pl_template1," should match against ",pl_template2 );}
+}
+with { extension "transparent" }
+
+function f_createIntegerWithAllFromFromInTemplateFromRoi(in template RoI pl_template1, inout template integer pl_template2) {
+  pl_template2:= (all from pl_template1);
+}
+
+function f_createIntegerWithAllFromFromInOutTemplateFromRoi(inout template RoI pl_template1, inout template integer pl_template2) {
+  pl_template2:= (all from pl_template1);
+}
+
+function f_createIntegerWithAllFromFromInTemplateFromSoi(in template SoI pl_template1, inout template integer pl_template2) {
+  pl_template2:= (all from pl_template1);
+}
+
+function f_createIntegerWithAllFromFromInOutTemplateFromSoi(inout template SoI pl_template1, inout template integer pl_template2) {
+  pl_template2:= (all from pl_template1);
+}
+
+//====== function references =======
+function f_int2int_1(in integer pl_i) return integer { log("f_int2int_1 called with ", pl_i);return 1;}
+function f_int2int_2(in integer pl_i) return integer { log("f_int2int_2 called with ", pl_i);return 2;}
+
+}//module
diff --git a/Regression_Test_java/src/all_from/imported_templates.ttcn b/Regression_Test_java/src/all_from/imported_templates.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..e51e479ca504397476ea720a1427f207a6e5112e
--- /dev/null
+++ b/Regression_Test_java/src/all_from/imported_templates.ttcn
@@ -0,0 +1,32 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *
+ ******************************************************************************/
+module imported_templates {
+
+import from types all;
+//===== Templates for use by all_from from another module
+
+//============Record of Integer============================
+//for value list and for complement:
+template RoI t_imported_RoI1 := {1, 2, (6..9)};
+template RoI t_imported_RoI2 := {1, *, 3};
+template RoI t_imported_RoI3 := {20,21,22};
+template RoI t_imported_RoI4 := {1, ?, 3};
+//for permutation:
+template RoI t_imported_RoI1_P := {1, 2, *};
+template RoI t_imported_RoI3_P := {1, 2, 3};
+template RoI t_imported_RoI7_P := {1, 2, ?};
+
+//===========Set of Integer================================
+template SoI t_imported_SoI1 := {1,2,(6..9)};
+template SoI t_imported_SoI2 := {1, *, 3};
+template SoI t_imported_SoI3 := {20,21,22};
+}
diff --git a/Regression_Test_java/src/all_from/sapc.ttcn b/Regression_Test_java/src/all_from/sapc.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..b6426c039173652838f82c447bce38bb57f1813a
--- /dev/null
+++ b/Regression_Test_java/src/all_from/sapc.ttcn
@@ -0,0 +1,110 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Raduly, Csaba
+ *
+ ******************************************************************************/
+module sapc {
+import from types all;
+type component sapka {}
+
+template CreateSAPCSubscription t_sapc_data := {
+  pcBlacklistService_list := {    "a",    "b",    "c"  }
+}
+
+template GetResponseSAPCSubscription g_resp := {
+permutation(
+"hello",
+all from t_sapc_data.pcBlacklistService_list
+)
+};
+
+testcase tc_sapc() runs on sapka
+{
+var template CreateSAPCSubscription vt_sapc_data := t_sapc_data
+
+// compiler doesn't let us compare templates :(
+//if (t_sapc_data==vt_sapc_data) { setverdict(pass); } else { setverdict(fail); }
+if (log2str(t_sapc_data)==log2str(vt_sapc_data)) { setverdict(pass); } else { setverdict(fail); }
+
+var template GetResponseSAPCSubscription resp; // initialized from a template
+var template GetResponseSAPCSubscription resp_vt; //          from a var template
+var template GetResponseSAPCSubscription resp_manual; // hacked by hand
+
+if (sizeof (vt_sapc_data.pcBlacklistService_list) > 0) {
+    select (sizeof (vt_sapc_data.pcBlacklistService_list)){
+        case (1) {
+            resp_manual.pcBlacklistService_list := {
+              permutation("hello", vt_sapc_data.pcBlacklistService_list[0], "goodbye")
+            }
+        }
+        case (2) {
+            resp_manual.pcBlacklistService_list := {
+                permutation ("hello",
+                    vt_sapc_data.pcBlacklistService_list[0], 
+                    vt_sapc_data.pcBlacklistService_list[1], "goodbye")
+            }
+        }
+        case (3) {
+            resp_manual.pcBlacklistService_list := {
+                permutation ("hello",
+                    vt_sapc_data.pcBlacklistService_list[0],
+                    vt_sapc_data.pcBlacklistService_list[1],
+                    vt_sapc_data.pcBlacklistService_list[2], "goodbye")
+            }
+        }
+        case else {
+            resp_manual.pcBlacklistService_list := {
+                permutation ("hello",
+                    vt_sapc_data.pcBlacklistService_list[0],
+                    vt_sapc_data.pcBlacklistService_list[1],
+                    vt_sapc_data.pcBlacklistService_list[2],
+                    vt_sapc_data.pcBlacklistService_list[3], "goodbye",
+                    *)
+            }
+        }
+    }
+}
+
+// var template referring to a global template
+resp.pcBlacklistService_list := {
+permutation(
+"hello",
+all from t_sapc_data .pcBlacklistService_list,
+"goodbye"
+) };
+
+// var template referring to another var template
+resp_vt.pcBlacklistService_list := {
+permutation(
+"hello",
+all from vt_sapc_data .pcBlacklistService_list,
+"goodbye"
+) };
+
+action("manual ", resp_manual.pcBlacklistService_list);
+action("all    ", resp       .pcBlacklistService_list);
+action("all vt ", resp_vt    .pcBlacklistService_list);
+
+if (log2str(resp.pcBlacklistService_list)==log2str(resp_manual.pcBlacklistService_list))
+{ setverdict(pass); } else { setverdict(fail, "at line ", __LINE__, "\n", resp.pcBlacklistService_list, " !=\n", resp_manual.pcBlacklistService_list); }
+
+if (log2str(resp_vt.pcBlacklistService_list)==log2str(resp_manual.pcBlacklistService_list))
+{ setverdict(pass); } else { setverdict(fail, "at line ", __LINE__, "\n", resp_vt.pcBlacklistService_list, " !=\n", resp_manual.pcBlacklistService_list); }
+
+} // testcase
+
+control {
+    execute(tc_sapc());
+}
+
+}
+with {
+  encode "XML"
+}
diff --git a/Regression_Test_java/src/all_from/types.ttcn b/Regression_Test_java/src/all_from/types.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..42e7598d8d92e17dbbdadb1de9125cd68a33d070
--- /dev/null
+++ b/Regression_Test_java/src/all_from/types.ttcn
@@ -0,0 +1,136 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Baranyi, Botond
+ *   Raduly, Csaba
+ *   Szabo, Bence Janos
+ *
+ ******************************************************************************/
+module types {
+// Types are kept separate to cut down on the size of the generated code
+// from the actual test (all_from*.ttcn, sapc.ttcn)
+
+type component A {
+  var RoI v_roi:={20,21,22};
+  var SoI v_soi:={20,21,22};
+}
+
+type record of integer RoI;
+type set    of integer SoI;
+type record of float RoF;
+type record of SoI RoSoI;
+type record of RoI RoRoI;
+type record of RoOS RoRoOS;
+type record of SoOS RoSoOS;
+
+type set of integer MySetOfType (0 .. 10);
+
+type record of bitstring RoBS;
+
+type record of hexstring RoHS;
+
+type record of charstring RoCS;
+type set of charstring CoCS;
+
+type record of octetstring RoOS;
+type set of octetstring SoOS;
+
+type record of universal charstring RoUCS;
+
+type record MyRecord {
+  integer i optional,
+  RoI     roi optional,
+  SoI     soi optional
+}
+
+type union MyUnion {
+  integer i,
+  RoI     roi,
+  SoI     soi
+} 
+
+type record of MyRecord RoMyRec;
+type record of MyUnion RoMyUnion;
+
+type integer IntArray[3..8];
+
+//==== Function Reference ====
+//this is just a dummy type to test all from for function references
+type function F_int2int(in integer pl_i) return integer;
+
+type record of F_int2int RoF_int2int;
+
+/* * * * * * * * sapc types * * * * * * * */
+
+type record CreateSAPCSubscription
+{
+    record of charstring pcBlacklistService_list
+};
+
+type record GetResponseSAPCSubscription
+{
+    record of charstring pcBlacklistService_list
+};
+
+/*
+type record MOD {
+  GetResponseSAPCSubscription getResponseSAPCSubscription
+}
+
+type record MOA {
+  MOD getMODefinition
+}
+
+type record GetResp {
+  MOA mOAttributes
+}
+
+type record CAI3gCommand {
+  GetResp getResponse
+}
+*/
+
+/* * * * Subtypes * * * */
+
+type integer PosInt (0..infinity);
+
+type float NegFloat (-infinity..0.0);
+
+type bitstring ByteString length (8);
+
+type hexstring WordString length (4);
+
+type octetstring DWordString length (4);
+
+type charstring TtcnFileName (pattern "*.ttcn");
+
+type universal charstring XsdString (
+  char(0,0,0,9)..char(0,0,0,9),
+  char(0,0,0,10)..char(0,0,0,10),
+  char(0,0,0,12)..char(0,0,0,12),
+  char(0,0,0,32)..char(0,0,215,255),
+  char(0,0,224,0)..char(0,0,255,253),
+  char(0,1,0,0)..char(0,16,255,253)
+);
+
+type record length (0..3) of integer ShortRoI;
+
+type record length (0..3) of float ShortRoF;
+
+type record length (0..3) of bitstring ShortRoBS;
+
+type record length (0..3) of hexstring ShortRoHS;
+
+type record length (0..3) of octetstring ShortRoOS;
+
+type record length (0..3) of charstring ShortRoCS;
+
+type record length (0..3) of universal charstring ShortRoUCS;
+
+}
diff --git a/Regression_Test_java/src/predefFunctions/bit_to_OK.ttcn b/Regression_Test_java/src/predefFunctions/bit_to_OK.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..417a99353db6f1a432dd906fbfddcc5e051707b7
--- /dev/null
+++ b/Regression_Test_java/src/predefFunctions/bit_to_OK.ttcn
@@ -0,0 +1,289 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Raduly, Csaba
+ *
+ ******************************************************************************/
+module bit_to_OK {
+
+type component PDTestComponent {};
+
+/*--- BIT2HEX --------------------------------------------------*/
+
+modulepar hexstring b2hpar := bit2hex(''B)
+modulepar hexstring b2hpar1 := bit2hex('000000000000'B & ''B & '111111111111'B)
+modulepar hexstring b2hpar2 := bit2hex(substr('000000000000111111111111'B,0,12) & ''B & substr('000000000000111111111111'B,12,12))
+modulepar hexstring b2hpar3 := bit2hex(('000000000000'B <@ 13) & ''B & ('111111111111'B @> 13))
+modulepar hexstring b2hpar4 := bit2hex((not4b '111111111111'B) & '111111111111'B)
+modulepar hexstring b2hpar5 := bit2hex('000000000000111111111111'B and4b '000000000000111111111111'B)
+modulepar hexstring b2hpar6 := bit2hex('000000000000000000000000'B or4b  '000000000000111111111111'B)
+modulepar hexstring b2hpar7 := bit2hex('000000000000000000000000'B xor4b '000000000000111111111111'B)
+modulepar hexstring b2hpar8 := bit2hex('10011'B)
+modulepar hexstring b2hpar9 := bit2hex('11'B)
+
+modulepar hexstring b2hparh := '000FFF'H
+
+testcase bit_to_hex() runs on PDTestComponent{
+
+	if ((b2hpar == bit2hex(''B))
+	and (b2hpar == ''H))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((b2hpar1 == bit2hex('000000000000'B & ''B & '111111111111'B))
+	and (b2hpar1 == b2hparh))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((b2hpar2 == bit2hex(substr('000000000000111111111111'B,0,12) & ''B & substr('000000000000111111111111'B,12,12)))
+	and (b2hpar2 == b2hparh))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((b2hpar3 == bit2hex(('000000000000'B <@ 13) & ''B & ('111111111111'B @> 13)))
+	and (b2hpar3 == b2hparh))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((b2hpar4 == bit2hex((not4b '111111111111'B) & '111111111111'B))
+	and (b2hpar4 == b2hparh))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((b2hpar5 == bit2hex('000000000000111111111111'B and4b '000000000000111111111111'B))
+	and (b2hpar5 == b2hparh))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((b2hpar6 == bit2hex('000000000000000000000000'B or4b  '000000000000111111111111'B))
+	and (b2hpar6 == b2hparh))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((b2hpar7 == bit2hex('000000000000000000000000'B xor4b '000000000000111111111111'B))
+	and (b2hpar7 == b2hparh))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((b2hpar8 == bit2hex('10011'B))
+	and (b2hpar8 == '13'H))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((b2hpar9 == bit2hex('11'B))
+	and (b2hpar9 == '3'H))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+
+}
+
+/*--- BIT2INT --------------------------------------------------*/
+
+modulepar integer b2ipar := bit2int(''B)
+modulepar integer b2ipar1 := bit2int('111111'B & '111111'B)
+modulepar integer b2ipar2 := bit2int((not4b '111111'B) & '111111'B)
+modulepar integer b2ipar3 := bit2int(('111111'B and4b '000000'B) & '111111'B)
+modulepar integer b2ipar4 := bit2int(('000000'B or4b '000000'B) & '111111'B)
+modulepar integer b2ipar5 := bit2int(('000011'B xor4b '000011'B) & '111111'B)
+modulepar integer b2i1_16 := 12345678910111213141516;
+
+testcase bit_to_int() runs on PDTestComponent{
+	var integer i1 := 12345678910111213141516;
+	var bitstring bs1 := '00000000000000000010100111010100001010110110010101101000100100110010100010111011111000001100'B;
+	var integer b;
+
+	if ((b2ipar == bit2int(''B))
+	and (b2ipar == 0))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((b2ipar1 == bit2int('111111'B & '111111'B))
+	and (b2ipar1 == 4095))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	b := bit2int((not4b '111111'B) & '111111'B)
+	if ((b2ipar2 == b)
+	and (b2ipar2 == 63))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	b := bit2int(('111111'B and4b '000000'B) & '111111'B)
+	if ((b2ipar3 == b)
+	and (b2ipar3 == 63))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	b := bit2int(('000000'B or4b '000000'B) & '111111'B)
+	if ((b2ipar4 == b)
+	and (b2ipar4 == 63))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	b := bit2int(('000011'B xor4b '000011'B) & '111111'B)
+	if ((b2ipar5 == b)
+	and (b2ipar5 == 63))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if (bit2int(bs1) == 12345678910111213141516)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (bit2int('00000000000000000010100111010100001010110110010101101000100100110010100010111011111000001100'B) == b2i1_16)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (bit2int(bs1) == 12345678910111213141516)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (bit2int(int2bit(bit2int('010100111010100001010110110010101101000100100110010100010111011111000001100'B), 75)) == b2i1_16)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	var integer j
+	for (j:=0; j<1024; j:=j+1) {
+	if (bit2int(int2bit(j,10)) == j)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	}
+
+}
+
+/*--- BIT2OCT --------------------------------------------------*/
+
+modulepar octetstring b2opar := bit2oct(''B)
+modulepar octetstring b2opar1 := bit2oct('000000000000'B & ''B & '111111111111'B)
+modulepar octetstring b2opar2 := bit2oct(substr('000000000000111111111111'B,0,12) & ''B & substr('000000000000111111111111'B,12,12))
+modulepar octetstring b2opar3 := bit2oct(('000000000000'B <@ 13) & ''B & ('111111111111'B @> 13))
+modulepar octetstring b2opar4 := bit2oct((not4b '111111111111'B) & '111111111111'B)
+modulepar octetstring b2opar5 := bit2oct('000000000000111111111111'B and4b '000000000000111111111111'B)
+modulepar octetstring b2opar6 := bit2oct('000000000000000000000000'B or4b  '000000000000111111111111'B)
+modulepar octetstring b2opar7 := bit2oct('000000000000000000000000'B xor4b '000000000000111111111111'B)
+modulepar octetstring b2opar8 := bit2oct('10011'B)
+modulepar octetstring b2opar9 := bit2oct('11'B)
+
+modulepar octetstring b2oparo := '000FFF'O
+
+testcase bit_to_oct() runs on PDTestComponent{
+
+	if ((b2opar == bit2oct(''B))
+	and (b2opar == ''O))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((b2opar1 == bit2oct('000000000000'B & ''B & '111111111111'B))
+	and (b2opar1 == b2oparo))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((b2opar2 == bit2oct(substr('000000000000111111111111'B,0,12) & ''B & substr('000000000000111111111111'B,12,12)))
+	and (b2opar2 == b2oparo))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((b2opar3 == bit2oct(('000000000000'B <@ 13) & ''B & ('111111111111'B @> 13)))
+	and (b2opar3 == b2oparo))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((b2opar4 == bit2oct((not4b '111111111111'B) & '111111111111'B))
+	and (b2opar4 == b2oparo))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((b2opar5 == bit2oct('000000000000111111111111'B and4b '000000000000111111111111'B))
+	and (b2opar5 == b2oparo))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((b2opar6 == bit2oct('000000000000000000000000'B or4b  '000000000000111111111111'B))
+	and (b2opar6 == b2oparo))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((b2opar7 == bit2oct('000000000000000000000000'B xor4b '000000000000111111111111'B))
+	and (b2opar7 == b2oparo))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((b2opar8 == bit2oct('10011'B))
+	and (b2opar8 == '13'O))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((b2opar9 == bit2oct('11'B))
+	and (b2opar9 == '03'O))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+}
+
+/*--- BIT2STR --------------------------------------------------*/
+
+modulepar charstring b2spar := bit2str(''B)
+modulepar charstring b2spar1 := bit2str('000000'B & ''B & '111111'B)
+modulepar charstring b2spar2 := bit2str(substr('000000111111'B,0,6) & ''B & substr('000000111111'B,6,6))
+modulepar charstring b2spar3 := bit2str(('000000'B <@ 3) & ''B & ('111111'B @> 3))
+modulepar charstring b2spar4 := bit2str((not4b '111111'B) & '111111'B)
+modulepar charstring b2spar5 := bit2str('000000111111'B and4b '000000111111'B)
+modulepar charstring b2spar6 := bit2str('000000000000'B or4b  '000000111111'B)
+modulepar charstring b2spar7 := bit2str('000000000000'B xor4b '000000111111'B)
+
+modulepar charstring b2spars := "000000111111"
+
+testcase bit_to_str() runs on PDTestComponent{
+
+	if ((b2spar == bit2str(''B))
+	and (b2spar == ""))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((b2spar1 == bit2str('000000'B & ''B & '111111'B))
+	and (b2spar1 == b2spars))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((b2spar2 == bit2str(substr('000000111111'B,0,6) & ''B & substr('000000111111'B,6,6)))
+	and (b2spar2 == b2spars))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((b2spar3 == bit2str(('000000'B <@ 3) & ''B & ('111111'B @> 3)))
+	and (b2spar3 == b2spars))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((b2spar4 == bit2str((not4b '111111'B) & '111111'B))
+	and (b2spar4 == b2spars))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((b2spar5 == bit2str('000000111111'B and4b '000000111111'B))
+	and (b2spar5 == b2spars))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((b2spar6 == bit2str('000000000000'B or4b  '000000111111'B))
+	and (b2spar6 == b2spars))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((b2spar7 == bit2str('000000000000'B xor4b '000000111111'B))
+	and (b2spar7 == b2spars))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+}
+
+control {
+	execute (bit_to_hex());
+	execute (bit_to_int());
+	execute (bit_to_oct());
+	execute (bit_to_str());
+}
+
+}
diff --git a/Regression_Test_java/src/predefFunctions/bit_to_SW.ttcn b/Regression_Test_java/src/predefFunctions/bit_to_SW.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..db6a1f4c3641a63eaf382e4510ec31fe3c0d881d
--- /dev/null
+++ b/Regression_Test_java/src/predefFunctions/bit_to_SW.ttcn
@@ -0,0 +1,311 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Raduly, Csaba
+ *
+ ******************************************************************************/
+module bit_to_SW {	//^In TTCN-3 module `bit_to_SW'://
+
+type component PDTestComponent {};
+
+/*--- BIT2HEX --------------------------------------------------*/
+
+const hexstring b2hcon := bit2hex(''B)
+const hexstring b2hcon1 := bit2hex('000000000000'B & ''B & '111111111111'B)
+const hexstring b2hcon2 := bit2hex(substr('000000000000111111111111'B,0,12) & ''B & substr('000000000000111111111111'B,12,12))
+const hexstring b2hcon3 := bit2hex(('000000000000'B <@ 13) & ''B & ('111111111111'B @> 13))
+const hexstring b2hcon4 := bit2hex((not4b '111111111111'B) & '111111111111'B)
+const hexstring b2hcon5 := bit2hex('000000000000111111111111'B and4b '000000000000111111111111'B)
+const hexstring b2hcon6 := bit2hex('000000000000000000000000'B or4b  '000000000000111111111111'B)
+const hexstring b2hcon7 := bit2hex('000000000000000000000000'B xor4b '000000000000111111111111'B)
+const hexstring b2hcon8 := bit2hex('10011'B)
+const hexstring b2hcon9 := bit2hex('11'B)
+
+const hexstring b2hconh := '000FFF'H
+
+testcase bit_to_hex() runs on PDTestComponent{ //^In testcase definition//
+
+	if ((b2hcon == bit2hex(''B))
+	and (b2hcon == ''H))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((b2hcon1 == bit2hex('000000000000'B & ''B & '111111111111'B))
+	and (b2hcon1 == b2hconh))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((b2hcon2 == bit2hex(substr('000000000000111111111111'B,0,12) & ''B & substr('000000000000111111111111'B,12,12)))
+	and (b2hcon2 == b2hconh))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((b2hcon3 == bit2hex(('000000000000'B <@ 13) & ''B & ('111111111111'B @> 13)))
+	and (b2hcon3 == b2hconh))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((b2hcon4 == bit2hex((not4b '111111111111'B) & '111111111111'B))
+	and (b2hcon4 == b2hconh))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((b2hcon5 == bit2hex('000000000000111111111111'B and4b '000000000000111111111111'B))
+	and (b2hcon5 == b2hconh))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((b2hcon6 == bit2hex('000000000000000000000000'B or4b  '000000000000111111111111'B))
+	and (b2hcon6 == b2hconh))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((b2hcon7 == bit2hex('000000000000000000000000'B xor4b '000000000000111111111111'B))
+	and (b2hcon7 == b2hconh))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((b2hcon8 == bit2hex('10011'B))
+	and (b2hcon8 == '13'H))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((b2hcon9 == bit2hex('11'B))
+	and (b2hcon9 == '3'H))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+}
+
+/*--- BIT2INT --------------------------------------------------*/
+
+const integer b2icon := bit2int(''B)
+const integer b2icon1 := bit2int('111111'B & '111111'B)
+const integer b2icon2 := bit2int((not4b '111111'B) & '111111'B)
+const integer b2icon3 := bit2int(('111111'B and4b '000000'B) & '111111'B)
+const integer b2icon4 := bit2int(('000000'B or4b '000000'B) & '111111'B)
+const integer b2icon5 := bit2int(('000011'B xor4b '000011'B) & '111111'B)
+const integer i1 := 12345678910111213141516;
+const bitstring bs1 := '00000000000000000010100111010100001010110110010101101000100100110010100010111011111000001100'B;
+
+testcase bit_to_int() runs on PDTestComponent{ //^In testcase definition//
+
+	if ((b2icon == bit2int(''B))
+	and (b2icon == 0))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((b2icon1 == bit2int('111111'B & '111111'B))
+	and (b2icon1 == 4095))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((b2icon2 == bit2int((not4b '111111'B) & '111111'B))
+	and (b2icon2 == 63))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((b2icon3 == bit2int(('111111'B and4b '000000'B) & '111111'B))
+	and (b2icon3 == 63))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((b2icon4 == bit2int(('000000'B or4b '000000'B) & '111111'B))
+	and (b2icon4 == 63))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((b2icon5 == bit2int(('000011'B xor4b '000011'B) & '111111'B))
+	and (b2icon5 == 63))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+
+	if (bit2int(bs1) == 12345678910111213141516)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+	if (bit2int('00000000000000000010100111010100001010110110010101101000100100110010100010111011111000001100'B) == 12345678910111213141516)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+	if (bit2int(bs1) == 12345678910111213141516)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+	if (bit2int(int2bit(bit2int('010100111010100001010110110010101101000100100110010100010111011111000001100'B), 75)) == 12345678910111213141516)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+}
+
+/*--- BIT2OCT --------------------------------------------------*/
+
+const octetstring b2ocon := bit2oct(''B)
+const octetstring b2ocon1 := bit2oct('000000000000'B & ''B & '111111111111'B)
+const octetstring b2ocon2 := bit2oct(substr('000000000000111111111111'B,0,12) & ''B & substr('000000000000111111111111'B,12,12))
+const octetstring b2ocon3 := bit2oct(('000000000000'B <@ 13) & ''B & ('111111111111'B @> 13))
+const octetstring b2ocon4 := bit2oct((not4b '111111111111'B) & '111111111111'B)
+const octetstring b2ocon5 := bit2oct('000000000000111111111111'B and4b '000000000000111111111111'B)
+const octetstring b2ocon6 := bit2oct('000000000000000000000000'B or4b  '000000000000111111111111'B)
+const octetstring b2ocon7 := bit2oct('000000000000000000000000'B xor4b '000000000000111111111111'B)
+const octetstring b2ocon8 := bit2oct('10011'B)
+const octetstring b2ocon9 := bit2oct('11'B)
+
+const octetstring b2ocono := '000FFF'O
+
+testcase bit_to_oct() runs on PDTestComponent{ //^In testcase definition//
+
+	if ((b2ocon == bit2oct(''B))
+	and (b2ocon == ''O))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((b2ocon1 == bit2oct('000000000000'B & ''B & '111111111111'B))
+	and (b2ocon1 == b2ocono))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((b2ocon2 == bit2oct(substr('000000000000111111111111'B,0,12) & ''B & substr('000000000000111111111111'B,12,12)))
+	and (b2ocon2 == b2ocono))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((b2ocon3 == bit2oct(('000000000000'B <@ 13) & ''B & ('111111111111'B @> 13)))
+	and (b2ocon3 == b2ocono))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((b2ocon4 == bit2oct((not4b '111111111111'B) & '111111111111'B))
+	and (b2ocon4 == b2ocono))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((b2ocon5 == bit2oct('000000000000111111111111'B and4b '000000000000111111111111'B))
+	and (b2ocon5 == b2ocono))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((b2ocon6 == bit2oct('000000000000000000000000'B or4b  '000000000000111111111111'B))
+	and (b2ocon6 == b2ocono))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((b2ocon7 == bit2oct('000000000000000000000000'B xor4b '000000000000111111111111'B))
+	and (b2ocon7 == b2ocono))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((b2ocon8 == bit2oct('10011'B))
+	and (b2ocon8 == '13'O))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((b2ocon9 == bit2oct('11'B))
+	and (b2ocon9 == '03'O))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+}
+
+/*--- BIT2STR --------------------------------------------------*/
+
+const charstring b2scon := bit2str(''B)
+const charstring b2scon1 := bit2str('000000'B & ''B & '111111'B)
+const charstring b2scon2 := bit2str(substr('000000111111'B,0,6) & ''B & substr('000000111111'B,6,6))
+const charstring b2scon3 := bit2str(('000000'B <@ 3) & ''B & ('111111'B @> 3))
+const charstring b2scon4 := bit2str((not4b '111111'B) & '111111'B)
+const charstring b2scon5 := bit2str('000000111111'B and4b '000000111111'B)
+const charstring b2scon6 := bit2str('000000000000'B or4b  '000000111111'B)
+const charstring b2scon7 := bit2str('000000000000'B xor4b '000000111111'B)
+
+const charstring b2scons := "000000111111"
+
+testcase bit_to_str() runs on PDTestComponent{ //^In testcase definition//
+
+	if ((b2scon == bit2str(''B))
+	and (b2scon == ""))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((b2scon1 == bit2str('000000'B & ''B & '111111'B))
+	and (b2scon1 == b2scons))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((b2scon2 == bit2str(substr('000000111111'B,0,6) & ''B & substr('000000111111'B,6,6)))
+	and (b2scon2 == b2scons))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((b2scon3 == bit2str(('000000'B <@ 3) & ''B & ('111111'B @> 3)))
+	and (b2scon3 == b2scons))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((b2scon4 == bit2str((not4b '111111'B) & '111111'B))
+	and (b2scon4 == b2scons))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((b2scon5 == bit2str('000000111111'B and4b '000000111111'B))
+	and (b2scon5 == b2scons))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((b2scon6 == bit2str('000000000000'B or4b  '000000111111'B))
+	and (b2scon6 == b2scons))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((b2scon7 == bit2str('000000000000'B xor4b '000000111111'B))
+	and (b2scon7 == b2scons))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+}
+
+control {
+	execute (bit_to_hex());
+	execute (bit_to_int());
+	execute (bit_to_oct());
+	execute (bit_to_str());
+}
+
+}
diff --git a/Regression_Test_java/src/predefFunctions/char_to_OK.ttcn b/Regression_Test_java/src/predefFunctions/char_to_OK.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..b01361e285e2c6369d1d8e716552353d7a2ced1a
--- /dev/null
+++ b/Regression_Test_java/src/predefFunctions/char_to_OK.ttcn
@@ -0,0 +1,156 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Raduly, Csaba
+ *
+ ******************************************************************************/
+module char_to_OK {
+
+type component PDTestComponent {};
+
+/*--- CHAR2INT --------------------------------------------------*/
+
+const charstring c2ipars := "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+
+modulepar integer c2ipar1 := char2int("A")
+modulepar integer c2ipar2 := char2int("\n")
+modulepar integer c2ipar3 := char2int("" & "A" & "")
+modulepar integer c2ipar4 := char2int(substr(c2ipars,0,1))
+modulepar integer c2ipar5 := char2int("A" <@ 1)
+
+
+testcase char_to_int() runs on PDTestComponent{
+
+	if ((c2ipar1 == 65)
+	and (c2ipar1 == char2int("A")))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((c2ipar2 == 10)
+	and (c2ipar2 == char2int("\n")))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((c2ipar3 == 65)
+	and (c2ipar3 == char2int("" & "A" & "")))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((c2ipar4 == 65)
+	and (c2ipar4 == char2int(substr(c2ipars,0,1))))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((c2ipar5 == 65)
+	and (c2ipar5 == char2int("A" @> 1)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	var integer j
+	for (j:=0; j<lengthof(c2ipars); j:=j+1) {
+	if (char2int(substr(c2ipars,j,1))-char2int("A") == j)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	}
+}
+
+/*--- UNICHAR2INT --------------------------------------------------*/
+
+const universal charstring uc2ipars := char(0,0,0,65) & "BCDEFGHIJKLMNOPQRSTUVWXYZ"
+
+modulepar integer uc2ipar1 := unichar2int("A")
+modulepar integer uc2ipar2 := unichar2int(char(0,0,0,65))
+modulepar integer uc2ipar3 := unichar2int("" & char(0,0,0,65) & "")
+modulepar integer uc2ipar4 := unichar2int(substr(uc2ipars,0,1))
+modulepar integer uc2ipar5 := unichar2int(char(0,0,0,255))
+modulepar integer uc2ipar6 := unichar2int(char(0,0,255,255))
+modulepar integer uc2ipar7 := unichar2int(char(0,255,255,255))
+modulepar integer uc2ipar8 := unichar2int(char(127,255,255,255))
+
+
+testcase unichar_to_int() runs on PDTestComponent{
+
+	if ((uc2ipar1 == 65)
+	and (uc2ipar1 == unichar2int("A")))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((uc2ipar2 == 65)
+	and (uc2ipar2 == unichar2int(char(0,0,0,65))))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((uc2ipar3 == 65)
+	and (uc2ipar3 == unichar2int("" & char(0,0,0,65) & "")))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((uc2ipar4 == 65)
+	and (uc2ipar4 == unichar2int(substr(uc2ipars,0,1))))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((uc2ipar5 == 255)
+	and (uc2ipar5 == unichar2int(char(0,0,0,255))))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((uc2ipar6 == 65535)
+	and (uc2ipar6 == unichar2int(char(0,0,255,255))))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((uc2ipar7 == 16777215)
+	and (uc2ipar7 == unichar2int(char(0,255,255,255))))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((uc2ipar8 == 2147483647)
+	and (uc2ipar8 == unichar2int(char(127,255,255,255))))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+}
+
+/*--- CHAR2OCT --------------------------------------------------*/
+
+const charstring c2opars := "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+
+modulepar octetstring c2opar1 := char2oct("A")
+modulepar octetstring c2opar2 := char2oct("\n")
+modulepar octetstring c2opar3 := char2oct("" & "A" & "")
+modulepar octetstring c2opar4 := char2oct(substr(c2opars,0,1))
+modulepar octetstring c2opar5 := char2oct("A" @> 1)
+
+testcase char_to_oct() runs on PDTestComponent{
+
+	if ((c2opar1 == '41'O)
+	and (c2opar1 == char2oct("A")))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((c2opar2 == '0A'O)
+	and (c2opar2 == char2oct("\n")))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((c2opar3 == '41'O)
+	and (c2opar3 == char2oct("" & "A" & "")))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((c2opar4 == '41'O)
+	and (c2opar4 == char2oct(substr(c2ipars,0,1))))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((c2opar5 == '41'O)
+	and (c2opar5 == char2oct("A" @> 1)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	var integer j
+	for (j:=0; j<lengthof(c2opars); j:=j+1) {
+	if (oct2int(char2oct(substr(c2opars,j,1)))-65 == j)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	}
+}
+
+control {
+	execute (char_to_int());
+	execute (unichar_to_int());
+	execute (char_to_oct());
+}
+
+}
diff --git a/Regression_Test_java/src/predefFunctions/char_to_SW.ttcn b/Regression_Test_java/src/predefFunctions/char_to_SW.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..2b6fc190eeef26765a43fab5102f47727871b5d9
--- /dev/null
+++ b/Regression_Test_java/src/predefFunctions/char_to_SW.ttcn
@@ -0,0 +1,160 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Raduly, Csaba
+ *
+ ******************************************************************************/
+module char_to_SW {	//^In TTCN-3 module `char_to_SW'://
+
+type component PDTestComponent {};
+
+/*--- CHAR2INT --------------------------------------------------*/
+
+const charstring c2icons := "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+
+const integer c2icon1 := char2int("A")
+const integer c2icon2 := char2int("\n")
+const integer c2icon3 := char2int("" & "A" & "")
+const integer c2icon4 := char2int(substr(c2icons,0,1))
+const integer c2icon5 := char2int("A" <@ 1)
+
+
+testcase char_to_int() runs on PDTestComponent{ //^In testcase definition//
+
+	if ((c2icon1 == 65)
+	and (c2icon1 == char2int("A")))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+	if ((c2icon2 == 10)
+	and (c2icon2 == char2int("\n")))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+	if ((c2icon3 == 65)
+	and (c2icon3 == char2int("" & "A" & "")))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+	if ((c2icon4 == 65)
+	and (c2icon4 == char2int(substr(c2icons,0,1))))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+	if ((c2icon5 == 65)
+	and (c2icon5 == char2int("A" @> 1)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+}
+
+/*--- UNICHAR2INT --------------------------------------------------*/
+
+const universal charstring uc2icons := char(0,0,0,65) & "BCDEFGHIJKLMNOPQRSTUVWXYZ"
+
+const integer uc2icon1 := unichar2int("A")
+const integer uc2icon2 := unichar2int(char(0,0,0,65))
+const integer uc2icon3 := unichar2int("" & char(0,0,0,65) & "")
+const integer uc2icon4 := unichar2int(substr(uc2icons,0,1))
+const integer uc2icon5 := unichar2int(char(0,0,0,255))
+const integer uc2icon6 := unichar2int(char(0,0,255,255))
+const integer uc2icon7 := unichar2int(char(0,255,255,255))
+const integer uc2icon8 := unichar2int(char(127,255,255,255))
+
+
+testcase unichar_to_int() runs on PDTestComponent{ //^In testcase definition//
+
+	if ((uc2icon1 == 65)
+	and (uc2icon1 == unichar2int("A")))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+	if ((uc2icon2 == 65)
+	and (uc2icon2 == unichar2int(char(0,0,0,65))))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+	if ((uc2icon3 == 65)
+	and (uc2icon3 == unichar2int("" & char(0,0,0,65) & "")))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+	if ((uc2icon4 == 65)
+	and (uc2icon4 == unichar2int(substr(uc2icons,0,1))))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+	if ((uc2icon5 == 255)
+	and (uc2icon5 == unichar2int(char(0,0,0,255))))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+	if ((uc2icon6 == 65535)
+	and (uc2icon6 == unichar2int(char(0,0,255,255))))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+	if ((uc2icon7 == 16777215)
+	and (uc2icon7 == unichar2int(char(0,255,255,255))))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+	if ((uc2icon8 == 2147483647)
+	and (uc2icon8 == unichar2int(char(127,255,255,255))))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+}
+
+/*--- CHAR2OCT --------------------------------------------------*/
+
+const charstring c2ocons := "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+
+const octetstring c2ocon1 := char2oct("A")
+const octetstring c2ocon2 := char2oct("\n")
+const octetstring c2ocon3 := char2oct("" & "A" & "")
+const octetstring c2ocon4 := char2oct(substr(c2ocons,0,1))
+const octetstring c2ocon5 := char2oct("A" @> 1)
+
+testcase char_to_oct() runs on PDTestComponent{ //^In testcase definition//
+
+	if ((c2ocon1 == '41'O)
+	and (c2ocon1 == char2oct("A")))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+	if ((c2ocon2 == '0A'O)
+	and (c2ocon2 == char2oct("\n")))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+	if ((c2ocon3 == '41'O)
+	and (c2ocon3 == char2oct("" & "A" & "")))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+	if ((c2ocon4 == '41'O)
+	and (c2ocon4 == char2oct(substr(c2icons,0,1))))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+	if ((c2ocon5 == '41'O)
+	and (c2ocon5 == char2oct("A" @> 1)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+}
+
+control {
+	execute (char_to_int());
+	execute (unichar_to_int());
+	execute (char_to_oct());
+}
+
+}
diff --git a/Regression_Test_java/src/predefFunctions/enum_to_OK.ttcn b/Regression_Test_java/src/predefFunctions/enum_to_OK.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..6f614ad190df3123f8f898ccfa303cc9ca63154a
--- /dev/null
+++ b/Regression_Test_java/src/predefFunctions/enum_to_OK.ttcn
@@ -0,0 +1,97 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Raduly, Csaba
+ *
+ ******************************************************************************/
+module enum_to_OK {	//^In TTCN-3 module `enum_to_OK'://
+
+type component PDTestComponent {};
+
+/*--- ENUM2INT --------------------------------------------------*/
+
+type enumerated MyFirstEnumType { Monday, Tuesday, Wednesday, Thursday, Friday };
+type enumerated MySecondEnumType { Saturday, Sunday, Monday };
+type enumerated MyThirdEnumType { first(-3), second (0), third };
+
+
+testcase enum_to_int() runs on PDTestComponent{ //In testcase definition//
+
+	const MyFirstEnumType enumvar1_1 := Monday;
+	const MyFirstEnumType enumvar1_2 := Wednesday;
+	const MyFirstEnumType enumvar1_3 := Friday;
+
+	const MySecondEnumType enumvar2_1 := Monday;
+	const MySecondEnumType enumvar2_2 := Saturday;
+	const MySecondEnumType enumvar2_3 := Sunday;
+
+	const MyThirdEnumType enumvar3_1 := third;
+	const MyThirdEnumType enumvar3_2 := first;
+	const MyThirdEnumType enumvar3_3 := second;
+
+
+	const integer e2ivar1_1 := enum2int(enumvar1_1); 	// returns 0
+	const integer e2ivar1_2 := enum2int(enumvar1_2);	// returns 2
+	const integer e2ivar1_3 := enum2int(enumvar1_3); 	// returns 4
+
+	const integer e2ivar2_1 := enum2int(enumvar2_1); 	// returns 2
+	const integer e2ivar2_2 := enum2int(enumvar2_2); 	// returns 0
+	const integer e2ivar2_3 := enum2int(enumvar2_3); 	// returns 1
+
+	const integer e2ivar3_1 := enum2int(enumvar3_1); 	// returns 1
+	const integer e2ivar3_2 := enum2int(enumvar3_2); 	// returns -3
+	const integer e2ivar3_3 := enum2int(enumvar3_3); 	// returns 0
+
+
+	if ((e2ivar1_1 == 0)
+	and (e2ivar1_1 == enum2int(enumvar1_1)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //In else statement// //Control never reaches this code because of previous effective condition\(s\)//
+	if ((e2ivar1_2 == 2)
+	and (e2ivar1_2 == enum2int(enumvar1_2)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //In else statement// //Control never reaches this code because of previous effective condition\(s\)//
+	if ((e2ivar1_3 == 4)
+	and (e2ivar1_3 == enum2int(enumvar1_3)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //In else statement// //Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((e2ivar2_1 == 2)
+	and (e2ivar2_1 == enum2int(enumvar2_1)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //In else statement// //Control never reaches this code because of previous effective condition\(s\)//
+	if ((e2ivar2_2 == 0)
+	and (e2ivar2_2 == enum2int(enumvar2_2)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //In else statement// //Control never reaches this code because of previous effective condition\(s\)//
+	if ((e2ivar2_3 == 1)
+	and (e2ivar2_3 == enum2int(enumvar2_3)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //In else statement// //Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((e2ivar3_1 == 1)
+	and (e2ivar3_1 == enum2int(enumvar3_1)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //In else statement// //Control never reaches this code because of previous effective condition\(s\)//
+	if ((e2ivar3_2 == -3)
+	and (e2ivar3_2 == enum2int(enumvar3_2)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //In else statement// //Control never reaches this code because of previous effective condition\(s\)//
+	if ((e2ivar3_3 == 0)
+	and (e2ivar3_3 == enum2int(enumvar3_3)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //In else statement// //Control never reaches this code because of previous effective condition\(s\)//
+
+}
+
+control {
+	execute (enum_to_int());
+}
+
+}
diff --git a/Regression_Test_java/src/predefFunctions/enum_to_SW.ttcn b/Regression_Test_java/src/predefFunctions/enum_to_SW.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..6e21224fc23a09f578ab8b415602ae87850ab9ed
--- /dev/null
+++ b/Regression_Test_java/src/predefFunctions/enum_to_SW.ttcn
@@ -0,0 +1,106 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Raduly, Csaba
+ *
+ ******************************************************************************/
+module enum_to_SW {	//^In TTCN-3 module `enum_to_SW'://
+
+type component PDTestComponent {};
+
+/*--- ENUM2INT --------------------------------------------------*/
+
+type enumerated MyFirstEnumType { Monday, Tuesday, Wednesday, Thursday, Friday };
+type enumerated MySecondEnumType { Saturday, Sunday, Monday };
+type enumerated MyThirdEnumType { first(-3), second (0), third };
+
+
+testcase enum_to_int() runs on PDTestComponent{ //^In testcase definition//
+
+	const MyFirstEnumType enumvar1_1 := Monday;
+	const MyFirstEnumType enumvar1_2 := Wednesday;
+	const MyFirstEnumType enumvar1_3 := Friday;
+
+	const MySecondEnumType enumvar2_1 := Monday;
+	const MySecondEnumType enumvar2_2 := Saturday;
+	const MySecondEnumType enumvar2_3 := Sunday;
+
+	const MyThirdEnumType enumvar3_1 := third;
+	const MyThirdEnumType enumvar3_2 := first;
+	const MyThirdEnumType enumvar3_3 := second;
+
+
+	const integer e2ivar1_1 := enum2int(enumvar1_1); 	// returns 0
+	const integer e2ivar1_2 := enum2int(enumvar1_2);	// returns 2
+	const integer e2ivar1_3 := enum2int(enumvar1_3); 	// returns 4
+
+	const integer e2ivar2_1 := enum2int(enumvar2_1); 	// returns 2
+	const integer e2ivar2_2 := enum2int(enumvar2_2); 	// returns 0
+	const integer e2ivar2_3 := enum2int(enumvar2_3); 	// returns 1
+
+	const integer e2ivar3_1 := enum2int(enumvar3_1); 	// returns 1
+	const integer e2ivar3_2 := enum2int(enumvar3_2); 	// returns -3
+	const integer e2ivar3_3 := enum2int(enumvar3_3); 	// returns 0
+
+
+	if ((e2ivar1_1 == 0)
+	and (e2ivar1_1 == enum2int(enumvar1_1)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+	if ((e2ivar1_2 == 2)
+	and (e2ivar1_2 == enum2int(enumvar1_2)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+	if ((e2ivar1_3 == 4)
+	and (e2ivar1_3 == enum2int(enumvar1_3)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((e2ivar2_1 == 2)
+	and (e2ivar2_1 == enum2int(enumvar2_1)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+	if ((e2ivar2_2 == 0)
+	and (e2ivar2_2 == enum2int(enumvar2_2)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+	if ((e2ivar2_3 == 1)
+	and (e2ivar2_3 == enum2int(enumvar2_3)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((e2ivar3_1 == 1)
+	and (e2ivar3_1 == enum2int(enumvar3_1)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+	if ((e2ivar3_2 == -3)
+	and (e2ivar3_2 == enum2int(enumvar3_2)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+	if ((e2ivar3_3 == 0)
+	and (e2ivar3_3 == enum2int(enumvar3_3)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+	//^warning: Control never reaches this code because of previous effective condition\(s\)//
+
+}
+
+control {
+	execute (enum_to_int());
+}
+
+}
diff --git a/Regression_Test_java/src/predefFunctions/float_to_OK.ttcn b/Regression_Test_java/src/predefFunctions/float_to_OK.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..ced20f1b185c1eb6f9599fd8fc59f6a3b770b442
--- /dev/null
+++ b/Regression_Test_java/src/predefFunctions/float_to_OK.ttcn
@@ -0,0 +1,142 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Raduly, Csaba
+ *
+ ******************************************************************************/
+module float_to_OK {
+
+type component PDTestComponent {};
+
+/*--- FLOAT2INT --------------------------------------------------*/
+
+
+modulepar integer f2ipar1 := float2int(5E-1)
+modulepar integer f2ipar2 := float2int(0.345)
+modulepar integer f2ipar3 := float2int(-0.345)
+modulepar integer f2ipar4 := float2int(-5E0)
+modulepar integer f2ipar5 := float2int(12345678910000.0)
+modulepar integer f2ipar6 := float2int(12345678910e+4)
+modulepar integer f2ipar7 := float2int(4294967296.0)
+
+testcase float_to_int() runs on PDTestComponent{
+
+	if ((f2ipar1 == 0)
+	and (f2ipar1 == float2int(5E-1)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((f2ipar2 == 0)
+	and (f2ipar2 == float2int(0.345)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((f2ipar3 == 0)
+	and (f2ipar3 == float2int(-0.345)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((f2ipar4 == -5)
+	and (f2ipar4 == float2int(-5E0)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	// Tests added for HL22929.
+    if ((f2ipar5 == 12345678910000)
+	and (f2ipar5 == float2int(12345678910000.0)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+    if ((f2ipar6 == 123456789100000)
+	and (f2ipar6 == float2int(12345678910e+4)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+    if ((f2ipar7 == 4294967296)
+	and (f2ipar7 == float2int(4294967296.0)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+    var float f2ivar1 := 12345678910000.0
+    var float f2ivar2 := 12345678910e+4
+    var float f2ivar3 := 4294967296.0
+    if ((float2int(f2ivar1) == 12345678910000)
+	and (float2int(f2ivar1) == float2int(12345678910000.0)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+    if ((float2int(f2ivar2) == 123456789100000)
+	and (float2int(f2ivar2) == float2int(123456789100000.0)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+    if ((float2int(f2ivar3) == 4294967296)
+	and (float2int(f2ivar3) == float2int(4294967296.0)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+}
+
+/*--- FLOAT2STR --------------------------------------------------*/
+
+modulepar charstring f2spar := "1234567890123456789012345678901234567890"
+
+modulepar charstring f2spar1 := float2str(5E-1)
+modulepar charstring f2spar2 := float2str(-5E-1)
+modulepar charstring f2spar3 := float2str(0.345)
+modulepar charstring f2spar4 := float2str(-0.345)
+modulepar charstring f2spar5 := float2str(0.1234567)
+modulepar charstring f2spar6 := float2str(123456748901.0)
+modulepar charstring f2spar7 := float2str(123456758901.0)
+modulepar charstring f2spar8 := float2str(infinity)
+modulepar charstring f2spar9 := float2str(-infinity)
+modulepar charstring f2spar10 := float2str(not_a_number)
+
+
+testcase float_to_str() runs on PDTestComponent{
+
+	if ((f2spar1 == "0.500000")
+	and (f2spar1 == float2str(5E-1)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((f2spar2 == "-0.500000")
+	and (f2spar2 == float2str(-5E-1)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((f2spar3 == "0.345000")
+	and (f2spar3 == float2str(0.345)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((f2spar4 == "-0.345000")
+	and (f2spar4 == float2str(-0.345)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((f2spar5 == "0.123457")
+	and (f2spar5 == float2str(0.1234567)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((f2spar6 == "1.234567e+11")
+	and (f2spar6 == float2str(123456748901.0)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((f2spar7 == "1.234568e+11")
+	and (f2spar7 == float2str(123456758901.0)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((f2spar8 == "infinity")
+	and (f2spar8 == float2str(infinity)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((f2spar9 == "-infinity")
+	and (f2spar9 == float2str(-infinity)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((f2spar10 == "not_a_number")
+	and (f2spar10 == float2str(not_a_number)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+}
+
+control {
+	execute (float_to_int());
+	execute (float_to_str());
+}
+
+}
diff --git a/Regression_Test_java/src/predefFunctions/float_to_SW.ttcn b/Regression_Test_java/src/predefFunctions/float_to_SW.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..271d21f752a802fa29af3c83c2e789c4df568135
--- /dev/null
+++ b/Regression_Test_java/src/predefFunctions/float_to_SW.ttcn
@@ -0,0 +1,143 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Raduly, Csaba
+ *
+ ******************************************************************************/
+module float_to_SW {	//^In TTCN-3 module `float_to_SW'://
+
+type component PDTestComponent {};
+
+/*--- FLOAT2INT --------------------------------------------------*/
+
+
+const integer f2icon1 := float2int(5E-1)
+const integer f2icon2 := float2int(0.345)
+const integer f2icon3 := float2int(-0.345)
+const integer f2icon4 := float2int(-5E0)
+const integer f2icon5 := float2int(12345678910000.0)
+const integer f2icon6 := float2int(12345678910e+4)
+const integer f2icon7 := float2int(4294967296.0)
+
+testcase float_to_int() runs on PDTestComponent{ //In testcase definition//
+
+	if ((f2icon1 == 0)
+	and (f2icon1 == float2int(5E-1)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((f2icon2 == 0)
+	and (f2icon2 == float2int(0.345)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((f2icon3 == 0)
+	and (f2icon3 == float2int(-0.345)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((f2icon4 == -5)
+	and (f2icon4 == float2int(-5E0)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	// Tests added for HL22929.
+    if ((f2icon5 == 12345678910000)
+	and (f2icon5 == float2int(12345678910000.0)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+    if ((f2icon6 == 123456789100000)
+	and (f2icon6 == float2int(12345678910e+4)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+    if ((f2icon7 == 4294967296)
+	and (f2icon7 == float2int(4294967296.0)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+}
+
+/*--- FLOAT2STR --------------------------------------------------*/
+
+const charstring f2scon := "1234567890123456789012345678901234567890"
+
+const charstring f2scon1 := float2str(5E-1)
+const charstring f2scon2 := float2str(-5E-1)
+const charstring f2scon3 := float2str(0.345)
+const charstring f2scon4 := float2str(-0.345)
+const charstring f2scon5 := float2str(0.1234567)
+const charstring f2scon6 := float2str(123456748901.0)
+const charstring f2scon7 := float2str(123456758901.0)
+const charstring f2scon8 := float2str(infinity);
+const charstring f2scon9 := float2str(-infinity);
+const charstring f2scon10 := float2str(not_a_number);
+
+
+testcase float_to_str() runs on PDTestComponent{ //In testcase definition//
+
+	if ((f2scon1 == "0.500000")
+	and (f2scon1 == float2str(5E-1)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((f2scon2 == "-0.500000")
+	and (f2scon2 == float2str(-5E-1)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((f2scon3 == "0.345000")
+	and (f2scon3 == float2str(0.345)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((f2scon4 == "-0.345000")
+	and (f2scon4 == float2str(-0.345)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((f2scon5 == "0.123457")
+	and (f2scon5 == float2str(0.1234567)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((f2scon6 == "1.234567e+11")
+	and (f2scon6 == float2str(123456748901.0)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((f2scon7 == "1.234568e+11")
+	and (f2scon7 == float2str(123456758901.0)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((f2scon8 == "infinity")
+	and (f2scon8 == float2str(infinity)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((f2scon9 == "-infinity")
+	and (f2scon9 == float2str(-infinity)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((f2scon10 == "not_a_number")
+	and (f2scon10 == float2str(not_a_number)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+}
+
+control {
+	execute (float_to_int());
+	execute (float_to_str());
+}
+
+}
diff --git a/Regression_Test_java/src/predefFunctions/hex_to_OK.ttcn b/Regression_Test_java/src/predefFunctions/hex_to_OK.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..7a7abfd0806311ad8605230ae9ce30af00d4abb2
--- /dev/null
+++ b/Regression_Test_java/src/predefFunctions/hex_to_OK.ttcn
@@ -0,0 +1,279 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Raduly, Csaba
+ *
+ ******************************************************************************/
+module hex_to_OK {
+
+type component PDTestComponent {};
+
+/*--- HEX2BIT --------------------------------------------------*/
+
+modulepar bitstring h2bpar := hex2bit(''H)
+modulepar bitstring h2bpar1 := hex2bit('000000'H & ''H & '111111'H)
+modulepar bitstring h2bpar2 := hex2bit(substr('000000111111'H,0,6) & ''H & substr('000000111111'H,6,6))
+const     bitstring h2bcon2 := hex2bit(substr('000000111111'H,0,6) & ''H & substr('000000111111'H,6,6))
+modulepar bitstring h2bpar3 := hex2bit(('000000'H <@ lengthof(h2bcon2)/2) & ''H & ('111111'H @> lengthof(h2bcon2)/2))
+modulepar bitstring h2bpar4 := hex2bit((not4b 'FFFFFF'H) & '111111'H)
+modulepar bitstring h2bpar5 := hex2bit('000000111111'H and4b '000000111111'H)
+modulepar bitstring h2bpar6 := hex2bit('000000000000'H or4b  '000000111111'H)
+modulepar bitstring h2bpar7 := hex2bit('000000000000'H xor4b '000000111111'H)
+
+const bitstring h2bparb := '000000000000000000000000000100010001000100010001'B
+
+testcase hex_to_bit() runs on PDTestComponent{
+
+	if ((h2bpar == hex2bit(''H))
+	and (h2bpar == ''B))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((h2bpar1 == hex2bit('000000'H & ''H & '111111'H))
+	and (h2bpar1 == h2bparb))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((h2bpar2 == hex2bit(substr('000000111111'H,0,6) & ''H & substr('000000111111'H,6,6)))
+	and (h2bpar2 == h2bparb))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((h2bpar3 == hex2bit(('000000'H <@ lengthof(h2bpar2)/2) & ''H & ('111111'H @> lengthof(h2bpar2)/2)))
+	and (h2bpar3 == h2bparb))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((h2bpar4 == hex2bit((not4b 'FFFFFF'H) & '111111'H))
+	and (h2bpar4 == h2bparb))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((h2bpar5 == hex2bit('000000111111'H and4b '000000111111'H))
+	and (h2bpar5 == h2bparb))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((h2bpar6 == hex2bit('000000000000'H or4b  '000000111111'H))
+	and (h2bpar6 == h2bparb))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((h2bpar7 == hex2bit('000000000000'H xor4b '000000111111'H))
+	and (h2bpar7 == h2bparb))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+}
+/*--- HEX2INT --------------------------------------------------*/
+
+modulepar integer h2ipar := hex2int(''H)
+modulepar integer h2ipar1 := hex2int('FFF'H & 'FFFF'H)
+modulepar integer h2ipar2 := hex2int((not4b 'FFF'H) & 'FFFF'H)
+modulepar integer h2ipar3 := hex2int(('FFF'H and4b '000'H) & 'FFFF'H)
+modulepar integer h2ipar4 := hex2int(('000'H or4b '000'H) & 'FFFF'H)
+modulepar integer h2ipar5 := hex2int(('0FF'H xor4b '0FF'H) & 'FFFF'H)
+modulepar integer h2i1_16 := 12345678910111213141516;
+
+testcase hex_to_int() runs on PDTestComponent{
+	var integer i1 := 12345678910111213141516
+	var hexstring hs1 := '000000000000029D42B65689328BBE0C'H
+	var integer b;
+
+	if ((h2ipar == hex2int(''H))
+	and (h2ipar == 0))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((h2ipar1 == hex2int('FFF'H & 'FFFF'H))
+	and (h2ipar1 == 268435455))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	b := hex2int((not4b 'FFF'H) & 'FFFF'H)
+	if ((h2ipar2 == b)
+	and (h2ipar2 == 65535))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	b := hex2int(('FFF'H and4b '000'H) & 'FFFF'H)
+	if ((h2ipar3 == b)
+	and (h2ipar3 == 65535))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	b := hex2int(('000'H or4b '000'H) & 'FFFF'H)
+	if ((h2ipar4 == b)
+	and (h2ipar4 == 65535))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	b := hex2int(('0FF'H xor4b '0FF'H) & 'FFFF'H)
+	if ((h2ipar5 == b)
+	and (h2ipar5 == 65535))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if (hex2int(hs1) == i1)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (hex2int('000000000000029D42B65689328BBE0C'H) == h2i1_16)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (hex2int(hs1) == 12345678910111213141516)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (hex2int('029D42B65689328BBE0C'H) == h2i1_16)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	var integer j
+	for (j:=0; j<4096; j:=j+1) {
+	if (hex2int(int2hex(j,3)) == j)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	}
+}
+
+
+/*--- HEX2OCT --------------------------------------------------*/
+
+modulepar octetstring h2opar := hex2oct(''H)
+modulepar octetstring h2opar1 := hex2oct('000000'H & ''H & '111111'H)
+modulepar octetstring h2opar2 := hex2oct(substr('000000111111'H,0,6) & ''H & substr('000000111111'H,6,6))
+modulepar octetstring h2opar3 := hex2oct(('000000'H <@ 3) & ''H & ('111111'H @> 3))
+modulepar octetstring h2opar4 := hex2oct((not4b 'FFFFFF'H) & '111111'H)
+modulepar octetstring h2opar5 := hex2oct('000000111111'H and4b '000000111111'H)
+modulepar octetstring h2opar6 := hex2oct('000000000000'H or4b  '000000111111'H)
+modulepar octetstring h2opar7 := hex2oct('000000000000'H xor4b '000000111111'H)
+modulepar octetstring h2opar8 := hex2oct('00011'H)
+modulepar octetstring h2opar9 := hex2oct('1'H)
+
+modulepar octetstring h2oparo := '000000111111'O
+
+testcase hex_to_oct() runs on PDTestComponent{
+
+	if ((h2opar == hex2oct(''H))
+	and (h2opar == ''O))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((h2opar1 == hex2oct('000000'H & ''H & '111111'H))
+	and (h2opar1 == h2oparo))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((h2opar2 == hex2oct(substr('000000111111'H,0,6) & ''H & substr('000000111111'H,6,6)))
+	and (h2opar2 == h2oparo))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((h2opar3 == hex2oct(('000000'H <@ 3) & ''H & ('111111'H @> 3)))
+	and (h2opar3 == h2oparo))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((h2opar4 == hex2oct((not4b 'FFFFFF'H) & '111111'H))
+	and (h2opar4 == h2oparo))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((h2opar5 == hex2oct('000000111111'H and4b '000000111111'H))
+	and (h2opar5 == h2oparo))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((h2opar6 == hex2oct('000000000000'H or4b  '000000111111'H))
+	and (h2opar6 == h2oparo))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((h2opar7 == hex2oct('000000000000'H xor4b '000000111111'H))
+	and (h2opar7 == h2oparo))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((h2opar8 == hex2oct('00011'H))
+	and (h2opar8 == '000011'O))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((h2opar9 == hex2oct('1'H))
+	and (h2opar9 == '01'O))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+
+}
+
+/*--- HEX2STR --------------------------------------------------*/
+
+modulepar charstring h2spar := hex2str(''H)
+modulepar charstring h2spar1 := hex2str('000000'H & ''H & '111111'H)
+modulepar charstring h2spar2 := hex2str(substr('000000111111'H,0,6) & ''H & substr('000000111111'H,6,6))
+modulepar charstring h2spar3 := hex2str(('000000'H <@ 3) & ''H & ('111111'H @> 3))
+modulepar charstring h2spar4 := hex2str((not4b 'FFFFFF'H) & '111111'H)
+modulepar charstring h2spar5 := hex2str('000000111111'H and4b '000000111111'H)
+modulepar charstring h2spar6 := hex2str('000000000000'H or4b  '000000111111'H)
+modulepar charstring h2spar7 := hex2str('000000000000'H xor4b '000000111111'H)
+
+modulepar charstring h2spars := "000000111111"
+
+testcase hex_to_str() runs on PDTestComponent{
+
+	if ((h2spar == hex2str(''H))
+	and (h2spar == ""))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((h2spar1 == hex2str('000000'H & ''H & '111111'H))
+	and (h2spar1 == h2spars))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((h2spar2 == hex2str(substr('000000111111'H,0,6) & ''H & substr('000000111111'H,6,6)))
+	and (h2spar2 == h2spars))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((h2spar3 == hex2str(('000000'H <@ 3) & ''H & ('111111'H @> 3)))
+	and (h2spar3 == h2spars))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((h2spar4 == hex2str((not4b 'FFFFFF'H) & '111111'H))
+	and (h2spar4 == h2spars))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((h2spar5 == hex2str('000000111111'H and4b '000000111111'H))
+	and (h2spar5 == h2spars))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((h2spar6 == hex2str('000000000000'H or4b  '000000111111'H))
+	and (h2spar6 == h2spars))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((h2spar7 == hex2str('000000000000'H xor4b '000000111111'H))
+	and (h2spar7 == h2spars))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+}
+
+control {
+	execute (hex_to_bit());
+	execute (hex_to_int());
+	execute (hex_to_oct());
+	execute (hex_to_str());
+}
+
+}
diff --git a/Regression_Test_java/src/predefFunctions/hex_to_SW.ttcn b/Regression_Test_java/src/predefFunctions/hex_to_SW.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..e7186c0323b7eba1fb9ad3559387be9ce97f9e59
--- /dev/null
+++ b/Regression_Test_java/src/predefFunctions/hex_to_SW.ttcn
@@ -0,0 +1,298 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Raduly, Csaba
+ *
+ ******************************************************************************/
+module hex_to_SW {	//^In TTCN-3 module `hex_to_SW'://
+
+type component PDTestComponent {};
+
+/*--- HEX2BIT --------------------------------------------------*/
+
+const bitstring h2bcon := hex2bit(''H)
+const bitstring h2bcon1 := hex2bit('000000'H & ''H & '111111'H)
+const bitstring h2bcon2 := hex2bit(substr('000000111111'H,0,6) & ''H & substr('000000111111'H,6,6))
+const bitstring h2bcon3 := hex2bit(('000000'H <@ lengthof(h2bcon2)/2) & ''H & ('111111'H @> lengthof(h2bcon2)/2))
+const bitstring h2bcon4 := hex2bit((not4b 'FFFFFF'H) & '111111'H)
+const bitstring h2bcon5 := hex2bit('000000111111'H and4b '000000111111'H)
+const bitstring h2bcon6 := hex2bit('000000000000'H or4b  '000000111111'H)
+const bitstring h2bcon7 := hex2bit('000000000000'H xor4b '000000111111'H)
+
+const bitstring h2bconb := '000000000000000000000000000100010001000100010001'B
+
+testcase hex_to_bit() runs on PDTestComponent{ //In testcase definition//
+
+	if ((h2bcon == hex2bit(''H))
+	and (h2bcon == ''B))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((h2bcon1 == hex2bit('000000'H & ''H & '111111'H))
+	and (h2bcon1 == h2bconb))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((h2bcon2 == hex2bit(substr('000000111111'H,0,6) & ''H & substr('000000111111'H,6,6)))
+	and (h2bcon2 == h2bconb))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((h2bcon3 == hex2bit(('000000'H <@ lengthof(h2bcon2)/2) & ''H & ('111111'H @> lengthof(h2bcon2)/2)))
+	and (h2bcon3 == h2bconb))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((h2bcon4 == hex2bit((not4b 'FFFFFF'H) & '111111'H))
+	and (h2bcon4 == h2bconb))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((h2bcon5 == hex2bit('000000111111'H and4b '000000111111'H))
+	and (h2bcon5 == h2bconb))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((h2bcon6 == hex2bit('000000000000'H or4b  '000000111111'H))
+	and (h2bcon6 == h2bconb))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((h2bcon7 == hex2bit('000000000000'H xor4b '000000111111'H))
+	and (h2bcon7 == h2bconb))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+}
+/*--- HEX2INT --------------------------------------------------*/
+
+const integer h2icon := hex2int(''H)
+const integer h2icon1 := hex2int('FFF'H & 'FFFF'H)
+const integer h2icon2 := hex2int((not4b 'FFF'H) & 'FFFF'H)
+const integer h2icon3 := hex2int(('FFF'H and4b '000'H) & 'FFFF'H)
+const integer h2icon4 := hex2int(('000'H or4b '000'H) & 'FFFF'H)
+const integer h2icon5 := hex2int(('0FF'H xor4b '0FF'H) & 'FFFF'H)
+const integer i1 := 12345678910111213141516
+const hexstring hs1 := '000000000000029D42B65689328BBE0C'H
+
+testcase hex_to_int() runs on PDTestComponent{ //In testcase definition//
+
+	if ((h2icon == hex2int(''H))
+	and (h2icon == 0))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((h2icon1 == hex2int('FFF'H & 'FFFF'H))
+	and (h2icon1 == 268435455))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((h2icon2 == hex2int((not4b 'FFF'H) & 'FFFF'H))
+	and (h2icon2 == 65535))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((h2icon3 == hex2int(('FFF'H and4b '000'H) & 'FFFF'H))
+	and (h2icon3 == 65535))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((h2icon4 == hex2int(('000'H or4b '000'H) & 'FFFF'H))
+	and (h2icon4 == 65535))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((h2icon5 == hex2int(('0FF'H xor4b '0FF'H) & 'FFFF'H))
+	and (h2icon5 == 65535))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if (hex2int(hs1) == i1)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (hex2int('000000000000029D42B65689328BBE0C'H) == 12345678910111213141516)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (hex2int(hs1) == 12345678910111213141516)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (hex2int('029D42B65689328BBE0C'H) == 12345678910111213141516)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+}
+
+
+/*--- HEX2OCT --------------------------------------------------*/
+
+const octetstring h2ocon := hex2oct(''H)
+const octetstring h2ocon1 := hex2oct('000000'H & ''H & '111111'H)
+const octetstring h2ocon2 := hex2oct(substr('000000111111'H,0,6) & ''H & substr('000000111111'H,6,6))
+const octetstring h2ocon3 := hex2oct(('000000'H <@ 3) & ''H & ('111111'H @> 3))
+const octetstring h2ocon4 := hex2oct((not4b 'FFFFFF'H) & '111111'H)
+const octetstring h2ocon5 := hex2oct('000000111111'H and4b '000000111111'H)
+const octetstring h2ocon6 := hex2oct('000000000000'H or4b  '000000111111'H)
+const octetstring h2ocon7 := hex2oct('000000000000'H xor4b '000000111111'H)
+const octetstring h2ocon8 := hex2oct('00011'H)
+const octetstring h2ocon9 := hex2oct('1'H)
+
+const octetstring h2ocono := '000000111111'O
+
+testcase hex_to_oct() runs on PDTestComponent{ //In testcase definition//
+
+	if ((h2ocon == hex2oct(''H))
+	and (h2ocon == ''O))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((h2ocon1 == hex2oct('000000'H & ''H & '111111'H))
+	and (h2ocon1 == h2ocono))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((h2ocon2 == hex2oct(substr('000000111111'H,0,6) & ''H & substr('000000111111'H,6,6)))
+	and (h2ocon2 == h2ocono))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((h2ocon3 == hex2oct(('000000'H <@ 3) & ''H & ('111111'H @> 3)))
+	and (h2ocon3 == h2ocono))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((h2ocon4 == hex2oct((not4b 'FFFFFF'H) & '111111'H))
+	and (h2ocon4 == h2ocono))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((h2ocon5 == hex2oct('000000111111'H and4b '000000111111'H))
+	and (h2ocon5 == h2ocono))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((h2ocon6 == hex2oct('000000000000'H or4b  '000000111111'H))
+	and (h2ocon6 == h2ocono))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((h2ocon7 == hex2oct('000000000000'H xor4b '000000111111'H))
+	and (h2ocon7 == h2ocono))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((h2ocon8 == hex2oct('00011'H))
+	and (h2ocon8 == '000011'O))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((h2ocon9 == hex2oct('1'H))
+	and (h2ocon9 == '01'O))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+}
+
+/*--- HEX2STR --------------------------------------------------*/
+
+const charstring h2scon := hex2str(''H)
+const charstring h2scon1 := hex2str('000000'H & ''H & '111111'H)
+const charstring h2scon2 := hex2str(substr('000000111111'H,0,6) & ''H & substr('000000111111'H,6,6))
+const charstring h2scon3 := hex2str(('000000'H <@ 3) & ''H & ('111111'H @> 3))
+const charstring h2scon4 := hex2str((not4b 'FFFFFF'H) & '111111'H)
+const charstring h2scon5 := hex2str('000000111111'H and4b '000000111111'H)
+const charstring h2scon6 := hex2str('000000000000'H or4b  '000000111111'H)
+const charstring h2scon7 := hex2str('000000000000'H xor4b '000000111111'H)
+
+const charstring h2scons := "000000111111"
+
+testcase hex_to_str() runs on PDTestComponent{ //In testcase definition//
+
+	if ((h2scon == hex2str(''H))
+	and (h2scon == ""))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((h2scon1 == hex2str('000000'H & ''H & '111111'H))
+	and (h2scon1 == h2scons))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((h2scon2 == hex2str(substr('000000111111'H,0,6) & ''H & substr('000000111111'H,6,6)))
+	and (h2scon2 == h2scons))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((h2scon3 == hex2str(('000000'H <@ 3) & ''H & ('111111'H @> 3)))
+	and (h2scon3 == h2scons))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((h2scon4 == hex2str((not4b 'FFFFFF'H) & '111111'H))
+	and (h2scon4 == h2scons))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((h2scon5 == hex2str('000000111111'H and4b '000000111111'H))
+	and (h2scon5 == h2scons))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((h2scon6 == hex2str('000000000000'H or4b  '000000111111'H))
+	and (h2scon6 == h2scons))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((h2scon7 == hex2str('000000000000'H xor4b '000000111111'H))
+	and (h2scon7 == h2scons))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+}
+
+control {
+	execute (hex_to_bit());
+	execute (hex_to_int());
+	execute (hex_to_oct());
+	execute (hex_to_str());
+}
+
+}
diff --git a/Regression_Test_java/src/predefFunctions/int_to_OK.ttcn b/Regression_Test_java/src/predefFunctions/int_to_OK.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..629f6b2ec305f0ff087336906ef283d954bca31b
--- /dev/null
+++ b/Regression_Test_java/src/predefFunctions/int_to_OK.ttcn
@@ -0,0 +1,468 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Raduly, Csaba
+ *
+ ******************************************************************************/
+module int_to_OK {
+
+type component PDTestComponent {};
+
+
+/*--- INT2BIT --------------------------------------------------*/
+
+const     bitstring i2bcon := '0000011111000001111100001111'B
+
+modulepar bitstring i2bpar := '0000011111000001111100001111'B
+modulepar bitstring i2bpar1 := int2bit(0,10);
+modulepar bitstring i2bpar2 := int2bit(0,0);
+modulepar bitstring i2bpar3 := int2bit(1,1)
+modulepar bitstring i2bpar4 := int2bit(255,8)
+modulepar bitstring i2bpar5 := int2bit(bit2int(i2bcon),lengthof(i2bcon))
+modulepar bitstring i2bpar6 := not4b int2bit(bit2int(not4b i2bcon),lengthof(i2bcon))
+modulepar bitstring i2bpar7 := int2bit(bit2int(substr(i2bcon,0,lengthof(i2bcon)/2)),lengthof(i2bcon)/2)
+modulepar bitstring i2bpar8 := int2bit(bit2int(substr(i2bcon,  lengthof(i2bcon)/2,  lengthof(i2bcon)/2)),lengthof(i2bcon)/2)
+
+testcase int_to_bit() runs on PDTestComponent{
+	var integer i1 := 12345678910111213141516
+	var bitstring bs1 := '00000000000000000010100111010100001010110110010101101000100100110010100010111011111000001100'B
+	var bitstring bs2 := '010100111010100001010110110010101101000100100110010100010111011111000001100'B
+	if ((i2bpar1 == '0000000000'B)
+	and (i2bpar1 == int2bit(0,10)))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((i2bpar2 == ''B)and (i2bpar2 ==  int2bit(0,0)))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((i2bpar3 == '1'B)and (i2bpar3 ==  int2bit(1,1)))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((i2bpar4 == '11111111'B)and (i2bpar4 ==  int2bit(255,8)))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((i2bpar5 == i2bpar)and (i2bpar5 ==  int2bit(bit2int(i2bpar),lengthof(i2bpar))))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((i2bpar6 == i2bpar)and (i2bpar5 ==  not4b int2bit(bit2int(not4b i2bpar),lengthof(i2bpar))))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if (i2bpar == (i2bpar7 & i2bpar8))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if (int2bit(i1, 92) == bs1)
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	/* compile-time
+	if (int2bit(12345678910111213141516, 92) == '00000000000000000010100111010100001010110110010101101000100100110010100010111011111000001100'B)
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+    */
+	if (int2bit(12345678910111213141516, 92) == bs1)
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if (int2bit(12345678910111213141516, 75) == bs2)
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+}
+
+/*--- INT2CHAR --------------------------------------------------*/
+
+const integer i2cpari[3] := {0,1,2}
+
+type record of integer i2crtype
+const i2crtype i2cparii := {0,1,2}
+
+modulepar charstring i2cpar1 :=  int2char(8 mod 6)
+modulepar charstring i2cpar2 :=  int2char(i2cpari[2])
+modulepar charstring i2cpar3 :=  int2char(sizeof(i2cpari)-1)
+modulepar charstring i2cpar4 :=  int2char(sizeof(i2cparii)-1)
+
+testcase int_to_char() runs on PDTestComponent{
+
+	if ((i2cpar1 == int2char(8 mod 6))
+	and (i2cpar1 == ""))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((i2cpar2 == int2char(i2cpari[2]))
+	and (i2cpar2 == ""))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((i2cpar3 == int2char(sizeof(i2cpari)-1))
+	and (i2cpar3 == ""))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((i2cpar4 == int2char(sizeof(i2cparii)-1))
+	and (i2cpar4 == ""))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+
+	var integer j
+	var charstring c
+
+	for (j:=0; j<128; j:=j+1) {
+		if (char2int(int2char(j)) == j)
+			 {setverdict(pass);}
+		else {setverdict(fail, __LINE__);}
+	}
+
+}
+
+/*--- INT2UNICHAR --------------------------------------------------*/
+
+
+
+modulepar universal charstring i2uccon1 :=  int2unichar(1)
+modulepar universal charstring i2uccon2 :=  int2unichar(256)
+modulepar universal charstring i2uccon3 :=  int2unichar(65536)
+modulepar universal charstring i2uccon4 :=  int2unichar(16777216)
+modulepar universal charstring i2uccon5 :=  int2unichar(2147483647)
+
+
+testcase int_to_unichar() runs on PDTestComponent{
+
+log (i2uccon1)
+log (i2uccon2)
+log (i2uccon3)
+log (i2uccon4)
+log (i2uccon5)
+
+	if ((i2uccon1 == int2unichar(1))
+	and (i2uccon1 == char(0, 0, 0, 1)))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((i2uccon2 == int2unichar(256))
+	and (i2uccon2 == char(0, 0, 1, 0)))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((i2uccon3 == int2unichar(65536))
+	and (i2uccon3 == char(0, 1, 0, 0)))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((i2uccon4 == int2unichar(16777216))
+	and (i2uccon4 == char(1, 0, 0, 0)))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((i2uccon5 == int2unichar(2147483647))
+	and (i2uccon5 == char(127, 255, 255, 255)))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+
+}
+
+
+/*--- INT2FLOAT --------------------------------------------------*/
+
+
+const integer i2fpari[3] := {0,1,2}
+
+type record of integer i2frtype;
+const i2frtype i2fparii := {0}
+
+type float i2fflo (-1.0 .. 6.0)
+
+modulepar float i2fpar1 := int2float(3/2)
+modulepar float i2fpar2 := int2float(-3)
+modulepar float i2fpar3 := int2float(lengthof(""))
+modulepar float i2fpar4 := int2float(i2fpari[0])
+modulepar float i2fpar5 := int2float(i2fparii[0])
+modulepar float i2fpar8 := int2float(2147483648)
+modulepar float i2fpar9 := int2float(214748364800)
+modulepar float i2fpar10 := int2float(4294967296)
+
+modulepar i2fflo i2fpar6 := int2float(20/3)
+modulepar i2fflo i2fpar7 := int2float(8 mod 6)
+
+testcase int_to_float() runs on PDTestComponent{
+
+	if ((i2fpar1 == 1.0)
+	and (i2fpar1 == int2float(3/2)))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((i2fpar2 == -3.0)
+	and (i2fpar2 == -3E0))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((i2fpar3 == 0.0)
+	and (i2fpar3 == int2float(lengthof(""))))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((i2fpar4 == 0.0)
+	and (i2fpar4 == int2float(i2fpari[0])))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((i2fpar5 == 0.0)
+	and (i2fpar5 == int2float(i2fparii[0])))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((i2fpar6 == 6.0)
+	and (i2fpar6 == int2float(20/3)))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((i2fpar7 == 2.0)
+	and (i2fpar7 == int2float(8 mod 6)))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+    if ((i2fpar8 == 2147483648.0)
+	and (i2fpar8 == int2float(2147483648)))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+    if ((i2fpar9 == 214748364800.0)
+	and (i2fpar9 == int2float(214748364800)))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+    if ((i2fpar10 == 4294967296.0)
+	and (i2fpar10 == int2float(4294967296)))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+    var float i2fvar1 := 2147483648.0
+    var float i2fvar2 := 214748364800.0
+    var float i2fvar3 := 4294967296.0
+    if ((i2fvar1 == 2147483648.0)
+	and (i2fvar1 == int2float(2147483648)))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+    if ((i2fvar2 == 214748364800.0)
+	and (i2fvar2 == int2float(214748364800)))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+    if ((i2fvar3 == 4294967296.0)
+	and (i2fvar3 == int2float(4294967296)))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+
+}
+
+/*--- INT2HEX --------------------------------------------------*/
+
+const     hexstring i2hcon := '0123456'H
+modulepar hexstring i2hpar := '0123456'H
+modulepar hexstring i2hpar1 := int2hex(0,10)
+modulepar hexstring i2hpar2 := int2hex(0,0)
+modulepar hexstring i2hpar3 := int2hex(15,1)
+modulepar hexstring i2hpar4 := int2hex(hex2int(i2hcon),lengthof(i2hcon))
+modulepar integer i2hpari := hex2int(i2hcon)
+
+testcase int_to_hex() runs on PDTestComponent{
+	var integer i1 := 12345678910111213141516
+	var hexstring hs1 := '000000000000029D42B65689328BBE0C'H
+	var hexstring hs2 := '029D42B65689328BBE0C'H
+	if ((i2hpar1 == '0000000000'H)
+	and (i2hpar1 == int2hex(0,10)))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((i2hpar2 == ''H) and (i2hpar2 ==  int2hex(0,0)))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((i2hpar3 == 'F'H)
+	and (i2hpar3 == int2hex(15,1)))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((i2hpar4 == i2hpar)
+	and (i2hpar4 == int2hex(hex2int(i2hpar),lengthof(i2hpar))))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if (int2hex(i1, 32) == hs1) { setverdict(pass) } else { setverdict(fail, __LINE__) }
+	//compile-time: if (int2hex(12345678910111213141516, 32) == '000000000000029D42B65689328BBE0C'H) { setverdict(pass) } else { setverdict(fail, __LINE__) }
+	if (int2hex(12345678910111213141516, 32) == hs1) { setverdict(pass) } else { setverdict(fail, __LINE__) }
+	if (int2hex(12345678910111213141516, 20) == hs2) { setverdict(pass) } else { setverdict(fail, __LINE__) }
+}
+
+/*--- INT2OCT --------------------------------------------------*/
+
+const     octetstring i2ocon := '12345678'O
+modulepar octetstring i2opar := '12345678'O
+modulepar octetstring i2opar1 := int2oct(0,10)
+modulepar octetstring i2opar2 := int2oct(0,0)
+modulepar octetstring i2opar3 := int2oct(15,1)
+modulepar octetstring i2opar4 := int2oct(oct2int(i2ocon),lengthof(i2ocon))
+modulepar octetstring i2opar5 := int2oct(33,8);
+modulepar integer i2opari := oct2int(i2ocon)
+
+testcase int_to_oct() runs on PDTestComponent{
+    var integer i1 := 881883119815076896174081;
+    var octetstring os1 := '00000000000000000000000000000000000000000000BABEFACEDECAFBADF001'O
+    var octetstring os2 := 'BABEFACEDECAFBADF001'O
+	if ((i2opar1 == '00000000000000000000'O)
+	and (i2opar1 == int2oct(0,10)))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((i2opar2 == ''O)and (i2opar2 ==  int2oct(0,0)))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((i2opar3 == '0F'O)
+	and (i2opar3 == int2oct(15,1)))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if (i2opar5 == '0000000000000021'O)
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((i2opar4 == i2opar)
+	and (i2opar4 == int2oct(oct2int(i2opar),lengthof(i2opar))))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	log(i1);
+	log(int2oct(i1, 32));
+	log(os1);
+	if (int2oct(i1, 32) == os1) { setverdict(pass) } else { setverdict(fail, __LINE__, match(int2oct(i1, 32) , os1)) }
+	//compile-time: if (int2oct(12345678910111213141516, 32) == '00000000000000000000000000000000000000000000029D42B65689328BBE0C'O) { setverdict(pass) } else { setverdict(fail, __LINE__) }
+	if (int2oct(881883119815076896174081, 32) == os1) { setverdict(pass) } else { setverdict(fail, __LINE__) }
+	if (int2oct(881883119815076896174081, 10) == os2) { setverdict(pass) } else { setverdict(fail, __LINE__) }
+}
+
+/*--- INT2STR --------------------------------------------------*/
+
+const     charstring i2scon :=  "1234567890"
+modulepar charstring i2spar :=  "1234567890"
+modulepar charstring i2spar1 := int2str(0)
+modulepar charstring i2spar2 := int2str(-1)
+modulepar charstring i2spar3 := int2str(16 mod 3)
+modulepar charstring i2spar4 := int2str(16 rem 3)
+modulepar charstring i2spar5 := int2str(lengthof(i2scon))
+
+const     integer i2sconi := str2int(i2scon)
+
+modulepar charstring i2spar6 := int2str(i2sconi)
+const     charstring i2scon7 := "1234567891011121314151617181920"
+modulepar charstring i2spar7 := "1234567891011121314151617181920"
+const     charstring i2scon8 := "-1234567891011121314151617181920"  // Negative values.
+modulepar charstring i2spar8 := "-1234567891011121314151617181920"  // Negative values.
+modulepar integer i2spari1 := str2int(i2scon7)
+modulepar integer i2spari2 := str2int(i2scon8)
+
+testcase int_to_str() runs on PDTestComponent{
+
+	var charstring cc := int2str(i2sconi)
+	var charstring vv := "1234567891011121314151617181920"
+	var charstring vv1 := "-1234567891011121314151617181920"
+	var integer ii := str2int(vv)
+	var integer ii1 := str2int(vv1)
+
+	if ((i2spar1 == "0")
+	and (i2spar1 == int2str(0)))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((i2spar2 == "-1")
+	and (i2spar2 == int2str(-1)))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((i2spar3 == "1")
+	and (i2spar3 == int2str(16 mod 3)))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((i2spar4 == "1")
+	and (i2spar4 == int2str(16 rem 3)))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((i2spar5 == "10")
+	and (i2spar5 == int2str(lengthof(i2spar))))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((i2spar6 == i2spar)
+	and (i2spar6 == int2str(i2sconi)))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	// Compile time evaluation.  (Positive/negative.)
+	if ((i2spar7 == int2str(1234567891011121314151617181920)
+	and (int2str(1234567891011121314151617181920) == i2spar7)))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((int2str(1234567891011121314151617181930 - 10) == i2spar7)
+	and (i2spar7 == int2str(1234567891011121314151617181930 - 10)))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((i2spar7 == int2str(i2spari1)
+	and (int2str(i2spari1) == i2spar7)))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((int2str(i2spari1 + 10 - 10) == i2spar7)
+	and (i2spar7 == int2str(i2spari1 + 10 - 10)))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((i2spar8 == int2str(-1234567891011121314151617181920)
+	and (int2str(1234567891011121314151617181920) == i2spar7)))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((int2str(-1234567891011121314151617181930 + 10) == i2spar8)
+	and (i2spar8 == int2str(-1234567891011121314151617181930 + 10)))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((i2spar8 == int2str(i2spari2)
+	and (int2str(i2spari2) == i2spar8)))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((int2str(i2spari2 + 10 - 10) == i2spar8)
+	and (i2spar8 == int2str(i2spari2 + 10 - 10)))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	// Run-time evaluation.  (Positive/negative.)
+	if ((vv == int2str(1234567891011121314151617181920)
+	and (int2str(1234567891011121314151617181920) == vv)))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((int2str(1234567891011121314151617181910 + 10) == vv)
+	and (vv == int2str(1234567891011121314151617181910 + 10)))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((vv == int2str(ii)
+	and (int2str(1234567891011121314151617181920) == vv)))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((int2str(ii + 10 - 10) == vv)
+	and (vv == int2str(ii + 10 - 10)))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((i2spari1 == ii)
+	and (ii == i2spari1))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((int2str(i2spari1) == int2str(ii))
+	and (int2str(ii) == int2str(i2spari1)))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((vv1 == int2str(-1234567891011121314151617181920)
+	and (int2str(-1234567891011121314151617181920) == vv1)))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((int2str(-1234567891011121314151617181910 - 10) == vv1)
+	and (vv1 == int2str(-1234567891011121314151617181910 - 10)))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((vv1 == int2str(ii1)
+	and (int2str(-1234567891011121314151617181920) == vv1)))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((int2str(ii1 + 10 - 10) == vv1)
+	and (vv1 == int2str(ii1 + 10 - 10)))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((i2spari2 == ii1)
+	and (ii1 == i2spari2))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((int2str(i2spari2) == int2str(ii1))
+	and (int2str(ii1) == int2str(i2spari2)))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+}
+
+
+
+
+control {
+	execute (int_to_bit());
+	execute (int_to_char());
+	execute (int_to_unichar());
+
+	execute (int_to_float());
+	execute (int_to_hex());
+	execute (int_to_oct());
+	execute (int_to_str());
+}
+
+}
diff --git a/Regression_Test_java/src/predefFunctions/int_to_SW.ttcn b/Regression_Test_java/src/predefFunctions/int_to_SW.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..3e37836cffe5bea6d93ceb41f042b7476b5f18be
--- /dev/null
+++ b/Regression_Test_java/src/predefFunctions/int_to_SW.ttcn
@@ -0,0 +1,449 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Raduly, Csaba
+ *
+ ******************************************************************************/
+module int_to_SW {	//^In TTCN-3 module `int_to_SW'://
+
+type component PDTestComponent {};
+
+
+/*--- INT2BIT --------------------------------------------------*/
+
+const bitstring i2bcon := '0000011111000001111100001111'B
+const bitstring i2bcon1 := int2bit(0,10);
+const bitstring i2bcon2 := int2bit(0,0);
+const bitstring i2bcon3 := int2bit(1,1)
+const bitstring i2bcon4 := int2bit(255,8)
+const bitstring i2bcon5 := int2bit(bit2int(i2bcon),lengthof(i2bcon))
+const bitstring i2bcon6 := not4b int2bit(bit2int(not4b i2bcon),lengthof(i2bcon))
+const bitstring i2bcon7 := int2bit(bit2int(substr(i2bcon,0,lengthof(i2bcon)/2)),lengthof(i2bcon)/2)
+const bitstring i2bcon8 := int2bit(bit2int(substr(i2bcon,lengthof(i2bcon)/2,lengthof(i2bcon)/2)),lengthof(i2bcon)/2)
+const integer i1 := 12345678910111213141516
+const bitstring bs1 := '00000000000000000010100111010100001010110110010101101000100100110010100010111011111000001100'B
+
+testcase int_to_bit() runs on PDTestComponent{ //In testcase definition//
+    if ((i2bcon1 == '0000000000'B)
+    and (i2bcon1 == int2bit(0,10)))
+         {setverdict(pass);}
+    else {setverdict(fail, __LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+    if ((i2bcon2 == ''B)and (i2bcon2 ==  int2bit(0,0)))
+         {setverdict(pass);}
+    else {setverdict(fail, __LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+    if ((i2bcon3 == '1'B)and (i2bcon3 ==  int2bit(1,1)))
+         {setverdict(pass);}
+    else {setverdict(fail, __LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+    if ((i2bcon4 == '11111111'B)and (i2bcon4 ==  int2bit(255,8)))
+         {setverdict(pass);}
+    else {setverdict(fail, __LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+    if ((i2bcon5 == i2bcon)and (i2bcon5 ==  int2bit(bit2int(i2bcon),lengthof(i2bcon))))
+         {setverdict(pass);}
+    else {setverdict(fail, __LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+    if ((i2bcon6 == i2bcon)and (i2bcon5 ==  not4b int2bit(bit2int(not4b i2bcon),lengthof(i2bcon))))
+         {setverdict(pass);}
+    else {setverdict(fail, __LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+    if (i2bcon == (i2bcon7 & i2bcon8))
+         {setverdict(pass);}
+    else {setverdict(fail, __LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+    if (int2bit(i1, 92) == bs1)
+         {setverdict(pass);}
+    else {setverdict(fail, __LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+    if (int2bit(12345678910111213141516, 92) == '00000000000000000010100111010100001010110110010101101000100100110010100010111011111000001100'B)
+         {setverdict(pass);}
+    else {setverdict(fail, __LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+    if (int2bit(12345678910111213141516, 92) == bs1)
+         {setverdict(pass);}
+    else {setverdict(fail, __LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+    if (int2bit(12345678910111213141516, 75) == '010100111010100001010110110010101101000100100110010100010111011111000001100'B)
+         {setverdict(pass);}
+    else {setverdict(fail, __LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+}
+
+/*--- INT2CHAR --------------------------------------------------*/
+
+const integer i2cconi[3] := {0,1,2}
+
+type record of integer i2crtype
+const i2crtype i2cconii := {0,1,2}
+
+const char i2ccon1 :=  int2char(8 mod 6)            //^warning: Obsolete type `char' was substituted with `charstring'//
+const char i2ccon2 :=  int2char(i2cconi[2])         //^warning: Obsolete type `char' was substituted with `charstring'//
+const char i2ccon3 :=  int2char(sizeof(i2cconi)-1)  //^warning: Obsolete type `char' was substituted with `charstring'//
+const char i2ccon4 :=  int2char(sizeof(i2cconii)-1) //^warning: Obsolete type `char' was substituted with `charstring'//
+
+testcase int_to_char() runs on PDTestComponent{ //In testcase definition//
+
+    if ((i2ccon1 == int2char(8 mod 6))
+    and (i2ccon1 == ""))
+         {setverdict(pass);}
+    else {setverdict(fail, __LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+    if ((i2ccon2 == int2char(i2cconi[2]))
+    and (i2ccon2 == ""))
+         {setverdict(pass);}
+    else {setverdict(fail, __LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+    if ((i2ccon3 == int2char(sizeof(i2cconi)-1))
+    and (i2ccon3 == ""))
+         {setverdict(pass);}
+    else {setverdict(fail, __LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+    if ((i2ccon4 == int2char(sizeof(i2cconii)-1))
+    and (i2ccon4 == ""))
+         {setverdict(pass);}
+    else {setverdict(fail, __LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+}
+
+/*--- INT2UNICHAR --------------------------------------------------*/
+
+
+
+const universal char i2uccon1 :=  int2unichar(1)          //^warning: Obsolete type `universal char' was substituted with `universal charstring'//
+const universal char i2uccon2 :=  int2unichar(256)        //^warning: Obsolete type `universal char' was substituted with `universal charstring'//
+const universal char i2uccon3 :=  int2unichar(65536)      //^warning: Obsolete type `universal char' was substituted with `universal charstring'//
+const universal char i2uccon4 :=  int2unichar(16777216)   //^warning: Obsolete type `universal char' was substituted with `universal charstring'//
+const universal char i2uccon5 :=  int2unichar(2147483647) //^warning: Obsolete type `universal char' was substituted with `universal charstring'//
+
+
+testcase int_to_unichar() runs on PDTestComponent{ //In testcase definition//
+
+//log (i2uccon1)
+//log (i2uccon2)
+//log (i2uccon3)
+//log (i2uccon4)
+//log (i2uccon5)
+
+    if ((i2uccon1 == int2unichar(1))
+    and (i2uccon1 == char(0, 0, 0, 1)))
+         {setverdict(pass);}
+    else {setverdict(fail, __LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+    if ((i2uccon2 == int2unichar(256))
+    and (i2uccon2 == char(0, 0, 1, 0)))
+         {setverdict(pass);}
+    else {setverdict(fail, __LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+    if ((i2uccon3 == int2unichar(65536))
+    and (i2uccon3 == char(0, 1, 0, 0)))
+         {setverdict(pass);}
+    else {setverdict(fail, __LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+    if ((i2uccon4 == int2unichar(16777216))
+    and (i2uccon4 == char(1, 0, 0, 0)))
+         {setverdict(pass);}
+    else {setverdict(fail, __LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+    if ((i2uccon5 == int2unichar(2147483647))
+    and (i2uccon5 == char(127, 255, 255, 255)))
+         {setverdict(pass);}
+    else {setverdict(fail, __LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+}
+
+
+/*--- INT2FLOAT --------------------------------------------------*/
+
+
+const integer i2fconi[3] := {0,1,2}
+
+type record of integer i2frtype;
+const i2frtype i2fconii := {0}
+
+type float i2fflo (-1.0 .. 6.0)
+
+const float i2fcon1 := int2float(3/2)
+const float i2fcon2 := int2float(-3)
+const float i2fcon3 := int2float(lengthof(""))
+const float i2fcon4 := int2float(i2fconi[0])
+const float i2fcon5 := int2float(i2fconii[0])
+const float i2fcon8 := int2float(2147483648)
+const float i2fcon9 := int2float(214748364800)
+const float i2fcon10 := int2float(4294967296)
+
+const i2fflo i2fcon6 := int2float(20/3)
+const i2fflo i2fcon7 := int2float(8 mod 6)
+
+testcase int_to_float() runs on PDTestComponent{ //In testcase definition//
+
+    if ((i2fcon1 == 1.0)
+    and (i2fcon1 == int2float(3/2)))
+         {setverdict(pass);}
+    else {setverdict(fail, __LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+    if ((i2fcon2 == -3.0)
+    and (i2fcon2 == -3E0))
+         {setverdict(pass);}
+    else {setverdict(fail, __LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+    if ((i2fcon3 == 0.0)
+    and (i2fcon3 == int2float(lengthof(""))))
+         {setverdict(pass);}
+    else {setverdict(fail, __LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+    if ((i2fcon4 == 0.0)
+    and (i2fcon4 == int2float(i2fconi[0])))
+         {setverdict(pass);}
+    else {setverdict(fail, __LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+    if ((i2fcon5 == 0.0)
+    and (i2fcon5 == int2float(i2fconii[0])))
+         {setverdict(pass);}
+    else {setverdict(fail, __LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+    if ((i2fcon6 == 6.0)
+    and (i2fcon6 == int2float(20/3)))
+         {setverdict(pass);}
+    else {setverdict(fail, __LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+    if ((i2fcon7 == 2.0)
+    and (i2fcon7 == int2float(8 mod 6)))
+         {setverdict(pass);}
+    else {setverdict(fail, __LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+    if ((i2fcon8 == 2147483648.0)
+    and (i2fcon8 == int2float(2147483648)))
+         {setverdict(pass);}
+    else {setverdict(fail, __LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+    if ((i2fcon9 == 214748364800.0)
+    and (i2fcon9 == int2float(214748364800)))
+         {setverdict(pass);}
+    else {setverdict(fail, __LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+    if ((i2fcon10 == 4294967296.0)
+    and (i2fcon10 == int2float(4294967296)))
+         {setverdict(pass);}
+    else {setverdict(fail, __LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+}
+
+/*--- INT2HEX --------------------------------------------------*/
+
+const hexstring i2hcon := '0123456'H
+const hexstring i2hcon1 := int2hex(0,10)
+const hexstring i2hcon2 := int2hex(0,0)
+const hexstring i2hcon3 := int2hex(15,1)
+const hexstring i2hcon4 := int2hex(hex2int(i2hcon),lengthof(i2hcon))
+const integer i2hconi := hex2int(i2hcon)
+const hexstring hs1 := '000000000000029D42B65689328BBE0C'H
+
+testcase int_to_hex() runs on PDTestComponent{ //In testcase definition//
+
+    if ((i2hcon1 == '0000000000'H)
+    and (i2hcon1 == int2hex(0,10)))
+         {setverdict(pass);}
+    else {setverdict(fail, __LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+    if ((i2hcon2 == ''H)
+    and (i2hcon2 ==  int2hex(0,0)))
+         {setverdict(pass);}
+    else {setverdict(fail, __LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+    if ((i2hcon3 == 'F'H)
+    and (i2hcon3 == int2hex(15,1)))
+         {setverdict(pass);}
+    else {setverdict(fail, __LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+    if ((i2hcon4 == i2hcon)
+    and (i2hcon4 == int2hex(hex2int(i2hcon),lengthof(i2hcon))))
+         {setverdict(pass);}
+    else {setverdict(fail, __LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+    if (int2hex(i1, 32) == hs1)
+         { setverdict(pass) }
+    else { setverdict(fail, __LINE__) } //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+    if (int2hex(12345678910111213141516, 32) == '000000000000029D42B65689328BBE0C'H)
+         { setverdict(pass) }
+    else { setverdict(fail, __LINE__) } //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+    if (int2hex(12345678910111213141516, 32) == hs1)
+         { setverdict(pass) }
+    else { setverdict(fail, __LINE__) } //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+    if (int2hex(12345678910111213141516, 20) == '029D42B65689328BBE0C'H)
+         { setverdict(pass) }
+    else { setverdict(fail, __LINE__) } //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+}
+
+/*--- INT2OCT --------------------------------------------------*/
+
+const octetstring i2ocon := '12345678'O
+const octetstring i2ocon1 := int2oct(0,10)
+const octetstring i2ocon2 := int2oct(0,0)
+const octetstring i2ocon3 := int2oct(15,1)
+const octetstring i2ocon4 := int2oct(oct2int(i2ocon),lengthof(i2ocon))
+const octetstring i2ocon5 := int2oct(33,8);
+const integer i2oconi := oct2int(i2ocon)
+const octetstring os1 := '00000000000000000000000000000000000000000000029D42B65689328BBE0C'O
+
+testcase int_to_oct() runs on PDTestComponent{ //In testcase definition//
+    if ((i2ocon1 == '00000000000000000000'O)
+    and (i2ocon1 == int2oct(0,10)))
+         {setverdict(pass);}
+    else {setverdict(fail, __LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+    if ((i2ocon2 == ''O)and (i2ocon2 ==  int2oct(0,0)))
+         {setverdict(pass);}
+    else {setverdict(fail, __LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+    if ((i2ocon3 == '0F'O)
+    and (i2ocon3 == int2oct(15,1)))
+         {setverdict(pass);}
+    else {setverdict(fail, __LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+    if (i2ocon5 == '0000000000000021'O)
+         {setverdict(pass);}
+    else {setverdict(fail, __LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+    if ((i2ocon4 == i2ocon)
+    and (i2ocon4 == int2oct(oct2int(i2ocon),lengthof(i2ocon))))
+         {setverdict(pass);}
+    else {setverdict(fail, __LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+    if (int2oct(i1, 32) == os1)
+         { setverdict(pass) }
+    else { setverdict(fail, __LINE__) } //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+    if (int2oct(12345678910111213141516, 32) == '00000000000000000000000000000000000000000000029D42B65689328BBE0C'O)
+         { setverdict(pass) }
+    else { setverdict(fail, __LINE__) } //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+    if (int2oct(12345678910111213141516, 32) == os1)
+         { setverdict(pass) }
+    else { setverdict(fail, __LINE__) } //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+    if (int2oct(12345678910111213141516, 10) == '029D42B65689328BBE0C'O)
+         { setverdict(pass) }
+    else { setverdict(fail, __LINE__) } //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+}
+
+/*--- INT2STR --------------------------------------------------*/
+
+const charstring i2scon :=  "1234567890"
+const charstring i2scon1 := int2str(0)
+const charstring i2scon2 := int2str(-1)
+const charstring i2scon3 := int2str(16 mod 3)
+const charstring i2scon4 := int2str(16 rem 3)
+const charstring i2scon5 := int2str(lengthof(i2scon))
+
+const integer i2sconi := str2int(i2scon)
+
+const charstring i2scon6 := int2str(i2sconi)
+const charstring i2scon7 := "1234567891011121314151617181920"
+const charstring i2scon8 := "-1234567891011121314151617181920"  // Negative values.
+const integer i2sconi1 := str2int(i2scon7)
+const integer i2sconi2 := str2int(i2scon8)
+
+testcase int_to_str() runs on PDTestComponent{ //In testcase definition//
+
+    if ((i2scon1 == "0")
+    and (i2scon1 == int2str(0)))
+         {setverdict(pass);}
+    else {setverdict(fail, __LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+    if ((i2scon2 == "-1")
+    and (i2scon2 == int2str(-1)))
+         {setverdict(pass);}
+    else {setverdict(fail, __LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+    if ((i2scon3 == "1")
+    and (i2scon3 == int2str(16 mod 3)))
+         {setverdict(pass);}
+    else {setverdict(fail, __LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+    if ((i2scon4 == "1")
+    and (i2scon4 == int2str(16 rem 3)))
+         {setverdict(pass);}
+    else {setverdict(fail, __LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+    if ((i2scon5 == "10")
+    and (i2scon5 == int2str(lengthof(i2scon))))
+         {setverdict(pass);}
+    else {setverdict(fail, __LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+    if ((i2scon6 == i2scon)
+    and (i2scon6 == int2str(i2sconi)))
+         {setverdict(pass);}
+    else {setverdict(fail, __LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+    // Compile time evaluation.  (Positive/negative.)
+    if ((i2scon7 == int2str(1234567891011121314151617181920)
+    and (int2str(1234567891011121314151617181920) == i2scon7)))
+         {setverdict(pass);}
+    else {setverdict(fail, __LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+    if ((int2str(1234567891011121314151617181930 - 10) == i2scon7)
+    and (i2scon7 == int2str(1234567891011121314151617181930 - 10)))
+         {setverdict(pass);}
+    else {setverdict(fail, __LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+    if ((i2scon7 == int2str(i2sconi1)
+    and (int2str(i2sconi1) == i2scon7)))
+         {setverdict(pass);}
+    else {setverdict(fail, __LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+    if ((int2str(i2sconi1 + 10 - 10) == i2scon7)
+    and (i2scon7 == int2str(i2sconi1 + 10 - 10)))
+         {setverdict(pass);}
+    else {setverdict(fail, __LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+    if ((i2scon8 == int2str(-1234567891011121314151617181920)
+    and (int2str(1234567891011121314151617181920) == i2scon7)))
+         {setverdict(pass);}
+    else {setverdict(fail, __LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+    if ((int2str(-1234567891011121314151617181930 + 10) == i2scon8)
+    and (i2scon8 == int2str(-1234567891011121314151617181930 + 10)))
+         {setverdict(pass);}
+    else {setverdict(fail, __LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+    if ((i2scon8 == int2str(i2sconi2)
+    and (int2str(i2sconi2) == i2scon8)))
+         {setverdict(pass);}
+    else {setverdict(fail, __LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+    if ((int2str(i2sconi2 + 10 - 10) == i2scon8)
+    and (i2scon8 == int2str(i2sconi2 + 10 - 10)))
+         {setverdict(pass);}
+    else {setverdict(fail, __LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+}
+
+
+
+
+control {
+    execute (int_to_bit());
+    execute (int_to_char());
+    execute (int_to_unichar());
+
+    execute (int_to_float());
+    execute (int_to_hex());
+    execute (int_to_oct());
+    execute (int_to_str());
+}
+
+}
diff --git a/Regression_Test_java/src/predefFunctions/isprecho_OK.ttcn b/Regression_Test_java/src/predefFunctions/isprecho_OK.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..76066a024da147d992c37fc74e3a4b18d23f39ea
--- /dev/null
+++ b/Regression_Test_java/src/predefFunctions/isprecho_OK.ttcn
@@ -0,0 +1,367 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Delic, Adam
+ *   Raduly, Csaba
+ *
+ ******************************************************************************/
+module isprecho_OK {
+
+type component PDTestComponent {};
+
+/*--- ISPRESENT  --------------------------------------------------*/
+
+type record iptype1 {integer i optional}
+type record iptype2 {integer i, iptype1 r optional}
+type set iptype3 {integer i optional}
+type set iptype4 {integer i, iptype3 r optional}
+
+const iptype1 ipcon1 := {1}
+const iptype1 ipcon2 := {omit}
+const iptype2 ipcon3 := {1, {1}}
+const iptype2 ipcon4 := {1, {omit}}
+const iptype3 ipcon5 := {i := 1}
+const iptype3 ipcon6 := {i := omit}
+const iptype4 ipcon7 := {i := 1, r := {i := 1}}
+const iptype4 ipcon8 := {i := 1, r := {i := omit}}
+const iptype2 ipcon9 := {1, omit}
+const iptype4 ipcon10 := {i := 1, r := omit}
+
+
+
+modulepar boolean ipbool1 := ispresent(ipcon1.i)
+modulepar boolean ipbool2 := ispresent(ipcon2.i)
+modulepar boolean ipbool3 := ispresent(ipcon3.r.i)
+modulepar boolean ipbool4 := ispresent(ipcon4.r.i)
+modulepar boolean ipbool5 := ispresent(ipcon5.i)
+modulepar boolean ipbool6 := ispresent(ipcon6.i)
+modulepar boolean ipbool7 := ispresent(ipcon7.r.i)
+modulepar boolean ipbool8 := ispresent(ipcon8.r.i)
+modulepar boolean ipbool9 := ispresent(ipcon9.r)
+modulepar boolean ipbool10 := ispresent(ipcon10.r)
+
+
+testcase ispres() runs on PDTestComponent{
+
+	if (ipbool1 and ispresent(ipcon1.i))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (not ipbool2 and not ispresent(ipcon2.i))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (ipbool3 and ispresent(ipcon3.r.i))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (not ipbool4 and not ispresent(ipcon4.r.i))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (ipbool5 and ispresent(ipcon5.i))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (not ipbool6 and not ispresent(ipcon6.i))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (ipbool7 and ispresent(ipcon7.r.i))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (not ipbool8 and not ispresent(ipcon8.r.i))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (not ipbool9 and not ispresent(ipcon9.r))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (not ipbool10 and not ispresent(ipcon10.r))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+}
+
+type union ictype1 {integer i, boolean b}
+type record of ictype1 ictype2
+
+const ictype1 iccon1 := {i := 1}
+const ictype2 iccon2 := {{i := 1},{b := true}}
+
+modulepar boolean icbool1 := ischosen(iccon1.i)
+modulepar boolean icbool2 := ischosen(iccon1.b)
+modulepar boolean icbool3 := ischosen(iccon2[0].i)
+modulepar boolean icbool4 := ischosen(iccon2[0].b)
+
+testcase ischo() runs on PDTestComponent{
+	if (icbool1 and ischosen(iccon1.i))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (not icbool2 and not ischosen(iccon1.b))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if (icbool3 and ischosen(iccon2[0].i))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (not icbool4 and not ischosen(iccon2[0].b))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+}
+
+
+type record MyRecord {
+  record {
+    boolean innerField1 optional,
+    integer innerField2 optional,
+    MyRecord innerField3 optional
+  } field1 optional,
+  integer field2
+}
+
+type record R { integer f1 optional, integer f2 optional }
+template R t1 := { f1 := 1, f2 := (2..4) }
+template R t2 := { f1 := omit, f2 := (5..7) ifpresent }
+template R t3 := { f1 := *, f2 := ? }
+
+type record RI { integer i optional }
+type record of integer ROI;
+type record of ROI ROROI;
+
+type record R1 { integer i }
+type record R2 { R1 r }
+
+testcase tc_extendedIspresent() runs on PDTestComponent
+{
+  var template ROROI roroi := { {1,2},{3,4},? }
+  if (ispresent(roroi[1])) { setverdict(pass); } else { setverdict(fail); }
+  if (ispresent(roroi[1][1])) { setverdict(pass); } else { setverdict(fail); }
+  if (not ispresent(roroi[1][2])) { setverdict(pass); } else { setverdict(fail); }
+  if (ispresent(roroi[2])) { setverdict(pass); } else { setverdict(fail); }
+  if (not ispresent(roroi[2][1])) { setverdict(pass); } else { setverdict(fail); }
+
+  if (ispresent(ROROI:?)) { setverdict(pass); } else { setverdict(fail); }
+  if (ispresent(RI:{?})) { setverdict(pass); } else { setverdict(fail); }
+  if (ispresent(ispresent("not present"))) { setverdict(pass); } else { setverdict(fail); }
+  if (ispresent(isbound(isvalue(2)))) { setverdict(pass); } else { setverdict(fail); }
+
+  var ROI roi := {1,2,3}
+  var RI ri := { i:=1 }
+  if (ispresent(roi[ri.i])) { setverdict(pass); } else { setverdict(fail); }
+
+  var template R2 tr2 := { r := ? }
+  if (ispresent(tr2.r.i)) { setverdict(pass); } else { setverdict(fail); }
+
+  var MyRecord vl_MyRecord := { field1 := { omit, omit, omit }, field2 := 5 }
+  if (ispresent(vl_MyRecord.field1)) { setverdict(pass); } else { setverdict(fail); }
+  vl_MyRecord.field1 := omit;
+  if (not ispresent(vl_MyRecord.field1)) { setverdict(pass); } else { setverdict(fail); }
+  if (not ispresent(vl_MyRecord.field1.innerField1)) { setverdict(pass); } else { setverdict(fail); }
+  if (not ispresent(vl_MyRecord.field1.innerField3.field2)) { setverdict(pass); } else { setverdict(fail); }
+  
+  var template MyRecord vlt_MyRecord := { field1 := ?, field2 := 5 }
+  if (ispresent(vlt_MyRecord.field1)) { setverdict(pass); } else { setverdict(fail); }
+  if (not ispresent(vlt_MyRecord.field1.innerField1)) { setverdict(pass); } else { setverdict(fail); }
+
+  if (ispresent(t1.f1)) { setverdict(pass); } else { setverdict(fail); }
+  if (ispresent(t1.f2)) { setverdict(pass); } else { setverdict(fail); }
+  if (not ispresent(t2.f1)) { setverdict(pass); } else { setverdict(fail); }
+  if (not ispresent(t2.f2)) { setverdict(pass); } else { setverdict(fail); }
+  if (not ispresent(t3.f1)) { setverdict(pass); } else { setverdict(fail); }
+  if (ispresent(t3.f2)) { setverdict(pass); } else { setverdict(fail); }
+}
+
+type record Rec1 { integer f }
+type record Rec2 { integer f optional }
+type union Uni { integer u }
+
+testcase f_TC_isBoundValuePresent_Integer_Template() runs on PDTestComponent
+{
+  var template integer vt_int;
+  if (isbound(vt_int)) {setverdict(fail)}
+  if (isvalue(vt_int)) {setverdict(fail)}
+  if (ispresent(vt_int)) {setverdict(fail)}
+
+  vt_int:=5;
+  if (not isbound(vt_int)) {setverdict(fail)}
+  if (not isvalue(vt_int)) {setverdict(fail)}
+  if (not ispresent(vt_int)) {setverdict(fail)}
+
+  vt_int := omit;
+  if (not isbound(vt_int)) {setverdict(fail)}
+  if (isvalue(vt_int)) {setverdict(fail)}
+  if (ispresent(vt_int)) {setverdict(fail)}
+
+  vt_int:=?;
+  if (not isbound(vt_int)) {setverdict(fail)}
+  if (isvalue(vt_int)) {setverdict(fail)}
+  if (not ispresent(vt_int)) {setverdict(fail)}
+
+  vt_int:=*;
+  if (not isbound(vt_int)) {setverdict(fail)}
+  if (isvalue(vt_int)) {setverdict(fail)}
+  if (ispresent(vt_int)) {setverdict(fail)}
+
+  setverdict(pass);
+}
+
+testcase f_TC_isBoundValuePresent_RecordWithMandatoryField_Template() runs on PDTestComponent
+{
+  var template Rec1 vl_Rec1;
+  if (isbound(vl_Rec1)) {setverdict(fail)}
+  if (isvalue(vl_Rec1)) {setverdict(fail)}
+  if (ispresent(vl_Rec1)) {setverdict(fail)}
+  
+  vl_Rec1:=?;
+  if (not isbound(vl_Rec1)) {setverdict(fail)}
+  if (isvalue(vl_Rec1)) {setverdict(fail)}
+  if (not ispresent(vl_Rec1)) {setverdict(fail)}
+
+  if (not isbound(vl_Rec1.f)) {setverdict(fail)}
+  if (isvalue(vl_Rec1.f)) {setverdict(fail)}
+  if (not ispresent(vl_Rec1.f)) {setverdict(fail)}
+
+  vl_Rec1:=*;
+  if (not isbound(vl_Rec1)) {setverdict(fail)}
+  if (isvalue(vl_Rec1)) {setverdict(fail)}
+  if (ispresent(vl_Rec1)) {setverdict(fail)}
+
+  if (isbound(vl_Rec1.f)) {setverdict(fail)}
+  if (isvalue(vl_Rec1.f)) {setverdict(fail)} 
+  vl_Rec1:=*; 
+  if (ispresent(vl_Rec1.f)) {setverdict(fail)}
+
+  vl_Rec1:={f:=5};
+  if (not isbound(vl_Rec1)) {setverdict(fail)}
+  if (not isvalue(vl_Rec1)) {setverdict(fail)}
+  if (not ispresent(vl_Rec1)) {setverdict(fail)}
+
+  if (not isbound(vl_Rec1.f)) {setverdict(fail)}
+  if (not isvalue(vl_Rec1.f)) {setverdict(fail)}
+  if (not ispresent(vl_Rec1.f)) {setverdict(fail)}
+
+  vl_Rec1:={f:=?};
+  if (not isbound(vl_Rec1)) {setverdict(fail)}
+  if (isvalue(vl_Rec1)) {setverdict(fail)}
+  if (not ispresent(vl_Rec1)) {setverdict(fail)}
+
+  if (not isbound(vl_Rec1.f)) {setverdict(fail)}
+  if (isvalue(vl_Rec1.f)) {setverdict(fail)}
+  if (not ispresent(vl_Rec1.f)) {setverdict(fail)}
+
+  setverdict(pass);
+}
+
+testcase f_TC_isBoundValuePresent_RecordWithOptionalField_Template() runs on PDTestComponent
+{
+  var template Rec2 vl_Rec2;
+  if (isbound(vl_Rec2)) {setverdict(fail)}
+  if (isvalue(vl_Rec2)) {setverdict(fail)}
+  if (ispresent(vl_Rec2)) {setverdict(fail)}
+
+  vl_Rec2:=?;
+  if (not isbound(vl_Rec2)) {setverdict(fail)}
+  if (isvalue(vl_Rec2)) {setverdict(fail)}
+  if (not ispresent(vl_Rec2)) {setverdict(fail)}
+
+  if (not isbound(vl_Rec2.f)) {setverdict(fail)}
+  if (isvalue(vl_Rec2.f)) {setverdict(fail)}
+  vl_Rec2:=?;
+  if (ispresent(vl_Rec2.f)) {setverdict(fail)}
+
+  vl_Rec2:=*;
+  if (not isbound(vl_Rec2)) {setverdict(fail)}
+  if (isvalue(vl_Rec2)) {setverdict(fail)}
+  if (ispresent(vl_Rec2)) {setverdict(fail)}
+
+  if (isbound(vl_Rec2.f)) {setverdict(fail)}
+  if (isvalue(vl_Rec2.f)) {setverdict(fail)}
+  vl_Rec2:=*;
+  if (ispresent(vl_Rec2.f)) {setverdict(fail)}
+
+  vl_Rec2:={f:=5};
+  if (not isbound(vl_Rec2)) {setverdict(fail)}
+  if (not isvalue(vl_Rec2)) {setverdict(fail)}
+  if (not ispresent(vl_Rec2)) {setverdict(fail)}
+
+  if (not isbound(vl_Rec2.f)) {setverdict(fail)}
+  if (not isvalue(vl_Rec2.f)) {setverdict(fail)}
+  if (not ispresent(vl_Rec2.f)) {setverdict(fail)}
+
+  vl_Rec2:={f:=?};
+  if (not isbound(vl_Rec2)) {setverdict(fail)}
+  if (isvalue(vl_Rec2)) {setverdict(fail)}
+  if (not ispresent(vl_Rec2)) {setverdict(fail)}
+
+  if (not isbound(vl_Rec2.f)) {setverdict(fail)}
+  if (isvalue(vl_Rec2.f)) {setverdict(fail)}
+  if (not ispresent(vl_Rec2.f)) {setverdict(fail)}
+
+  vl_Rec2:={f:=*};
+  if (not isbound(vl_Rec2)) {setverdict(fail)}
+  if (isvalue(vl_Rec2)) {setverdict(fail)}
+  if (not ispresent(vl_Rec2)) {setverdict(fail)}
+
+  if (not isbound(vl_Rec2.f)) {setverdict(fail)}
+  if (isvalue(vl_Rec2.f)) {setverdict(fail)}
+  if (ispresent(vl_Rec2.f)) {setverdict(fail)}
+
+  setverdict(pass);
+}
+
+testcase f_TC_isBoundValuePresent_Union_Template() runs on PDTestComponent
+{
+  var template Uni vl_Uni;
+  if (isbound(vl_Uni)) {setverdict(fail)}
+  if (isvalue(vl_Uni)) {setverdict(fail)}
+  if (ispresent(vl_Uni)) {setverdict(fail)}
+
+  vl_Uni:=?;
+  if (not isbound(vl_Uni)) {setverdict(fail)}
+  if (isvalue(vl_Uni)) {setverdict(fail)}
+  if (not ispresent(vl_Uni)) {setverdict(fail)}
+
+  if (not isbound(vl_Uni.u)) {setverdict(fail)}
+  if (isvalue(vl_Uni.u)) {setverdict(fail)}
+  vl_Uni:=?;
+  if (ispresent(vl_Uni.u)) {setverdict(fail)}
+
+  vl_Uni:={u:=5};
+  if (not isbound(vl_Uni)) {setverdict(fail)}
+  if (not isvalue(vl_Uni)) {setverdict(fail)}
+  if (not ispresent(vl_Uni)) {setverdict(fail)}
+
+  if (not isbound(vl_Uni.u)) {setverdict(fail)}
+  if (not isvalue(vl_Uni.u)) {setverdict(fail)}
+  if (not ispresent(vl_Uni.u)) {setverdict(fail)}
+
+  vl_Uni:={u:=?};
+  if (not isbound(vl_Uni)) {setverdict(fail)}
+  if (isvalue(vl_Uni)) {setverdict(fail)}
+  if (not ispresent(vl_Uni)) {setverdict(fail)}
+
+  if (not isbound(vl_Uni.u)) {setverdict(fail)}
+  if (isvalue(vl_Uni.u)) {setverdict(fail)}
+  if (not ispresent(vl_Uni.u)) {setverdict(fail)}
+
+  setverdict(pass);
+}
+
+testcase HO90059() runs on PDTestComponent { // TemplateInstance with ifpresent is not a Value
+  if (log2str(1 ifpresent)=="1 ifpresent") { setverdict(pass) } else { setverdict(fail) }
+  if (ispresent(1 ifpresent)==false) { setverdict(pass) } else { setverdict(fail) }
+  setverdict(pass);
+}
+
+control {
+	execute (ispres());
+	execute (ischo());
+  execute (tc_extendedIspresent());
+  execute (f_TC_isBoundValuePresent_Integer_Template());
+  execute (f_TC_isBoundValuePresent_RecordWithMandatoryField_Template());
+  execute (f_TC_isBoundValuePresent_RecordWithOptionalField_Template());
+  execute (f_TC_isBoundValuePresent_Union_Template());
+  execute (HO90059());
+}
+
+}
diff --git a/Regression_Test_java/src/predefFunctions/oct_to_OK.ttcn b/Regression_Test_java/src/predefFunctions/oct_to_OK.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..782869d6c22b37b44611707950d4a99b935906b4
--- /dev/null
+++ b/Regression_Test_java/src/predefFunctions/oct_to_OK.ttcn
@@ -0,0 +1,284 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Raduly, Csaba
+ *
+ ******************************************************************************/
+module oct_to_OK {
+
+type component PDTestComponent {};
+
+/*--- OCT2BIT --------------------------------------------------*/
+
+modulepar bitstring o2bpar := oct2bit(''O)
+
+modulepar bitstring o2bpar1 := oct2bit('000000'O & ''O & '111111'O)
+modulepar bitstring o2bpar2 := oct2bit(substr('000000111111'O,0,3) & ''O & substr('000000111111'O,3,3))
+modulepar bitstring o2bpar3 := oct2bit(('000000'O <@ 3) & ''O & ('111111'O @> 3))
+modulepar bitstring o2bpar4 := oct2bit((not4b 'FFFFFF'O) & '111111'O)
+modulepar bitstring o2bpar5 := oct2bit('000000111111'O and4b '000000111111'O)
+modulepar bitstring o2bpar6 := oct2bit('000000000000'O or4b  '000000111111'O)
+modulepar bitstring o2bpar7 := oct2bit('000000000000'O xor4b '000000111111'O)
+
+const bitstring o2bparb := '000000000000000000000000000100010001000100010001'B
+
+testcase oct_to_bit() runs on PDTestComponent{
+
+	if ((o2bpar == oct2bit(''O))
+	and (o2bpar == ''B))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((o2bpar1 == oct2bit('000000'O & ''O & '111111'O))
+	and (o2bpar1 == o2bparb))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((o2bpar2 == oct2bit(substr('000000111111'O,0,3) & ''O & substr('000000111111'O,3,3)))
+	and (o2bpar2 == o2bparb))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((o2bpar3 == oct2bit(('000000'O <@ 3) & ''O & ('111111'O @> 3)))
+	and (o2bpar3 == o2bparb))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((o2bpar4 == oct2bit((not4b 'FFFFFF'O) & '111111'O))
+	and (o2bpar4 == o2bparb))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((o2bpar5 == oct2bit('000000111111'O and4b '000000111111'O))
+	and (o2bpar5 == o2bparb))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((o2bpar6 == oct2bit('000000000000'O or4b  '000000111111'O))
+	and (o2bpar6 == o2bparb))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((o2bpar7 == oct2bit('000000000000'O xor4b '000000111111'O))
+	and (o2bpar7 == o2bparb))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+}
+
+/*--- OCT2CHAR --------------------------------------------------*/
+
+
+modulepar charstring o2cpar1 :=  oct2char(''O)
+modulepar charstring o2cpar2 :=  oct2char('41'O)
+modulepar charstring o2cpar3 :=  oct2char(''O & '41'O)
+modulepar charstring o2cpar4 :=  oct2char('4142434445464748494A4B4C4D4E4F505152535455565758595A'O)
+
+testcase oct_to_char() runs on PDTestComponent{
+
+	if ((o2cpar1 == oct2char(''O))
+	and (o2cpar1 == ""))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((o2cpar2 == oct2char('41'O))
+	and (o2cpar2 == "A"))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((o2cpar3 == oct2char(''O & '41'O))
+	and (o2cpar3 == "A"))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((o2cpar4 == oct2char('4142434445464748494A4B4C4D4E4F505152535455565758595A'O))
+	and (o2cpar4 == "ABCDEFGHIJKLMNOPQRSTUVWXYZ"))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+}
+
+
+/*--- OCT2HEX --------------------------------------------------*/
+
+modulepar hexstring o2hpar := oct2hex(''O)
+modulepar hexstring o2hpar1 := oct2hex('000000'O & ''O & '111111'O)
+modulepar hexstring o2hpar2 := oct2hex(substr('000000111111'O,0,3) & ''O & substr('000000111111'O,3,3))
+modulepar hexstring o2hpar3 := oct2hex(('000000'O <@ 3) & ''O & ('111111'O @> 3))
+modulepar hexstring o2hpar4 := oct2hex((not4b 'FFFFFF'O) & '111111'O)
+modulepar hexstring o2hpar5 := oct2hex('000000111111'O and4b '000000111111'O)
+modulepar hexstring o2hpar6 := oct2hex('000000000000'O or4b  '000000111111'O)
+modulepar hexstring o2hpar7 := oct2hex('000000000000'O xor4b '000000111111'O)
+
+modulepar hexstring o2hparh := '000000111111'H
+
+testcase oct_to_hex() runs on PDTestComponent{
+
+
+	if ((o2hpar == oct2hex(''O))
+	and (o2hpar == ''H))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((o2hpar1 == oct2hex('000000'O & ''O & '111111'O))
+	and (o2hpar1 == o2hparh))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((o2hpar2 == oct2hex(substr('000000111111'O,0,3) & ''O & substr('000000111111'O,3,3)))
+	and (o2hpar2 == o2hparh))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((o2hpar3 == oct2hex(('000000'O <@ 3) & ''O & ('111111'O @> 3)))
+	and (o2hpar3 == o2hparh))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((o2hpar4 == oct2hex((not4b 'FFFFFF'O) & '111111'O))
+	and (o2hpar4 == o2hparh))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((o2hpar5 == oct2hex('000000111111'O and4b '000000111111'O))
+	and (o2hpar5 == o2hparh))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((o2hpar6 == oct2hex('000000000000'O or4b  '000000111111'O))
+	and (o2hpar6 == o2hparh))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((o2hpar7 == oct2hex('000000000000'O xor4b '000000111111'O))
+	and (o2hpar7 == o2hparh))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+}
+
+/*--- OCT2INT --------------------------------------------------*/
+
+modulepar integer o2ipar := oct2int(''O)
+modulepar integer o2ipar1 := oct2int('FF'O & 'FFFF'O)
+modulepar integer o2ipar2 := oct2int((not4b 'FF'O) & 'FFFF'O)
+modulepar integer o2ipar3 := oct2int(('FF'O and4b '00'O) & 'FFFF'O)
+modulepar integer o2ipar4 := oct2int(('00'O or4b '00'O) & 'FFFF'O)
+modulepar integer o2ipar5 := oct2int(('0F'O xor4b '0F'O) & 'FFFF'O)
+
+testcase oct_to_int() runs on PDTestComponent{
+	var integer b;
+	var integer i1 := 12345678910111213141516
+	var octetstring os1 := '00000000000000000000000000000000000000000000029D42B65689328BBE0C'O
+	if ((o2ipar == oct2int(''O))
+	and (o2ipar == 0))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((o2ipar1 == oct2int('FF'O & 'FFFF'O))
+	and (o2ipar1 == 16777215))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	b := oct2int((not4b 'FF'O) & 'FFFF'O)
+	if ((o2ipar2 == b)
+	and (o2ipar2 == 65535))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	b := oct2int(('FF'O and4b '00'O) & 'FFFF'O)
+	if ((o2ipar3 == b)
+	and (o2ipar3 == 65535))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	b := oct2int(('00'O or4b '00'O) & 'FFFF'O)
+	if ((o2ipar4 == b)
+	and (o2ipar4 == 65535))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	b := oct2int(('0F'O xor4b '0F'O) & 'FFFF'O)
+	if ((o2ipar5 == b)
+	and (o2ipar5 == 65535))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	var integer j
+	for (j:=0; j<256; j:=j+1) {
+		if (oct2int(int2oct(j,1)) == j)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	}
+	if (oct2int(os1) == i1) { setverdict(pass) } else { setverdict(fail) }
+	//compile-time: if (oct2int('00000000000000000000000000000000000000000000029D42B65689328BBE0C'O) == 12345678910111213141516) { setverdict(pass) } else { setverdict(fail) }
+	if (oct2int('00000000000000000000000000000000000000000000029D42B65689328BBE0C'O) == i1) { setverdict(pass) } else { setverdict(fail) }
+	if (oct2int('029D42B65689328BBE0C'O) == i1) { setverdict(pass) } else { setverdict(fail) }
+}
+
+/*--- OCT2STR --------------------------------------------------*/
+
+modulepar charstring o2spar := oct2str(''O)
+modulepar charstring o2spar1 := oct2str('000000'O & ''O & '111111'O)
+modulepar charstring o2spar2 := oct2str(substr('000000111111'O,0,3) & ''O & substr('000000111111'O,3,3))
+modulepar charstring o2spar3 := oct2str(('000000'O <@ 3) & ''O & ('111111'O @> 3))
+modulepar charstring o2spar4 := oct2str((not4b 'FFFFFF'O) & '111111'O)
+modulepar charstring o2spar5 := oct2str('000000111111'O and4b '000000111111'O)
+modulepar charstring o2spar6 := oct2str('000000000000'O or4b  '000000111111'O)
+modulepar charstring o2spar7 := oct2str('000000000000'O xor4b '000000111111'O)
+
+modulepar charstring o2spars := "000000111111"
+
+testcase oct_to_str() runs on PDTestComponent{
+
+
+	if ((o2spar == oct2str(''O))
+	and (o2spar == ""))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((o2spar1 == oct2str('000000'O & ''O & '111111'O))
+	and (o2spar1 == o2spars))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((o2spar2 == oct2str(substr('000000111111'O,0,3) & ''O & substr('000000111111'O,3,3)))
+	and (o2spar2 == o2spars))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((o2spar3 == oct2str(('000000'O <@ 3) & ''O & ('111111'O @> 3)))
+	and (o2spar3 == o2spars))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((o2spar4 == oct2str((not4b 'FFFFFF'O) & '111111'O))
+	and (o2spar4 == o2spars))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((o2spar5 == oct2str('000000111111'O and4b '000000111111'O))
+	and (o2spar5 == o2spars))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((o2spar6 == oct2str('000000000000'O or4b  '000000111111'O))
+	and (o2spar6 == o2spars))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	if ((o2spar7 == oct2str('000000000000'O xor4b '000000111111'O))
+	and (o2spar7 == o2spars))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+}
+
+
+control {
+	execute (oct_to_bit());
+	execute (oct_to_char());
+	execute (oct_to_hex());
+	execute (oct_to_int());
+	execute (oct_to_str());
+}
+
+
+}
diff --git a/Regression_Test_java/src/predefFunctions/oct_to_SW.ttcn b/Regression_Test_java/src/predefFunctions/oct_to_SW.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..c489d662a9e3a3f0a65a7b49fcea51399c2a9693
--- /dev/null
+++ b/Regression_Test_java/src/predefFunctions/oct_to_SW.ttcn
@@ -0,0 +1,323 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Raduly, Csaba
+ *
+ ******************************************************************************/
+module oct_to_SW {	//^In TTCN-3 module `oct_to_SW'://
+
+type component PDTestComponent {};
+
+/*--- OCT2BIT --------------------------------------------------*/
+
+const bitstring o2bcon := oct2bit(''O)
+const bitstring o2bcon1 := oct2bit('000000'O & ''O & '111111'O)
+const bitstring o2bcon2 := oct2bit(substr('000000111111'O,0,3) & ''O & substr('000000111111'O,3,3))
+const bitstring o2bcon3 := oct2bit(('000000'O <@ 3) & ''O & ('111111'O @> 3))
+const bitstring o2bcon4 := oct2bit((not4b 'FFFFFF'O) & '111111'O)
+const bitstring o2bcon5 := oct2bit('000000111111'O and4b '000000111111'O)
+const bitstring o2bcon6 := oct2bit('000000000000'O or4b  '000000111111'O)
+const bitstring o2bcon7 := oct2bit('000000000000'O xor4b '000000111111'O)
+
+const bitstring o2bconb := '000000000000000000000000000100010001000100010001'B
+
+testcase oct_to_bit() runs on PDTestComponent{ //In testcase definition//
+
+	if ((o2bcon == oct2bit(''O))
+	and (o2bcon == ''B))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((o2bcon1 == oct2bit('000000'O & ''O & '111111'O))
+	and (o2bcon1 == o2bconb))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((o2bcon2 == oct2bit(substr('000000111111'O,0,3) & ''O & substr('000000111111'O,3,3)))
+	and (o2bcon2 == o2bconb))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((o2bcon3 == oct2bit(('000000'O <@ 3) & ''O & ('111111'O @> 3)))
+	and (o2bcon3 == o2bconb))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((o2bcon4 == oct2bit((not4b 'FFFFFF'O) & '111111'O))
+	and (o2bcon4 == o2bconb))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((o2bcon5 == oct2bit('000000111111'O and4b '000000111111'O))
+	and (o2bcon5 == o2bconb))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((o2bcon6 == oct2bit('000000000000'O or4b  '000000111111'O))
+	and (o2bcon6 == o2bconb))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((o2bcon7 == oct2bit('000000000000'O xor4b '000000111111'O))
+	and (o2bcon7 == o2bconb))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+}
+
+/*--- OCT2CHAR --------------------------------------------------*/
+
+
+const char o2ccon1 :=  oct2char(''O)         //^warning: Obsolete type `char' was substituted with `charstring'//
+const char o2ccon2 :=  oct2char('41'O)       //^warning: Obsolete type `char' was substituted with `charstring'//
+const char o2ccon3 :=  oct2char(''O & '41'O) //^warning: Obsolete type `char' was substituted with `charstring'//
+const char o2ccon4 :=  oct2char('4142434445464748494A4B4C4D4E4F505152535455565758595A'O)//^warning: Obsolete type `char' was substituted with `charstring'//
+
+testcase oct_to_char() runs on PDTestComponent{ //In testcase definition//
+
+	if ((o2ccon1 == oct2char(''O))
+	and (o2ccon1 == ""))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((o2ccon2 == oct2char('41'O))
+	and (o2ccon2 == "A"))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((o2ccon3 == oct2char(''O & '41'O))
+	and (o2ccon3 == "A"))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((o2ccon4 == oct2char('4142434445464748494A4B4C4D4E4F505152535455565758595A'O))
+	and (o2ccon4 == "ABCDEFGHIJKLMNOPQRSTUVWXYZ"))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+}
+
+
+/*--- OCT2HEX --------------------------------------------------*/
+
+const hexstring o2hcon := oct2hex(''O)
+const hexstring o2hcon1 := oct2hex('000000'O & ''O & '111111'O)
+const hexstring o2hcon2 := oct2hex(substr('000000111111'O,0,3) & ''O & substr('000000111111'O,3,3))
+const hexstring o2hcon3 := oct2hex(('000000'O <@ 3) & ''O & ('111111'O @> 3))
+const hexstring o2hcon4 := oct2hex((not4b 'FFFFFF'O) & '111111'O)
+const hexstring o2hcon5 := oct2hex('000000111111'O and4b '000000111111'O)
+const hexstring o2hcon6 := oct2hex('000000000000'O or4b  '000000111111'O)
+const hexstring o2hcon7 := oct2hex('000000000000'O xor4b '000000111111'O)
+
+const hexstring o2hconh := '000000111111'H
+
+testcase oct_to_hex() runs on PDTestComponent{ //In testcase definition//
+
+	if ((o2hcon == oct2hex(''O))
+	and (o2hcon == ''H))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((o2hcon1 == oct2hex('000000'O & ''O & '111111'O))
+	and (o2hcon1 == o2hconh))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((o2hcon2 == oct2hex(substr('000000111111'O,0,3) & ''O & substr('000000111111'O,3,3)))
+	and (o2hcon2 == o2hconh))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((o2hcon3 == oct2hex(('000000'O <@ 3) & ''O & ('111111'O @> 3)))
+	and (o2hcon3 == o2hconh))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((o2hcon4 == oct2hex((not4b 'FFFFFF'O) & '111111'O))
+	and (o2hcon4 == o2hconh))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((o2hcon5 == oct2hex('000000111111'O and4b '000000111111'O))
+	and (o2hcon5 == o2hconh))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((o2hcon6 == oct2hex('000000000000'O or4b  '000000111111'O))
+	and (o2hcon6 == o2hconh))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((o2hcon7 == oct2hex('000000000000'O xor4b '000000111111'O))
+	and (o2hcon7 == o2hconh))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+}
+
+/*--- OCT2INT --------------------------------------------------*/
+
+const integer o2icon := oct2int(''O)
+const integer o2icon1 := oct2int('FF'O & 'FFFF'O)
+const integer o2icon2 := oct2int((not4b 'FF'O) & 'FFFF'O)
+const integer o2icon3 := oct2int(('FF'O and4b '00'O) & 'FFFF'O)
+const integer o2icon4 := oct2int(('00'O or4b '00'O) & 'FFFF'O)
+const integer o2icon5 := oct2int(('0F'O xor4b '0F'O) & 'FFFF'O)
+const integer i1 := 12345678910111213141516
+const octetstring os1 := '00000000000000000000000000000000000000000000029D42B65689328BBE0C'O
+
+testcase oct_to_int() runs on PDTestComponent{ //In testcase definition//
+
+	if ((o2icon == oct2int(''O))
+	and (o2icon == 0))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((o2icon1 == oct2int('FF'O & 'FFFF'O))
+	and (o2icon1 == 16777215))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((o2icon2 == oct2int((not4b 'FF'O) & 'FFFF'O))
+	and (o2icon2 == 65535))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((o2icon3 == oct2int(('FF'O and4b '00'O) & 'FFFF'O))
+	and (o2icon3 == 65535))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((o2icon4 == oct2int(('00'O or4b '00'O) & 'FFFF'O))
+	and (o2icon4 == 65535))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((o2icon5 == oct2int(('0F'O xor4b '0F'O) & 'FFFF'O))
+	and (o2icon5 == 65535))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if (oct2int(os1) == i1)
+	     { setverdict(pass) }
+	else { setverdict(fail) } //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (oct2int('00000000000000000000000000000000000000000000029D42B65689328BBE0C'O) == 12345678910111213141516)
+	     { setverdict(pass) }
+	else { setverdict(fail) } //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (oct2int('00000000000000000000000000000000000000000000029D42B65689328BBE0C'O) == i1)
+	     { setverdict(pass) }
+	else { setverdict(fail) } //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (oct2int('029D42B65689328BBE0C'O) == i1)
+	     { setverdict(pass) }
+	else { setverdict(fail) } //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+}
+
+/*--- OCT2STR --------------------------------------------------*/
+
+const charstring o2scon := oct2str(''O)
+const charstring o2scon1 := oct2str('000000'O & ''O & '111111'O)
+const charstring o2scon2 := oct2str(substr('000000111111'O,0,3) & ''O & substr('000000111111'O,3,3))
+const charstring o2scon3 := oct2str(('000000'O <@ 3) & ''O & ('111111'O @> 3))
+const charstring o2scon4 := oct2str((not4b 'FFFFFF'O) & '111111'O)
+const charstring o2scon5 := oct2str('000000111111'O and4b '000000111111'O)
+const charstring o2scon6 := oct2str('000000000000'O or4b  '000000111111'O)
+const charstring o2scon7 := oct2str('000000000000'O xor4b '000000111111'O)
+
+const charstring o2scons := "000000111111"
+
+testcase oct_to_str() runs on PDTestComponent{ //In testcase definition//
+
+
+	if ((o2scon == oct2str(''O))
+	and (o2scon == ""))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((o2scon1 == oct2str('000000'O & ''O & '111111'O))
+	and (o2scon1 == o2scons))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((o2scon2 == oct2str(substr('000000111111'O,0,3) & ''O & substr('000000111111'O,3,3)))
+	and (o2scon2 == o2scons))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((o2scon3 == oct2str(('000000'O <@ 3) & ''O & ('111111'O @> 3)))
+	and (o2scon3 == o2scons))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((o2scon4 == oct2str((not4b 'FFFFFF'O) & '111111'O))
+	and (o2scon4 == o2scons))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((o2scon5 == oct2str('000000111111'O and4b '000000111111'O))
+	and (o2scon5 == o2scons))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((o2scon6 == oct2str('000000000000'O or4b  '000000111111'O))
+	and (o2scon6 == o2scons))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((o2scon7 == oct2str('000000000000'O xor4b '000000111111'O))
+	and (o2scon7 == o2scons))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+}
+
+
+control {
+	execute (oct_to_bit());
+	execute (oct_to_char());
+	execute (oct_to_hex());
+	execute (oct_to_int());
+	execute (oct_to_str());
+}
+
+
+}
diff --git a/Regression_Test_java/src/predefFunctions/replacer_OK.ttcn b/Regression_Test_java/src/predefFunctions/replacer_OK.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..a3f43664a43a44e718520098ab9d931c9ea52012
--- /dev/null
+++ b/Regression_Test_java/src/predefFunctions/replacer_OK.ttcn
@@ -0,0 +1,138 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Raduly, Csaba
+ *
+ ******************************************************************************/
+module replacer_OK {
+
+type component PDTestComponent {};
+
+/* replace on BITSTRING values.  Examples from C.34 of ETSI ES 201 873-1
+   V3.3.1 (2008-02).  */
+
+testcase replace_bitstr() runs on PDTestComponent {
+  var integer a := 0
+  var integer b := 1
+  var bitstring bs_1 := replace('00000110'B, 1, 3, '111'B)            // returns '01110110'B
+  var bitstring bs_2 := replace('00000110'B, b + a, b + b + b, '111'B)// returns '01110110'B
+  if (bs_1 == '01110110'B) { setverdict(pass) }
+  else { setverdict(fail) }
+  if (bs_1 == bs_2) { setverdict(pass) }
+  else { setverdict(fail) }
+}
+
+/* replace on HEXSTRING values.  */
+
+testcase replace_hexstr() runs on PDTestComponent {
+  var integer a := 0
+  var integer b := 1
+  var hexstring hs_1 := replace('ABCDEF'H, 0, 2, '123'H)    // returns '123CDEF'H
+  var hexstring hs_2 := replace('ABCDEF'H, a, b + 1, '123'H)// returns '123CDEF'H
+  if (hs_1 == '123CDEF'H) { setverdict(pass) }
+  else { setverdict(fail, 1) }
+  if (hs_1 == hs_2) { setverdict(pass) }
+  else { setverdict(fail, 2) }
+}
+
+/* replace on OCTETSTRING values.  */
+
+testcase replace_octetstr() runs on PDTestComponent {
+  var integer a := 0
+  var integer b := 1
+  var octetstring c := 'FF96'O
+  var octetstring os_0 := '01AB23CD'O
+  var octetstring os_1 := replace('01AB23CD'O, 2, 1, 'FF96'O)    // returns '01ABFF96CD'O
+  var octetstring os_2 := replace('01AB23CD'O, a + 2, b, 'FF96'O)// returns '01ABFF96CD'O
+  var octetstring os_3 := replace(os_0, 2, b, c)                 // returns '01ABFF96CD'O
+  if (os_1 == '01ABFF96CD'O) { setverdict(pass) }
+  else { setverdict(fail) }
+  if (os_2 == '01ABFF96CD'O) { setverdict(pass) }
+  else { setverdict(fail) }
+  if (os_1 == os_2) { setverdict(pass) }
+  else { setverdict(fail) }
+  if (os_2 == os_3) { setverdict(pass) }
+  else { setverdict(fail) }
+}
+
+/* replace on CHARSTRING values.  */
+
+testcase replace_charstr() runs on PDTestComponent {
+  var integer a := 0
+  var integer b := 1
+  var charstring c := "x"
+  var charstring cs_0 := "My name is JJ"
+  var charstring cs_1 := replace("My name is JJ", 11, 1, "xx")    // returns "My name is xxJ"
+  var charstring cs_2 := replace("My name is JJ", 11, b - 1, "xx")// returns "My name is xxJJ"
+  var charstring cs_3 := replace("My name is JJ", 2, 2, "x")      // returns "Myxame is JJ"
+  var charstring cs_4 := replace("My name is JJ", b + 1, b + 1, c)// returns "Myxame is JJ"
+  var charstring cs_5 := replace("My name is JJ", 13, 0, "xx")    // returns "My name is JJxx"
+  var charstring cs_6 := replace(cs_0, 13, a, "xx")               // returns "My name is JJxx"
+  /*
+  var charstring cs_7 := replace("My name is JJ", 12, 2, "xx") // produces compile error
+  var charstring cs_8 := replace("My name is JJ", 13, 2, "xx") // produces compile error)
+  */
+  if (cs_1 == "My name is xxJ") { setverdict(pass) }
+  else { setverdict(fail) }
+  if (cs_2 == "My name is xxJJ") { setverdict(pass) }
+  else { setverdict(fail) }
+  if (cs_3 == "Myxame is JJ") { setverdict(pass) }
+  else { setverdict(fail) }
+  if (cs_4 == "Myxame is JJ") { setverdict(pass) }
+  else { setverdict(fail) }
+  if (cs_3 == cs_4) { setverdict(pass) }
+  else { setverdict(fail) }
+  if (cs_5 == "My name is JJxx") { setverdict(pass) }
+  else { setverdict(fail) }
+  if (cs_6 == "My name is JJxx") { setverdict(pass) }
+  else { setverdict(fail) }
+  if (cs_5 == cs_6) { setverdict(pass) }
+  else { setverdict(fail) }
+}
+
+/* replace on UNIVERSAL_CHARSTRING values.  */
+
+testcase replace_ucharstr() runs on PDTestComponent {
+  var integer a := 0
+  var integer b := 1
+  var universal charstring c := char(0, 0, 0, 120) & ""
+  var universal charstring us_0 := char(0, 0, 0, 77) & "y name is JJ"
+  var universal charstring us_1 := replace(char(0, 0, 0, 77) & "y name is JJ", 11, 1, char(0, 0, 0, 120) & "x")    // returns "My name is xxJ"
+  var universal charstring us_2 := replace(char(0, 0, 0, 77) & "y name is JJ", 11, b - 1, char(0, 0, 0, 120) & "x")// returns "My name is xxJJ"
+  var universal charstring us_3 := replace(char(0, 0, 0, 77) & "y name is JJ", 2, 2, char(0, 0, 0, 120) & "")      // returns "Myxame is JJ"
+  var universal charstring us_4 := replace(char(0, 0, 0, 77) & "y name is JJ", b + 1, b + 1, c)                    // returns "Myxame is JJ"
+  var universal charstring us_5 := replace(char(0, 0, 0, 77) & "y name is JJ", 13, 0, char(0, 0, 0, 120) & "x")    // returns "My name is JJxx"
+  var universal charstring us_6 := replace(us_0, 13, a, char(0, 0, 0, 120) & "x")                                  // returns "My name is JJxx"
+  if (us_1 == char(0, 0, 0, 77) & "y name is xxJ") { setverdict(pass) }
+  else { setverdict(fail) }
+  if (us_2 == char(0, 0, 0, 77) & "y name is xxJJ") { setverdict(pass) }
+  else { setverdict(fail) }
+  if (us_3 == char(0, 0, 0, 77) & "yxame is JJ") { setverdict(pass) }
+  else { setverdict(fail) }
+  if (us_4 == char(0, 0, 0, 77) & "yxame is JJ") { setverdict(pass) }
+  else { setverdict(fail) }
+  if (us_3 == us_4) { setverdict(pass) }
+  else { setverdict(fail) }
+  if (us_5 == char(0, 0, 0, 77) & "y name is JJxx") { setverdict(pass) }
+  else { setverdict(fail) }
+  if (us_6 == char(0, 0, 0, 77) & "y name is JJxx") { setverdict(pass) }
+  else { setverdict(fail) }
+  if (us_5 == us_6) { setverdict(pass) }
+  else { setverdict(fail) }
+}
+
+control {
+	execute (replace_bitstr());
+	execute (replace_hexstr());
+	execute (replace_octetstr());
+	execute (replace_charstr());
+	execute (replace_ucharstr());
+}
+
+}
diff --git a/Regression_Test_java/src/predefFunctions/replacer_SW.ttcn b/Regression_Test_java/src/predefFunctions/replacer_SW.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..f3983021f2bf2d488b3a46625c4f9a78ac77e860
--- /dev/null
+++ b/Regression_Test_java/src/predefFunctions/replacer_SW.ttcn
@@ -0,0 +1,158 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Raduly, Csaba
+ *
+ ******************************************************************************/
+module replacer_SW {	//^In TTCN-3 module `replacer_SW'://
+
+type component PDTestComponent {};
+
+/* replace on BITSTRING values.  Examples from C.34 of ETSI ES 201 873-1
+   V3.3.1 (2008-02).  */
+
+const integer a := 0
+const integer b := 1
+const bitstring bs_1 := replace('00000110'B, 1, 3, '111'B)            // returns '01110110'B
+const bitstring bs_2 := replace('00000110'B, b + a, b + b + b, '111'B)// returns '01110110'B
+
+testcase replace_bitstr() runs on PDTestComponent { //^In testcase definition//
+  if (bs_1 == '01110110'B) { setverdict(pass) }
+  else { setverdict(fail) } //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+  if (bs_1 == bs_2) { setverdict(pass) }
+  else { setverdict(fail) } //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+}
+
+/* replace on HEXSTRING values.  */
+
+const hexstring hs_1 := replace('ABCDEF'H, 0, 2, '123'H)    // returns '123CDEF'H
+const hexstring hs_2 := replace('ABCDEF'H, a, b + 1, '123'H)// returns '123CDEF'H
+
+testcase replace_hexstr() runs on PDTestComponent { //^In testcase definition//
+  if (hs_1 == '123CDEF'H) { setverdict(pass) }
+  else { setverdict(fail) } //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+  if (hs_1 == hs_2) { setverdict(pass) }
+  else { setverdict(fail) } //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+}
+
+/* replace on OCTETSTRING values.  */
+
+const octetstring c := 'FF96'O
+const octetstring os_0 := '01AB23CD'O
+const octetstring os_1 := replace('01AB23CD'O, 2, 1, 'FF96'O)    // returns '01ABFF96CD'O
+const octetstring os_2 := replace('01AB23CD'O, a + 2, b, 'FF96'O)// returns '01ABFF96CD'O
+const octetstring os_3 := replace(os_0, 2, b, c)                 // returns '01ABFF96CD'O
+
+testcase replace_octetstr() runs on PDTestComponent { //^In testcase definition//
+  if (os_1 == '01ABFF96CD'O) { setverdict(pass) }
+  else { setverdict(fail) } //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+  if (os_2 == '01ABFF96CD'O) { setverdict(pass) }
+  else { setverdict(fail) } //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+  if (os_1 == os_2) { setverdict(pass) }
+  else { setverdict(fail) } //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+  if (os_2 == os_3) { setverdict(pass) }
+  else { setverdict(fail) } //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+}
+
+/* replace on CHARSTRING values.  */
+
+const charstring x := "x"
+const charstring cs_0 := "My name is JJ"
+const charstring cs_1 := replace("My name is JJ", 11, 1, "xx")    // returns "My name is xxJ"
+const charstring cs_2 := replace("My name is JJ", 11, b - 1, "xx")// returns "My name is xxJJ"
+const charstring cs_3 := replace("My name is JJ", 2, 2, "x")      // returns "Myxame is JJ"
+const charstring cs_4 := replace("My name is JJ", b + 1, b + 1, x)// returns "Myxame is JJ"
+const charstring cs_5 := replace("My name is JJ", 13, 0, "xx")    // returns "My name is JJxx"
+const charstring cs_6 := replace(cs_0, 13, a, "xx")               // returns "My name is JJxx"
+/*
+TODO: move to _SE const charstring cs_7 := replace("My name is JJ", 12, 2, "xx") // produces test case error (compile error)
+     -"-          const charstring cs_8 := replace("My name is JJ", 13, 2, "xx") // produces test case error (compile error)
+*/
+testcase replace_charstr() runs on PDTestComponent { //In testcase definition//
+  if (cs_1 == "My name is xxJ") { setverdict(pass) }
+  else { setverdict(fail) } //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+  if (cs_2 == "My name is xxJJ") { setverdict(pass) }
+  else { setverdict(fail) } //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+  if (cs_3 == "Myxame is JJ") { setverdict(pass) }
+  else { setverdict(fail) } //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+  if (cs_4 == "Myxame is JJ") { setverdict(pass) }
+  else { setverdict(fail) } //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+  if (cs_3 == cs_4) { setverdict(pass) }
+  else { setverdict(fail) } //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+  if (cs_5 == "My name is JJxx") { setverdict(pass) }
+  else { setverdict(fail) } //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+  if (cs_6 == "My name is JJxx") { setverdict(pass) }
+  else { setverdict(fail) } //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+  if (cs_5 == cs_6) { setverdict(pass) }
+  else { setverdict(fail) } //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+}
+
+/* replace on UNIVERSAL_CHARSTRING values.  */
+
+const universal charstring u := char(0, 0, 0, 120) & ""
+const universal charstring us_0 := char(0, 0, 0, 77) & "y name is JJ"
+const universal charstring us_1 := replace(char(0, 0, 0, 77) & "y name is JJ", 11, 1, char(0, 0, 0, 120) & "x")    // returns "My name is xxJ"
+const universal charstring us_2 := replace(char(0, 0, 0, 77) & "y name is JJ", 11, b - 1, char(0, 0, 0, 120) & "x")// returns "My name is xxJJ"
+const universal charstring us_3 := replace(char(0, 0, 0, 77) & "y name is JJ", 2, 2, char(0, 0, 0, 120) & "")      // returns "Myxame is JJ"
+const universal charstring us_4 := replace(char(0, 0, 0, 77) & "y name is JJ", b + 1, b + 1, u)                    // returns "Myxame is JJ"
+const universal charstring us_5 := replace(char(0, 0, 0, 77) & "y name is JJ", 13, 0, char(0, 0, 0, 120) & "x")    // returns "My name is JJxx"
+const universal charstring us_6 := replace(us_0, 13, a, char(0, 0, 0, 120) & "x")                                  // returns "My name is JJxx"
+
+testcase replace_ucharstr() runs on PDTestComponent { //In testcase definition//
+  if (us_1 == char(0, 0, 0, 77) & "y name is xxJ") { setverdict(pass) }
+  else { setverdict(fail) } //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+  if (us_2 == char(0, 0, 0, 77) & "y name is xxJJ") { setverdict(pass) }
+  else { setverdict(fail) } //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+  if (us_3 == char(0, 0, 0, 77) & "yxame is JJ") { setverdict(pass) }
+  else { setverdict(fail) } //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+  if (us_4 == char(0, 0, 0, 77) & "yxame is JJ") { setverdict(pass) }
+  else { setverdict(fail) } //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+  if (us_3 == us_4) { setverdict(pass) }
+  else { setverdict(fail) } //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+  if (us_5 == char(0, 0, 0, 77) & "y name is JJxx") { setverdict(pass) }
+  else { setverdict(fail) } //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+  if (us_6 == char(0, 0, 0, 77) & "y name is JJxx") { setverdict(pass) }
+  else { setverdict(fail) } //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+  if (us_5 == us_6) { setverdict(pass) }
+  else { setverdict(fail) } //^In else statement// \
+                            //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+}
+
+control {
+	execute (replace_bitstr());
+	execute (replace_hexstr());
+	execute (replace_octetstr());
+	execute (replace_charstr());
+	execute (replace_ucharstr());
+}
+
+}
diff --git a/Regression_Test_java/src/predefFunctions/rotter_OK.ttcn b/Regression_Test_java/src/predefFunctions/rotter_OK.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..d3da31aecf4cc4e4d6c7b9256b1767eae5fd7b5c
--- /dev/null
+++ b/Regression_Test_java/src/predefFunctions/rotter_OK.ttcn
@@ -0,0 +1,553 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Raduly, Csaba
+ *
+ ******************************************************************************/
+module rotter_OK {
+
+type component PDTestComponent {};
+
+
+/*--- ROTATE ON BITSTRING --------------------------------------------------*/
+
+const     bitstring rotconb := '1000110001'B // '0000000000'B
+modulepar bitstring rotparb1 := rotconb
+modulepar bitstring rotparb2 := rotconb @> 2 // '0110001100'B
+modulepar bitstring rotparb3 := rotconb <@ 2 // '0011000110'B
+modulepar bitstring rotparb4 := rotconb <@ 5 // '1000110001'B
+modulepar bitstring rotparb5 := rotconb @> 5 // '1000110001'B
+modulepar bitstring rotparb6 := rotconb <@ 0 // '1000110001'B
+modulepar bitstring rotparb7 := rotconb @> 0 // '1000110001'B
+modulepar bitstring rotparb8 := rotconb <@ 11 // '0001100011'B
+modulepar bitstring rotparb9 := rotconb @> 11 // '1100011000'B
+modulepar bitstring rotparb10 := ''B
+modulepar bitstring rotparb11 := ''B @> 2
+modulepar bitstring rotparb12 := ''B <@ 2
+modulepar bitstring rotparb13 := ''B @> 0
+modulepar bitstring rotparb14 := ''B <@ 0
+modulepar bitstring rotparb15 := rotconb @> -2 // '0011000110'B
+modulepar bitstring rotparb16 := rotconb <@ -2 // '0110001100'B
+
+testcase rotate_bitstr() runs on PDTestComponent{
+
+	var integer j;
+
+	if (rotparb1 == rotparb1 <@ lengthof(rotparb1))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (rotparb1 == rotparb1 @> lengthof(rotparb1))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (rotparb1 == rotparb2 <@ 2)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (rotparb1 == rotparb3 @> 2)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (rotparb1 == rotparb4 @> 5)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (rotparb1 == rotparb5 <@ 5)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (rotparb1 == rotparb6)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (rotparb1 == rotparb7)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (rotparb8 == '0001100011'B)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (rotparb9 == '1100011000'B)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((rotparb10 == rotparb11)
+	and (rotparb10 == rotparb12))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((rotparb10 == rotparb13)
+	and (rotparb10 == rotparb14))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (rotparb15 == rotparb3)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (rotparb16 == rotparb2)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	var bitstring b1 := '0000011111'B
+	for (j:=0; j<15; j:=j+1) {
+	if ((b1 <@ j) @> j == b1)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((b1 <@ -j) <@ j == b1)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((b1 @> -j) @> j == b1)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((b1 @> 0 == b1)
+	and (b1 <@ 0 == b1))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	}
+
+	var bitstring b2 := '10101010101010101010'B
+	for (j:=1; j<30; j:=j+2) {
+	if ((b2 <@ j) != b2)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((b2 <@ j-1) == b2)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((b2 @> j) != b2)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((b2 @> j-1) == b2)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	}
+
+
+}
+
+/*--- ROTATE ON HEXSTRING --------------------------------------------------*/
+
+const     hexstring rotconh := '1000110001'H // '0000000000'H
+modulepar hexstring rotparh1 := rotconh
+modulepar hexstring rotparh2 := rotconh @> 2 // '0110001100'H
+modulepar hexstring rotparh3 := rotconh <@ 2 // '0011000110'H
+modulepar hexstring rotparh4 := rotconh <@ 5 // '1000110001'H
+modulepar hexstring rotparh5 := rotconh @> 5 // '1000110001'H
+modulepar hexstring rotparh6 := rotconh <@ 0 // '1000110001'H
+modulepar hexstring rotparh7 := rotconh @> 0 // '1000110001'H
+modulepar hexstring rotparh8 := rotconh <@ 11 // '0001100011'H
+modulepar hexstring rotparh9 := rotconh @> 11 // '1100011000'H
+modulepar hexstring rotparh10 := ''H
+modulepar hexstring rotparh11 := ''H @> 2
+modulepar hexstring rotparh12 := ''H <@ 2
+modulepar hexstring rotparh13 := ''H @> 0
+modulepar hexstring rotparh14 := ''H <@ 0
+modulepar hexstring rotparh15 := rotconh @> -2 // '0011000110'H
+modulepar hexstring rotparh16 := rotconh <@ -2 // '0110001100'H
+
+testcase rotate_hexstr() runs on PDTestComponent{
+
+	var integer j;
+
+
+	if (rotparh1 == rotparh1 <@ lengthof(rotparh1))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (rotparh1 == rotparh1 @> lengthof(rotparh1))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (rotparh1 == rotparh2 <@ 2)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (rotparh1 == rotparh3 @> 2)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (rotparh1 == rotparh4 @> 5)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (rotparh1 == rotparh5 <@ 5)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (rotparh1 == rotparh6)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (rotparh1 == rotparh7)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (rotparh8 == '0001100011'H)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (rotparh9 == '1100011000'H)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((rotparh10 == rotparh11)
+	and (rotparh10 == rotparh12))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((rotparh10 == rotparh13)
+	and (rotparh10 == rotparh14))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (rotparh15 == rotparh3)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (rotparh16 == rotparh2)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	var hexstring h1 := '0000011111'H
+	for (j:=0; j<15; j:=j+1) {
+	if ((h1 <@ j) @> j == h1)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((h1 <@ -j) <@ j == h1)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((h1 @> -j) @> j == h1)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((h1 @> 0 == h1)
+	and (h1 <@ 0 == h1))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	}
+
+	var hexstring h2 := '10101010101010101010'H
+	for (j:=1; j<30; j:=j+2) {
+	if ((h2 <@ j) != h2)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((h2 <@ j-1) == h2)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((h2 @> j) != h2)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((h2 @> j-1) == h2)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	}
+
+
+}
+
+/*--- ROTATE ON OCTETSTRING --------------------------------------------------*/
+
+const octetstring rotcono  := 'AA00AA00AA'O
+modulepar octetstring rotparo1 := rotcono
+modulepar octetstring rotparo2 := rotcono @> 1 // 'AAAA00AA00'O
+modulepar octetstring rotparo3 := rotcono <@ 1 // '00AA00AAAA'O
+modulepar octetstring rotparo4 := rotcono <@ 5 // 'AA00AA00AA'O
+modulepar octetstring rotparo5 := rotcono @> 5 // 'AA00AA00AA'O
+modulepar octetstring rotparo6 := rotcono <@ 0 // 'AA00AA00AA'O
+modulepar octetstring rotparo7 := rotcono @> 0 // 'AA00AA00AA'O
+modulepar octetstring rotparo8 := rotcono <@ 11 // '00AA00AAAA'O
+modulepar octetstring rotparo9 := rotcono @> 11 // 'AAAA00AA00'O
+modulepar octetstring rotparo10 := ''O
+modulepar octetstring rotparo11 := ''O @> 2
+modulepar octetstring rotparo12 := ''O <@ 2
+modulepar octetstring rotparo13 := ''O @> 0
+modulepar octetstring rotparo14 := ''O <@ 0
+modulepar octetstring rotparo15 := rotcono @> -1 // '00AA00AAAA'O
+modulepar octetstring rotparo16 := rotcono <@ -1 // 'AAAA00AA00'O
+
+testcase rotate_octetstr() runs on PDTestComponent{
+
+	var integer j;
+
+	if (rotparo1 == rotparo1 <@ lengthof(rotparo1))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (rotparo1 == rotparo1 @> lengthof(rotparo1))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (rotparo1 == rotparo2 <@ 1)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (rotparo1 == rotparo3 @> 1)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (rotparo1 == rotparo4 @> 5)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (rotparo1 == rotparo5 <@ 5)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (rotparo1 == rotparo6)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (rotparo1 == rotparo7)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (rotparo8 == '00AA00AAAA'O)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (rotparo9 == 'AAAA00AA00'O)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((rotparo10 == rotparo11)
+	and (rotparo10 == rotparo12))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((rotparo10 == rotparo13)
+	and (rotparo10 == rotparo14))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (rotparo15 == rotparo3)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (rotparo16 == rotparo2)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+
+	var octetstring o1 := '0000011111'O
+	for (j:=0; j<15; j:=j+1) {
+	if ((o1 <@ j) @> j == o1)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((o1 <@ -j) <@ j == o1)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((o1 @> -j) @> j == o1)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((o1 @> 0 == o1)
+	and (o1 <@ 0 == o1))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	}
+
+	var octetstring o2 := '1100110011001100110011001100110011001100'O
+	for (j:=1; j<30; j:=j+2) {
+	if ((o2 <@ j) != o2)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((o2 <@ j-1) == o2)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((o2 @> j) != o2)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((o2 @> j-1) == o2)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	}
+
+}
+
+/*--- ROTATE ON CHARSTRING --------------------------------------------------*/
+
+const     charstring rotconc := "1000110001" // "0000000000"
+modulepar charstring rotparc1 := rotconc
+modulepar charstring rotparc2 := rotconc @> 2 // "0110001100"
+modulepar charstring rotparc3 := rotconc <@ 2 // "0011000110"
+modulepar charstring rotparc4 := rotconc <@ 5 // "1000110001"
+modulepar charstring rotparc5 := rotconc @> 5 // "1000110001"
+modulepar charstring rotparc6 := rotconc <@ 0 // "1000110001"
+modulepar charstring rotparc7 := rotconc @> 0 // "1000110001"
+modulepar charstring rotparc8 := rotconc <@ 11 // "0001100011"
+modulepar charstring rotparc9 := rotconc @> 11 // "1100011000"
+modulepar charstring rotparc10 := ""
+modulepar charstring rotparc11 := "" @> 2
+modulepar charstring rotparc12 := "" <@ 2
+modulepar charstring rotparc13 := "" @> 0
+modulepar charstring rotparc14 := "" <@ 0
+modulepar charstring rotparc15 := rotconc @> -2 // "0011000110"
+modulepar charstring rotparc16 := rotconc <@ -2 // "0110001100"
+
+testcase rotate_char() runs on PDTestComponent{
+
+	var integer j;
+
+	if (rotparc1 == rotparc1 <@ lengthof(rotparc1))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (rotparc1 == rotparc1 @> lengthof(rotparc1))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (rotparc1 == rotparc2 <@ 2)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (rotparc1 == rotparc3 @> 2)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (rotparc1 == rotparc4 @> 5)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (rotparc1 == rotparc5 <@ 5)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (rotparc1 == rotparc6)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (rotparc1 == rotparc7)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (rotparc8 == "0001100011")
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (rotparc9 == "1100011000")
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((rotparc10 == rotparc11)
+	and (rotparc10 == rotparc12))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((rotparc10 == rotparc13)
+	and (rotparc10 == rotparc14))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (rotparc15 == rotparc3)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (rotparc16 == rotparc2)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	var charstring c1 := "0000011111"
+	for (j:=0; j<15; j:=j+1) {
+
+	if ((c1 <@ j) @> j == c1)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((c1 <@ -j) <@ j == c1)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((c1 @> -j) @> j == c1)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((c1 @> 0 == c1)
+	and (c1 <@ 0 == c1))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	}
+
+	var charstring c2 := "10101010101010101010"
+	for (j:=1; j<30; j:=j+2) {
+	if ((c2 <@ j) != c2)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((c2 <@ j-1) == c2)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((c2 @> j) != c2)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((c2 @> j-1) == c2)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	}
+
+
+}
+
+
+/*--- ROTATE ON UNIVERSAL CHARSTRING --------------------------------------------------*/
+
+//modulepar universal charstring rotconuc := "0000000000"
+const     universal charstring rotconuc  := char(0,0,0,65) & "000" & char(0,0,0,65) & char(0,0,0,65) & "000" & char(0,0,0,65) //A000AA000A
+modulepar universal charstring rotparuc1 := rotconuc
+modulepar universal charstring rotparuc2 := rotconuc @> 2 		// "0AA000AA00"
+modulepar universal charstring rotparuc3 := rotconuc <@ 2 		// "00AA000AA0"
+modulepar universal charstring rotparuc4 := rotconuc <@ 5 		// "A000AA000A"
+modulepar universal charstring rotparuc5 := rotconuc @> 5 		// "A000AA000A"
+modulepar universal charstring rotparuc6 := rotconuc <@ 0 		// "A000AA000A"
+modulepar universal charstring rotparuc7 := rotconuc @> 0 		// "A000AA000A"
+modulepar universal charstring rotparuc8 := rotconuc <@ 11 	// "000AA000AA"
+modulepar universal charstring rotparuc9 := rotconuc @> 11 	// "AA000AA000"
+modulepar universal charstring rotparuc10 := ""
+modulepar universal charstring rotparuc11 := "" @> 2
+modulepar universal charstring rotparuc12 := "" <@ 2
+modulepar universal charstring rotparuc13 := "" @> 0
+modulepar universal charstring rotparuc14 := "" <@ 0
+modulepar universal charstring rotparuc15 := rotconuc @> -2 	// "00AA000AA0"
+modulepar universal charstring rotparuc16 := rotconuc <@ -2 	// "0AA000AA00"
+
+testcase rotate_uchar() runs on PDTestComponent{
+
+	var integer j;
+	if (rotparuc1 == rotparuc1 <@ lengthof(rotparc1))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (rotparuc1 == rotparuc1 @> lengthof(rotparc1))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (rotparuc1 == rotparuc2 <@ 2)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (rotparuc1 == rotparuc3 @> 2)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (rotparuc1 == rotparuc4 @> 5)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (rotparuc1 == rotparuc5 <@ 5)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (rotparuc1 == rotparuc6)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (rotparuc1 == rotparuc7)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (rotparuc8 == "000AA000AA")
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (rotparuc9 == "AA000AA000")
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((rotparuc10 == rotparuc11)
+	and (rotparuc10 == rotparuc12))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((rotparuc10 == rotparuc13)
+	and (rotparuc10 == rotparuc14))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (rotparuc15 == rotparuc3)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (rotparuc16 == rotparuc2)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	var universal charstring c1 := "0000011111"
+	for (j:=0; j<15; j:=j+1) {
+
+	if ((c1 <@ j) @> j == c1)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((c1 <@ -j) <@ j == c1)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((c1 @> -j) @> j == c1)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((c1 @> 0 == c1)
+	and (c1 <@ 0 == c1))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	}
+
+	var charstring c2 := "10101010101010101010"
+	for (j:=1; j<30; j:=j+2) {
+	if ((c2 <@ j) != c2)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((c2 <@ j-1) == c2)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((c2 @> j) != c2)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((c2 @> j-1) == c2)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	}
+}
+
+control {
+	execute (rotate_bitstr());
+	execute (rotate_hexstr());
+	execute (rotate_octetstr());
+	execute (rotate_char());
+	execute (rotate_uchar());
+}
+
+}
diff --git a/Regression_Test_java/src/predefFunctions/rotter_SW.ttcn b/Regression_Test_java/src/predefFunctions/rotter_SW.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..ee2eb3ac551e8008348b2f08cbef75fa6b196ca3
--- /dev/null
+++ b/Regression_Test_java/src/predefFunctions/rotter_SW.ttcn
@@ -0,0 +1,435 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Raduly, Csaba
+ *
+ ******************************************************************************/
+module rotter_SW {	//^In TTCN-3 module `rotter_SW'://
+
+type component PDTestComponent {};
+
+
+/*--- ROTATE ON BITSTRING --------------------------------------------------*/
+
+const bitstring rotconb := '0000000000'B
+const bitstring rotconb1 := '1000110001'B
+const bitstring rotconb2 := rotconb1 @> 2 // '0110001100'B
+const bitstring rotconb3 := rotconb1 <@ 2 // '0011000110'B
+const bitstring rotconb4 := rotconb1 <@ 5 // '1000110001'B
+const bitstring rotconb5 := rotconb1 @> 5 // '1000110001'B
+const bitstring rotconb6 := rotconb1 <@ 0 // '1000110001'B
+const bitstring rotconb7 := rotconb1 @> 0 // '1000110001'B
+const bitstring rotconb8 := rotconb1 <@ 11 // '0001100011'B
+const bitstring rotconb9 := rotconb1 @> 11 // '1100011000'B
+const bitstring rotconb10 := ''B
+const bitstring rotconb11 := ''B @> 2
+const bitstring rotconb12 := ''B <@ 2
+const bitstring rotconb13 := ''B @> 0
+const bitstring rotconb14 := ''B <@ 0
+const bitstring rotconb15 := rotconb1 @> -2 // '0011000110'B
+const bitstring rotconb16 := rotconb1 <@ -2 // '0110001100'B
+
+testcase rotate_bitstr() runs on PDTestComponent{ //In testcase definition//
+
+	if (rotconb1 == rotconb1 <@ lengthof(rotconb1))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (rotconb1 == rotconb1 @> lengthof(rotconb1))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (rotconb1 == rotconb2 <@ 2)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (rotconb1 == rotconb3 @> 2)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (rotconb1 == rotconb4 @> 5)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (rotconb1 == rotconb5 <@ 5)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (rotconb1 == rotconb6)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (rotconb1 == rotconb7)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (rotconb8 == '0001100011'B)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (rotconb9 == '1100011000'B)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((rotconb10 == rotconb11)
+	and (rotconb10 == rotconb12))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((rotconb10 == rotconb13)
+	and (rotconb10 == rotconb14))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (rotconb15 == rotconb3)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (rotconb16 == rotconb2)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+}
+
+/*--- ROTATE ON HEXSTRING --------------------------------------------------*/
+
+const hexstring rotconh := '0000000000'H
+const hexstring rotconh1 := '1000110001'H
+const hexstring rotconh2 := rotconh1 @> 2 // '0110001100'H
+const hexstring rotconh3 := rotconh1 <@ 2 // '0011000110'H
+const hexstring rotconh4 := rotconh1 <@ 5 // '1000110001'H
+const hexstring rotconh5 := rotconh1 @> 5 // '1000110001'H
+const hexstring rotconh6 := rotconh1 <@ 0 // '1000110001'H
+const hexstring rotconh7 := rotconh1 @> 0 // '1000110001'H
+const hexstring rotconh8 := rotconh1 <@ 11 // '0001100011'H
+const hexstring rotconh9 := rotconh1 @> 11 // '1100011000'H
+const hexstring rotconh10 := ''H
+const hexstring rotconh11 := ''H @> 2
+const hexstring rotconh12 := ''H <@ 2
+const hexstring rotconh13 := ''H @> 0
+const hexstring rotconh14 := ''H <@ 0
+const hexstring rotconh15 := rotconh1 @> -2 // '0011000110'H
+const hexstring rotconh16 := rotconh1 <@ -2 // '0110001100'H
+
+testcase rotate_hexstr() runs on PDTestComponent{ //In testcase definition//
+	if (rotconh1 == rotconh1 <@ lengthof(rotconh1))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (rotconh1 == rotconh1 @> lengthof(rotconh1))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (rotconh1 == rotconh2 <@ 2)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (rotconh1 == rotconh3 @> 2)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (rotconh1 == rotconh4 @> 5)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (rotconh1 == rotconh5 <@ 5)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (rotconh1 == rotconh6)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (rotconh1 == rotconh7)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (rotconh8 == '0001100011'H)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (rotconh9 == '1100011000'H)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((rotconh10 == rotconh11)
+	and (rotconh10 == rotconh12))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((rotconh10 == rotconh13)
+	and (rotconh10 == rotconh14))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (rotconh15 == rotconh3)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (rotconh16 == rotconh2)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+}
+
+/*--- ROTATE ON OCTETSTRING --------------------------------------------------*/
+
+const octetstring rotcono1 := 'AA00AA00AA'O
+const octetstring rotcono2 := rotcono1 @> 1 // 'AAAA00AA00'O
+const octetstring rotcono3 := rotcono1 <@ 1 // '00AA00AAAA'O
+const octetstring rotcono4 := rotcono1 <@ 5 // 'AA00AA00AA'O
+const octetstring rotcono5 := rotcono1 @> 5 // 'AA00AA00AA'O
+const octetstring rotcono6 := rotcono1 <@ 0 // 'AA00AA00AA'O
+const octetstring rotcono7 := rotcono1 @> 0 // 'AA00AA00AA'O
+const octetstring rotcono8 := rotcono1 <@ 11 // '00AA00AAAA'O
+const octetstring rotcono9 := rotcono1 @> 11 // 'AAAA00AA00'O
+const octetstring rotcono10 := ''O
+const octetstring rotcono11 := ''O @> 2
+const octetstring rotcono12 := ''O <@ 2
+const octetstring rotcono13 := ''O @> 0
+const octetstring rotcono14 := ''O <@ 0
+const octetstring rotcono15 := rotcono1 @> -1 // '00AA00AAAA'O
+const octetstring rotcono16 := rotcono1 <@ -1 // 'AAAA00AA00'O
+
+testcase rotate_octetstr() runs on PDTestComponent{ //In testcase definition//
+
+	if (rotcono1 == rotcono1 <@ lengthof(rotcono1))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (rotcono1 == rotcono1 @> lengthof(rotcono1))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (rotcono1 == rotcono2 <@ 1)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (rotcono1 == rotcono3 @> 1)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (rotcono1 == rotcono4 @> 5)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (rotcono1 == rotcono5 <@ 5)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (rotcono1 == rotcono6)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (rotcono1 == rotcono7)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (rotcono8 == '00AA00AAAA'O)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (rotcono9 == 'AAAA00AA00'O)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((rotcono10 == rotcono11)
+	and (rotcono10 == rotcono12))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((rotcono10 == rotcono13)
+	and (rotcono10 == rotcono14))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (rotcono15 == rotcono3)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (rotcono16 == rotcono2)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+}
+
+/*--- ROTATE ON CHARSTRING --------------------------------------------------*/
+
+const charstring rotconc := "0000000000"
+const charstring rotconc1 := "1000110001"
+const charstring rotconc2 := rotconc1 @> 2 // "0110001100"
+const charstring rotconc3 := rotconc1 <@ 2 // "0011000110"
+const charstring rotconc4 := rotconc1 <@ 5 // "1000110001"
+const charstring rotconc5 := rotconc1 @> 5 // "1000110001"
+const charstring rotconc6 := rotconc1 <@ 0 // "1000110001"
+const charstring rotconc7 := rotconc1 @> 0 // "1000110001"
+const charstring rotconc8 := rotconc1 <@ 11 // "0001100011"
+const charstring rotconc9 := rotconc1 @> 11 // "1100011000"
+const charstring rotconc10 := ""
+const charstring rotconc11 := "" @> 2
+const charstring rotconc12 := "" <@ 2
+const charstring rotconc13 := "" @> 0
+const charstring rotconc14 := "" <@ 0
+const charstring rotconc15 := rotconc1 @> -2 // "0011000110"
+const charstring rotconc16 := rotconc1 <@ -2 // "0110001100"
+
+testcase rotate_char() runs on PDTestComponent{ //In testcase definition//
+
+	if (rotconc1 == rotconc1 <@ lengthof(rotconc1))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (rotconc1 == rotconc1 @> lengthof(rotconc1))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (rotconc1 == rotconc2 <@ 2)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (rotconc1 == rotconc3 @> 2)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (rotconc1 == rotconc4 @> 5)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (rotconc1 == rotconc5 <@ 5)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (rotconc1 == rotconc6)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (rotconc1 == rotconc7)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (rotconc8 == "0001100011")
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (rotconc9 == "1100011000")
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((rotconc10 == rotconc11)
+	and (rotconc10 == rotconc12))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((rotconc10 == rotconc13)
+	and (rotconc10 == rotconc14))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (rotconc15 == rotconc3)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (rotconc16 == rotconc2)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+}
+
+
+/*--- ROTATE ON UNIVERSAL CHARSTRING --------------------------------------------------*/
+
+const universal charstring rotconuc := "0000000000"
+const universal charstring rotconuc1 := char(0,0,0,65) & "000" & char(0,0,0,65) & char(0,0,0,65) & "000" & char(0,0,0,65) //A000AA000A
+const universal charstring rotconuc2 := rotconuc1 @> 2 		// "0AA000AA00"
+const universal charstring rotconuc3 := rotconuc1 <@ 2 		// "00AA000AA0"
+const universal charstring rotconuc4 := rotconuc1 <@ 5 		// "A000AA000A"
+const universal charstring rotconuc5 := rotconuc1 @> 5 		// "A000AA000A"
+const universal charstring rotconuc6 := rotconuc1 <@ 0 		// "A000AA000A"
+const universal charstring rotconuc7 := rotconuc1 @> 0 		// "A000AA000A"
+const universal charstring rotconuc8 := rotconuc1 <@ 11 	// "000AA000AA"
+const universal charstring rotconuc9 := rotconuc1 @> 11 	// "AA000AA000"
+const universal charstring rotconuc10 := ""
+const universal charstring rotconuc11 := "" @> 2
+const universal charstring rotconuc12 := "" <@ 2
+const universal charstring rotconuc13 := "" @> 0
+const universal charstring rotconuc14 := "" <@ 0
+const universal charstring rotconuc15 := rotconuc1 @> -2 	// "00AA000AA0"
+const universal charstring rotconuc16 := rotconuc1 <@ -2 	// "0AA000AA00"
+
+testcase rotate_uchar() runs on PDTestComponent{ //In testcase definition//
+
+	if (rotconuc1 == rotconuc1 <@ lengthof(rotconc1))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (rotconuc1 == rotconuc1 @> lengthof(rotconc1))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (rotconuc1 == rotconuc2 <@ 2)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (rotconuc1 == rotconuc3 @> 2)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (rotconuc1 == rotconuc4 @> 5)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (rotconuc1 == rotconuc5 <@ 5)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (rotconuc1 == rotconuc6)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (rotconuc1 == rotconuc7)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (rotconuc8 == "000AA000AA")
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (rotconuc9 == "AA000AA000")
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((rotconuc10 == rotconuc11)
+	and (rotconuc10 == rotconuc12))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((rotconuc10 == rotconuc13)
+	and (rotconuc10 == rotconuc14))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (rotconuc15 == rotconuc3)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (rotconuc16 == rotconuc2)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+}
+
+control {
+	execute (rotate_bitstr());
+	execute (rotate_hexstr());
+	execute (rotate_octetstr());
+	execute (rotate_char());
+	execute (rotate_uchar());
+}
+
+}
diff --git a/Regression_Test_java/src/predefFunctions/shifty_OK.ttcn b/Regression_Test_java/src/predefFunctions/shifty_OK.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..4f2bacd967259f4105e227d02fe803447e18e11d
--- /dev/null
+++ b/Regression_Test_java/src/predefFunctions/shifty_OK.ttcn
@@ -0,0 +1,267 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Raduly, Csaba
+ *
+ ******************************************************************************/
+module shifty_OK {
+
+type component PDTestComponent {};
+
+
+/*--- SHIFT ON BITSTRING --------------------------------------------------*/
+
+const     bitstring shiconb  := '0000000000'B
+const     bitstring shiconb1 := '0000110000'B
+modulepar bitstring shiparb  := shiconb
+modulepar bitstring shiparb1 := shiconb1
+modulepar bitstring shiparb2 := shiconb1 >> 2 // '0000001100'B
+modulepar bitstring shiparb3 := shiconb1 << 2 // '0011000000'B
+modulepar bitstring shiparb4 := shiconb1 << 5 // '1000000000'B
+modulepar bitstring shiparb5 := shiconb1 >> 5 // '0000000001'B
+modulepar bitstring shiparb6 := shiconb1 << 0 // '0000110000'B
+modulepar bitstring shiparb7 := shiconb1 >> 0 // '0000110000'B
+modulepar bitstring shiparb8 := shiconb1 << 11 // '0000000000'B
+modulepar bitstring shiparb9 := shiconb1 >> 11 // '0000000000'B
+modulepar bitstring shiparb10 := ''B
+modulepar bitstring shiparb11 := ''B >> 2
+modulepar bitstring shiparb12 := ''B << 2
+modulepar bitstring shiparb13 := ''B >> 0
+modulepar bitstring shiparb14 := ''B << 0
+modulepar bitstring shiparb15 := shiconb1 >> -2 // '0011000000'B
+modulepar bitstring shiparb16 := shiconb1 << -2 // '0000001100'B
+
+testcase shift_bitstr() runs on PDTestComponent{
+
+	var integer j;
+
+	if (shiparb1 == shiparb2 << 2)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (shiparb1 == shiparb3 >> 2)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (shiparb1 != shiparb4 >> 5)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (shiparb1 != shiparb5 << 5)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (shiparb1 == shiparb6)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (shiparb1 == shiparb7)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (shiparb == shiparb8)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (shiparb == shiparb9)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((shiparb10 == shiparb11)
+	and (shiparb10 == shiparb12))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((shiparb10 == shiparb13)
+	and (shiparb10 == shiparb14))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (shiparb15 == shiparb3)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (shiparb16 == shiparb2)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	for (j:=0; j<256; j:=j+1) {
+	if (((int2bit(j,10) << 2) >> 2) == int2bit(j,10))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (((int2bit(j,10) << 2) << -2) == int2bit(j,10))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (((int2bit(j,10) >> -2) >> 2) == int2bit(j,10))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (((int2bit(j,10) >> 0) << 0) == int2bit(j,10))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	}
+}
+
+/*--- SHIFT ON HEXSTRING --------------------------------------------------*/
+
+const     hexstring shiconh  := '0000000000'H
+const     hexstring shiconh1 := '0000110000'H
+modulepar hexstring shiparh  := shiconh
+modulepar hexstring shiparh1 := shiconh1
+modulepar hexstring shiparh2 := shiconh1 >> 2 // '0000001100'H
+modulepar hexstring shiparh3 := shiconh1 << 2 // '0011000000'H
+modulepar hexstring shiparh4 := shiconh1 << 5 // '1000000000'H
+modulepar hexstring shiparh5 := shiconh1 >> 5 // '0000000001'H
+modulepar hexstring shiparh6 := shiconh1 << 0 // '0000110000'H
+modulepar hexstring shiparh7 := shiconh1 >> 0 // '0000110000'H
+modulepar hexstring shiparh8 := shiconh1 << 11 // '0000000000'H
+modulepar hexstring shiparh9 := shiconh1 >> 11 // '0000000000'H
+modulepar hexstring shiparh10 := ''H
+modulepar hexstring shiparh11 := ''H >> 2
+modulepar hexstring shiparh12 := ''H << 2
+modulepar hexstring shiparh13 := ''H >> 0
+modulepar hexstring shiparh14 := ''H << 0
+modulepar hexstring shiparh15 := shiconh1 >> -2 // '0011000000'H
+modulepar hexstring shiparh16 := shiconh1 << -2 // '0000001100'H
+
+testcase shift_hexstr() runs on PDTestComponent{
+
+	var integer j;
+
+	if (shiparh1 == shiparh2 << 2)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (shiparh1 == shiparh3 >> 2)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (shiparh1 != shiparh4 >> 5)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (shiparh1 != shiparh5 << 5)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (shiparh1 == shiparh6)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (shiparh1 == shiparh7)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (shiparh == shiparh8)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (shiparh == shiparh9)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((shiparh10 == shiparh11)
+	and (shiparh10 == shiparh12))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((shiparh10 == shiparh13)
+	and (shiparh10 == shiparh14))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (shiparh15 == shiparh3)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (shiparh16 == shiparh2)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	for (j:=0; j<256; j:=j+1) {
+	if (((int2hex(j,10) << 2) >> 2) == int2hex(j,10))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (((int2hex(j,10) << 2) << -2) == int2hex(j,10))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (((int2hex(j,10) >> -2) >> 2) == int2hex(j,10))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (((int2hex(j,10) >> 0) << 0) == int2hex(j,10))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	}
+}
+
+/*--- SHIFT ON OCTETSTRING --------------------------------------------------*/
+
+const     octetstring shicono  := '0000000000'O
+const     octetstring shicono1 := '0000AA0000'O
+modulepar octetstring shiparo  := shicono
+modulepar octetstring shiparo1 := shicono1
+modulepar octetstring shiparo2 := shicono1 >> 2 // '00000000AA'O
+modulepar octetstring shiparo3 := shicono1 << 2 // 'AA00000000'O
+modulepar octetstring shiparo4 := shicono1 << 5 // '0000000000'O
+modulepar octetstring shiparo5 := shicono1 >> 5 // '0000000000'O
+modulepar octetstring shiparo6 := shicono1 << 0 // '0000AA0000'O
+modulepar octetstring shiparo7 := shicono1 >> 0 // '0000AA0000'O
+modulepar octetstring shiparo8 := shicono1 << 11 // '0000000000'O
+modulepar octetstring shiparo9 := shicono1 >> 11 // '0000000000'O
+modulepar octetstring shiparo10 := ''O
+modulepar octetstring shiparo11 := ''O >> 2
+modulepar octetstring shiparo12 := ''O << 2
+modulepar octetstring shiparo13 := ''O >> 0
+modulepar octetstring shiparo14 := ''O << 0
+modulepar octetstring shiparo15 := shicono1 >> -2 // 'AA00000000'O
+modulepar octetstring shiparo16 := shicono1 << -2 // '00000000AA'O
+
+testcase shift_octetstr() runs on PDTestComponent{
+
+	var integer j;
+
+	if (shiparo1 == shiparo2 << 2)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (shiparo1 == shiparo3 >> 2)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (shiparo1 != shiparo4 >> 5)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (shiparo1 != shiparo5 << 5)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (shiparo1 == shiparo6)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (shiparo1 == shiparo7)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (shiparo == shiparo8)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (shiparo == shiparo9)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((shiparo10 == shiparo11)
+	and (shiparo10 == shiparo12))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((shiparo10 == shiparo13)
+	and (shiparo10 == shiparo14))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (shiparo15 == shiparo3)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (shiparo16 == shiparo2)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	for (j:=0; j<256; j:=j+1) {
+	if (((int2oct(j,3) << 2) >> 2) == int2oct(j,3))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (((int2oct(j,3) << 2) << -2) == int2oct(j,3))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (((int2oct(j,3) >> -2) >> 2) == int2oct(j,3))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if (((int2oct(j,3) >> 0) << 0) == int2oct(j,3))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	}
+}
+
+control {
+	execute (shift_bitstr());
+	execute (shift_hexstr());
+	execute (shift_octetstr());
+}
+
+}
diff --git a/Regression_Test_java/src/predefFunctions/shifty_SW.ttcn b/Regression_Test_java/src/predefFunctions/shifty_SW.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..054714dabef70ef1251cdf37ce1ce80081b299db
--- /dev/null
+++ b/Regression_Test_java/src/predefFunctions/shifty_SW.ttcn
@@ -0,0 +1,246 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Raduly, Csaba
+ *
+ ******************************************************************************/
+module shifty_SW {	//^In TTCN-3 module `shifty_SW'://
+
+type component PDTestComponent {};
+
+
+/*--- SHIFT ON BITSTRING --------------------------------------------------*/
+
+const bitstring shiconb := '0000000000'B
+const bitstring shiconb1 := '0000110000'B
+const bitstring shiconb2 := shiconb1 >> 2 // '0000001100'B
+const bitstring shiconb3 := shiconb1 << 2 // '0011000000'B
+const bitstring shiconb4 := shiconb1 << 5 // '1000000000'B
+const bitstring shiconb5 := shiconb1 >> 5 // '0000000001'B
+const bitstring shiconb6 := shiconb1 << 0 // '0000110000'B
+const bitstring shiconb7 := shiconb1 >> 0 // '0000110000'B
+const bitstring shiconb8 := shiconb1 << 11 // '0000000000'B
+const bitstring shiconb9 := shiconb1 >> 11 // '0000000000'B
+const bitstring shiconb10 := ''B
+const bitstring shiconb11 := ''B >> 2
+const bitstring shiconb12 := ''B << 2
+const bitstring shiconb13 := ''B >> 0
+const bitstring shiconb14 := ''B << 0
+const bitstring shiconb15 := shiconb1 >> -2 // '0011000000'B
+const bitstring shiconb16 := shiconb1 << -2 // '0000001100'B
+
+testcase shift_bitstr() runs on PDTestComponent{ //In testcase definition//
+
+	if (shiconb1 == shiconb2 << 2)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (shiconb1 == shiconb3 >> 2)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (shiconb1 != shiconb4 >> 5)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (shiconb1 != shiconb5 << 5)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (shiconb1 == shiconb6)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (shiconb1 == shiconb7)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (shiconb == shiconb8)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (shiconb == shiconb9)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((shiconb10 == shiconb11)
+	and (shiconb10 == shiconb12))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((shiconb10 == shiconb13)
+	and (shiconb10 == shiconb14))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (shiconb15 == shiconb3)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (shiconb16 == shiconb2)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+}
+
+/*--- SHIFT ON HEXSTRING --------------------------------------------------*/
+
+const hexstring shiconh := '0000000000'H
+const hexstring shiconh1 := '0000110000'H
+const hexstring shiconh2 := shiconh1 >> 2 // '0000001100'H
+const hexstring shiconh3 := shiconh1 << 2 // '0011000000'H
+const hexstring shiconh4 := shiconh1 << 5 // '1000000000'H
+const hexstring shiconh5 := shiconh1 >> 5 // '0000000001'H
+const hexstring shiconh6 := shiconh1 << 0 // '0000110000'H
+const hexstring shiconh7 := shiconh1 >> 0 // '0000110000'H
+const hexstring shiconh8 := shiconh1 << 11 // '0000000000'H
+const hexstring shiconh9 := shiconh1 >> 11 // '0000000000'H
+const hexstring shiconh10 := ''H
+const hexstring shiconh11 := ''H >> 2
+const hexstring shiconh12 := ''H << 2
+const hexstring shiconh13 := ''H >> 0
+const hexstring shiconh14 := ''H << 0
+const hexstring shiconh15 := shiconh1 >> -2 // '0011000000'H
+const hexstring shiconh16 := shiconh1 << -2 // '0000001100'H
+
+testcase shift_hexstr() runs on PDTestComponent{ //In testcase definition//
+
+	if (shiconh1 == shiconh2 << 2)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (shiconh1 == shiconh3 >> 2)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (shiconh1 != shiconh4 >> 5)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (shiconh1 != shiconh5 << 5)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (shiconh1 == shiconh6)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (shiconh1 == shiconh7)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (shiconh == shiconh8)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (shiconh == shiconh9)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((shiconh10 == shiconh11)
+	and (shiconh10 == shiconh12))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((shiconh10 == shiconh13)
+	and (shiconh10 == shiconh14))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (shiconh15 == shiconh3)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (shiconh16 == shiconh2)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+}
+
+/*--- SHIFT ON OCTETSTRING --------------------------------------------------*/
+
+const octetstring shicono := '0000000000'O
+const octetstring shicono1 := '0000AA0000'O
+const octetstring shicono2 := shicono1 >> 2 // '00000000AA'O
+const octetstring shicono3 := shicono1 << 2 // 'AA00000000'O
+const octetstring shicono4 := shicono1 << 5 // '0000000000'O
+const octetstring shicono5 := shicono1 >> 5 // '0000000000'O
+const octetstring shicono6 := shicono1 << 0 // '0000AA0000'O
+const octetstring shicono7 := shicono1 >> 0 // '0000AA0000'O
+const octetstring shicono8 := shicono1 << 11 // '0000000000'O
+const octetstring shicono9 := shicono1 >> 11 // '0000000000'O
+const octetstring shicono10 := ''O
+const octetstring shicono11 := ''O >> 2
+const octetstring shicono12 := ''O << 2
+const octetstring shicono13 := ''O >> 0
+const octetstring shicono14 := ''O << 0
+const octetstring shicono15 := shicono1 >> -2 // 'AA00000000'O
+const octetstring shicono16 := shicono1 << -2 // '00000000AA'O
+
+testcase shift_octetstr() runs on PDTestComponent{ //In testcase definition//
+
+	if (shicono1 == shicono2 << 2)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (shicono1 == shicono3 >> 2)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (shicono1 != shicono4 >> 5)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (shicono1 != shicono5 << 5)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (shicono1 == shicono6)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (shicono1 == shicono7)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (shicono == shicono8)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (shicono == shicono9)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((shicono10 == shicono11)
+	and (shicono10 == shicono12))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((shicono10 == shicono13)
+	and (shicono10 == shicono14))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (shicono15 == shicono3)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (shicono16 == shicono2)
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+}
+
+control {
+	execute (shift_bitstr());
+	execute (shift_hexstr());
+	execute (shift_octetstr());
+}
+
+}
diff --git a/Regression_Test_java/src/predefFunctions/size_of_OK.ttcn b/Regression_Test_java/src/predefFunctions/size_of_OK.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..42574dea7cabf11ad68064f14011bf7469b8da71
--- /dev/null
+++ b/Regression_Test_java/src/predefFunctions/size_of_OK.ttcn
@@ -0,0 +1,186 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Beres, Szabolcs
+ *   Raduly, Csaba
+ *
+ ******************************************************************************/
+module size_of_OK {	//^In TTCN-3 module `size_of_OK'://
+
+type component PDTestComponent {};
+
+/*--- SIZEOF ON RECORDOF  --------------------------------------------------*/
+
+type record of integer sirortype1
+type record of sirortype1 sirortype2
+
+const sirortype1 siro1 := {}
+const sirortype1 siro2 := {1}
+const sirortype1 siro3 := {1,2}
+
+const sirortype2 siro4 := {{}}
+const sirortype2 siro5 := {{},{}}
+const sirortype2 siro6 := {{1},{1,2}}
+
+modulepar integer sirocon1 := sizeof(siro1)
+modulepar integer sirocon2 := sizeof(siro2)
+modulepar integer sirocon3 := sizeof(siro3)
+
+modulepar integer sirocon4 := sizeof(siro4)
+modulepar integer sirocon5 := sizeof(siro5)
+modulepar integer sirocon6 := sizeof(siro5[1])
+modulepar integer sirocon7 := sizeof(siro6[1])
+
+
+testcase sizeof_recof() runs on PDTestComponent{
+
+	if ((sirocon1 == 0)
+	and (sirocon1 == sizeof(siro1)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((sirocon2 == 1)
+	and (sirocon2 == sizeof(siro2)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((sirocon3 == 2)
+	and (sirocon3 == sizeof(siro3)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((sirocon4 == 1)
+	and (sirocon4 == sizeof(siro4)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((sirocon5 == 2)
+	and (sirocon5 == sizeof(siro5)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((sirocon6 == 0)
+	and (sirocon6 == sizeof(siro5[1])))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((sirocon7 == 2)
+	and (sirocon7 == sizeof(siro6[1])))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+	var template sirortype1 tr_sirortype1 := {1, 2, 3}
+	if (sizeof(tr_sirortype1) == 3) {
+		setverdict(pass);
+	} else {
+		setverdict(fail);
+	}
+
+}
+
+
+/*--- SIZEOF ON SETOF  --------------------------------------------------*/
+
+type set of integer sisostype1
+type set of sisostype1 sisostype2
+
+const sisostype1 siso1 := {}
+const sisostype1 siso2 := {1}
+const sisostype1 siso3 := {1,2}
+const sisostype2 siso4 := {{}}
+const sisostype2 siso5 := {{},{}}
+const sisostype2 siso6 := {{1},{1,2}}
+
+modulepar integer sisocon1 := sizeof(siso1)
+modulepar integer sisocon2 := sizeof(siso2)
+modulepar integer sisocon3 := sizeof(siso3)
+
+modulepar integer sisocon4 := sizeof(siso4)
+modulepar integer sisocon5 := sizeof(siso5)
+modulepar integer sisocon6 := sizeof(siso5[1])
+modulepar integer sisocon7 := sizeof(siso6[1])
+
+
+testcase sizeof_setof() runs on PDTestComponent{ //In testcase definition//
+
+	if ((sisocon1 == 0)
+	and (sisocon1 == sizeof(siso1)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((sisocon2 == 1)
+	and (sisocon2 == sizeof(siso2)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((sisocon3 == 2)
+	and (sisocon3 == sizeof(siso3)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((sisocon4 == 1)
+	and (sisocon4 == sizeof(siso4)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((sisocon5 == 2)
+	and (sisocon5 == sizeof(siso5)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((sisocon6 == 0)
+	and (sisocon6 == sizeof(siso5[1])))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((sisocon7 == 2)
+	and (sisocon7 == sizeof(siso6[1])))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+  var template sisostype1 sisot1 := subset( 1, 2 , 3) length (3..10);
+  var template sisostype1 sisot2 := superset( 1, 2 , 3) length (1..3);
+  var template sisostype1 sisot3 := subset( 1, * , 3) length (1000); //In template variable definition// \
+    //In element 2 of subset//   //warning: `\*' in subset\. This template will match everything//
+  if (sizeof(sisot1)==3)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+  if (sizeof(sisot2)==3)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+  if (sizeof(sisot3)==1000)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+}
+
+/*--- SIZEOF ON ARRAY  --------------------------------------------------*/
+
+type record of integer siarrtype
+
+const siarrtype siar1[1] := {{}}
+const siarrtype siar2[1] := {{1}}
+const siarrtype siar3[3] := {{},{1},{1,2}}
+
+
+modulepar integer siarcon1 := sizeof(siar1)
+modulepar integer siarcon2 := sizeof(siar2)
+modulepar integer siarcon3 := sizeof(siar3)
+
+testcase sizeof_array() runs on PDTestComponent{
+
+	if ((siarcon1 == 1)
+	and (siarcon1 == sizeof(siar1)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((siarcon2 == 1)
+	and (siarcon2 == sizeof(siar2)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((siarcon3 == 3)
+	and (siarcon3 == sizeof(siar3)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+}
+
+control {
+	execute (sizeof_recof());
+	execute (sizeof_setof());
+	execute (sizeof_array());
+}
+
+}
diff --git a/Regression_Test_java/src/predefFunctions/size_of_SW.ttcn b/Regression_Test_java/src/predefFunctions/size_of_SW.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..14c8c8f8da9fa7fa37e1f8ce88b47a9d34dea7c0
--- /dev/null
+++ b/Regression_Test_java/src/predefFunctions/size_of_SW.ttcn
@@ -0,0 +1,216 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Beres, Szabolcs
+ *   Raduly, Csaba
+ *
+ ******************************************************************************/
+module size_of_SW {	//^In TTCN-3 module `size_of_SW'://
+
+type port myPort message { inout integer } with { extension "internal" }
+
+type component PDTestComponent {
+  port myPort portArr[5];
+}
+
+/*--- SIZEOF ON RECORDOF  --------------------------------------------------*/
+
+type record of integer sirortype1
+type record of sirortype1 sirortype2
+
+type record R {
+	integer i,
+	float f optional
+}
+
+const sirortype1 siro1 := {}
+const sirortype1 siro2 := {1}
+const sirortype1 siro3 := {1,2}
+
+const sirortype2 siro4 := {{}}
+const sirortype2 siro5 := {{},{}}
+const sirortype2 siro6 := {{1},{1,2}}
+
+const integer sirocon1 := sizeof(siro1)
+const integer sirocon2 := sizeof(siro2)
+const integer sirocon3 := sizeof(siro3)
+
+const integer sirocon4 := sizeof(siro4)
+const integer sirocon5 := sizeof(siro5)
+const integer sirocon6 := sizeof(siro5[1])
+const integer sirocon7 := sizeof(siro6[1])
+
+
+testcase sizeof_recof() runs on PDTestComponent{ //^In testcase definition//
+
+	if ((sirocon1 == 0)
+	and (sirocon1 == sizeof(siro1)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((sirocon2 == 1)
+	and (sirocon2 == sizeof(siro2)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((sirocon3 == 2)
+	and (sirocon3 == sizeof(siro3)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((sirocon4 == 1)
+	and (sirocon4 == sizeof(siro4)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((sirocon5 == 2)
+	and (sirocon5 == sizeof(siro5)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((sirocon6 == 0)
+	and (sirocon6 == sizeof(siro5[1])))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((sirocon7 == 2)
+	and (sirocon7 == sizeof(siro6[1])))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if (sizeof(R: {1, 0.0}) == 2) {
+		setverdict(pass);
+	} else { setverdict(fail);} //^In else statement// \
+                           //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	var template R tr := {1, 0.0};
+	if (sizeof(modifies tr := {2, 1.0}) == 2) {
+		setverdict(pass);
+	} else { setverdict(fail);} //^In else statement// \
+                           //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if (sizeof(modifies tr := {2, omit}) == 1) {
+		setverdict(pass);
+	} else { setverdict(fail);} //^In else statement// \
+                           //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+}
+
+
+/*--- SIZEOF ON SETOF  --------------------------------------------------*/
+
+type set of integer sisostype1
+type set of sisostype1 sisostype2
+
+const sisostype1 siso1 := {}
+const sisostype1 siso2 := {1}
+const sisostype1 siso3 := {1,2}
+const sisostype2 siso4 := {{}}
+const sisostype2 siso5 := {{},{}}
+const sisostype2 siso6 := {{1},{1,2}}
+
+const integer sisocon1 := sizeof(siso1)
+const integer sisocon2 := sizeof(siso2)
+const integer sisocon3 := sizeof(siso3)
+
+const integer sisocon4 := sizeof(siso4)
+const integer sisocon5 := sizeof(siso5)
+const integer sisocon6 := sizeof(siso5[1])
+const integer sisocon7 := sizeof(siso6[1])
+
+
+testcase sizeof_setof() runs on PDTestComponent{ //^In testcase definition//
+
+	if ((sisocon1 == 0)
+	and (sisocon1 == sizeof(siso1)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((sisocon2 == 1)
+	and (sisocon2 == sizeof(siso2)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((sisocon3 == 2)
+	and (sisocon3 == sizeof(siso3)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((sisocon4 == 1)
+	and (sisocon4 == sizeof(siso4)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((sisocon5 == 2)
+	and (sisocon5 == sizeof(siso5)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((sisocon6 == 0)
+	and (sisocon6 == sizeof(siso5[1])))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((sisocon7 == 2)
+	and (sisocon7 == sizeof(siso6[1])))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+}
+
+/*--- SIZEOF ON ARRAY  --------------------------------------------------*/
+
+type record of integer siarrtype
+
+const siarrtype siar1[1] := {{}}
+const siarrtype siar2[1] := {{1}}
+const siarrtype siar3[3] := {{},{1},{1,2}}
+
+
+const integer siarcon1 := sizeof(siar1)
+const integer siarcon2 := sizeof(siar2)
+const integer siarcon3 := sizeof(siar3)
+
+testcase sizeof_array() runs on PDTestComponent{ //^In testcase definition//
+
+	if ((siarcon1 == 1)
+	and (siarcon1 == sizeof(siar1)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((siarcon2 == 1)
+	and (siarcon2 == sizeof(siar2)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((siarcon3 == 3)
+	and (siarcon3 == sizeof(siar3)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if (sizeof(portArr) == 5)
+	     { setverdict(pass) }
+	else {setverdict(fail);} //^In else statement// \
+	                         //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	timer myTA[2];
+	if (sizeof(myTA) == 2)
+	     { setverdict(pass) }
+	else {setverdict(fail);} //^In else statement// \
+	                         //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+}
+
+control {
+	execute (sizeof_recof());
+	execute (sizeof_setof());
+	execute (sizeof_array());
+}
+
+}
diff --git a/Regression_Test_java/src/predefFunctions/str_to_OK.ttcn b/Regression_Test_java/src/predefFunctions/str_to_OK.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..18e3c3faabc2adf8c38b265d9bcd7e8d0dc7a866
--- /dev/null
+++ b/Regression_Test_java/src/predefFunctions/str_to_OK.ttcn
@@ -0,0 +1,635 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Raduly, Csaba
+ *
+ ******************************************************************************/
+module str_to_OK {	//^In TTCN-3 module `str_to_OK'://
+
+type component PDTestComponent {};
+
+
+/*--- STR2BIT --------------------------------------------------*/
+
+const bitstring s2bcon := str2bit("")
+modulepar bitstring s2bpar  := s2bcon
+modulepar bitstring s2bpar1 := str2bit("000000" & "" & "111111")
+const     bitstring s2bcon2 := str2bit(substr("000000111111",0,6) & "" & substr("000000111111",6,6))
+modulepar bitstring s2bpar2 := str2bit(substr("000000111111",0,6) & "" & substr("000000111111",6,6))
+modulepar bitstring s2bpar3 := str2bit(("000000" <@ lengthof(s2bcon2)/2) & "" & ("111111" @> lengthof(s2bcon2)/2))
+
+testcase str_to_bit() runs on PDTestComponent{
+
+
+	if ((s2bpar == str2bit(""))
+	and (s2bpar == ''B))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+
+	if ((s2bpar1 == str2bit("000000" & "" & "111111"))
+	and (s2bpar1 == '000000111111'B))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+
+	if ((s2bpar2 == str2bit(substr("000000111111",0,6) & "" & substr("000000111111",6,6)))
+	and (s2bpar2 == '000000111111'B))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+
+	if ((s2bpar3 == str2bit(("000000" <@ lengthof(s2bpar2)/2) & "" & ("111111" @> lengthof(s2bpar2)/2)))
+	and (s2bpar3 == '000000111111'B))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+
+
+	var integer j
+	var charstring cc := ""
+	var bitstring  bb := ''B
+
+	for (j:=0; j<64; j:=j+1) {
+			cc := cc & bit2str(int2bit(j,j))
+			bb := bb & int2bit(j,j)
+			if (bb == str2bit(cc))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	}
+
+}
+
+/*--- STR2FLOAT --------------------------------------------------*/
+
+//const float s2fcon := str2float("")
+const     float s2fcon := str2float("0.0")
+modulepar float s2fpar  := str2float("0.0")
+modulepar float s2fpar1 := str2float("12345678901.0")
+modulepar float s2fpar2 := str2float("000000000000" & "12345678901.0") //In module parameter definition// \
+	//In default value//	//In the operand of operation `str2float\(\)'// \
+	//warning: Leading zero digit was detected and ignored in the mantissa of the operand of operation `str2float\(\)'//
+modulepar float s2fpar3 := str2float("-12" & "345678901.0")
+modulepar float s2fpar4 := str2float("1.234E3")
+//modulepar float s2fpar5 := str2float("1.234-3")
+modulepar float s2fpar5 := str2float("1.234")
+//modulepar float s2fpar6 := str2float("1,234E3")
+modulepar float s2fpar6 := str2float("1.0")
+//modulepar float s2fpar7 := str2float("--234")
+
+// HL67862
+modulepar float s2fpar7 := str2float("1");
+modulepar float s2fpar7m:= str2float("-1");
+modulepar float s2fpar8m:= str2float("-1.");
+modulepar float s2fpar8 := str2float("1.");
+modulepar float s2fpar9 := str2float("+001"); //In module parameter definition// \
+	//In default value//	//In the operand of operation `str2float\(\)'// \
+	//warning: Leading zero digit was detected and ignored in the mantissa of the operand of operation `str2float\(\)'//
+modulepar float s2fpar10:= str2float("+001."); //In module parameter definition// \
+	//In default value//	//In the operand of operation `str2float\(\)'// \
+	//warning: Leading zero digit was detected and ignored in the mantissa of the operand of operation `str2float\(\)'//
+modulepar float s2fpar11:= str2float("-0");
+modulepar float s2fpar12:= str2float("-0.");
+modulepar float s2fpar13:= str2float("-0.0");
+
+modulepar float s2fpar14:= str2float("infinity");
+modulepar float s2fpar15:= str2float("-infinity");
+modulepar float s2fpar16:= str2float("not_a_number");
+
+
+
+// modulepar prevents constant folding
+modulepar charstring s2fmp_str := "0.0"
+modulepar charstring s2fmp1_str := "12345678901.0"
+modulepar charstring s2fmp2_str := "000000000000" & "12345678901.0"
+modulepar charstring s2fmp3_str := "-12" & "345678901.0"
+modulepar charstring s2fmp4_str := "1.234E3"
+//modulepar charstring s2fmp5_str := "1.234-3"
+modulepar charstring s2fmp5_str := "1.234"
+//modulepar charstring s2fmp6_str := "1,234E3"
+modulepar charstring s2fmp6_str := "1.0"
+//modulepar charstring s2fmp7_str := "--234"
+
+// HL67862
+modulepar charstring s2fmp7_str := "1";
+modulepar charstring s2fmp7m_str:= "-1";
+modulepar charstring s2fmp8m_str:= "-1.";
+modulepar charstring s2fmp8_str := "1.";
+modulepar charstring s2fmp9_str := "+001";
+modulepar charstring s2fmp10_str:= "+001.";
+modulepar charstring s2fmp11_str:= "-0";
+modulepar charstring s2fmp12_str:= "-0.";
+modulepar charstring s2fmp13_str:= "-0.0";
+
+modulepar charstring s2fmp14_str := "infinity";
+modulepar charstring s2fmp15_str := "-infinity";
+modulepar charstring s2fmp16_str := "not_a_number";
+
+
+//modulepar float s2fmp := str2float("")
+modulepar float s2fmp := str2float("0.0")
+modulepar float s2fmp1 := str2float("12345678901.0")
+modulepar float s2fmp2 := str2float("000000000000" & "12345678901.0") //In module parameter definition// \
+	//In default value//	//In the operand of operation `str2float\(\)'// \
+	//warning: Leading zero digit was detected and ignored in the mantissa of the operand of operation `str2float\(\)'//
+modulepar float s2fmp3 := str2float("-12" & "345678901.0")
+modulepar float s2fmp4 := str2float("1.234E3")
+//modulepar float s2fmp5 := str2float("1.234-3")
+modulepar float s2fmp5 := str2float("1.234")
+//modulepar float s2fmp6 := str2float("1,234E3")
+modulepar float s2fmp6 := str2float("1.0")
+//modulepar float s2fmp7 := str2float("--234")
+
+// HL67862
+modulepar float s2fmp7 := str2float("1");
+modulepar float s2fmp7m:= str2float("-1");
+modulepar float s2fmp8m:= str2float("-1.");
+modulepar float s2fmp8 := str2float("1.");
+modulepar float s2fmp9 := str2float("+001"); //In module parameter definition// \
+	//In default value//	//In the operand of operation `str2float\(\)'// \
+	//warning: Leading zero digit was detected and ignored in the mantissa of the operand of operation `str2float\(\)'//
+modulepar float s2fmp10:= str2float("+001."); //In module parameter definition// \
+	//In default value//	//In the operand of operation `str2float\(\)'// \
+	//warning: Leading zero digit was detected and ignored in the mantissa of the operand of operation `str2float\(\)'//
+modulepar float s2fmp11:= str2float("-0");
+modulepar float s2fmp12:= str2float("-0.");
+modulepar float s2fmp13:= str2float("-0.0");
+
+modulepar float s2fmp14:= str2float("infinity");
+modulepar float s2fmp15:= str2float("-infinity");
+modulepar float s2fmp16:= str2float("not_a_number");
+
+
+
+testcase str_to_float() runs on PDTestComponent{ //In testcase definition//
+
+// compile-time
+	if ((s2fpar == str2float("0.0"))
+	and (s2fpar == 0.0))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+
+	if ((s2fpar1 == str2float("12345678901.0"))
+	and (s2fpar1 == 12345678901.0))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+
+	if ((s2fpar2 == str2float("000000000000" & "12345678901.0")) //In if statement// \
+	//In the left operand of operation `and'// \
+	//In the right operand of operation `=='// \
+	//In the operand of operation `str2float\(\)'// \
+	//warning: Leading zero digit was detected and ignored in the mantissa of the operand of operation `str2float\(\)'//
+	and (s2fpar2 == 12345678901.0))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+
+	if ((s2fpar3 == str2float("-12" & "345678901.0"))
+	and (s2fpar3 == -12345678901.0))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+
+	if ((s2fpar4 == str2float("1.234E3"))
+	and (s2fpar4 == 1234.0))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+
+	if ((s2fpar5 == str2float("1.234"))
+	and (s2fpar5 == 1.234))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+
+	if ((s2fpar6 == str2float("1.0"))
+	and (s2fpar6 == 1.0))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+
+	if ((s2fpar7 == str2float("1"    ))
+	and (s2fpar7 == 1.0))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+
+	if ((s2fpar7m== str2float("-1"   ))
+	and (s2fpar7m==-1.0))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+
+	if ((s2fpar8m== str2float("-1."  ))
+	and (s2fpar8m==-1.0))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+
+	if ((s2fpar8 == str2float("1."   ))
+	and (s2fpar8 == 1.0))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+
+	if ((s2fpar9 == str2float("+001" )) //In if statement// \
+	//In the left operand of operation `and'// \
+	//In the right operand of operation `=='// \
+	//In the operand of operation `str2float\(\)'// \
+	//warning: Leading zero digit was detected and ignored in the mantissa of the operand of operation `str2float\(\)'//
+	and (s2fpar9 == 1.0))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+
+	if ((s2fpar10== str2float("+001.")) //In if statement// \
+	//In the left operand of operation `and'// \
+	//In the right operand of operation `=='// \
+	//In the operand of operation `str2float\(\)'// \
+	//warning: Leading zero digit was detected and ignored in the mantissa of the operand of operation `str2float\(\)'//
+	and (s2fpar10== 1.0))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+
+	if ((s2fpar11== str2float("-0"   ))
+	and (s2fpar11==-0.0))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+
+	if ((s2fpar12== str2float("-0."  ))
+	and (s2fpar12== -0.0))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+
+	if ((s2fpar13== str2float("-0.0" ))
+	and (s2fpar13== -0.0))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((s2fpar14 == str2float("infinity"))
+	and (s2fpar14 == infinity))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((s2fpar15 == str2float("-infinity"))
+	and (s2fpar15 == -infinity))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((s2fpar16 == str2float("not_a_number"))
+	and (s2fpar16 == not_a_number))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+
+// run-time
+	if ((s2fmp == str2float(s2fmp_str))
+	and (s2fmp == 0.0))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+
+	if ((s2fmp1 == str2float(s2fmp1_str))
+	and (s2fmp1 == 12345678901.0))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+
+	if ((s2fmp2 == str2float("000000000000" & "12345678901.0")) //In if statement// \
+	//In the left operand of operation `and'// \
+	//In the right operand of operation `=='// \
+	//In the operand of operation `str2float\(\)'// \
+	//warning: Leading zero digit was detected and ignored in the mantissa of the operand of operation `str2float\(\)'//
+	and (s2fmp2 == 12345678901.0))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+
+	if ((s2fmp3 == str2float("-12" & "345678901.0"))
+	and (s2fmp3 == -12345678901.0))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+
+	if ((s2fmp4 == str2float(s2fmp4_str))
+	and (s2fmp4 == 1234.0))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+
+	if ((s2fmp5 == str2float(s2fmp5_str))
+	and (s2fmp5 == 1.234))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+
+	if ((s2fmp6 == str2float(s2fmp6_str))
+	and (s2fmp6 == 1.0))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+
+	if ((s2fmp7 == str2float(s2fmp7_str))
+	and (s2fmp7 == 1.0))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+
+	if ((s2fmp7m == str2float(s2fmp7m_str))
+	and (s2fmp7m ==-1.0))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+
+	if ((s2fmp8m == str2float(s2fmp8m_str))
+	and (s2fmp8m ==-1.0))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+
+	if ((s2fmp8 == str2float(s2fmp8_str))
+	and (s2fmp8 == 1.0))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+
+	if ((s2fmp9 == str2float(s2fmp9_str))
+	and (s2fmp9 == 1.0))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+
+	if ((s2fmp10 == str2float(s2fmp10_str))
+	and (s2fmp10 == 1.0))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+
+	if ((s2fmp11 == str2float(s2fmp11_str))
+	and (s2fmp11 ==-0.0))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+
+	if ((s2fmp12 == str2float(s2fmp12_str))
+	and (s2fmp12 == -0.0))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+
+	if ((s2fmp13 == str2float(s2fmp13_str))
+	and (s2fmp13 == -0.0))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((s2fmp14 == str2float(s2fmp14_str))
+	and (s2fmp14 == infinity))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((s2fmp15 == str2float(s2fmp15_str))
+	and (s2fmp15 == -infinity))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((s2fmp16 == str2float(s2fmp16_str))
+	and (s2fmp16 == not_a_number))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+}
+
+
+/*--- STR2HEX --------------------------------------------------*/
+
+const     hexstring s2hcon := str2hex("")
+modulepar hexstring s2hpar := s2hcon
+modulepar hexstring s2hpar1 := str2hex("000000" & "" & "111111")
+const     hexstring s2hcon2 := str2hex(substr("000000111111",0,6) & "" & substr("000000111111",6,6))
+modulepar hexstring s2hpar2 := s2hcon2
+modulepar hexstring s2hpar3 := str2hex(("000000" <@ lengthof(s2hcon2)/2) & "" & ("111111" @> lengthof(s2hcon2)/2))
+
+testcase str_to_hex() runs on PDTestComponent{
+
+
+	if ((s2hpar == str2hex(""))
+	and (s2hpar == ''H))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+
+	if ((s2hpar1 == str2hex("000000" & "" & "111111"))
+	and (s2hpar1 == '000000111111'H))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+
+	if ((s2hpar2 == str2hex(substr("000000111111",0,6) & "" & substr("000000111111",6,6)))
+	and (s2hpar2 == '000000111111'H))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+
+	if ((s2hpar3 == str2hex(("000000" <@ lengthof(s2hpar2)/2) & "" & ("111111" @> lengthof(s2hpar2)/2)))
+	and (s2hpar3 == '000000111111'H))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+
+
+	var integer j
+	var charstring cc := ""
+	var hexstring  hh := ''H
+
+	for (j:=0; j<32; j:=j+1) {
+			cc := cc & hex2str(int2hex(j,j))
+			hh := hh & int2hex(j,j)
+			if (hh == str2hex(cc))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	}
+
+}
+
+/*--- STR2INT --------------------------------------------------*/
+
+const     integer s2icon := str2int("0")
+modulepar integer s2ipar := s2icon
+modulepar integer s2ipar1 := str2int("" & "1234567890")
+modulepar integer s2ipar2 := str2int("12" & "34567890")
+modulepar integer s2ipar3 := str2int("0000000000000000000000" & "1234567890") //In module parameter definition// \
+	//In default value//	//In the operand of operation `str2int\(\)'// \
+	//warning: Leading zero digit was detected and ignored in the operand of operation `str2int\(\)'//
+modulepar integer s2ipar4 := str2int("-12" & "34567890")
+//modulepar integer s2ipar5 := str2int("12ap")
+modulepar integer s2ipar5 := str2int("12")
+//modulepar integer s2ipar6 := str2int("ap")
+modulepar integer s2ipar6 := str2int("1234567891011121314151617181920")
+modulepar integer s2ipar7 := str2int("-1234567891011121314151617181920")
+modulepar integer s2ipar8 := str2int("+1");
+modulepar integer s2ipar9 := str2int("01"); //In module parameter definition// \
+	//In default value//	//In the operand of operation `str2int\(\)'// \
+	//warning: Leading zero digit was detected and ignored in the operand of operation `str2int\(\)'//
+modulepar integer s2ipar10 := str2int("+01"); //In module parameter definition// \
+	//In default value//	//In the operand of operation `str2int\(\)'// \
+	//warning: Leading zero digit was detected and ignored in the operand of operation `str2int\(\)'//
+modulepar integer s2ipar11 := str2int("-01"); //In module parameter definition// \
+	//In default value//	//In the operand of operation `str2int\(\)'// \
+	//warning: Leading zero digit was detected and ignored in the operand of operation `str2int\(\)'//
+
+testcase str_to_int() runs on PDTestComponent{ //In testcase definition//
+	var charstring vv := "1234567891011121314151617181920"
+	var charstring vv1 := "-1234567891011121314151617181920"
+	var integer ii := str2int("1234567891011121314151617181920")
+	var integer ii1 := str2int("-1234567891011121314151617181920")
+
+	if ((s2ipar == str2int("0"))
+	and (s2ipar == 0))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((s2ipar8 == str2int("+1"))
+	and (s2ipar8 == 1))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((s2ipar9 == str2int("01"))  //In if statement// \
+	//In the left operand of operation `and'// \
+	//In the right operand of operation `=='// \
+	//In the operand of operation `str2int\(\)'// \
+	//warning: Leading zero digit was detected and ignored in the operand of operation `str2int\(\)'//
+	and (s2ipar9 == 1))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((s2ipar10 == str2int("+01"))  //In if statement// \
+	//In the left operand of operation `and'// \
+	//In the right operand of operation `=='// \
+	//In the operand of operation `str2int\(\)'// \
+	//warning: Leading zero digit was detected and ignored in the operand of operation `str2int\(\)'//
+	and (s2ipar10 == 1))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((s2ipar11 == str2int("-01"))  //In if statement// \
+	//In the left operand of operation `and'// \
+	//In the right operand of operation `=='// \
+	//In the operand of operation `str2int\(\)'// \
+	//warning: Leading zero digit was detected and ignored in the operand of operation `str2int\(\)'//
+	and (s2ipar11 == -1))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((s2ipar1 == str2int("" & "1234567890"))
+	and (s2ipar1 == 1234567890))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((s2ipar2 == str2int("12" & "34567890"))
+	and (s2ipar2 == 1234567890))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((s2ipar3 == str2int("00000000000000000000000" & "1234567890"))  //In if statement// \
+	//In the left operand of operation `and'// \
+	//In the right operand of operation `=='// \
+	//In the operand of operation `str2int\(\)'// \
+	//warning: Leading zero digit was detected and ignored in the operand of operation `str2int\(\)'//
+	and (s2ipar3 == 1234567890))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((s2ipar4 == str2int("-12" & "34567890"))
+	and (s2ipar4 == -1234567890))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((s2ipar5 == str2int("12"))
+	and (s2ipar5 == 12))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	/* Compiler error:
+	if ((s2ipar6 == str2int("ap"))
+	and (s2ipar6 == 0))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	*/
+        // Compile time evaluation.  (Positive/negative.)
+	if ((str2int("1234567891011121314151617181920") == s2ipar6)
+	and (s2ipar6 == str2int("1234567891011121314151617181920")))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((str2int("-1234567891011121314151617181920") == s2ipar7)
+	and (s2ipar7 == str2int("-1234567891011121314151617181920")))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	/* compile-time
+	if ((int2str(str2int("1234567891011121314151617181920")) == "1234567891011121314151617181920")
+	and ("1234567891011121314151617181920" == int2str(str2int("1234567891011121314151617181920"))))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((int2str(str2int("-1234567891011121314151617181920")) == "-1234567891011121314151617181920")
+	and ("-1234567891011121314151617181920" == int2str(str2int("-1234567891011121314151617181920"))))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	*/
+	if ((str2int("1234567891011121314151617181920") - 10 == s2ipar6 - 10)
+	and (s2ipar6 + 10 == str2int("1234567891011121314151617181920") + 10))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((str2int("-1234567891011121314151617181920") + 10 == s2ipar7 + 10)
+	and (s2ipar7 - 10 == str2int("-1234567891011121314151617181920") - 10))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	// Run-time evaluation.  (Positive/negative.)
+	if ((str2int(vv) == ii)
+	and (ii == str2int("1234567891011121314151617181920")))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((str2int("-1234567891011121314151617181920") == ii1)
+	and (ii1 == str2int(vv1)))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((int2str(str2int(vv)) == "1234567891011121314151617181920")
+	and ("1234567891011121314151617181920" == int2str(str2int(vv))))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((int2str(str2int(vv1)) == "-1234567891011121314151617181920")
+	and ("-1234567891011121314151617181920" == int2str(str2int(vv1))))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((str2int(vv) - 10 == ii - 10)
+	and (ii + 10 == str2int("1234567891011121314151617181920") + 10))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((str2int("-1234567891011121314151617181920") + 10 == ii1 + 10)
+	and (ii1 - 10 == str2int(vv1) - 10))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	if ((str2int(vv) == -str2int(vv1))
+	and (str2int(vv1) == -str2int(vv)))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+
+	var integer j
+    	    for (j:=1; j<10; j:=j+1) {
+	    if (str2int(substr("0123456789",0,j+1)) == (str2int(substr("0123456789",0,j))*10 + j))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	}
+}
+
+
+/*--- STR2OCT --------------------------------------------------*/
+
+const     octetstring s2ocon := str2oct("")
+modulepar octetstring s2opar := s2ocon
+modulepar octetstring s2opar1 := str2oct("000000" & "" & "111111")
+const     octetstring s2ocon2 := str2oct(substr("000000111111",0,6) & "" & substr("000000111111",6,6))
+modulepar octetstring s2opar2 := s2ocon2
+modulepar octetstring s2opar3 := str2oct(("000000" <@ lengthof(s2ocon2)/2) & "" & ("111111" @> lengthof(s2ocon2)/2))
+
+testcase str_to_oct() runs on PDTestComponent{
+
+
+	if ((s2opar == str2oct(""))
+	and (s2opar == ''O))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+
+	if ((s2opar1 == str2oct("000000" & "" & "111111"))
+	and (s2opar1 == '000000111111'O))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+
+	if ((s2opar2 == str2oct(substr("000000111111",0,6) & "" & substr("000000111111",6,6)))
+	and (s2opar2 == '000000111111'O))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+
+	if ((s2opar3 == str2oct(("000000" <@ lengthof(s2opar2)/2) & "" & ("111111" @> lengthof(s2opar2)/2)))
+	and (s2opar3 == '000000111111'O))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+
+
+	var integer j
+	var charstring cc := ""
+	var octetstring  oo := ''O
+
+	for (j:=0; j<64; j:=j+1) {
+			cc := cc & oct2str(int2oct(j,j))
+			oo := oo & int2oct(j,j)
+			if (oo == str2oct(cc))
+	     {setverdict(pass);}
+	else {setverdict(fail, __LINE__);}
+	}
+
+}
+
+
+control {
+	execute (str_to_bit());
+	execute (str_to_float());
+	execute (str_to_hex());
+	execute (str_to_int());
+	execute (str_to_oct());
+}
+
+}
diff --git a/Regression_Test_java/src/predefFunctions/str_to_SW.ttcn b/Regression_Test_java/src/predefFunctions/str_to_SW.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..99864813991c6ba402dba2a13fb46cf71545a152
--- /dev/null
+++ b/Regression_Test_java/src/predefFunctions/str_to_SW.ttcn
@@ -0,0 +1,402 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Raduly, Csaba
+ *
+ ******************************************************************************/
+module str_to_SW {	//^In TTCN-3 module `str_to_SW'://
+
+type component PDTestComponent {};
+
+
+/*--- STR2BIT --------------------------------------------------*/
+
+const bitstring s2bcon := str2bit("")
+const bitstring s2bcon1 := str2bit("000000" & "" & "111111")
+const bitstring s2bcon2 := str2bit(substr("000000111111",0,6) & "" & substr("000000111111",6,6))
+const bitstring s2bcon3 := str2bit(("000000" <@ lengthof(s2bcon2)/2) & "" & ("111111" @> lengthof(s2bcon2)/2))
+
+testcase str_to_bit() runs on PDTestComponent{ //In testcase definition//
+
+
+	if ((s2bcon == str2bit(""))
+	and (s2bcon == ''B))
+	     {setverdict(pass);}
+	else {setverdict(fail,__LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((s2bcon1 == str2bit("000000" & "" & "111111"))
+	and (s2bcon1 == '000000111111'B))
+	     {setverdict(pass);}
+	else {setverdict(fail,__LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((s2bcon2 == str2bit(substr("000000111111",0,6) & "" & substr("000000111111",6,6)))
+	and (s2bcon2 == '000000111111'B))
+	     {setverdict(pass);}
+	else {setverdict(fail,__LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((s2bcon3 == str2bit(("000000" <@ lengthof(s2bcon2)/2) & "" & ("111111" @> lengthof(s2bcon2)/2)))
+	and (s2bcon3 == '000000111111'B))
+	     {setverdict(pass);}
+	else {setverdict(fail,__LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+}
+
+/*--- STR2FLOAT --------------------------------------------------*/
+
+//const float s2fcon := str2float("")
+const float s2fcon := str2float("0.0")
+const float s2fcon1 := str2float("12345678901.0")
+const float s2fcon2 := str2float("000000000000" & "12345678901.0") //^In constant definition// \
+	//^In the operand of operation `str2float\(\)'// \
+	//^warning: Leading zero digit was detected and ignored in the mantissa of the operand of operation \`str2float\(\)\'//
+const float s2fcon3 := str2float("-12" & "345678901.0")
+const float s2fcon4 := str2float("1.234E3")
+//const float s2fcon5 := str2float("1.234-3")
+const float s2fcon5 := str2float("1.234")
+//const float s2fcon6 := str2float("1,234E3")
+const float s2fcon6 := str2float("1.0")
+//const float s2fcon7 := str2float("--234")
+
+// HL67862
+const float s2fcon7 := str2float("1");
+const float s2fcon7m:= str2float("-1");
+const float s2fcon8m:= str2float("-1.");
+const float s2fcon8 := str2float("1.");
+const float s2fcon9 := str2float("+001"); //^In constant definition// \
+	//^In the operand of operation `str2float\(\)'// \
+	//^warning: Leading zero digit was detected and ignored in the mantissa of the operand of operation \`str2float\(\)\'//
+const float s2fcon10:= str2float("+001."); //^In constant definition// \
+	//^In the operand of operation `str2float\(\)'// \
+	//^warning: Leading zero digit was detected and ignored in the mantissa of the operand of operation \`str2float\(\)\'//
+const float s2fcon11:= str2float("-0");
+const float s2fcon12:= str2float("-0.");
+const float s2fcon13:= str2float("-0.0");
+
+const float s2fcon14:= str2float("infinity");
+const float s2fcon15:= str2float("-infinity");
+const float s2fcon16:= str2float("not_a_number");
+
+
+
+
+testcase str_to_float() runs on PDTestComponent{ //In testcase definition//
+	if ((s2fcon == str2float("0.0"))
+	and (s2fcon == 0.0))
+	     {setverdict(pass);}
+	else {setverdict(fail,__LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((s2fcon1 == str2float("12345678901.0"))
+	and (s2fcon1 == 12345678901.0))
+	     {setverdict(pass);}
+	else {setverdict(fail,__LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((s2fcon2 == str2float("000000000000" & "12345678901.0")) //^In if statement// \
+		//In the left operand of operation `and'// \
+		//In the right operand of operation `=='// \
+		//In the operand of operation \`str2float\(\)\'// \
+		//^warning: Leading zero digit was detected and ignored in the mantissa of the operand of operation `str2float\(\)'//
+	and (s2fcon2 == 12345678901.0))
+	     {setverdict(pass);}
+	else {setverdict(fail,__LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((s2fcon3 == str2float("-12" & "345678901.0"))
+	and (s2fcon3 == -12345678901.0))
+	     {setverdict(pass);}
+	else {setverdict(fail,__LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((s2fcon4 == str2float("1.234E3"))
+	and (s2fcon4 == 1234.0))
+	     {setverdict(pass);}
+	else {setverdict(fail,__LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((s2fcon5 == str2float("1.234"))
+	and (s2fcon5 == 1.234))
+	     {setverdict(pass);}
+	else {setverdict(fail,__LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((s2fcon6 == str2float("1.0"))
+	and (s2fcon6 == 1.0))
+	     {setverdict(pass);}
+	else {setverdict(fail,__LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((s2fcon7 == str2float("1"    )) and (s2fcon7 == 1.0))
+	     {setverdict(pass);}
+	else {setverdict(fail,__LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((s2fcon7m== str2float("-1"   )) and (s2fcon7m==-1.0))
+	     {setverdict(pass);}
+	else {setverdict(fail,__LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((s2fcon8m== str2float("-1."  )) and (s2fcon8m==-1.0))
+	     {setverdict(pass);}
+	else {setverdict(fail,__LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((s2fcon8 == str2float("1."   )) and (s2fcon8 == 1.0))
+	     {setverdict(pass);}
+	else {setverdict(fail,__LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((s2fcon9 == str2float("+001" )) and (s2fcon9 == 1.0)) //^In if statement// \
+		//In the left operand of operation `and'// \
+		//In the right operand of operation `=='// \
+		//In the operand of operation \`str2float\(\)\'// \
+		//^warning: Leading zero digit was detected and ignored in the mantissa of the operand of operation `str2float\(\)'//
+	     {setverdict(pass);}
+	else {setverdict(fail,__LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((s2fcon10== str2float("+001.")) and (s2fcon10== 1.0)) //^In if statement// \
+		//In the left operand of operation `and'// \
+		//In the right operand of operation `=='// \
+		//In the operand of operation \`str2float\(\)\'// \
+		//^warning: Leading zero digit was detected and ignored in the mantissa of the operand of operation `str2float\(\)'//
+	     {setverdict(pass);}
+	else {setverdict(fail,__LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((s2fcon11== str2float("-0"   )) and (s2fcon11== -0.0))
+	     {setverdict(pass);}
+	else {setverdict(fail,__LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((s2fcon12== str2float("-0."  )) and (s2fcon12== -0.0))
+	     {setverdict(pass);}
+	else {setverdict(fail,__LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((s2fcon13== str2float("-0.0" )) and (s2fcon13== -0.0))
+	     {setverdict(pass);}
+	else {setverdict(fail,__LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((s2fcon14== str2float("infinity")) and (s2fcon14== infinity))
+	     {setverdict(pass);}
+	else {setverdict(fail,__LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((s2fcon15== str2float("-infinity")) and (s2fcon15== -infinity))
+	     {setverdict(pass);}
+	else {setverdict(fail,__LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((s2fcon16== str2float("not_a_number" )) and (s2fcon16== not_a_number))
+	     {setverdict(pass);}
+	else {setverdict(fail,__LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+}
+
+
+/*--- STR2HEX --------------------------------------------------*/
+
+const hexstring s2hcon := str2hex("")
+const hexstring s2hcon1 := str2hex("000000" & "" & "111111")
+const hexstring s2hcon2 := str2hex(substr("000000111111",0,6) & "" & substr("000000111111",6,6))
+const hexstring s2hcon3 := str2hex(("000000" <@ lengthof(s2hcon2)/2) & "" & ("111111" @> lengthof(s2hcon2)/2))
+
+testcase str_to_hex() runs on PDTestComponent{ //In testcase definition//
+
+
+	if ((s2hcon == str2hex(""))
+	and (s2hcon == ''H))
+	     {setverdict(pass);}
+	else {setverdict(fail,__LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((s2hcon1 == str2hex("000000" & "" & "111111"))
+	and (s2hcon1 == '000000111111'H))
+	     {setverdict(pass);}
+	else {setverdict(fail,__LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((s2hcon2 == str2hex(substr("000000111111",0,6) & "" & substr("000000111111",6,6)))
+	and (s2hcon2 == '000000111111'H))
+	     {setverdict(pass);}
+	else {setverdict(fail,__LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((s2hcon3 == str2hex(("000000" <@ lengthof(s2hcon2)/2) & "" & ("111111" @> lengthof(s2hcon2)/2)))
+	and (s2hcon3 == '000000111111'H))
+	     {setverdict(pass);}
+	else {setverdict(fail,__LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+}
+
+/*--- STR2INT --------------------------------------------------*/
+
+const integer s2icon := str2int("0")
+const integer s2icon1 := str2int("" & "1234567890")
+const integer s2icon2 := str2int("12" & "34567890")
+const integer s2icon3 := str2int("0000000000000000000000" & "1234567890") //^In constant definition// \
+	//^In the operand of operation `str2int\(\)'// \
+	//^warning: Leading zero digit was detected and ignored in the operand of operation \`str2int\(\)\'//
+const integer s2icon4 := str2int("-12" & "34567890")
+//const integer s2icon5 := str2int("12ap")
+const integer s2icon5 := str2int("12")
+//const integer s2icon6 := str2int("ap")
+const integer s2icon6 := str2int("1234567891011121314151617181920")
+const integer s2icon7 := str2int("-1234567891011121314151617181920")
+const integer s2icon8 := str2int("+1");
+const integer s2icon9 := str2int("01"); //^In constant definition// \
+	//^In the operand of operation `str2int\(\)'// \
+	//^warning: Leading zero digit was detected and ignored in the operand of operation \`str2int\(\)\'//
+const integer s2icon10 := str2int("+01"); //^In constant definition// \
+	//^In the operand of operation `str2int\(\)'// \
+	//^warning: Leading zero digit was detected and ignored in the operand of operation \`str2int\(\)\'//
+const integer s2icon11 := str2int("-01"); //^In constant definition// \
+	//^In the operand of operation `str2int\(\)'// \
+	//^warning: Leading zero digit was detected and ignored in the operand of operation \`str2int\(\)\'//
+
+testcase str_to_int() runs on PDTestComponent{ //In testcase definition//
+	if ((s2icon == str2int("0"))
+	and (s2icon == 0))
+	     {setverdict(pass);}
+	else {setverdict(fail,__LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((s2icon8 == str2int("+1"))
+	and (s2icon8 == 1))
+	     {setverdict(pass);}
+	else {setverdict(fail,__LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((s2icon9 == str2int("01")) //^In if statement// \
+		//In the left operand of operation `and'// \
+		//In the right operand of operation `=='// \
+		//In the operand of operation \`str2int\(\)\'// \
+		//^warning: Leading zero digit was detected and ignored in the operand of operation `str2int\(\)'//
+	and (s2icon9 == 1))
+	     {setverdict(pass);}
+	else {setverdict(fail,__LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((s2icon10 == str2int("+01")) //^In if statement// \
+		//In the left operand of operation `and'// \
+		//In the right operand of operation `=='// \
+		//In the operand of operation \`str2int\(\)\'// \
+		//^warning: Leading zero digit was detected and ignored in the operand of operation `str2int\(\)'//
+	and (s2icon10 == 1))
+	     {setverdict(pass);}
+	else {setverdict(fail,__LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((s2icon11 == str2int("-01")) //^In if statement// \
+		//In the left operand of operation `and'// \
+		//In the right operand of operation `=='// \
+		//In the operand of operation \`str2int\(\)\'// \
+		//^warning: Leading zero digit was detected and ignored in the operand of operation `str2int\(\)'//
+	and (s2icon11 == -1))
+	     {setverdict(pass);}
+	else {setverdict(fail,__LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((s2icon1 == str2int("" & "1234567890"))
+	and (s2icon1 == 1234567890))
+	     {setverdict(pass);}
+	else {setverdict(fail,__LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((s2icon2 == str2int("12" & "34567890"))
+	and (s2icon2 == 1234567890))
+	     {setverdict(pass);}
+	else {setverdict(fail,__LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((s2icon3 == str2int("00000000000000000000000" & "1234567890")) //^In if statement// \
+		//In the left operand of operation `and'// \
+		//In the right operand of operation `=='// \
+		//In the operand of operation \`str2int\(\)\'// \
+		//^warning: Leading zero digit was detected and ignored in the operand of operation `str2int\(\)'//
+	and (s2icon3 == 1234567890))
+	     {setverdict(pass);}
+	else {setverdict(fail,__LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((s2icon4 == str2int("-12" & "34567890"))
+	and (s2icon4 == -1234567890))
+	     {setverdict(pass);}
+	else {setverdict(fail,__LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((s2icon5 == str2int("12"))
+	and (s2icon5 == 12))
+	     {setverdict(pass);}
+	else {setverdict(fail,__LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+    /* TODO move to error ttcn
+	if ((s2icon6 == str2int("ap"))
+	and (s2icon6 == 0))
+	     {setverdict(pass);}
+	else {setverdict(fail,__LINE__);}
+    */
+        // Compile time evaluation.  (Positive/negative.)
+	if ((str2int("1234567891011121314151617181920") == s2icon6)
+	and (s2icon6 == str2int("1234567891011121314151617181920")))
+	     {setverdict(pass);}
+	else {setverdict(fail,__LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((str2int("-1234567891011121314151617181920") == s2icon7)
+	and (s2icon7 == str2int("-1234567891011121314151617181920")))
+	     {setverdict(pass);}
+	else {setverdict(fail,__LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((int2str(str2int("1234567891011121314151617181920")) == "1234567891011121314151617181920")
+	and ("1234567891011121314151617181920" == int2str(str2int("1234567891011121314151617181920"))))
+	     {setverdict(pass);}
+	else {setverdict(fail,__LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((int2str(str2int("-1234567891011121314151617181920")) == "-1234567891011121314151617181920")
+	and ("-1234567891011121314151617181920" == int2str(str2int("-1234567891011121314151617181920"))))
+	     {setverdict(pass);}
+	else {setverdict(fail,__LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((str2int("1234567891011121314151617181920") - 10 == s2icon6 - 10)
+	and (s2icon6 + 10 == str2int("1234567891011121314151617181920") + 10))
+	     {setverdict(pass);}
+	else {setverdict(fail,__LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((str2int("-1234567891011121314151617181920") + 10 == s2icon7 + 10)
+	and (s2icon7 - 10 == str2int("-1234567891011121314151617181920") - 10))
+	     {setverdict(pass);}
+	else {setverdict(fail,__LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+}
+
+
+/*--- STR2OCT --------------------------------------------------*/
+
+const octetstring s2ocon := str2oct("")
+const octetstring s2ocon1 := str2oct("000000" & "" & "111111")
+const octetstring s2ocon2 := str2oct(substr("000000111111",0,6) & "" & substr("000000111111",6,6))
+const octetstring s2ocon3 := str2oct(("000000" <@ lengthof(s2ocon2)/2) & "" & ("111111" @> lengthof(s2ocon2)/2))
+
+testcase str_to_oct() runs on PDTestComponent{ //In testcase definition//
+
+
+	if ((s2ocon == str2oct(""))
+	and (s2ocon == ''O))
+	     {setverdict(pass);}
+	else {setverdict(fail,__LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((s2ocon1 == str2oct("000000" & "" & "111111"))
+	and (s2ocon1 == '000000111111'O))
+	     {setverdict(pass);}
+	else {setverdict(fail,__LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((s2ocon2 == str2oct(substr("000000111111",0,6) & "" & substr("000000111111",6,6)))
+	and (s2ocon2 == '000000111111'O))
+	     {setverdict(pass);}
+	else {setverdict(fail,__LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+	if ((s2ocon3 == str2oct(("000000" <@ lengthof(s2ocon2)/2) & "" & ("111111" @> lengthof(s2ocon2)/2)))
+	and (s2ocon3 == '000000111111'O))
+	     {setverdict(pass);}
+	else {setverdict(fail,__LINE__);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+}
+
+
+control {
+	execute (str_to_bit());
+	execute (str_to_float());
+	execute (str_to_hex());
+	execute (str_to_int());
+	execute (str_to_oct());
+}
+
+}
diff --git a/Regression_Test_java/src/predefFunctions/sub_str_OK.ttcn b/Regression_Test_java/src/predefFunctions/sub_str_OK.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..b7a73d19a170648eb7a737d85186f40682a8f9d4
--- /dev/null
+++ b/Regression_Test_java/src/predefFunctions/sub_str_OK.ttcn
@@ -0,0 +1,284 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Raduly, Csaba
+ *
+ ******************************************************************************/
+module sub_str_OK {
+
+type component PDTestComponent {};
+
+/*--- SUBSTR ON BITSTRING --------------------------------------------------*/
+
+const     bitstring subb := '1110001100'B
+modulepar bitstring subb1 := substr('1110001100'B, 0, lengthof('1110001100'B)) 		// '1110001100'B
+const     bitstring subb2c:= substr(subb, 5, 0)			// ''B
+modulepar bitstring subb2 :=subb2c
+modulepar bitstring subb3 := substr(subb, 5, 5)			// '01100'B
+modulepar bitstring subb4 := substr(subb, 0, 5)			// '11100'B
+modulepar bitstring subb5 := substr(subb, 0, lengthof(subb)/2)	// '11100'B
+modulepar bitstring subb6 := substr(subb2c, 0, lengthof(subb2c)) 	// ''B
+
+testcase substr_bitstr() runs on PDTestComponent{
+
+	if ((subb1 == subb)
+	and (subb1 == substr(subb, 0, 10)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((subb2 == ''B)
+	and (subb2 == substr(subb, 5, 0)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((subb3 == '01100'B)
+	and (subb3 == substr(subb, 5, 5)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((subb4 == '11100'B)
+	and (subb4 == substr(subb, 0, 5)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((subb5 == subb4)
+	and (subb5 == substr(subb, 0, lengthof(subb)/2)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((subb6 == ''B)
+	and (subb6 == substr(subb2, 0, lengthof(subb2))))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+}
+
+/*--- SUBSTR ON HEXSTRING --------------------------------------------------*/
+
+const     hexstring subh := '1110001100'H
+modulepar hexstring subh1 := substr('1110001100'H, 0, 10) 		// '1110001100'H
+const     hexstring subh2c:= substr(subh, 5, 0)			// ''H
+modulepar hexstring subh2 := subh2c
+modulepar hexstring subh3 := substr(subh, 5, 5)			// '01100'H
+modulepar hexstring subh4 := substr(subh, 0, 5)			// '11100'H
+modulepar hexstring subh5 := substr(subh, 0, lengthof(subh)/2)	// '11100'H
+modulepar hexstring subh6 := substr(subh2c, 0, lengthof(subh2c)) 	// ''H
+
+testcase substr_hexstr() runs on PDTestComponent{
+
+	if ((subh1 == subh)
+	and (subh1 == substr(subh, 0, 10)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((subh2 == ''H)
+	and (subh2 == substr(subh, 5, 0)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((subh3 == '01100'H)
+	and (subh3 == substr(subh, 5, 5)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((subh4 == '11100'H)
+	and (subh4 == substr(subh, 0, 5)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((subh5 == subh4)
+	and (subh5 == substr(subh, 0, lengthof(subh)/2)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((subh6 == ''H)
+	and (subh6 == substr(subh2, 0, lengthof(subh2))))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+}
+
+
+/*--- SUBSTR ON OCTETSTRING --------------------------------------------------*/
+
+const     octetstring subo := '11111100000011110000'O
+modulepar octetstring subo1 := substr('11111100000011110000'O, 0, 10) 	// '11111100000011110000'O
+const     octetstring subo2c:= substr(subo, 5, 0)			// ''O
+modulepar octetstring subo2 := subo2c
+modulepar octetstring subo3 := substr(subo, 5, 5)			// '0011110000'O
+modulepar octetstring subo4 := substr(subo, 0, 5)			// '1111110000'O
+modulepar octetstring subo5 := substr(subo, 0, lengthof(subo)/2)	// '1111110000'O
+modulepar octetstring subo6 := substr(subo2c, 0, lengthof(subo2c)) 	// ''O
+
+testcase substr_octetstr() runs on PDTestComponent{
+
+	if ((subo1 == subo)
+	and (subo1 == substr(subo, 0, 10)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((subo2 == ''O)
+	and (subo2 == substr(subo, 5, 0)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((subo3 == '0011110000'O)
+	and (subo3 == substr(subo, 5, 5)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((subo4 == '1111110000'O)
+	and (subo4 == substr(subo, 0, 5)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((subo5 == subo4)
+	and (subo5 == substr(subo, 0, lengthof(subo)/2)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((subo6 == ''O)
+	and (subo6 == substr(subo2, 0, lengthof(subo2))))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+}
+
+/*--- SUBSTR ON CHARSTRING --------------------------------------------------*/
+
+const     charstring subc := "1110001100"
+modulepar charstring subc1 := substr("1110001100", 0, 10) 		// "1110001100"
+const     charstring subc2c:= substr(subc, 5, 0)			// ""
+modulepar charstring subc2 := subc2c
+modulepar charstring subc3 := substr(subc, 5, 5)			// "01100"
+modulepar charstring subc4 := substr(subc, 0, 5)			// "11100"
+modulepar charstring subc5 := substr(subc, 0, lengthof(subc)/2)	// "11100"
+modulepar charstring subc6 := substr(subc2c, 0, lengthof(subc2c)) 	// ""
+
+testcase substr_charstr() runs on PDTestComponent{
+
+	if ((subc1 == subc)
+	and (subc1 == substr(subc, 0, 10)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((subc2 == "")
+	and (subc2 == substr(subc, 5, 0)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((subc3 == "01100")
+	and (subc3 == substr(subc, 5, 5)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((subc4 == "11100")
+	and (subc4 == substr(subc, 0, 5)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((subc5 == subc4)
+	and (subc5 == substr(subc, 0, lengthof(subc)/2)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((subc6 == "")
+	and (subc6 == substr(subc2, 0, lengthof(subc2))))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+}
+
+
+/*--- SUBSTR ON UNIVERSAL CHARSTRING --------------------------------------------------*/
+
+const     universal charstring subuc := "1111" & char(0,0,0,65) & "0000" & char(0,0,0,66)
+modulepar universal charstring subuc1 := substr("1111A0000B", 0, 10) 		// "1111A0000B"
+const     universal charstring subuc2c:= substr(subuc, 5, 0)				// ""
+modulepar universal charstring subuc2 := subuc2c
+modulepar universal charstring subuc3 := substr(subuc, 5, 5)				// "0000B"
+modulepar universal charstring subuc4 := substr(subuc, 0, 5)				// "1111A"
+modulepar universal charstring subuc5 := substr(subuc, 0, lengthof(subuc)/2)		// "1111A"
+modulepar universal charstring subuc6 := substr(subuc2c, 0, lengthof(subuc2c)) 		// ""
+
+testcase substr_ucharstr() runs on PDTestComponent{
+
+log (subuc)
+
+	if ((subuc1 == subuc)
+	and (subuc1 == substr(subuc, 0, 10)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((subuc2 == "")
+	and (subc2 == substr(subuc, 5, 0)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((subuc3 == "0000B")
+	and (subuc3 == substr(subuc, 5, 5)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((subuc4 == "1111A")
+	and (subuc4 == substr(subuc, 0, 5)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((subuc5 == subuc4)
+	and (subuc5 == substr(subuc, 0, lengthof(subuc)/2)))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+	if ((subuc6 == "")
+	and (subuc6 == substr(subuc2, 0, lengthof(subuc2))))
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+
+}
+
+/*--- SUBSTR --------------------------------------------------*/
+
+const charstring subcc := "000000000011111111110000000000111111111100000000001111111111000000000011111111110000000000111111111100000000001111111111"
+const bitstring subbb :=  str2bit(subcc)
+const hexstring subhh :=  str2hex(subcc)
+const octetstring suboo :=  str2oct(subcc & "")
+
+testcase substr_runtime() runs on PDTestComponent{
+
+	var integer j,i
+
+	for (j:=1; j<= lengthof(subcc)/2; j:=j+1) {
+		if (lengthof(subcc) rem j == 0) {
+			var charstring cc := ""
+			for (i:=0; i< lengthof(subcc)/j; i:=i+1) { cc := cc & substr(subcc,i*j,j)}
+			if (cc == subcc)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+		}
+	}
+
+	for (j:=1; j<= lengthof(subbb)/2; j:=j+1) {
+		if (lengthof(subbb) rem j == 0) {
+			var bitstring bb := ''B
+			for (i:=0; i< lengthof(subbb)/j; i:=i+1) { bb := bb & substr(subbb,i*j,j)}
+			if (bb == subbb)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+		}
+	}
+
+	for (j:=1; j<= lengthof(subhh)/2; j:=j+1) {
+		if (lengthof(subhh) rem j == 0) {
+			var hexstring hh := ''H
+			for (i:=0; i< lengthof(subhh)/j; i:=i+1) {hh := hh & substr(subhh,i*j,j)}
+			if (hh == subhh)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+		}
+	}
+
+	for (j:=2; j<= lengthof(suboo)/2; j:=j+2) {
+		if (lengthof(suboo) rem j == 0) {
+			var octetstring oo := ''O
+			for (i:=0; i< lengthof(suboo)/j; i:=i+1) { oo := oo & substr(suboo,i*j,j)}
+			if (oo == suboo)
+	     {setverdict(pass);}
+	else {setverdict(fail);}
+		}
+	}
+
+
+}
+
+control {
+	execute (substr_bitstr());
+	execute (substr_hexstr());
+	execute (substr_octetstr());
+	execute (substr_charstr());
+	execute (substr_ucharstr());
+	execute (substr_runtime());
+}
+
+}
diff --git a/Regression_Test_java/src/predefFunctions/sub_str_SW.ttcn b/Regression_Test_java/src/predefFunctions/sub_str_SW.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..d30aa761be49594e73a46bea8db00789e47b7560
--- /dev/null
+++ b/Regression_Test_java/src/predefFunctions/sub_str_SW.ttcn
@@ -0,0 +1,257 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Raduly, Csaba
+ *
+ ******************************************************************************/
+module sub_str_SW {	//^In TTCN-3 module `sub_str_SW'://
+
+type component PDTestComponent {};
+
+/*--- SUBSTR ON BITSTRING --------------------------------------------------*/
+
+const bitstring subb := '1110001100'B
+const bitstring subb1 := substr('1110001100'B, 0, lengthof('1110001100'B)) 		// '1110001100'B
+const bitstring subb2 := substr(subb, 5, 0)			// ''B
+const bitstring subb3 := substr(subb, 5, 5)			// '01100'B
+const bitstring subb4 := substr(subb, 0, 5)			// '11100'B
+const bitstring subb5 := substr(subb, 0, lengthof(subb)/2)	// '11100'B
+const bitstring subb6 := substr(subb2, 0, lengthof(subb2)) 	// ''B
+
+testcase substr_bitstr() runs on PDTestComponent{ //In testcase definition//
+
+	if ((subb1 == subb)
+	and (subb1 == substr(subb, 0, 10)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((subb2 == ''B)
+	and (subb2 == substr(subb, 5, 0)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((subb3 == '01100'B)
+	and (subb3 == substr(subb, 5, 5)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((subb4 == '11100'B)
+	and (subb4 == substr(subb, 0, 5)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((subb5 == subb4)
+	and (subb5 == substr(subb, 0, lengthof(subb)/2)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((subb6 == ''B)
+	and (subb6 == substr(subb2, 0, lengthof(subb2))))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+}
+
+/*--- SUBSTR ON HEXSTRING --------------------------------------------------*/
+
+const hexstring subh := '1110001100'H
+const hexstring subh1 := substr('1110001100'H, 0, 10) 		// '1110001100'H
+const hexstring subh2 := substr(subh, 5, 0)			// ''H
+const hexstring subh3 := substr(subh, 5, 5)			// '01100'H
+const hexstring subh4 := substr(subh, 0, 5)			// '11100'H
+const hexstring subh5 := substr(subh, 0, lengthof(subh)/2)	// '11100'H
+const hexstring subh6 := substr(subh2, 0, lengthof(subh2)) 	// ''H
+
+testcase substr_hexstr() runs on PDTestComponent{ //^In testcase definition//
+
+	if ((subh1 == subh)
+	and (subh1 == substr(subh, 0, 10)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((subh2 == ''H)
+	and (subh2 == substr(subh, 5, 0)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((subh3 == '01100'H)
+	and (subh3 == substr(subh, 5, 5)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((subh4 == '11100'H)
+	and (subh4 == substr(subh, 0, 5)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((subh5 == subh4)
+	and (subh5 == substr(subh, 0, lengthof(subh)/2)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((subh6 == ''H)
+	and (subh6 == substr(subh2, 0, lengthof(subh2))))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+}
+
+
+/*--- SUBSTR ON OCTETSTRING --------------------------------------------------*/
+
+const octetstring subo := '11111100000011110000'O
+const octetstring subo1 := substr('11111100000011110000'O, 0, 10) 	// '11111100000011110000'O
+const octetstring subo2 := substr(subo, 5, 0)			// ''O
+const octetstring subo3 := substr(subo, 5, 5)			// '0011110000'O
+const octetstring subo4 := substr(subo, 0, 5)			// '1111110000'O
+const octetstring subo5 := substr(subo, 0, lengthof(subo)/2)	// '1111110000'O
+const octetstring subo6 := substr(subo2, 0, lengthof(subo2)) 	// ''O
+
+testcase substr_octetstr() runs on PDTestComponent{ //In testcase definition//
+
+	if ((subo1 == subo)
+	and (subo1 == substr(subo, 0, 10)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((subo2 == ''O)
+	and (subo2 == substr(subo, 5, 0)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((subo3 == '0011110000'O)
+	and (subo3 == substr(subo, 5, 5)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((subo4 == '1111110000'O)
+	and (subo4 == substr(subo, 0, 5)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((subo5 == subo4)
+	and (subo5 == substr(subo, 0, lengthof(subo)/2)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((subo6 == ''O)
+	and (subo6 == substr(subo2, 0, lengthof(subo2))))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+}
+
+/*--- SUBSTR ON CHARSTRING --------------------------------------------------*/
+
+const charstring subc := "1110001100"
+const charstring subc1 := substr("1110001100", 0, 10) 		// "1110001100"
+const charstring subc2 := substr(subc, 5, 0)			// ""
+const charstring subc3 := substr(subc, 5, 5)			// "01100"
+const charstring subc4 := substr(subc, 0, 5)			// "11100"
+const charstring subc5 := substr(subc, 0, lengthof(subc)/2)	// "11100"
+const charstring subc6 := substr(subc2, 0, lengthof(subc2)) 	// ""
+
+testcase substr_charstr() runs on PDTestComponent{ //In testcase definition//
+
+	if ((subc1 == subc)
+	and (subc1 == substr(subc, 0, 10)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((subc2 == "")
+	and (subc2 == substr(subc, 5, 0)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((subc3 == "01100")
+	and (subc3 == substr(subc, 5, 5)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((subc4 == "11100")
+	and (subc4 == substr(subc, 0, 5)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((subc5 == subc4)
+	and (subc5 == substr(subc, 0, lengthof(subc)/2)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((subc6 == "")
+	and (subc6 == substr(subc2, 0, lengthof(subc2))))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+}
+
+
+/*--- SUBSTR ON UNIVERSAL CHARSTRING --------------------------------------------------*/
+
+const universal charstring subuc := "1111" & char(0,0,0,65) & "0000" & char(0,0,0,66)
+const universal charstring subuc1 := substr("1111A0000B", 0, 10) 		// "1111A0000B"
+const universal charstring subuc2 := substr(subuc, 5, 0)				// ""
+const universal charstring subuc3 := substr(subuc, 5, 5)				// "0000B"
+const universal charstring subuc4 := substr(subuc, 0, 5)				// "1111A"
+const universal charstring subuc5 := substr(subuc, 0, lengthof(subuc)/2)		// "1111A"
+const universal charstring subuc6 := substr(subuc2, 0, lengthof(subuc2)) 		// ""
+
+testcase substr_ucharstr() runs on PDTestComponent{ //In testcase definition//
+
+log (subuc)
+
+	if ((subuc1 == subuc)
+	and (subuc1 == substr(subuc, 0, 10)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((subuc2 == "")
+	and (subc2 == substr(subuc, 5, 0)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((subuc3 == "0000B")
+	and (subuc3 == substr(subuc, 5, 5)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((subuc4 == "1111A")
+	and (subuc4 == substr(subuc, 0, 5)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((subuc5 == subuc4)
+	and (subuc5 == substr(subuc, 0, lengthof(subuc)/2)))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+	if ((subuc6 == "")
+	and (subuc6 == substr(subuc2, 0, lengthof(subuc2))))
+	     {setverdict(pass);}
+	else {setverdict(fail);} //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+
+}
+
+/*--- SUBSTR --------------------------------------------------*/
+
+
+control {
+	execute (substr_bitstr());
+	execute (substr_hexstr());
+	execute (substr_octetstr());
+	execute (substr_charstr());
+	execute (substr_ucharstr());
+}
+
+}
diff --git a/Regression_Test_java/src/predefFunctions/tcname_OK.ttcn b/Regression_Test_java/src/predefFunctions/tcname_OK.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..360bcad3f0662d9c6d96eb7accebc5957fe3504c
--- /dev/null
+++ b/Regression_Test_java/src/predefFunctions/tcname_OK.ttcn
@@ -0,0 +1,58 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Raduly, Csaba
+ *
+ ******************************************************************************/
+module tcname_OK {
+
+type component PDTestComponent {};
+
+/* Tests for testcasename() function.  */
+
+function testcasename_in_func() return charstring {
+  return testcasename()
+}
+
+function testcasename_in_func_runson() runs on PDTestComponent return charstring {
+  return testcasename()
+}
+
+modulepar charstring expected_tc_name := "testcasename_in_tc";
+
+testcase testcasename_in_tc() runs on PDTestComponent {
+  if ("testcasename_in_tc" == testcasename_in_func())
+  	   { setverdict(pass) }
+  else { setverdict(fail) }
+  // For simple cases these should be the same.
+  if (%testcaseId == testcasename_in_func())
+       { setverdict(pass) }
+  else { setverdict(fail) }
+  if (%testcaseId == testcasename_in_func_runson())
+       { setverdict(pass) }
+  else { setverdict(fail) }
+  if (testcasename() == expected_tc_name)
+       { setverdict(pass) }
+  else { setverdict(fail) }
+}
+
+// Empty string from the control part.
+testcase testcasename_from_control(in charstring p) runs on PDTestComponent {
+  if (p == "") { setverdict(pass) } else { setverdict(fail) }
+}
+
+control {
+  execute(testcasename_in_tc());
+  execute(testcasename_from_control(testcasename()));
+  // Call again outside testcase, but not directly from the control part.
+  execute(testcasename_from_control(testcasename_in_func()));
+}
+
+
+}
diff --git a/Regression_Test_java/src/predefFunctions/tcname_SW.ttcn b/Regression_Test_java/src/predefFunctions/tcname_SW.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..571ac0a05f3f1c93c932a73d142830eb68bbb919
--- /dev/null
+++ b/Regression_Test_java/src/predefFunctions/tcname_SW.ttcn
@@ -0,0 +1,57 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Raduly, Csaba
+ *
+ ******************************************************************************/
+module tcname_SW {	//^In TTCN-3 module `tcname_SW'://
+
+type component PDTestComponent {};
+
+/* Tests for testcasename() function.  */
+
+function testcasename_in_func() return charstring {
+  return testcasename()
+}
+
+function testcasename_in_func_runson() runs on PDTestComponent return charstring {
+  return testcasename()
+}
+
+testcase testcasename_in_tc() runs on PDTestComponent { //In testcase definition//
+  if ("testcasename_in_tc" == testcasename_in_func())
+  	   { setverdict(pass) }
+  else { setverdict(fail) }
+  // For simple cases these should be the same.
+  if (%testcaseId == testcasename_in_func())
+       { setverdict(pass) }
+  else { setverdict(fail) }
+  if (%testcaseId == testcasename_in_func_runson())
+       { setverdict(pass) }
+  else { setverdict(fail) }
+  if (testcasename() == "testcasename_in_tc")
+       { setverdict(pass) }
+  else { setverdict(fail) } //^In else statement// \
+                             //^warning\: Control never reaches this code because of previous effective condition\(s\)//
+}
+
+// Empty string from the control part.
+testcase testcasename_from_control(in charstring p) runs on PDTestComponent {
+  if (p == "") { setverdict(pass) } else { setverdict(fail) }
+}
+
+control {
+  execute(testcasename_in_tc());
+  execute(testcasename_from_control(testcasename()));
+  // Call again outside testcase, but not directly from the control part.
+  execute(testcasename_from_control(testcasename_in_func()));
+}
+
+
+}
diff --git a/Regression_Test_java/src/tryCatch_Functions.ttcn b/Regression_Test_java/src/tryCatch_Functions.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..320fea852d303a0dc2bbac96518752b01e9a152f
--- /dev/null
+++ b/Regression_Test_java/src/tryCatch_Functions.ttcn
@@ -0,0 +1,19 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *
+ ******************************************************************************/
+module tryCatch_Functions{
+
+function f_matchAndVerdict(in charstring pl_msg, in template charstring pl_template) {
+    if(match(pl_msg, pl_template))
+    { setverdict(pass) } else {setverdict(fail)};
+}
+
+}
diff --git a/Regression_Test_java/src2/org/eclipse/titan/Regression_Test_java/user_provided/package-info.java b/Regression_Test_java/src2/org/eclipse/titan/Regression_Test_java/user_provided/package-info.java
new file mode 100644
index 0000000000000000000000000000000000000000..8afef84b96ea8bfd45d4537ec1f0490c950ca0ae
--- /dev/null
+++ b/Regression_Test_java/src2/org/eclipse/titan/Regression_Test_java/user_provided/package-info.java
@@ -0,0 +1,14 @@
+// This Java file was generated by the TITAN Designer eclipse plug-in
+// of the TTCN-3 Test Executor version CRL 113 200/6 R5B
+// for (ekrisza@HU-00000227)
+
+// Copyright (c) 2000-2018 Ericsson Telecom AB
+
+/**
+ * <code>org.eclipse.titan.Regression_Test_java.user_provided</code> package contains classes
+ * that were written by the user, and contain the implementations of test ports and external functions.
+ *<p>
+ * Do not edit this file unless you know what you are doing!
+ */
+package org.eclipse.titan.Regression_Test_java.user_provided;
+