/******************************************************************************
 * Copyright (c) ETSI 2017.
 *
 * This file is subject to copyrights owned by ETSI. Non-exclusive permission
 * is hereby granted, free of charge, to copy, reproduce and amend this file
 * under the following conditions: It is provided "as is", without warranty of any
 * kind, expressed or implied.
 * 
 * ETSI shall never be liable for any claim, damages, or other liability arising
 * from its use or inability of use.This permission does not apply to any documentation
 * associated with this file for which ETSI keeps all rights reserved. The present
 * copyright notice shall be included in all copies of whole or part of this
 * file and shall not imply any sub-license right.
 *
 * Modified by: Adrien Kirjak
 *
 ** @version  0.0.1
 ** @purpose  1:19.3.2, verify that it is possible to use a select union statement with several branches
 ** @verdict  pass accept, ttcn3verdict:pass
 ***************************************************/

// The following requirement is tested:
// If the template instance has type anytype, each branch shall start with the case keyword followed by one or more type names (a list branch) or the else keyword (an else branch) and a statement block.

module Sem_190302_select_union_statement_007 { 

    type component GeneralComp {
	}	

    testcase TC_Sem_190302_select_union_statement_007() runs on GeneralComp {
        var anytype v_any;
        v_any.integer := 2;
        v_any.charstring := "abc";
        v_any.float := 1.2;
        
        select union (v_any) {
            case (charstring) {
                if(match(v_any.charstring,"abc")) 
                {setverdict(pass, v_any.charstring);}
            } case (integer) {
                if(match(v_any.integer,2)) 
                {setverdict(pass, v_any.integer);}
            } case (float) {
                if(match(v_any.float,1.2)) 
                {setverdict(pass, v_any.float);}
            }
               case else {
                setverdict(fail);
            }
        }
	}

	control {
		execute(TC_Sem_190302_select_union_statement_007());
	}
}
with {
	extension "anytype integer, charstring, float"
}
