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 ******************************************************************************/
10 import from types all;
15 // setverdict is pass if every value is matching
16 function f_checkMatchingGoodValues_bool(template boolean pl_b, in RoB pl_rob) {
17 var integer s:=lengthof(pl_rob)
18 log("Template: ", pl_b, " values to be matched:", pl_rob)
19 for( var integer i :=0; i<s;i:=i+1) {
20 if( match(pl_rob[i],pl_b )) {
21 setverdict(pass); log(int2str(i)&". ok");log( match(pl_rob[i],pl_b ));
23 setverdict(fail, int2str(i)&". nok"); log( match(pl_rob[i],pl_b ));
26 } with { extension "transparent" }
28 function f_checkMatchingWrongValues_bool(template boolean pl_b, in RoB pl_rob) {
29 var integer s:=lengthof(pl_rob)
30 log("Template: ", pl_b, " values not to be matched:", pl_rob)
31 for( var integer i :=0; i<s;i:=i+1) {
32 if( match(pl_rob[i],pl_b )) {
33 setverdict(fail); log(int2str(i)&". nok");log( match(pl_rob[i],pl_b ));
35 setverdict(pass, int2str(i)&". ok"); log( match(pl_rob[i],pl_b ));
38 } with { extension "transparent" }
41 function f_checkMatchingValues_bool(template boolean pl_b, in RoB pl_good_values, in RoB pl_wrong_values) {
42 f_checkMatchingGoodValues_bool(pl_b,pl_good_values);
43 f_checkMatchingWrongValues_bool(pl_b,pl_wrong_values);
50 // setverdict is pass if every value is matching
51 function f_checkMatchingGoodValues_int(template integer pl_i, in RoI pl_roi) {
52 var integer s:=lengthof(pl_roi)
53 log("Template: ", pl_i, " values to be matched:", pl_roi)
54 for( var integer i :=0; i<s;i:=i+1) {
55 if( match(pl_roi[i],pl_i )) {
56 setverdict(pass); log(int2str(i)&". ok");log( match(pl_roi[i],pl_i ));
58 setverdict(fail, int2str(i)&". nok"); log( match(pl_roi[i],pl_i ));
61 } with { extension "transparent" }
63 function f_checkMatchingWrongValues_int(template integer pl_i, in RoI pl_roi) {
64 var integer s:=lengthof(pl_roi)
65 log("Template: ", pl_i, " values not to be matched:", pl_roi)
66 for( var integer i :=0; i<s;i:=i+1) {
67 if( match(pl_roi[i],pl_i )) {
68 setverdict(fail); log(int2str(i)&". nok");log( match(pl_roi[i],pl_i ));
70 setverdict(pass, int2str(i)&". ok"); log( match(pl_roi[i],pl_i ));
73 } with { extension "transparent" }
75 function f_checkMatchingValues_int(template integer pl_i, in RoI pl_good_values, in RoI pl_wrong_values) {
76 f_checkMatchingGoodValues_int( pl_i, pl_good_values);
77 f_checkMatchingWrongValues_int( pl_i, pl_wrong_values);
84 // setverdict is pass if every value is matching
85 function f_checkMatchingGoodValues_float(template float pl_f, in RoF pl_rof) {
86 var integer s:=lengthof(pl_rof)
87 log("Template: ", pl_f, " values to be matched:", pl_rof)
88 for( var integer i :=0; i<s;i:=i+1) {
89 if( match(pl_rof[i],pl_f )) {
90 setverdict(pass); log(int2str(i)&". ok");log( match(pl_rof[i],pl_f ));
92 setverdict(fail, int2str(i)&". nok"); log( match(pl_rof[i],pl_f ));
95 } with { extension "transparent" }
97 function f_checkMatchingWrongValues_float(template float pl_f, in RoF pl_rof) {
98 var integer s:=lengthof(pl_rof)
99 log("Template: ", pl_f, " values not to be matched:", pl_rof)
100 for( var integer i :=0; i<s;i:=i+1) {
101 if( match(pl_rof[i],pl_f )) {
102 setverdict(fail); log(int2str(i)&". nok");log( match(pl_rof[i],pl_f ));
104 setverdict(pass, int2str(i)&". ok"); log( match(pl_rof[i],pl_f ));
107 } with { extension "transparent" }
109 function f_checkMatchingValues_float(template float pl_f, in RoF pl_good_values, in RoF pl_wrong_values) {
110 f_checkMatchingGoodValues_float( pl_f, pl_good_values);
111 f_checkMatchingWrongValues_float( pl_f, pl_wrong_values);
119 group g_octetstring {
131 function f_checkMatchingGoodValues_cs(template charstring pl_cs,in RoCS pl_rocs) {
132 var integer s:=lengthof(pl_rocs);
133 log("Template: ", pl_cs, " values to be matched:", pl_rocs);
134 for( var integer i :=0; i<s;i:=i+1) {
135 if( match(pl_rocs[i],pl_cs )) {
136 setverdict(pass); log(int2str(i)&". ok");log( match(pl_rocs[i],pl_cs ));
138 setverdict(fail); log(int2str(i)&". nok"); log( match(pl_rocs[i],pl_cs ));
141 } with { extension "transparent" }
143 function f_checkMatchingWrongValues_cs(template charstring pl_cs, in RoCS pl_rocs) {
144 var integer s:=lengthof(pl_rocs)
145 log("Template: ", pl_cs, " values not to be matched:", pl_rocs)
146 for( var integer i :=0; i<s;i:=i+1) {
147 if( match(pl_rocs[i], pl_cs )) {
148 setverdict(fail); log(int2str(i)&". nok");log( match(pl_rocs[i],pl_cs ));
150 setverdict(pass); log(int2str(i)&". ok"); log( match(pl_rocs[i],pl_cs ));
153 } with { extension "transparent" }
155 function f_checkMatchingValues_cs(template charstring pl_cs,in RoCS pl_good_values, in RoCS pl_wrong_values) {
156 f_checkMatchingGoodValues_cs( pl_cs, pl_good_values);
157 f_checkMatchingWrongValues_cs( pl_cs, pl_wrong_values);
160 function f_checkMatchingGoodValues_rcs(template RCS pl_rcs,in RoRCS pl_rorcs) {
161 var integer s:=lengthof(pl_rorcs);
162 log("Template: ", pl_rcs, " values to be matched:", pl_rorcs);
163 for( var integer i :=0; i<s;i:=i+1) {
164 if( match(pl_rorcs[i],pl_rcs )) {
165 setverdict(pass); log(int2str(i)&". ok");log( match(pl_rorcs[i],pl_rcs ));
167 setverdict(fail); log(int2str(i)&". nok"); log( match(pl_rorcs[i],pl_rcs ));
170 } with { extension "transparent" }
172 function f_checkMatchingWrongValues_rcs(template RCS pl_rcs, in RoRCS pl_rorcs) {
173 var integer s:=lengthof(pl_rorcs)
174 log("Template: ", pl_rcs, " values not to be matched:", pl_rorcs)
175 for( var integer i :=0; i<s;i:=i+1) {
176 if( match(pl_rorcs[i], pl_rcs )) {
177 setverdict(fail); log(int2str(i)&". nok");log( match(pl_rorcs[i],pl_rcs ));
179 setverdict(pass); log(int2str(i)&". ok"); log( match(pl_rorcs[i],pl_rcs ));
182 } with { extension "transparent" }
184 function f_checkMatchingValues_rcs(template RCS pl_rcs,in RoRCS pl_good_values, in RoRCS pl_wrong_values) {
185 f_checkMatchingGoodValues_rcs( pl_rcs, pl_good_values);
186 f_checkMatchingWrongValues_rcs( pl_rcs, pl_wrong_values);
192 // setverdict is pass if every value is matching
193 function f_checkMatchingGoodValues_rec(template REC pl_rec,in RoREC pl_rorec) {
194 var integer s:=lengthof(pl_rorec);
195 log("Template: ", pl_rec, " values to be matched:", pl_rorec);
196 for( var integer i :=0; i<s;i:=i+1) {
197 if( match(pl_rorec[i],pl_rec )) {
198 setverdict(pass); log(int2str(i)&". ok");log( match(pl_rorec[i],pl_rec ));
200 setverdict(fail); log(int2str(i)&". nok"); log( match(pl_rorec[i],pl_rec ));
203 } //with { extension "transparent" }
205 function f_checkMatchingWrongValues_rec(template REC pl_rec, in RoREC pl_rorec) {
206 var integer s:=lengthof(pl_rorec)
207 log("Template: ", pl_rec, " values not to be matched:", pl_rorec)
208 for( var integer i :=0; i<s;i:=i+1) {
209 if( match(pl_rorec[i], pl_rec )) {
210 setverdict(fail); log(int2str(i)&". nok");log( match(pl_rorec[i],pl_rec ));
212 setverdict(pass); log(int2str(i)&". ok"); log( match(pl_rorec[i],pl_rec ));
215 } //with { extension "transparent" }
217 function f_checkMatchingValues_rec(template REC pl_rec,in RoREC pl_good_values, in RoREC pl_wrong_values) {
218 f_checkMatchingGoodValues_rec( pl_rec, pl_good_values);
219 f_checkMatchingWrongValues_rec( pl_rec, pl_wrong_values);
222 function f_checkMatchingGoodValues_rec2(template REC2 pl_rec,in RoREC2 pl_rorec) {
223 var integer s:=lengthof(pl_rorec);
224 log("Template: ", pl_rec, " values to be matched:", pl_rorec);
225 for( var integer i :=0; i<s;i:=i+1) {
226 if( match(pl_rorec[i],pl_rec )) {
227 setverdict(pass); log(int2str(i)&". ok");log( match(pl_rorec[i],pl_rec ));
229 setverdict(fail); log(int2str(i)&". nok"); log( match(pl_rorec[i],pl_rec ));
232 } with { extension "transparent" }
234 function f_checkMatchingWrongValues_rec2(template REC2 pl_rec, in RoREC2 pl_rorec) {
235 var integer s:=lengthof(pl_rorec)
236 log("Template: ", pl_rec, " values not to be matched:", pl_rorec)
237 for( var integer i :=0; i<s;i:=i+1) {
238 if( match(pl_rorec[i], pl_rec )) {
239 setverdict(fail); log(int2str(i)&". nok");log( match(pl_rorec[i],pl_rec ));
241 setverdict(pass); log(int2str(i)&". ok"); log( match(pl_rorec[i],pl_rec ));
244 } with { extension "transparent" }
250 // ====record of integer:======
251 // setverdict is pass if every value is matching
252 function f_checkMatchingGoodValues_roi(template RoI pl_roi,in RoRoI pl_roroi) {
253 var integer s:=lengthof(pl_roroi);
254 log("Template: ", pl_roi, " values to be matched:", pl_roroi);
255 for( var integer i :=0; i<s;i:=i+1) {
256 if( match(pl_roroi[i],pl_roi )) {
257 setverdict(pass); log(int2str(i)&". ok");log( match(pl_roroi[i],pl_roi ));
259 setverdict(fail); log(int2str(i)&". nok"); log( match(pl_roroi[i],pl_roi ));
262 } with { extension "transparent" }
264 function f_checkMatchingWrongValues_roi(template RoI pl_roi, in RoRoI pl_roroi) {
265 var integer s:=lengthof(pl_roroi)
266 log("Template: ", pl_roi, " values not to be matched:", pl_roroi)
267 for( var integer i :=0; i<s;i:=i+1) {
268 if( match(pl_roroi[i], pl_roi )) {
269 setverdict(fail); log(int2str(i)&". nok");log( match(pl_roroi[i],pl_roi ));
271 setverdict(pass); log(int2str(i)&". ok"); log( match(pl_roroi[i],pl_roi ));
274 } with { extension "transparent" }
276 function f_checkMatchingValues_roi(template RoI pl_roi,in RoRoI pl_good_values, in RoRoI pl_wrong_values) {
277 f_checkMatchingGoodValues_roi( pl_roi, pl_good_values);
278 f_checkMatchingWrongValues_roi( pl_roi, pl_wrong_values);
281 // ====record of float:======
283 // setverdict is pass if every value is matching
284 function f_checkMatchingGoodValues_rof(template RoF pl_rof,in RoRoF pl_rorof) {
285 var integer s:=lengthof(pl_rorof);
286 log("Template: ", pl_rof, " values to be matched:", pl_rorof);
287 for( var integer i :=0; i<s;i:=i+1) {
288 if( match(pl_rorof[i],pl_rof )) {
289 setverdict(pass); log(int2str(i)&". ok");log( match(pl_rorof[i],pl_rof ));
291 setverdict(fail); log(int2str(i)&". nok"); log( match(pl_rorof[i],pl_rof ));
294 } with { extension "transparent" }
296 function f_checkMatchingWrongValues_rof(template RoF pl_rof, in RoRoF pl_rorof) {
297 var integer s:=lengthof(pl_rorof)
298 log("Template: ", pl_rof, " values not to be matched:", pl_rorof)
299 for( var integer i :=0; i<s;i:=i+1) {
300 if( match(pl_rorof[i], pl_rof )) {
301 setverdict(fail); log(int2str(i)&". nok");log( match(pl_rorof[i],pl_rof ));
303 setverdict(pass); log(int2str(i)&". ok"); log( match(pl_rorof[i],pl_rof ));
306 } with { extension "transparent" }
308 function f_checkMatchingValues_rof(template RoF pl_rof,in RoRoF pl_good_values, in RoRoF pl_wrong_values) {
309 f_checkMatchingGoodValues_rof( pl_rof, pl_good_values);
310 f_checkMatchingWrongValues_rof( pl_rof, pl_wrong_values);
316 //============ AI3 =============================
317 // setverdict is pass if every value is matching
318 function f_checkMatchingGoodValues_ai3(template AI3 pl_ai3,in RoAI3 pl_rofai3, in boolean pl_successExpected:=true) {
319 var integer s:=lengthof(pl_rofai3);
320 log("Template: ", pl_ai3, " values to be matched:", pl_rofai3);
321 for( var integer i :=0; i<s;i:=i+1) {
322 if(pl_successExpected) {
323 if( match(pl_rofai3[i],pl_ai3 )) {
324 setverdict(pass); log(int2str(i)&". ok");log( match(pl_rofai3[i],pl_ai3 ));
326 setverdict(fail); log(int2str(i)&". nok"); log( match(pl_rofai3[i],pl_ai3 ));
328 }else //not pl_successExpected
331 log(match(pl_rofai3[i], pl_ai3 ))
335 log( "Expected error: ", err_str);
340 } //with { extension "transparent" }
342 function f_checkMatchingWrongValues_ai3(template AI3 pl_ai3, in RoAI3 pl_rofai3, in boolean pl_successExpected:=true) {
343 var integer s:=lengthof(pl_rofai3)
344 log("Template: ", pl_ai3, " values not to be matched:", pl_rofai3)
345 for( var integer i :=0; i<s;i:=i+1) {
346 if(pl_successExpected) {
347 if( match(pl_rofai3[i], pl_ai3 )) {
348 setverdict(fail); log(int2str(i)&". nok");log( match(pl_rofai3[i],pl_ai3 ));
350 setverdict(pass); log(int2str(i)&". ok"); log( match(pl_rofai3[i],pl_ai3 ));
352 } else //not pl_successExpected
355 log(match(pl_rofai3[i], pl_ai3 ));
359 log( "Expected error: ", err_str);
364 } //with { extension "transparent" }
366 function f_checkMatchingValues_ai3(template AI3 pl_ai3,in RoAI3 pl_good_values, in RoAI3 pl_wrong_values, in boolean pl_successExpected := true) {
367 f_checkMatchingGoodValues_ai3( pl_ai3, pl_good_values, pl_successExpected);
368 f_checkMatchingWrongValues_ai3( pl_ai3, pl_wrong_values, pl_successExpected);
373 function f_check_AI2x3(template AI2x3 pl_t, RoAI2x3 pl_goodV, RoAI2x3 pl_badV) {
374 var integer NG := lengthof(pl_goodV);
375 var integer NB := lengthof(pl_badV);
376 for(var integer i:=0;i< NG;i:=i+1) {
377 if( match(pl_goodV[i],pl_t)) {
380 setverdict(fail, pl_goodV[i], " should match with ", pl_t );
384 for(var integer i:=0;i< NB;i:=i+1) {
385 if( not match(pl_badV[i],pl_t)) {
388 setverdict(fail, pl_badV[i], " must not match with ", pl_t );
391 } with { extension "transparent" }
393 //======= RAI3 ========
395 // setverdict is pass if every value is matching
396 function f_checkMatchingGoodValues_rai3(template RAI3 pl_rai3,in RoRAI3 pl_rorai3) {
397 var integer s:=lengthof(pl_rorai3);
398 log("Template: ", pl_rai3, " values to be matched:", pl_rorai3);
399 for( var integer i :=0; i<s;i:=i+1) {
400 if( match(pl_rorai3[i],pl_rai3 )) {
401 setverdict(pass); log(int2str(i)&". ok");log( match(pl_rorai3[i],pl_rai3 ));
403 setverdict(fail); log(int2str(i)&". nok"); log( match(pl_rorai3[i],pl_rai3 ));
406 } with { extension "transparent" }
408 function f_checkMatchingWrongValues_rai3(template RAI3 pl_rai3, in RoRAI3 pl_rorai3) {
409 var integer s:=lengthof(pl_rorai3)
410 log("Template: ", pl_rai3, " values not to be matched:", pl_rorai3)
411 for( var integer i :=0; i<s;i:=i+1) {
412 if( match(pl_rorai3[i], pl_rai3 )) {
413 setverdict(fail); log(int2str(i)&". nok");log( match(pl_rorai3[i],pl_rai3 ));
415 setverdict(pass); log(int2str(i)&". ok"); log( match(pl_rorai3[i],pl_rai3 ));
418 } with { extension "transparent" }
420 function f_checkMatchingValues_rai3(template RAI3 pl_rai3,in RoRAI3 pl_good_values, in RoRAI3 pl_wrong_values) {
421 f_checkMatchingGoodValues_rai3( pl_rai3, pl_good_values);
422 f_checkMatchingWrongValues_rai3( pl_rai3, pl_wrong_values);
425 // //============= REC_BAI3 ====================
426 // // setverdict is pass if every value is matching
427 // function f_checkMatchingGoodValues_bai3(template AI3 pl_ai3,in RoAI3 pl_rofai3) {
428 // var integer s:=lengthof(pl_rofai3);
429 // log("Template: ", pl_ai3, " values to be matched:", pl_rofai3);
430 // for( var integer i :=0; i<s;i:=i+1) {
431 // if( match(pl_rofai3[i],pl_ai3 )) {
432 // setverdict(pass); log(int2str(i)&". ok");log( match(pl_rofai3[i],pl_ai3 ));
434 // setverdict(fail); log(int2str(i)&". nok"); log( match(pl_rofai3[i],pl_ai3 ));
437 // } with { extension "transparent" }
439 // function f_checkMatchingWrongValues_bai3(template AI3 pl_ai3, in RoAI3 pl_rofai3) {
440 // var integer s:=lengthof(pl_rofai3)
441 // log("Template: ", pl_ai3, " values not to be matched:", pl_rofai3)
442 // for( var integer i :=0; i<s;i:=i+1) {
443 // if( match(pl_rofai3[i], pl_ai3 )) {
444 // setverdict(fail); log(int2str(i)&". nok");log( match(pl_rofai3[i],pl_ai3 ));
446 // setverdict(pass); log(int2str(i)&". ok"); log( match(pl_rofai3[i],pl_ai3 ));
449 // } with { extension "transparent" }
451 // function f_checkMatchingValues_bai3(template AI3 pl_ai3,in RoAI3 pl_good_values, in RoAI3 pl_wrong_values) {
452 // f_checkMatchingGoodValues_ai3( pl_ai3, pl_good_values);
453 // f_checkMatchingWrongValues_ai3( pl_ai3, pl_wrong_values);
462 // setverdict is pass if every value is matching
463 function f_checkMatchingGoodValues_set(template SET pl_set,in RoSET pl_roset) {
464 var integer s:=lengthof(pl_roset);
465 log("Template: ", pl_set, " values to be matched:", pl_roset);
466 for( var integer i :=0; i<s;i:=i+1) {
467 if( match(pl_roset[i],pl_set )) {
468 setverdict(pass); log(int2str(i)&". ok");log( match(pl_roset[i],pl_set ));
470 setverdict(fail); log(int2str(i)&". nok"); log( match(pl_roset[i],pl_set ));
473 } with { extension "transparent" }
475 function f_checkMatchingWrongValues_set(template SET pl_set, in RoSET pl_roset) {
476 var integer s:=lengthof(pl_roset)
477 log("Template: ", pl_set, " values not to be matched:", pl_roset)
478 for( var integer i :=0; i<s;i:=i+1) {
479 if( match(pl_roset[i], pl_set )) {
480 setverdict(fail); log(int2str(i)&". nok");log( match(pl_roset[i],pl_set ));
482 setverdict(pass); log(int2str(i)&". ok"); log( match(pl_roset[i],pl_set ));
485 } with { extension "transparent" }
487 function f_checkMatchingValues_set(template SET pl_set,in RoSET pl_good_values, in RoSET pl_wrong_values) {
488 f_checkMatchingGoodValues_set( pl_set, pl_good_values);
489 f_checkMatchingWrongValues_set( pl_set, pl_wrong_values);
493 // setverdict is pass if every value is matching
494 function f_checkMatchingGoodValues_rset(template RSET pl_rset,in RoRSET pl_rorset) {
495 var integer s:=lengthof(pl_rorset);
496 log("Template: ", pl_rset, " values to be matched:", pl_rorset);
497 for( var integer i :=0; i<s;i:=i+1) {
498 if( match(pl_rorset[i],pl_rset )) {
499 setverdict(pass); log(int2str(i)&". ok");log( match(pl_rorset[i],pl_rset ));
501 setverdict(fail); log(int2str(i)&". nok"); log( match(pl_rorset[i],pl_rset ));
504 } with { extension "transparent" }
506 function f_checkMatchingWrongValues_rset(template RSET pl_rset, in RoRSET pl_rorset) {
507 var integer s:=lengthof(pl_rorset)
508 log("Template: ", pl_rset, " values not to be matched:", pl_rorset)
509 for( var integer i :=0; i<s;i:=i+1) {
510 if( match(pl_rorset[i], pl_rset )) {
511 setverdict(fail); log(int2str(i)&". nok");log( match(pl_rorset[i],pl_rset ));
513 setverdict(pass); log(int2str(i)&". ok"); log( match(pl_rorset[i],pl_rset ));
516 } with { extension "transparent" }
518 function f_checkMatchingValues_rset(template RSET pl_rset,in RoRSET pl_good_values, in RoRSET pl_wrong_values) {
519 f_checkMatchingGoodValues_rset( pl_rset, pl_good_values);
520 f_checkMatchingWrongValues_rset( pl_rset, pl_wrong_values);
526 //RSoCS = record of charstring
527 // setverdict is pass if every value is matching
528 function f_checkMatchingGoodValues_rsocs(template RSoCS pl_rsocs,in RoRSoCS pl_rorsocs) {
529 var integer s:=lengthof(pl_rorsocs);
530 log("Template: ", pl_rsocs, " values to be matched:", pl_rorsocs);
531 for( var integer i :=0; i<s;i:=i+1) {
532 if( match(pl_rorsocs[i],pl_rsocs )) {
533 setverdict(pass); log(int2str(i)&". ok");log( match(pl_rorsocs[i],pl_rsocs ));
535 setverdict(fail); log(int2str(i)&". nok"); log( match(pl_rorsocs[i],pl_rsocs ));
538 } with { extension "transparent" }
540 function f_checkMatchingWrongValues_rsocs(template RSoCS pl_rsocs, in RoRSoCS pl_rorsocs) {
541 var integer s:=lengthof(pl_rorsocs)
542 log("Template: ", pl_rsocs, " values not to be matched:", pl_rorsocs)
543 for( var integer i :=0; i<s;i:=i+1) {
544 if( match(pl_rorsocs[i], pl_rsocs )) {
545 setverdict(fail); log(int2str(i)&". nok");log( match(pl_rorsocs[i],pl_rsocs ));
547 setverdict(pass); log(int2str(i)&". ok"); log( match(pl_rorsocs[i],pl_rsocs ));
550 } with { extension "transparent" }
552 function f_checkMatchingValues_rsocs(template RSoCS pl_rsocs,in RoRSoCS pl_good_values, in RoRSoCS pl_wrong_values) {
553 f_checkMatchingGoodValues_rsocs( pl_rsocs, pl_good_values);
554 f_checkMatchingWrongValues_rsocs( pl_rsocs, pl_wrong_values);