Commit | Line | Data |
---|---|---|
970ed795 EL |
1 | /****************************************************************************** |
2 | * Copyright (c) 2000-2014 Ericsson Telecom AB | |
3 | * All rights reserved. This program and the accompanying materials | |
4 | * are made available under the terms of the Eclipse Public License v1.0 | |
5 | * which accompanies this distribution, and is available at | |
6 | * http://www.eclipse.org/legal/epl-v10.html | |
7 | ******************************************************************************/ | |
8 | module ThexstrOper | |
9 | { | |
10 | type component hexstrOper_comptype { } | |
11 | ||
12 | type hexstring myhstr0 | |
13 | type hexstring myhstr1 length(1) | |
14 | type hexstring myhstr2 length(0..1) | |
15 | type hexstring myhstr3 ('0'H, '1'H, '00'H, '01'H, '10'H, '11'H) length(1) | |
16 | type hexstring myhstr4 ('0'H, '1'H) | |
17 | type hexstring myhstr5 (int2hex(0, 1) & ''H, int2hex(1, 1)) | |
18 | type myhstr5 myhstr6 | |
19 | type myhstr6 myhstr7 (c_myhstr1, int2hex(hex2int(c_myhstr1), 1)) | |
20 | type myhstr6 myhstr8 (int2hex(hex2int('0'H), 1)) | |
21 | type hexstring myhstr9 (myhstr2, myhstr3) | |
22 | type hexstring myhstr10 length(0..infinity) // Full set. | |
23 | ||
24 | const hexstring c_myhstr1 := '0'H | |
25 | const myhstr9 c_myhstr2 := c_myhstr1 | |
26 | ||
27 | template hexstring t_myhstr1 := '0'H | |
28 | template myhstr9 t_myhstr2 := t_myhstr1 | |
29 | template myhstr3 t_myhstr3 := '0'H length(1) | |
30 | // TITAN doesn't allow patterns to be other than `charstring' or `universal | |
31 | // charstring' types. It's denied by the grammar. | |
32 | ||
33 | function f_hstr1() return myhstr6 { | |
34 | return substr(replace(int2hex(0, 1) & int2hex(1, 1), 0, 1, '1'H), 0, 1) | |
35 | } | |
36 | ||
37 | testcase hexstrSubtypes() runs on hexstrOper_comptype { | |
38 | var template myhstr1 vt_myhstr1 := '0'H // Simple length. | |
39 | var template myhstr2 vt_myhstr2 := ''H // Length with range. | |
40 | var template myhstr3 vt_myhstr3 := vt_myhstr1 // Values and length. | |
41 | var template myhstr4 vt_myhstr4 := vt_myhstr1 // Values only. | |
42 | var myhstr1 v_myhstr1 := '0'H | |
43 | var myhstr2 v_myhstr2 := ''H | |
44 | var myhstr3 v_myhstr3 := v_myhstr1 | |
45 | var myhstr4 v_myhstr4 := v_myhstr1 | |
46 | ||
47 | if (valueof(vt_myhstr1) == v_myhstr1 and v_myhstr2 == valueof(vt_myhstr2)) { setverdict(pass) } | |
48 | else { setverdict(fail) } | |
49 | if (valueof(vt_myhstr3) == v_myhstr3 and v_myhstr4 == valueof(vt_myhstr4)) { setverdict(pass) } | |
50 | else { setverdict(fail) } | |
51 | if (f_hstr1() == '1'H) { setverdict(pass) } | |
52 | else { setverdict(fail) } | |
53 | } | |
54 | ||
55 | testcase hexstrIsvalue() runs on hexstrOper_comptype{ | |
56 | var hexstring hstr0; | |
57 | var hexstring hstr1 := '1111'H; | |
58 | var template hexstring thstr; | |
59 | ||
60 | if ( isvalue(hstr0) ) { setverdict(fail); } else { setverdict(pass); }; | |
61 | if ( isvalue(hstr1) ) { setverdict(pass); } else { setverdict(fail); }; | |
62 | if ( isvalue(thstr) ) { setverdict(fail); } else { setverdict(pass); }; | |
63 | } | |
64 | ||
65 | testcase hexstrIsbound() runs on hexstrOper_comptype { | |
66 | var hexstring hstr0; | |
67 | var hexstring hstr1 := '1111'H; | |
68 | var template hexstring thstr; | |
69 | ||
70 | if ( isbound(hstr0) ) { setverdict(fail); } else { setverdict(pass); }; | |
71 | if ( isbound(hstr0[0]) ) { setverdict(fail); } else { setverdict(pass); }; | |
72 | if ( isbound(hstr1) ) { setverdict(pass); } else { setverdict(fail); }; | |
73 | if ( isbound(thstr) ) { setverdict(fail); } else { setverdict(pass); }; | |
74 | } | |
75 | ||
76 | testcase CR_TR00018474() runs on hexstrOper_comptype { | |
77 | // Indexing of string template variables. | |
78 | var template hexstring vth1 := 'AABBCCDDEE'H | |
79 | var template hexstring vth2 := 'AABB?CC'H // It's a pattern, cannot be indexed. | |
80 | vth1[0] := 'B'H | |
81 | if (match('BABBCCDDEE'H, vth1)) { setverdict(pass) } else { setverdict(fail) } | |
82 | vth1[0] := 'B'H // Indexed assignment notation cannot be used here. | |
83 | vth1[1] := 'A'H // Still works, nothing special. | |
84 | if (match('BABBCCDDEE'H, vth1)) { setverdict(pass) } else { setverdict(fail) } | |
85 | } | |
86 | ||
87 | control { | |
88 | const hexstring cl_1 := '0'H | |
89 | var hexstring vl_1; | |
90 | ||
91 | execute(hexstrSubtypes()); | |
92 | execute(hexstrIsvalue()); | |
93 | execute(hexstrIsbound()); | |
94 | execute(CR_TR00018474()); | |
95 | } | |
96 | } |