From df39b4c844dca6c8c85d3c95b187a51f5dadbe0b Mon Sep 17 00:00:00 2001 From: BenceJanosSzabo <bence.janos.szabo@ericsson.com> Date: Thu, 26 Jan 2017 10:53:31 +0100 Subject: [PATCH] Implemented that 'of' types or array can be indexed with a record of or array of integer (Bug 511078) Change-Id: Ia2f37216949b04a333ae7c2e87ce29c3f4a9fdbc Signed-off-by: BenceJanosSzabo <bence.janos.szabo@ericsson.com> --- compiler2/Type.cc | 53 +- compiler2/ttcn3/AST_ttcn3.cc | 26 +- .../Semantic_Analyser/Makefile.semantic | 2 +- .../Semantic_Analyser/recof_index/Makefile | 12 + .../recof_index/recof_index_SE.ttcn | 50 + function_test/Semantic_Analyser/recof_index/t | 9 + regression_test/Makefile | 2 +- .../IndexWithRecofArray.ttcn | 1688 +++++++++++++++++ regression_test/indexWithRecofArray/Makefile | 56 + 9 files changed, 1892 insertions(+), 6 deletions(-) create mode 100644 function_test/Semantic_Analyser/recof_index/Makefile create mode 100644 function_test/Semantic_Analyser/recof_index/recof_index_SE.ttcn create mode 100755 function_test/Semantic_Analyser/recof_index/t create mode 100644 regression_test/indexWithRecofArray/IndexWithRecofArray.ttcn create mode 100644 regression_test/indexWithRecofArray/Makefile diff --git a/compiler2/Type.cc b/compiler2/Type.cc index 94757c41f..b2c4f7d5d 100644 --- a/compiler2/Type.cc +++ b/compiler2/Type.cc @@ -1703,7 +1703,58 @@ namespace Common { } // check the index value Value *index_value = ref->get_val(); - if (t->typetype == T_ARRAY) { + index_value->set_lowerid_to_ref(); + + // pt is the type with the indexing is made, while t is the type on the + // indexing is applied. + Type* pt = index_value->get_expr_governor_last(); + if (pt != NULL && + // The indexer type is an array or record of + (pt->get_typetype() == T_ARRAY || pt->get_typetype() == T_SEQOF) && + // The indexed type is a record of or set of or array + (t->get_typetype() == T_SEQOF || t->get_typetype() == T_SETOF || t->get_typetype() == T_ARRAY)) { + + // The indexer type must be of type integer + if (pt->get_ofType()->get_type_refd_last()->get_typetype() != T_INT) { + ref->error("Only fixed length array or record of integer types are allowed for short-hand notation for nested indexes."); + return 0; + } + int len = 0; + // Get the length of the array or record of + if (pt->get_typetype() == T_ARRAY) { + len = (int)pt->get_dimension()->get_size(); + } else if (pt->get_typetype() == T_SEQOF) { + SubType* sub = pt->get_sub_type(); + if (sub == NULL) { + ref->error("The type `%s' must have single size length restriction when used as a short-hand notation for nested indexes.", + pt->get_typename().c_str()); + return 0; + } + len = pt->get_sub_type()->get_length_restriction(); + if (len == -1) { + ref->error("The type `%s' must have single size length restriction when used as a short-hand notation for nested indexes.", + pt->get_typename().c_str()); + return 0; + } + } + embedded_type = embedded_type->get_type_refd_last(); + int j = 0; + // Get the len - 1'th inner type + while (j < len - 1) { + switch (embedded_type->get_typetype()) { + case T_SEQOF: + case T_SETOF: + case T_ARRAY: + embedded_type = embedded_type->get_ofType()->get_type_refd_last(); + break; + default: + ref->error("The type `%s' contains too many indexes (%i) in the short-hand notation for nested indexes.", + pt->get_typename().c_str(), len); + return 0; + } + j++; + } + } else if (t->typetype == T_ARRAY) { // checking of array index is performed by the array dimension t->u.array.dimension->chk_index(index_value, expected_index); } else { diff --git a/compiler2/ttcn3/AST_ttcn3.cc b/compiler2/ttcn3/AST_ttcn3.cc index fdd64d152..1a8110636 100644 --- a/compiler2/ttcn3/AST_ttcn3.cc +++ b/compiler2/ttcn3/AST_ttcn3.cc @@ -369,9 +369,29 @@ namespace Ttcn { } } else { // Generate code for array reference. - expr->expr = mputc(expr->expr, '['); - ref->get_val()->generate_code_expr(expr); - expr->expr = mputc(expr->expr, ']'); + Value* v = ref->get_val(); + Type * pt = v->get_expr_governor_last(); + // If the value is indexed with an array or record of then generate + // the indexes of the array or record of into the code, one by one. + if (pt->get_typetype() == Type::T_ARRAY || pt->get_typetype() == Type::T_SEQOF) { + int len = 0, start = 0; + if (pt->get_typetype() == Type::T_ARRAY) { + len = (int)pt->get_dimension()->get_size(); + start = pt->get_dimension()->get_offset(); + } else if (pt->get_typetype() == Type::T_SEQOF) { + len = pt->get_sub_type()->get_length_restriction(); + } + // Generate the indexes as [x][y]... + for (int j = start; j < start + len; j++) { + expr->expr = mputc(expr->expr, '['); + v->generate_code_expr(expr); + expr->expr = mputprintf(expr->expr, "[%i]]", j); + } + } else { + expr->expr = mputc(expr->expr, '['); + v->generate_code_expr(expr); + expr->expr = mputc(expr->expr, ']'); + } if (type) { // Follow the embedded type. switch (type->get_typetype()) { diff --git a/function_test/Semantic_Analyser/Makefile.semantic b/function_test/Semantic_Analyser/Makefile.semantic index da579923d..b1b87e0f0 100644 --- a/function_test/Semantic_Analyser/Makefile.semantic +++ b/function_test/Semantic_Analyser/Makefile.semantic @@ -12,7 +12,7 @@ # Szabo, Bence Janos # ############################################################################## -SADIRS := ver xer encode param template any_from pattern_ref float +SADIRS := ver xer encode param template any_from pattern_ref float recof_index ifeq ($(RT2), yes) SADIRS += deprecated endif diff --git a/function_test/Semantic_Analyser/recof_index/Makefile b/function_test/Semantic_Analyser/recof_index/Makefile new file mode 100644 index 000000000..895b6a5b9 --- /dev/null +++ b/function_test/Semantic_Analyser/recof_index/Makefile @@ -0,0 +1,12 @@ +############################################################################## +# Copyright (c) 2000-2016 Ericsson Telecom AB +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v1.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-v10.html +# +# Contributors: +# Bence Janos Szabo +# +############################################################################## +include ../common.mk diff --git a/function_test/Semantic_Analyser/recof_index/recof_index_SE.ttcn b/function_test/Semantic_Analyser/recof_index/recof_index_SE.ttcn new file mode 100644 index 000000000..42fc6cfce --- /dev/null +++ b/function_test/Semantic_Analyser/recof_index/recof_index_SE.ttcn @@ -0,0 +1,50 @@ +/****************************************************************************** + * Copyright (c) 2000-2016 Ericsson Telecom AB + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Szabo, Bence Janos + * + ******************************************************************************/ +module recof_index_SE { //^In TTCN-3 module// + + type record of record of integer RoRoI; + type record length(1..2) of integer RoI1; + type record length(3) of integer RoI2; + type record of integer RoI; + + type record length(1) of float RoF1; + + function f() { //^In function definition `f'// + var RoRoI v_rec := {{0, 1}, {2, 3}}; + var RoI1 v_index := { 1 } + if (v_rec[v_index] == {2, 3}) { //^In if statement:// //error: The type \`@recof_index_SE\.RoI1\' must have single size length restriction when used as a short-hand notation for nested indexes\.// + } + + var RoI2 v_index2 := { 1, 2, 3 } + if (v_rec[v_index2] == {2, 3}) { //^In if statement:// //error: The type \`@recof_index_SE.RoI2\' contains too many indexes \(3\) in the short-hand notation for nested indexes\.// + } + + var integer v_arr[3] := { 1, 2, 3 } + if (v_rec[v_arr] == {2, 3}) { //^In if statement:// //error: The type \`integer\[3\]\' contains too many indexes \(3\) in the short-hand notation for nested indexes\.// + } + + var RoF1 v_index3 := { 1.0 } + if (v_rec[v_index3] == {2, 3}) { //^In if statement:// //error\: Only fixed length array or record of integer types are allowed for short\-hand notation for nested indexes\.// + } + + var integer v_arr2[0] := { } //In variable definition \`v_arr2\'\:// //error\: A positive integer value was expected as array size instead of \`0\'// + if (v_rec[v_arr2] == {2, 3}) { + } + + var RoI v_index4 := { 1, 1 } + if (v_rec[v_index4] == {2, 3}) { //^In if statement:// //error\: The type \`\@recof_index_SE\.RoI\' must have single size length restriction when used as a short\-hand notation for nested indexes\.// + } + + } + + +} diff --git a/function_test/Semantic_Analyser/recof_index/t b/function_test/Semantic_Analyser/recof_index/t new file mode 100755 index 000000000..3a4b58ec1 --- /dev/null +++ b/function_test/Semantic_Analyser/recof_index/t @@ -0,0 +1,9 @@ +#!/usr/bin/perl +# note this is called through "perl -w" +use strict; + +my $self = $0; +$self =~ s!/t!!; + +exec('make check --no-print-directory -s -C ' . $self); + diff --git a/regression_test/Makefile b/regression_test/Makefile index 274622c4f..812f0f185 100644 --- a/regression_test/Makefile +++ b/regression_test/Makefile @@ -47,7 +47,7 @@ macros visibility hexstrOper ucharstrOper objidOper CRTR00015758 slider \ XML ipv6 implicitOmit testcase_defparam transparent HQ16404 cfgFile \ all_from lazyEval tryCatch text2ttcn json junitlogger ttcn2json profiler templateOmit \ customEncoding makefilegen uidChars checkstate hostid templateIstemplatekind \ -selectUnion templateExclusiveRange any_from templatePatternRef +selectUnion templateExclusiveRange any_from templatePatternRef indexWithRecofArray ifdef DYN DIRS += loggerplugin diff --git a/regression_test/indexWithRecofArray/IndexWithRecofArray.ttcn b/regression_test/indexWithRecofArray/IndexWithRecofArray.ttcn new file mode 100644 index 000000000..c759c8b8c --- /dev/null +++ b/regression_test/indexWithRecofArray/IndexWithRecofArray.ttcn @@ -0,0 +1,1688 @@ +/****************************************************************************** + * Copyright (c) 2000-2016 Ericsson Telecom AB + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Szabo, Bence Janos + * + ******************************************************************************/ + +module IndexWithRecofArray { + + type component GeneralComp { + } + + + type record of record of integer RoRoI; + type record of record of RoRoI RoIRoIRoIRoI; + type set of set of integer SoISoI; + type set of set of SoISoI SoISoISoISoI + type record length(1) of integer RoI1; + type record length(2) of integer RoI2; + + +//###########################################################################// +// Record of indexed with array or record of + + testcase tc_recordof_indexed_with_array() runs on GeneralComp { + + var RoRoI v_rec := {{0, 1}, {2, 3}}; + var integer v_index[1] := { 1 } + +//////////////////////////////////////////////////// + + if (v_rec[v_index] == {2, 3}) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_rec[v_index] := {5, 6}; + if (v_rec[v_index] == {5, 6}) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_rec[v_index] := {2, 3}; + +//////////////////////////////////////////////////// + + + if (v_rec[v_index][0] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_rec[v_index][0] := 99; + if (v_rec[v_index][0] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_rec[v_index][0] := 2; + +//////////////////////////////////////////////////// + + if (v_rec[0][v_index] == 1) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_rec[0][v_index] := 99; + if (v_rec[0][v_index] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_rec[0][v_index] := 1; + + +//////////////////////////////////////////////////// + + + if (v_rec[v_index][v_index] == 3) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_rec[v_index][v_index] := 99; + if (v_rec[v_index][v_index] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_rec[v_index][v_index] := 3; + +//////////////////////////////////////////////////// + + var integer v_index2[2] := {1, 0}; + if (v_rec[v_index2] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_rec[v_index2] := 99; + if (v_rec[v_index2] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_rec[v_index2] := 2; + } + + testcase tc_recordof_indexed_with_recordof() runs on GeneralComp { + + var RoRoI v_rec := {{0, 1}, {2, 3}}; + var RoI1 v_index := { 1 } + //////////////////////////////////////////////////// + + if (v_rec[v_index] == {2, 3}) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_rec[v_index] := {5, 6}; + if (v_rec[v_index] == {5, 6}) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_rec[v_index] := {2, 3}; + +//////////////////////////////////////////////////// + + + if (v_rec[v_index][0] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_rec[v_index][0] := 99; + if (v_rec[v_index][0] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_rec[v_index][0] := 2; + +//////////////////////////////////////////////////// + + if (v_rec[0][v_index] == 1) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_rec[0][v_index] := 99; + if (v_rec[0][v_index] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_rec[0][v_index] := 1; + + +//////////////////////////////////////////////////// + + + if (v_rec[v_index][v_index] == 3) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_rec[v_index][v_index] := 99; + if (v_rec[v_index][v_index] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_rec[v_index][v_index] := 3; + +//////////////////////////////////////////////////// + + var integer v_index2[2] := {1, 0}; + if (v_rec[v_index2] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_rec[v_index2] := 99; + if (v_rec[v_index2] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_rec[v_index2] := 2; + } + + testcase tc_recordof_indexed_with_recordof_and_array() runs on GeneralComp { + var RoIRoIRoIRoI v_rec := { + { + { + {0, 1}, + {2, 3} + }, + { + {4, 5}, + {6, 7} + } + }, + { + { + {8, 9}, + {10, 11} + }, + { + {12, 13}, + {14, 15} + } + } + } + var integer v_index[1] := {0}; + var integer v_index2[2] := {0, 1}; + var RoI1 v_roi1 := {0}; + var RoI2 v_roi2 := {0, 1}; + +//////////////////////////////////////////////////// + + // [0][0][1][0] + if (v_rec[v_index][v_index2][v_index] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_rec[v_index][v_index2][v_index] := 99; + if (v_rec[v_index][v_index2][v_index] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_rec[v_index][v_index2][v_index] := 2; + +//////////////////////////////////////////////////// + + // [0][0][1][0] + if (v_rec[v_index][v_index2][0] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_rec[v_index][v_index2][0] := 99; + if (v_rec[v_index][v_index2][0] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_rec[v_index][v_index2][0] := 2; + +//////////////////////////////////////////////////// + + // [0][0][1][0] + if (v_rec[v_index][0][1][v_index] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_rec[v_index][0][1][v_index] := 99; + if (v_rec[v_index][0][1][v_index] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_rec[v_index][0][1][v_index] := 2; + +//////////////////////////////////////////////////// + + // [0][0][1][0] + if (v_rec[v_roi1][v_index2][v_index] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_rec[v_roi1][v_index2][v_index] := 99; + if (v_rec[v_roi1][v_index2][v_index] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_rec[v_roi1][v_index2][v_index] := 2; + +//////////////////////////////////////////////////// + + // [0][0][1][0] + if (v_rec[v_roi1][v_roi2][v_index] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_rec[v_roi1][v_roi2][v_index] := 99; + if (v_rec[v_roi1][v_roi2][v_index] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_rec[v_roi1][v_roi2][v_index] := 2; + +//////////////////////////////////////////////////// + + // [0][0][1][0] + if (v_rec[v_roi1][v_roi2][v_roi1] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_rec[v_roi1][v_roi2][v_roi1] := 99; + if (v_rec[v_roi1][v_roi2][v_roi1] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_rec[v_roi1][v_roi2][v_roi1] := 2; + + +//////////////////////////////////////////////////// + + // [0][0][1][0] + if (v_rec[v_roi1][v_roi2][0] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_rec[v_roi1][v_roi2][0] := 99; + if (v_rec[v_roi1][v_roi2][0] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_rec[v_roi1][v_roi2][0] := 2; + +//////////////////////////////////////////////////// + + // [0][0][1][0] + if (v_rec[0][v_roi2][0] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_rec[0][v_roi2][0] := 99; + if (v_rec[0][v_roi2][0] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_rec[0][v_roi2][0] := 2; + +//////////////////////////////////////////////////// + + // [0][0][1][0] + if (v_rec[v_roi1][0][1][v_roi1] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_rec[v_roi1][0][1][v_roi1] := 99; + if (v_rec[v_roi1][0][1][v_roi1] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_rec[v_roi1][0][1][v_roi1] := 2; + +//////////////////////////////////////////////////// + + // [0][1][1][0] + if (v_rec[v_roi1][1][1][v_roi1] == 6) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_rec[v_roi1][1][1][v_roi1] := 99; + if (v_rec[v_roi1][1][1][v_roi1] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_rec[v_roi1][1][1][v_roi1] := 6; + +//////////////////////////////////////////////////// + + // [0][1][1][0] + if (v_rec[v_roi1][v_roi2[1]][1][v_roi1] == 6) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_rec[v_roi1][v_roi2[1]][1][v_roi1] := 99; + if (v_rec[v_roi1][v_roi2[1]][1][v_roi1] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_rec[v_roi1][v_roi2[1]][1][v_roi1] := 6; + +//////////////////////////////////////////////////// + + // [0][1][1][0] + if (v_rec[v_roi1][v_roi2[1]][v_index2[1]][v_roi1] == 6) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_rec[v_roi1][v_roi2[1]][v_index2[1]][v_roi1] := 99; + if (v_rec[v_roi1][v_roi2[1]][v_index2[1]][v_roi1] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_rec[v_roi1][v_roi2[1]][v_index2[1]][v_roi1] := 6; + +//////////////////////////////////////////////////// + + // [1][0][1][1] + if (v_rec[v_roi2[1]][v_index2][v_index2[1]] == 11) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_rec[v_roi2[1]][v_index2][v_index2[1]] := 99; + if (v_rec[v_roi2[1]][v_index2][v_index2[1]] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_rec[v_roi2[1]][v_index2][v_index2[1]] := 11; + } + + +//###########################################################################// +// Set of indexed with array or record of + + + testcase tc_setof_indexed_with_array() runs on GeneralComp { + + var SoISoI v_set := {{0, 1}, {2, 3}}; + var integer v_index[1] := { 1 } +//////////////////////////////////////////////////// + + if (v_set[v_index] == {2, 3}) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_set[v_index] := {5, 6}; + if (v_set[v_index] == {5, 6}) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_set[v_index] := {2, 3}; + +//////////////////////////////////////////////////// + + + if (v_set[v_index][0] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_set[v_index][0] := 99; + if (v_set[v_index][0] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_set[v_index][0] := 2; + +//////////////////////////////////////////////////// + + if (v_set[0][v_index] == 1) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_set[0][v_index] := 99; + if (v_set[0][v_index] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_set[0][v_index] := 1; + + +//////////////////////////////////////////////////// + + + if (v_set[v_index][v_index] == 3) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_set[v_index][v_index] := 99; + if (v_set[v_index][v_index] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_set[v_index][v_index] := 3; + +//////////////////////////////////////////////////// + + var integer v_index2[2] := {1, 0}; + if (v_set[v_index2] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_set[v_index2] := 99; + if (v_set[v_index2] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_set[v_index2] := 2; + } + + testcase tc_setof_indexed_with_recordof() runs on GeneralComp { + + var SoISoI v_set := {{0, 1}, {2, 3}}; + var RoI1 v_index := { 1 } +//////////////////////////////////////////////////// + + if (v_set[v_index] == {2, 3}) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_set[v_index] := {5, 6}; + if (v_set[v_index] == {5, 6}) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_set[v_index] := {2, 3}; + +//////////////////////////////////////////////////// + + + if (v_set[v_index][0] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_set[v_index][0] := 99; + if (v_set[v_index][0] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_set[v_index][0] := 2; + +//////////////////////////////////////////////////// + + if (v_set[0][v_index] == 1) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_set[0][v_index] := 99; + if (v_set[0][v_index] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_set[0][v_index] := 1; + + +//////////////////////////////////////////////////// + + + if (v_set[v_index][v_index] == 3) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_set[v_index][v_index] := 99; + if (v_set[v_index][v_index] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_set[v_index][v_index] := 3; + +//////////////////////////////////////////////////// + + var integer v_index2[2] := {1, 0}; + if (v_set[v_index2] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_set[v_index2] := 99; + if (v_set[v_index2] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_set[v_index2] := 2; + } + + testcase tc_setof_indexed_with_recordof_and_array() runs on GeneralComp { + var SoISoISoISoI v_set := { + { + { + {0, 1}, + {2, 3} + }, + { + {4, 5}, + {6, 7} + } + }, + { + { + {8, 9}, + {10, 11} + }, + { + {12, 13}, + {14, 15} + } + } + } + var integer v_index[1] := {0}; + var integer v_index2[2] := {0, 1}; + var RoI1 v_roi1 := {0}; + var RoI2 v_roi2 := {0, 1}; + + +//////////////////////////////////////////////////// + + // [0][0][1][0] + if (v_set[v_index][v_index2][v_index] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_set[v_index][v_index2][v_index] := 99; + if (v_set[v_index][v_index2][v_index] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_set[v_index][v_index2][v_index] := 2; + +//////////////////////////////////////////////////// + + // [0][0][1][0] + if (v_set[v_index][v_index2][0] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_set[v_index][v_index2][0] := 99; + if (v_set[v_index][v_index2][0] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_set[v_index][v_index2][0] := 2; + +//////////////////////////////////////////////////// + + // [0][0][1][0] + if (v_set[v_index][0][1][v_index] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_set[v_index][0][1][v_index] := 99; + if (v_set[v_index][0][1][v_index] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_set[v_index][0][1][v_index] := 2; + +//////////////////////////////////////////////////// + + // [0][0][1][0] + if (v_set[v_roi1][v_index2][v_index] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_set[v_roi1][v_index2][v_index] := 99; + if (v_set[v_roi1][v_index2][v_index] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_set[v_roi1][v_index2][v_index] := 2; + +//////////////////////////////////////////////////// + + // [0][0][1][0] + if (v_set[v_roi1][v_roi2][v_index] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_set[v_roi1][v_roi2][v_index] := 99; + if (v_set[v_roi1][v_roi2][v_index] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_set[v_roi1][v_roi2][v_index] := 2; + +//////////////////////////////////////////////////// + + // [0][0][1][0] + if (v_set[v_roi1][v_roi2][v_roi1] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_set[v_roi1][v_roi2][v_roi1] := 99; + if (v_set[v_roi1][v_roi2][v_roi1] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_set[v_roi1][v_roi2][v_roi1] := 2; + + +//////////////////////////////////////////////////// + + // [0][0][1][0] + if (v_set[v_roi1][v_roi2][0] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_set[v_roi1][v_roi2][0] := 99; + if (v_set[v_roi1][v_roi2][0] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_set[v_roi1][v_roi2][0] := 2; + +//////////////////////////////////////////////////// + + // [0][0][1][0] + if (v_set[0][v_roi2][0] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_set[0][v_roi2][0] := 99; + if (v_set[0][v_roi2][0] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_set[0][v_roi2][0] := 2; + +//////////////////////////////////////////////////// + + // [0][0][1][0] + if (v_set[v_roi1][0][1][v_roi1] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_set[v_roi1][0][1][v_roi1] := 99; + if (v_set[v_roi1][0][1][v_roi1] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_set[v_roi1][0][1][v_roi1] := 2; + +//////////////////////////////////////////////////// + + // [0][1][1][0] + if (v_set[v_roi1][1][1][v_roi1] == 6) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_set[v_roi1][1][1][v_roi1] := 99; + if (v_set[v_roi1][1][1][v_roi1] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_set[v_roi1][1][1][v_roi1] := 6; + +//////////////////////////////////////////////////// + + // [0][1][1][0] + if (v_set[v_roi1][v_roi2[1]][1][v_roi1] == 6) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_set[v_roi1][v_roi2[1]][1][v_roi1] := 99; + if (v_set[v_roi1][v_roi2[1]][1][v_roi1] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_set[v_roi1][v_roi2[1]][1][v_roi1] := 6; + +//////////////////////////////////////////////////// + + // [0][1][1][0] + if (v_set[v_roi1][v_roi2[1]][v_index2[1]][v_roi1] == 6) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_set[v_roi1][v_roi2[1]][v_index2[1]][v_roi1] := 99; + if (v_set[v_roi1][v_roi2[1]][v_index2[1]][v_roi1] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_set[v_roi1][v_roi2[1]][v_index2[1]][v_roi1] := 6; + +//////////////////////////////////////////////////// + + // [1][0][1][1] + if (v_set[v_roi2[1]][v_index2][v_index2[1]] == 11) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_set[v_roi2[1]][v_index2][v_index2[1]] := 99; + if (v_set[v_roi2[1]][v_index2][v_index2[1]] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_set[v_roi2[1]][v_index2][v_index2[1]] := 11; + } + + +//###########################################################################// +// Array indexed with array or record of + + + testcase tc_array_indexed_with_array() runs on GeneralComp { + var integer v_arr[2][2] := {{0, 1}, {2, 3}}; + var integer v_index[1] := { 1 } +//////////////////////////////////////////////////// + + if (v_arr[v_index] == {2, 3}) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[v_index] := {5, 6}; + if (v_arr[v_index] == {5, 6}) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[v_index] := {2, 3}; + +//////////////////////////////////////////////////// + + + if (v_arr[v_index][0] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[v_index][0] := 99; + if (v_arr[v_index][0] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[v_index][0] := 2; + +//////////////////////////////////////////////////// + + if (v_arr[0][v_index] == 1) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[0][v_index] := 99; + if (v_arr[0][v_index] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[0][v_index] := 1; + + +//////////////////////////////////////////////////// + + + if (v_arr[v_index][v_index] == 3) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[v_index][v_index] := 99; + if (v_arr[v_index][v_index] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[v_index][v_index] := 3; + +//////////////////////////////////////////////////// + + var integer v_index2[2] := {1, 0}; + if (v_arr[v_index2] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[v_index2] := 99; + if (v_arr[v_index2] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[v_index2] := 2; + } + + testcase tc_array_indexed_with_recordof() runs on GeneralComp { + var integer v_arr[2][2] := {{0, 1}, {2, 3}}; + var RoI1 v_index := { 1 } +//////////////////////////////////////////////////// + + if (v_arr[v_index] == {2, 3}) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[v_index] := {5, 6}; + if (v_arr[v_index] == {5, 6}) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[v_index] := {2, 3}; + +//////////////////////////////////////////////////// + + + if (v_arr[v_index][0] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[v_index][0] := 99; + if (v_arr[v_index][0] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[v_index][0] := 2; + +//////////////////////////////////////////////////// + + if (v_arr[0][v_index] == 1) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[0][v_index] := 99; + if (v_arr[0][v_index] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[0][v_index] := 1; + + +//////////////////////////////////////////////////// + + + if (v_arr[v_index][v_index] == 3) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[v_index][v_index] := 99; + if (v_arr[v_index][v_index] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[v_index][v_index] := 3; + +//////////////////////////////////////////////////// + + var integer v_index2[2] := {1, 0}; + if (v_arr[v_index2] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[v_index2] := 99; + if (v_arr[v_index2] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[v_index2] := 2; + } + + + testcase tc_array_indexed_with_recordof_and_array() runs on GeneralComp { + var integer v_arr[2][2][2][2] := { + { + { + {0, 1}, + {2, 3} + }, + { + {4, 5}, + {6, 7} + } + }, + { + { + {8, 9}, + {10, 11} + }, + { + {12, 13}, + {14, 15} + } + } + } + var integer v_index[1] := {0}; + var integer v_index2[2] := {0, 1}; + var RoI1 v_roi1 := {0}; + var RoI2 v_roi2 := {0, 1}; + + +//////////////////////////////////////////////////// + + // [0][0][1][0] + if (v_arr[v_index][v_index2][v_index] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[v_index][v_index2][v_index] := 99; + if (v_arr[v_index][v_index2][v_index] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[v_index][v_index2][v_index] := 2; + +//////////////////////////////////////////////////// + + // [0][0][1][0] + if (v_arr[v_index][v_index2][0] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[v_index][v_index2][0] := 99; + if (v_arr[v_index][v_index2][0] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[v_index][v_index2][0] := 2; + +//////////////////////////////////////////////////// + + // [0][0][1][0] + if (v_arr[v_index][0][1][v_index] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[v_index][0][1][v_index] := 99; + if (v_arr[v_index][0][1][v_index] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[v_index][0][1][v_index] := 2; + +//////////////////////////////////////////////////// + + // [0][0][1][0] + if (v_arr[v_roi1][v_index2][v_index] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[v_roi1][v_index2][v_index] := 99; + if (v_arr[v_roi1][v_index2][v_index] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[v_roi1][v_index2][v_index] := 2; + +//////////////////////////////////////////////////// + + // [0][0][1][0] + if (v_arr[v_roi1][v_roi2][v_index] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[v_roi1][v_roi2][v_index] := 99; + if (v_arr[v_roi1][v_roi2][v_index] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[v_roi1][v_roi2][v_index] := 2; + +//////////////////////////////////////////////////// + + // [0][0][1][0] + if (v_arr[v_roi1][v_roi2][v_roi1] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[v_roi1][v_roi2][v_roi1] := 99; + if (v_arr[v_roi1][v_roi2][v_roi1] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[v_roi1][v_roi2][v_roi1] := 2; + + +//////////////////////////////////////////////////// + + // [0][0][1][0] + if (v_arr[v_roi1][v_roi2][0] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[v_roi1][v_roi2][0] := 99; + if (v_arr[v_roi1][v_roi2][0] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[v_roi1][v_roi2][0] := 2; + +//////////////////////////////////////////////////// + + // [0][0][1][0] + if (v_arr[0][v_roi2][0] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[0][v_roi2][0] := 99; + if (v_arr[0][v_roi2][0] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[0][v_roi2][0] := 2; + +//////////////////////////////////////////////////// + + // [0][0][1][0] + if (v_arr[v_roi1][0][1][v_roi1] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[v_roi1][0][1][v_roi1] := 99; + if (v_arr[v_roi1][0][1][v_roi1] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[v_roi1][0][1][v_roi1] := 2; + +//////////////////////////////////////////////////// + + // [0][1][1][0] + if (v_arr[v_roi1][1][1][v_roi1] == 6) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[v_roi1][1][1][v_roi1] := 99; + if (v_arr[v_roi1][1][1][v_roi1] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[v_roi1][1][1][v_roi1] := 6; + +//////////////////////////////////////////////////// + + // [0][1][1][0] + if (v_arr[v_roi1][v_roi2[1]][1][v_roi1] == 6) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[v_roi1][v_roi2[1]][1][v_roi1] := 99; + if (v_arr[v_roi1][v_roi2[1]][1][v_roi1] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[v_roi1][v_roi2[1]][1][v_roi1] := 6; + +//////////////////////////////////////////////////// + + // [0][1][1][0] + if (v_arr[v_roi1][v_roi2[1]][v_index2[1]][v_roi1] == 6) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[v_roi1][v_roi2[1]][v_index2[1]][v_roi1] := 99; + if (v_arr[v_roi1][v_roi2[1]][v_index2[1]][v_roi1] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[v_roi1][v_roi2[1]][v_index2[1]][v_roi1] := 6; + +//////////////////////////////////////////////////// + + // [1][0][1][1] + if (v_arr[v_roi2[1]][v_index2][v_index2[1]] == 11) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[v_roi2[1]][v_index2][v_index2[1]] := 99; + if (v_arr[v_roi2[1]][v_index2][v_index2[1]] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[v_roi2[1]][v_index2][v_index2[1]] := 11; + + } + + +//###########################################################################// +// Array of charstring indexed with record of + + testcase tc_arrayfstr_indexed_with_recordof() runs on GeneralComp { + var charstring v_arr[2][2] := {{"a", "b"}, {"c", "d"}}; + var RoI1 v_index := { 1 } + +//////////////////////////////////////////////////// + + if (v_arr[v_index] == {"c", "d"}) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[v_index] := {"x", "y"}; + if (v_arr[v_index] == {"x", "y"}) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[v_index] := {"c", "d"}; + +//////////////////////////////////////////////////// + + if (v_arr[v_index][0] == "c") { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[v_index][0] := "x"; + if (v_arr[v_index][0] == "x") { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[v_index][0] := "c"; + +//////////////////////////////////////////////////// + + if (v_arr[0][v_index] == "b") { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[0][v_index] := "x"; + if (v_arr[0][v_index] == "x") { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[0][v_index] := "b"; + +//////////////////////////////////////////////////// + + if (v_arr[v_index][v_index] == "d") { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[v_index][v_index] := "x"; + if (v_arr[v_index][v_index] == "x") { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[v_index][v_index] := "d"; + +//////////////////////////////////////////////////// + + var RoI2 v_index2 := {1, 0}; + if (v_arr[v_index2] == "c") { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[v_index2] := "x"; + if (v_arr[v_index2] == "x") { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[v_index2] := "c"; + + } + + +//###########################################################################// +// Array of charstring indexed with special indexing array + + type integer MyInt; + + testcase tc_array_indexed_with_spec_array() runs on GeneralComp { + var charstring v_arr[2..4][2..4] := {{"a", "b", "c"}, {"d", "e", "f"}, {"g", "h", "i"}}; + var MyInt v_index[1..1] := {3}; + +//////////////////////////////////////////////////// + + if (v_arr[v_index] == {"d", "e", "f"}) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[v_index] := {"x", "y", "z"}; + if (v_arr[v_index] == {"x", "y", "z"}) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[v_index] := {"d", "e", "f"}; + +//////////////////////////////////////////////////// + + if (v_arr[v_index][2] == "d") { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[v_index][2] := "x"; + if (v_arr[v_index][2] == "x") { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[v_index][2] := "d"; + +//////////////////////////////////////////////////// + + if (v_arr[2][v_index] == "b") { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[2][v_index] := "x"; + if (v_arr[2][v_index] == "x") { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[2][v_index] := "b"; + +//////////////////////////////////////////////////// + + if (v_arr[v_index][v_index] == "e") { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[v_index][v_index] := "x"; + if (v_arr[v_index][v_index] == "x") { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[v_index][v_index] := "e"; + +//////////////////////////////////////////////////// + + var MyInt v_index2[3..4] := {3, 2}; + if (v_arr[v_index2] == "d") { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[v_index2] := "x"; + if (v_arr[v_index2] == "x") { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[v_index2] := "d"; + } + + control { + execute(tc_recordof_indexed_with_array()); + execute(tc_recordof_indexed_with_recordof()); + execute(tc_recordof_indexed_with_recordof_and_array()); + + execute(tc_setof_indexed_with_array()); + execute(tc_setof_indexed_with_recordof()); + execute(tc_setof_indexed_with_recordof_and_array()); + + execute(tc_array_indexed_with_array()); + execute(tc_array_indexed_with_recordof()); + execute(tc_array_indexed_with_recordof_and_array()); + + execute(tc_arrayfstr_indexed_with_recordof()); + execute(tc_array_indexed_with_spec_array()); + } + +} diff --git a/regression_test/indexWithRecofArray/Makefile b/regression_test/indexWithRecofArray/Makefile new file mode 100644 index 000000000..afb9b4e0e --- /dev/null +++ b/regression_test/indexWithRecofArray/Makefile @@ -0,0 +1,56 @@ +############################################################################## +# Copyright (c) 2000-2016 Ericsson Telecom AB +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v1.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-v10.html +# +# Contributors: +# Szabo, Bence Janos +# +############################################################################## +TOPDIR := .. +include $(TOPDIR)/Makefile.regression + +.SUFFIXES: .ttcn .hh +.PHONY: all clean dep run + +TTCN3_LIB = ttcn3$(RT2_SUFFIX)$(DYNAMIC_SUFFIX) + +TTCN3_MODULES = IndexWithRecofArray.ttcn + +GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) +GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) +ifdef CODE_SPLIT +GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) +endif + +OBJECTS = $(GENERATED_SOURCES:.cc=.o) + +TARGET = IndexWithRecofArray$(EXESUFFIX) + +all: $(TARGET) + +$(TARGET): $(GENERATED_SOURCES) $(USER_SOURCES) + $(CXX) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@ $^ -L$(TTCN3_DIR)/lib -l$(TTCN3_LIB) -L$(OPENSSL_DIR)/lib -lcrypto $($(PLATFORM)_LIBS) + +.ttcn.cc .ttcn.hh: + $(TTCN3_COMPILER) $< + +clean distclean: + -rm -f $(TARGET) $(OBJECTS) $(GENERATED_HEADERS) \ + $(GENERATED_SOURCES) *.log Makefile.bak + +dep: $(GENERATED_SOURCES) + makedepend $(CPPFLAGS) $(GENERATED_SOURCES) + +run: $(TARGET) + ./$^ + +.NOTPARALLEL: + -- GitLab