1 .******************************************************************************
2 .* Copyright (c) 2000-2015 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 .******************************************************************************/
11 :docname.Test Description
12 :docno.21/152 91-CRL 113 200/3 Uen
16 :prep.ETH/XZR Krisztian Pandi
17 :appr.ETH/XZ (Gyula Koos)
20 :title.Test Description - Text based coding for TTCN-3 Test Executor
22 .*---------------------------------------------------------------------*
23 :h1.PREREQUISITES AND PREPARATIONS
24 .*---------------------------------------------------------------------*
25 .*---------------------------------------------------------------------*
26 :h2.Scope of the Test Object
27 .*---------------------------------------------------------------------*
30 This file is obsolate, don't modify, improve it anymore!
32 This TD contains test cases related to TTCN3 Executor's Text coder function.
33 A faster version is located in the TEXT_1_TD.fast_script file.
34 DON'T YOU DARE TO WRITE AN INSPECTION RECORD ABOUT THIS FILE.
38 :p.:us.Revision Information:eus.
43 REV DATE PREPARED CHANGE
44 === ========== ======== ======
45 A 2005-01-10 ETHGHASZ New document
46 B 2005-10-11 EKRISZA Updated for group support.
47 C 2007-03-06 EDMDELI Implicit message encoding
48 D 2008-10-01 EFERKOV Big integers
49 E 2011-01-24 EKRISZA Restructured to use more efficient script.
50 F 2011-10-10 EKRISZA Updated for release.
51 A 2011-12-12 EKRISZA Updated for release
52 A 2012-06-27 EFERKOV Updated for release
53 A 2013-01-17 EKRIPND Updated for release
56 .*---------------------------------------------------------------------*
58 .*---------------------------------------------------------------------*
59 .*---------------------------------------------------------------------*
61 .*---------------------------------------------------------------------*
62 No specific hardware requirement.
63 .*---------------------------------------------------------------------*
65 .*---------------------------------------------------------------------*
66 Tests shall be carried out on the following platforms:
68 :li D='1.'.Solaris 8 (Sun OS 5.8) (gcc 3.0.4)
69 :li D='2.'.SUSE Linux Enterprise server 8 (2.4.19-4GB) (gcc 3.2)
70 :li D='3.'.CYGWIN_NT-5.0 (Cygwin DLL: 1.5.12) on Windows 2000 (gcc 3.3.3)
72 .*---------------------------------------------------------------------*
74 .*---------------------------------------------------------------------*
75 The test environment had been setup in CVS. The tester program is stored in:
76 :nl.TTCNv3/function_test/Tools/SAtester.pl
77 :nl.Test cases are stored with extension .script in the directory:
78 :nl.TTCNv3/function_test/Semantic_Analyser/
79 .*---------------------------------------------------------------------*
81 .*---------------------------------------------------------------------*
82 Install proper TITAN binaries on the used platforms and make sure that
83 your environment settings are correct:
85 :li D='1.'.TTCN3_DIR is set
86 :li D='2.'.$TTCN3_DIR/bin is added to the PATH variable
87 :li D='3.'.$TTCN3_DIR/lib is added to the LD_LIBRARY_PATH variable
88 :li D='4.'.Perl 5.6.0 or higher is available on the platform
89 :li D='5.'.Create a symlink to your Perl binary into the directory where the
90 test cases are stored:
91 :nl.ln -s <your Perl> perl
93 .*---------------------------------------------------------------------*
95 .*---------------------------------------------------------------------*
96 :p.Test cases are specified in the Test Description documents in EDML format.
97 The tester program parses these files and generates the TTCN-3/ASN.1 modules, then
98 calls the compiler to compile them. The result printout is then matched against
99 different patterns to be able to set the verdict. Test cases contain not only
100 the source modules, but the patterns as well.
101 :p.The tester program allows one-by-one execution of test cases and batched
103 :p.NOTE: the tester program requires Perl 5.6.0 or higher.
104 .*---------------------------------------------------------------------*
105 :h1.REQUIREMENT-BASED TESTS
106 .*---------------------------------------------------------------------*
107 .*---------------------------------------------------------------------*
108 :h2.Basic types - Charstring
109 .*---------------------------------------------------------------------*
110 This test case group covers the encoding attributes of type charstring
111 .*---------------------------------------------------------------------*
113 .*---------------------------------------------------------------------*
116 <TC - Fixed length encoding>
120 external function enc_TEXT_PDU(in TEXT_PDU pdu) return charstring with { extension "prototype(convert) encode(TEXT)" }
121 external function dec_TEXT_PDU(in charstring oct) return TEXT_PDU with { extension "prototype(convert) decode(TEXT)" }
125 type charstring TEXT_PDU with { variant "TEXT_CODING(length=5)"};
127 } with {encode "TEXT"}
129 const TEXT_PDU i := "HALI"
130 const charstring o := " HALI"
131 const TEXT_PDU expected_res:=" HALI"
134 var charstring res:=enc_TEXT_PDU(i);
135 var TEXT_PDU dec_pdu:=dec_TEXT_PDU(res);
137 if( res==o and dec_pdu==expected_res){
140 log ("enc_TEXT_PDU(i)= " , res) ;
141 log ("dec_TEXT_PDU(res)= " , dec_pdu) ;
145 Overall verdict: pass
151 .*---------------------------------------------------------------------*
153 .*---------------------------------------------------------------------*
156 <TC - Convert string to lower case during encoding>
160 external function enc_TEXT_PDU(in TEXT_PDU pdu) return charstring with { extension "prototype(convert) encode(TEXT)" }
161 external function dec_TEXT_PDU(in charstring oct) return TEXT_PDU with { extension "prototype(convert) decode(TEXT)" }
165 type charstring TEXT_PDU with { variant "TEXT_CODING(convert=lower_case)"};
167 } with {encode "TEXT"}
169 const TEXT_PDU i := "HALI"
170 const charstring o := "hali"
171 const TEXT_PDU expected_res:="hali"
174 var charstring res:=enc_TEXT_PDU(i);
175 var TEXT_PDU dec_pdu:=dec_TEXT_PDU(res);
177 if( res==o and dec_pdu==expected_res){
180 log ("enc_TEXT_PDU(i)= " , res) ;
181 log ("dec_TEXT_PDU(res)= " , dec_pdu) ;
185 Overall verdict: pass
192 <TC - Convert string to upper case during encoding>
196 external function enc_TEXT_PDU(in TEXT_PDU pdu) return charstring with { extension "prototype(convert) encode(TEXT)" }
197 external function dec_TEXT_PDU(in charstring oct) return TEXT_PDU with { extension "prototype(convert) decode(TEXT)" }
201 type charstring TEXT_PDU with { variant "TEXT_CODING(convert=upper_case)"};
203 } with {encode "TEXT"}
205 const TEXT_PDU i := "hali"
206 const charstring o := "HALI"
207 const TEXT_PDU expected_res:="HALI"
210 var charstring res:=enc_TEXT_PDU(i);
211 var TEXT_PDU dec_pdu:=dec_TEXT_PDU(res);
213 if( res==o and dec_pdu==expected_res){
216 log ("enc_TEXT_PDU(i)= " , res) ;
217 log ("dec_TEXT_PDU(res)= " , dec_pdu) ;
221 Overall verdict: pass
228 <TC - Convert string to lower case during encoding and upper case during decoding>
232 external function enc_TEXT_PDU(in TEXT_PDU pdu) return charstring with { extension "prototype(convert) encode(TEXT)" }
233 external function dec_TEXT_PDU(in charstring oct) return TEXT_PDU with { extension "prototype(convert) decode(TEXT)" }
237 type charstring TEXT_PDU with { variant "TEXT_CODING(convert=lower_case,
238 convert=upper_case)"};
240 } with {encode "TEXT"}
242 const TEXT_PDU i:="HALI"
243 const charstring o := "hali"
244 const TEXT_PDU expected_res:="HALI"
247 var charstring res:=enc_TEXT_PDU(i);
248 var TEXT_PDU dec_pdu:=dec_TEXT_PDU(res);
250 if( res==o and dec_pdu==expected_res){
253 log ("enc_TEXT_PDU(i)= " , res) ;
254 log ("dec_TEXT_PDU(res)= " , dec_pdu) ;
258 Overall verdict: pass
266 <TC - Convert string to upper case during encoding and lower case during decoding>
270 external function enc_TEXT_PDU(in TEXT_PDU pdu) return charstring with { extension "prototype(convert) encode(TEXT)" }
271 external function dec_TEXT_PDU(in charstring oct) return TEXT_PDU with { extension "prototype(convert) decode(TEXT)" }
275 type charstring TEXT_PDU with { variant "TEXT_CODING(convert=upper_case,
276 convert=lower_case)"};
278 } with {encode "TEXT"}
280 const TEXT_PDU i:="hali"
281 const charstring o := "HALI"
282 const TEXT_PDU expected_res:="hali"
285 var charstring res:=enc_TEXT_PDU(i);
286 var TEXT_PDU dec_pdu:=dec_TEXT_PDU(res);
288 if( res==o and dec_pdu==expected_res){
291 log ("enc_TEXT_PDU(i)= " , res) ;
292 log ("dec_TEXT_PDU(res)= " , dec_pdu) ;
296 Overall verdict: pass
300 .*---------------------------------------------------------------------*
302 .*---------------------------------------------------------------------*
306 <TC - Left justification>
310 external function enc_TEXT_PDU(in TEXT_PDU pdu) return charstring with { extension "prototype(convert) encode(TEXT)" }
311 external function dec_TEXT_PDU(in charstring oct) return TEXT_PDU with { extension "prototype(convert) decode(TEXT)" }
315 type charstring TEXT_PDU with { variant "TEXT_CODING(just=left;length=5)"};
317 } with {encode "TEXT"}
319 const TEXT_PDU i:="hali"
320 const charstring o := "hali "
321 const TEXT_PDU expected_res:="hali "
324 var charstring res:=enc_TEXT_PDU(i);
325 var TEXT_PDU dec_pdu:=dec_TEXT_PDU(res);
327 if( res==o and dec_pdu==expected_res){
330 log ("enc_TEXT_PDU(i)= " , res) ;
331 log ("dec_TEXT_PDU(res)= " , dec_pdu) ;
335 Overall verdict: pass
342 <TC - Center justification>
346 external function enc_TEXT_PDU(in TEXT_PDU pdu) return charstring with { extension "prototype(convert) encode(TEXT)" }
347 external function dec_TEXT_PDU(in charstring oct) return TEXT_PDU with { extension "prototype(convert) decode(TEXT)" }
351 type charstring TEXT_PDU with { variant "TEXT_CODING(just=center;length=6)"};
353 } with {encode "TEXT"}
355 const TEXT_PDU i:="hali"
356 const charstring o := " hali "
357 const TEXT_PDU expected_res:=" hali "
360 var charstring res:=enc_TEXT_PDU(i);
361 var TEXT_PDU dec_pdu:=dec_TEXT_PDU(res);
363 if( res==o and dec_pdu==expected_res){
366 log ("enc_TEXT_PDU(i)= " , res) ;
367 log ("dec_TEXT_PDU(res)= " , dec_pdu) ;
371 Overall verdict: pass
378 <TC - Right justification>
381 external function enc_TEXT_PDU(in TEXT_PDU pdu) return charstring with { extension "prototype(convert) encode(TEXT)" }
382 external function dec_TEXT_PDU(in charstring oct) return TEXT_PDU with { extension "prototype(convert) decode(TEXT)" }
386 type charstring TEXT_PDU with { variant "TEXT_CODING(just=right;length=5)"};
388 } with {encode "TEXT"}
390 const TEXT_PDU i:="hali"
391 const charstring o := " hali"
392 const TEXT_PDU expected_res:=" hali"
395 var charstring res:=enc_TEXT_PDU(i);
396 var TEXT_PDU dec_pdu:=dec_TEXT_PDU(res);
398 if( res==o and dec_pdu==expected_res){
401 log ("enc_TEXT_PDU(i)= " , res) ;
402 log ("dec_TEXT_PDU(res)= " , dec_pdu) ;
406 Overall verdict: pass
409 .*---------------------------------------------------------------------*
411 .*---------------------------------------------------------------------*
414 <TC - Case sensitive selection>
417 external function enc_TEXT_PDU(in TEXT_PDU pdu) return charstring with { extension "prototype(convert) encode(TEXT)" }
418 external function dec_TEXT_PDU(in charstring oct) return TEXT_PDU with { extension "prototype(convert) decode(TEXT)" }
422 type charstring TEXT_PDU with { variant "TEXT_CODING(,,'[\d]#(4)[a-e]#(4)')"};
424 } with {encode "TEXT"}
426 const TEXT_PDU i:="1234abcd"
427 const charstring o := "1234abcdfrd"
428 const TEXT_PDU expected_res:="1234abcd"
430 var charstring res:=enc_TEXT_PDU(i);
431 var TEXT_PDU dec_pdu:=dec_TEXT_PDU(res);
433 if(dec_pdu==expected_res){
436 log ("enc_TEXT_PDU(i)= " , res) ;
437 log ("dec_TEXT_PDU(res)= " , dec_pdu) ;
441 Overall verdict: pass
447 <TC - Case insensitive selection>
450 external function enc_TEXT_PDU(in TEXT_PDU pdu) return charstring with { extension "prototype(convert) encode(TEXT)" }
451 external function dec_TEXT_PDU(in charstring oct) return TEXT_PDU with { extension "prototype(convert) decode(TEXT)" }
455 type charstring TEXT_PDU with { variant "TEXT_CODING(,convert=lower_case,
456 '[\d]#(4)[a-e]#(4)', case_insensitive)"};
458 } with {encode "TEXT"}
460 const TEXT_PDU i:="1234abcd"
461 const charstring o := "1234aBCdfrd"
462 const TEXT_PDU expected_res:="1234abcd"
465 var charstring res:=enc_TEXT_PDU(i);
466 var TEXT_PDU dec_pdu:=dec_TEXT_PDU(res);
468 if(dec_pdu==expected_res){
471 log ("enc_TEXT_PDU(i)= " , res) ;
472 log ("dec_TEXT_PDU(res)= " , dec_pdu) ;
476 Overall verdict: pass
480 .*---------------------------------------------------------------------*
481 :h2.Basic types - Integer
482 .*---------------------------------------------------------------------*
483 .*---------------------------------------------------------------------*
485 .*---------------------------------------------------------------------*
491 external function enc_TEXT_PDU(in TEXT_PDU pdu) return charstring with { extension "prototype(convert) encode(TEXT)" }
492 external function dec_TEXT_PDU(in charstring oct) return TEXT_PDU with { extension "prototype(convert) decode(TEXT)" }
496 type integer TEXT_PDU with { variant "TEXT_CODING(length=5)"};
498 } with {encode "TEXT"}
500 const TEXT_PDU i:=249
501 const charstring o := " 249"
502 const TEXT_PDU expected_res:=249
505 var charstring res:=enc_TEXT_PDU(i);
506 var TEXT_PDU dec_pdu:=dec_TEXT_PDU(res);
508 if( res==o and dec_pdu==expected_res){
511 log ("enc_TEXT_PDU(i)= " , res) ;
512 log ("dec_TEXT_PDU(res)= " , dec_pdu) ;
516 Overall verdict: pass
522 <TC - variable length>
525 external function enc_TEXT_PDU(in TEXT_PDU pdu) return charstring with { extension "prototype(convert) encode(TEXT)" }
526 external function dec_TEXT_PDU(in charstring oct) return TEXT_PDU with { extension "prototype(convert) decode(TEXT)" }
530 type integer TEXT_PDU with { variant "TEXT_CODING()"};
532 } with {encode "TEXT"}
534 const TEXT_PDU i:=12249
535 const charstring o := "12249"
536 const TEXT_PDU expected_res:=12249
539 var charstring res:=enc_TEXT_PDU(i);
540 var TEXT_PDU dec_pdu:=dec_TEXT_PDU(res);
542 if( res==o and dec_pdu==expected_res){
545 log ("enc_TEXT_PDU(i)= " , res) ;
546 log ("dec_TEXT_PDU(res)= " , dec_pdu) ;
550 Overall verdict: pass
554 .*---------------------------------------------------------------------*
556 .*---------------------------------------------------------------------*
559 <TC - encoding without leading zero>
562 external function enc_TEXT_PDU(in TEXT_PDU pdu) return charstring with { extension "prototype(convert) encode(TEXT)" }
563 external function dec_TEXT_PDU(in charstring oct) return TEXT_PDU with { extension "prototype(convert) decode(TEXT)" }
567 type integer TEXT_PDU with { variant "TEXT_CODING(length=7)"};
569 } with {encode "TEXT"}
571 const TEXT_PDU i:=12249
572 const charstring o := " 12249"
573 const TEXT_PDU expected_res:=12249
576 var charstring res:=enc_TEXT_PDU(i);
577 var TEXT_PDU dec_pdu:=dec_TEXT_PDU(res);
579 if( res==o and dec_pdu==expected_res){
582 log ("enc_TEXT_PDU(i)= " , res) ;
583 log ("dec_TEXT_PDU(res)= " , dec_pdu) ;
587 Overall verdict: pass
593 <TC - encoding with leading zero>
596 external function enc_TEXT_PDU(in TEXT_PDU pdu) return charstring with { extension "prototype(convert) encode(TEXT)" }
597 external function dec_TEXT_PDU(in charstring oct) return TEXT_PDU with { extension "prototype(convert) decode(TEXT)" }
601 type integer TEXT_PDU with { variant "TEXT_CODING(leading0=true;length=7)"};
603 } with {encode "TEXT"}
605 const TEXT_PDU i:=12249
606 const charstring o := "0012249"
607 const TEXT_PDU expected_res:=12249
610 var charstring res:=enc_TEXT_PDU(i);
611 var TEXT_PDU dec_pdu:=dec_TEXT_PDU(res);
613 if( res==o and dec_pdu==expected_res){
616 log ("enc_TEXT_PDU(i)= " , res) ;
617 log ("dec_TEXT_PDU(res)= " , dec_pdu) ;
621 Overall verdict: pass
627 <TC - encoding negativ integer with leading zero>
630 external function enc_TEXT_PDU(in TEXT_PDU pdu) return charstring with { extension "prototype(convert) encode(TEXT)" }
631 external function dec_TEXT_PDU(in charstring oct) return TEXT_PDU with { extension "prototype(convert) decode(TEXT)" }
635 type integer TEXT_PDU with { variant "TEXT_CODING(leading0=true;length=7)"};
637 } with {encode "TEXT"}
639 const TEXT_PDU i:=-12249
640 const charstring o := "-012249"
641 const TEXT_PDU expected_res:=-12249
644 var charstring res:=enc_TEXT_PDU(i);
645 var TEXT_PDU dec_pdu:=dec_TEXT_PDU(res);
647 if( res==o and dec_pdu==expected_res){
650 log ("enc_TEXT_PDU(i)= " , res) ;
651 log ("dec_TEXT_PDU(res)= " , dec_pdu) ;
655 Overall verdict: pass
659 .*---------------------------------------------------------------------*
661 .*---------------------------------------------------------------------*
664 <TC - Selection of integer value>
667 external function enc_TEXT_PDU(in TEXT_PDU pdu) return charstring with { extension "prototype(convert) encode(TEXT)" }
668 external function dec_TEXT_PDU(in charstring oct) return TEXT_PDU with { extension "prototype(convert) decode(TEXT)" }
672 type integer TEXT_PDU with { variant "TEXT_CODING(,,
675 } with {encode "TEXT"}
677 const TEXT_PDU i:=123423
678 const charstring o := "123423567aBCdfrd"
679 const TEXT_PDU expected_res:=123423
682 var charstring res:=enc_TEXT_PDU(i);
683 var TEXT_PDU dec_pdu:=dec_TEXT_PDU(o);
685 if(dec_pdu==expected_res){
688 log ("enc_TEXT_PDU(i)= " , res) ;
689 log ("dec_TEXT_PDU(res)= " , dec_pdu) ;
693 Overall verdict: pass
697 .*---------------------------------------------------------------------*
698 :h2.Basic types - Boolean
699 .*---------------------------------------------------------------------*
702 <TC - Basic encoding of true value>
705 external function enc_TEXT_PDU(in TEXT_PDU pdu) return charstring with { extension "prototype(convert) encode(TEXT)" }
706 external function dec_TEXT_PDU(in charstring oct) return TEXT_PDU with { extension "prototype(convert) decode(TEXT)" }
710 type boolean TEXT_PDU with { variant "TEXT_CODING()"};
712 } with {encode "TEXT"}
714 const TEXT_PDU i:=true
715 const charstring o := "true"
716 const TEXT_PDU expected_res:=true
719 var charstring res:=enc_TEXT_PDU(i);
720 var TEXT_PDU dec_pdu:=dec_TEXT_PDU(res);
722 if( res==o and dec_pdu==expected_res){
725 log ("enc_TEXT_PDU(i)= " , res) ;
726 log ("dec_TEXT_PDU(res)= " , dec_pdu) ;
730 Overall verdict: pass
736 <TC - Basic encoding of false value>
739 external function enc_TEXT_PDU(in TEXT_PDU pdu) return charstring with { extension "prototype(convert) encode(TEXT)" }
740 external function dec_TEXT_PDU(in charstring oct) return TEXT_PDU with { extension "prototype(convert) decode(TEXT)" }
744 type boolean TEXT_PDU with { variant "TEXT_CODING()"};
746 } with {encode "TEXT"}
748 const TEXT_PDU i:=false
749 const charstring o := "false"
750 const TEXT_PDU expected_res:=false
753 var charstring res:=enc_TEXT_PDU(i);
754 var TEXT_PDU dec_pdu:=dec_TEXT_PDU(res);
756 if( res==o and dec_pdu==expected_res){
759 log ("enc_TEXT_PDU(i)= " , res) ;
760 log ("dec_TEXT_PDU(res)= " , dec_pdu) ;
764 Overall verdict: pass
770 <TC - Encoding and decoding of given tokens 1>
773 external function enc_TEXT_PDU(in TEXT_PDU pdu) return charstring with { extension "prototype(convert) encode(TEXT)" }
774 external function dec_TEXT_PDU(in charstring oct) return TEXT_PDU with { extension "prototype(convert) decode(TEXT)" }
778 type boolean TEXT_PDU with { variant "TEXT_CODING(true:'YES';false:'NO')"};
780 } with {encode "TEXT"}
782 const TEXT_PDU i:=false
783 const charstring o := "NO"
784 const TEXT_PDU expected_res:=false
787 var charstring res:=enc_TEXT_PDU(i);
788 var TEXT_PDU dec_pdu:=dec_TEXT_PDU(o);
790 if( res==o and dec_pdu==expected_res){
793 log ("enc_TEXT_PDU(i)= " , res) ;
794 log ("dec_TEXT_PDU(res)= " , dec_pdu) ;
798 Overall verdict: pass
804 <TC - Encoding and decoding of given tokens 2>
807 external function enc_TEXT_PDU(in TEXT_PDU pdu) return charstring with { extension "prototype(convert) encode(TEXT)" }
808 external function dec_TEXT_PDU(in charstring oct) return TEXT_PDU with { extension "prototype(convert) decode(TEXT)" }
812 type boolean TEXT_PDU with { variant "TEXT_CODING(true:'YES';false:'NO',
813 true:'good';false:{'bad',case_insensitive})"};
815 } with {encode "TEXT"}
817 const TEXT_PDU i:=false
818 const charstring o1 := "NO"
819 const charstring o := "Bad"
820 const TEXT_PDU expected_res:=false
823 var charstring res:=enc_TEXT_PDU(i);
824 var TEXT_PDU dec_pdu:=dec_TEXT_PDU(o);
826 if( res==o1 and dec_pdu==expected_res){
829 log ("enc_TEXT_PDU(i)= " , res) ;
830 log ("dec_TEXT_PDU(res)= " , dec_pdu) ;
834 Overall verdict: pass
838 .*---------------------------------------------------------------------*
839 :h2.Basic types - Enumerated
840 .*---------------------------------------------------------------------*
843 <TC - Basic encoding of enumerated values>
846 external function enc_TEXT_PDU(in TEXT_PDU pdu) return charstring with { extension "prototype(convert) encode(TEXT)" }
847 external function dec_TEXT_PDU(in charstring oct) return TEXT_PDU with { extension "prototype(convert) decode(TEXT)" }
851 type enumerated TEXT_PDU {egy,ketto,harom}
852 with { variant "TEXT_CODING()"};
854 } with {encode "TEXT"}
858 var charstring o := "egy"
859 var TEXT_PDU expected_res:=egy
860 var charstring res:=enc_TEXT_PDU(i);
861 var TEXT_PDU dec_pdu:=dec_TEXT_PDU(o);
863 if( res==o and dec_pdu==expected_res){
865 } else {setverdict(fail);}
870 res:=enc_TEXT_PDU(i);
871 dec_pdu:=dec_TEXT_PDU(o);
873 if( res==o and dec_pdu==expected_res){
875 } else {setverdict(fail);}
878 Overall verdict: pass
884 <TC - Encoding of given enumerated values>
887 external function enc_TEXT_PDU(in TEXT_PDU pdu) return charstring with { extension "prototype(convert) encode(TEXT)" }
888 external function dec_TEXT_PDU(in charstring oct) return TEXT_PDU with { extension "prototype(convert) decode(TEXT)" }
892 type enumerated TEXT_PDU {egy,ketto,harom}
893 with { variant "TEXT_CODING(egy:'haho';harom:'har',
894 egy:'(haho)|(H)';ketto:{,case_insensitive};
895 harom:{'hArom',case_insensitive})"};
897 } with {encode "TEXT"}
901 var charstring o := "haho"
902 var charstring o1 := "H"
903 var TEXT_PDU expected_res:=egy
904 var charstring res:=enc_TEXT_PDU(i);
905 var TEXT_PDU dec_pdu2:=dec_TEXT_PDU(o1);
906 var TEXT_PDU dec_pdu:=dec_TEXT_PDU(o);
908 if( res==o and dec_pdu==expected_res and dec_pdu2==expected_res){
910 } else {setverdict(fail);}
916 res:=enc_TEXT_PDU(i);
917 dec_pdu:=dec_TEXT_PDU(o1);
919 if( res==o and dec_pdu==expected_res){
921 } else {setverdict(fail);}
927 res:=enc_TEXT_PDU(i);
928 dec_pdu:=dec_TEXT_PDU(o1);
930 if( res==o and dec_pdu==expected_res){
932 } else {setverdict(fail);}
935 Overall verdict: pass
939 .*---------------------------------------------------------------------*
940 :h2.Leading, separation and trailing token
941 .*---------------------------------------------------------------------*
942 .*---------------------------------------------------------------------*
944 .*---------------------------------------------------------------------*
947 <TC - Coding with leading token>
950 external function enc_TEXT_PDU(in TEXT_PDU pdu) return charstring with { extension "prototype(convert) encode(TEXT)" }
951 external function dec_TEXT_PDU(in charstring oct) return TEXT_PDU with { extension "prototype(convert) decode(TEXT)" }
955 type charstring TEXT_PDU with { variant "BEGIN('Header:')"};
957 } with {encode "TEXT"}
959 const TEXT_PDU i:="value"
960 const charstring o := "Header:value"
961 const TEXT_PDU expected_res:="value"
963 var charstring res:=enc_TEXT_PDU(i);
964 var TEXT_PDU dec_pdu:=dec_TEXT_PDU(res);
966 if( res==o and dec_pdu==expected_res){
969 log ("enc_TEXT_PDU(i)= " , res) ;
970 log ("dec_TEXT_PDU(res)= " , dec_pdu) ;
974 Overall verdict: pass
979 <TC - Coding with leading token, case insensitive decoding>
982 external function enc_TEXT_PDU(in TEXT_PDU pdu) return charstring with { extension "prototype(convert) encode(TEXT)" }
983 external function dec_TEXT_PDU(in charstring oct) return TEXT_PDU with { extension "prototype(convert) decode(TEXT)" }
987 type charstring TEXT_PDU with { variant "BEGIN('Header:',, case_insensitive)"};
989 } with {encode "TEXT"}
991 const TEXT_PDU i:="value"
992 const charstring o := "heADer:value"
993 const TEXT_PDU expected_res:="value"
995 var charstring res:=enc_TEXT_PDU(i);
996 var TEXT_PDU dec_pdu:=dec_TEXT_PDU(o);
998 if(dec_pdu==expected_res){
1001 log ("enc_TEXT_PDU(i)= " , res) ;
1002 log ("dec_TEXT_PDU(res)= " , dec_pdu) ;
1006 Overall verdict: pass
1011 <TC - Coding with leading token, using decoding matching pattern>
1014 external function enc_TEXT_PDU(in TEXT_PDU pdu) return charstring with { extension "prototype(convert) encode(TEXT)" }
1015 external function dec_TEXT_PDU(in charstring oct) return TEXT_PDU with { extension "prototype(convert) decode(TEXT)" }
1019 type charstring TEXT_PDU with { variant "BEGIN('Header:','(T:)|(Header:)')"};
1021 } with {encode "TEXT"}
1023 const TEXT_PDU i:="value"
1024 const TEXT_PDU expected_res:="value"
1027 var charstring o := "T:value"
1028 var charstring res:=enc_TEXT_PDU(i);
1029 var TEXT_PDU dec_pdu:=dec_TEXT_PDU(o);
1031 if(dec_pdu==expected_res){
1033 } else {setverdict(fail);}
1035 dec_pdu:=dec_TEXT_PDU(o);
1037 if(dec_pdu==expected_res){
1039 } else {setverdict(fail);}
1042 Overall verdict: pass
1045 .*---------------------------------------------------------------------*
1047 .*---------------------------------------------------------------------*
1050 <TC - Coding with trailing token>
1053 external function enc_TEXT_PDU(in TEXT_PDU pdu) return charstring with { extension "prototype(convert) encode(TEXT)" }
1054 external function dec_TEXT_PDU(in charstring oct) return TEXT_PDU with { extension "prototype(convert) decode(TEXT)" }
1058 type charstring TEXT_PDU with { variant "END(':close')"};
1060 } with {encode "TEXT"}
1062 const TEXT_PDU i:="value"
1063 const charstring o := "value:close"
1064 const TEXT_PDU expected_res:="value"
1067 var charstring res:=enc_TEXT_PDU(i);
1068 var TEXT_PDU dec_pdu:=dec_TEXT_PDU(res);
1070 if( res==o and dec_pdu==expected_res){
1073 log ("enc_TEXT_PDU(i)= " , res) ;
1074 log ("dec_TEXT_PDU(res)= " , dec_pdu) ;
1078 Overall verdict: pass
1083 <TC - Coding with trailing token, case insensitive decoding>
1086 external function enc_TEXT_PDU(in TEXT_PDU pdu) return charstring with { extension "prototype(convert) encode(TEXT)" }
1087 external function dec_TEXT_PDU(in charstring oct) return TEXT_PDU with { extension "prototype(convert) decode(TEXT)" }
1091 type charstring TEXT_PDU with { variant "END(':close',, case_insensitive)"};
1093 } with {encode "TEXT"}
1095 const TEXT_PDU i:="value"
1096 const charstring o := "value:CloSe"
1097 const TEXT_PDU expected_res:="value"
1100 var charstring res:=enc_TEXT_PDU(i);
1101 var TEXT_PDU dec_pdu:=dec_TEXT_PDU(o);
1103 if(dec_pdu==expected_res){
1106 log ("enc_TEXT_PDU(i)= " , res) ;
1107 log ("dec_TEXT_PDU(res)= " , dec_pdu) ;
1111 Overall verdict: pass
1116 <TC - Coding with leading token, using decoding matching pattern>
1119 external function enc_TEXT_PDU(in TEXT_PDU pdu) return charstring with { extension "prototype(convert) encode(TEXT)" }
1120 external function dec_TEXT_PDU(in charstring oct) return TEXT_PDU with { extension "prototype(convert) decode(TEXT)" }
1124 type charstring TEXT_PDU with { variant "END(':close','(:T)|(:close)')"};
1126 } with {encode "TEXT"}
1128 const TEXT_PDU i:="value"
1129 const TEXT_PDU expected_res:="value"
1132 var charstring o := "value:close"
1133 var charstring res:=enc_TEXT_PDU(i);
1134 var TEXT_PDU dec_pdu:=dec_TEXT_PDU(o);
1136 if(dec_pdu==expected_res){
1138 } else {setverdict(fail);}
1141 dec_pdu:=dec_TEXT_PDU(o);
1143 if(dec_pdu==expected_res){
1145 } else {setverdict(fail);}
1148 Overall verdict: pass
1151 .*---------------------------------------------------------------------*
1152 :h3.Field separator token
1153 .*---------------------------------------------------------------------*
1156 <TC - Coding with separator token>
1159 external function enc_TEXT_PDU(in TEXT_PDU pdu) return charstring with { extension "prototype(convert) encode(TEXT)" }
1160 external function dec_TEXT_PDU(in charstring oct) return TEXT_PDU with { extension "prototype(convert) decode(TEXT)" }
1164 type record TEXT_PDU {
1167 } with { variant "SEPARATOR('\n\r')"};
1169 } with {encode "TEXT"}
1171 const TEXT_PDU i:={f1:="value1",f2:="value2"}
1172 const charstring o := "value1\n\rvalue2"
1173 const TEXT_PDU expected_res:={f1:="value1",f2:="value2"}
1176 var charstring res:=enc_TEXT_PDU(i);
1177 var TEXT_PDU dec_pdu:=dec_TEXT_PDU(res);
1179 if( res==o and dec_pdu==expected_res){
1182 log ("enc_TEXT_PDU(i)= " , res) ;
1183 log ("dec_TEXT_PDU(res)= " , dec_pdu) ;
1187 Overall verdict: pass
1192 <TC - Coding with separator token, case insensitive decoding>
1195 external function enc_TEXT_PDU(in TEXT_PDU pdu) return charstring with { extension "prototype(convert) encode(TEXT)" }
1196 external function dec_TEXT_PDU(in charstring oct) return TEXT_PDU with { extension "prototype(convert) decode(TEXT)" }
1200 type record TEXT_PDU {
1203 } with { variant "SEPARATOR(':FieldSep\n\r',,case_insensitive)"};
1205 } with {encode "TEXT"}
1207 const TEXT_PDU i:={f1:="value1",f2:="value2"}
1208 const charstring o := "value1:FiELDsep\n\rvalue2"
1209 const TEXT_PDU expected_res:={f1:="value1",f2:="value2"}
1212 var charstring res:=enc_TEXT_PDU(i);
1213 var TEXT_PDU dec_pdu:=dec_TEXT_PDU(o);
1215 if(dec_pdu==expected_res){
1218 log ("enc_TEXT_PDU(i)= " , res) ;
1219 log ("dec_TEXT_PDU(res)= " , dec_pdu) ;
1223 Overall verdict: pass
1228 <TC - Coding with separator token, using decoding matching pattern>
1231 external function enc_TEXT_PDU(in TEXT_PDU pdu) return charstring with { extension "prototype(convert) encode(TEXT)" }
1232 external function dec_TEXT_PDU(in charstring oct) return TEXT_PDU with { extension "prototype(convert) decode(TEXT)" }
1236 type record TEXT_PDU {
1239 } with { variant "SEPARATOR(':FieldSep\n\r','(\n\r)|(:FieldSep\n\r)')"};
1241 } with {encode "TEXT"}
1243 const TEXT_PDU i:={f1:="value1",f2:="value2"}
1244 const TEXT_PDU expected_res:={f1:="value1",f2:="value2"}
1247 var charstring o := "value1:FieldSep\n\rvalue2"
1248 var charstring res:=enc_TEXT_PDU(i);
1249 var TEXT_PDU dec_pdu:=dec_TEXT_PDU(o);
1251 if(dec_pdu==expected_res){
1253 } else {setverdict(fail);}
1255 o := "value1\n\rvalue2"
1256 dec_pdu:=dec_TEXT_PDU(o);
1258 if(dec_pdu==expected_res){
1260 } else {setverdict(fail);}
1263 Overall verdict: pass
1266 .*---------------------------------------------------------------------*
1267 :h2.Coding of compound types
1268 .*---------------------------------------------------------------------*
1269 .*---------------------------------------------------------------------*
1271 .*---------------------------------------------------------------------*
1274 <TC - Record with BEGIN/END token>
1277 external function enc_TEXT_PDU(in TEXT_PDU pdu) return charstring with { extension "prototype(convert) encode(TEXT)" }
1278 external function dec_TEXT_PDU(in charstring oct) return TEXT_PDU with { extension "prototype(convert) decode(TEXT)" }
1282 type record TEXT_PDU {
1284 } with { variant "BEGIN('Head:'),END(':end')"};
1286 } with {encode "TEXT"}
1288 const TEXT_PDU i:={f1:="value1"}
1289 const charstring o := "Head:value1:end"
1290 const TEXT_PDU expected_res:={f1:="value1"}
1293 var charstring res:=enc_TEXT_PDU(i);
1294 var TEXT_PDU dec_pdu:=dec_TEXT_PDU(res);
1296 if( res==o and dec_pdu==expected_res){
1299 log ("enc_TEXT_PDU(i)= " , res) ;
1300 log ("dec_TEXT_PDU(res)= " , dec_pdu) ;
1304 Overall verdict: pass
1309 <TC - Record with record fields>
1312 external function enc_TEXT_PDU(in TEXT_PDU pdu) return charstring with { extension "prototype(convert) encode(TEXT)" }
1313 external function dec_TEXT_PDU(in charstring oct) return TEXT_PDU with { extension "prototype(convert) decode(TEXT)" }
1320 } with { variant "BEGIN('Head:'),END(':end'),SEPARATOR(',')"};
1322 type record TEXT_PDU {
1325 } with { variant "BEGIN('PDU:'),END(':UDP')"};
1327 } with {encode "TEXT"}
1329 const TEXT_PDU i:={f1:={field1:="v1",field2:="v2"},f2:="value1"}
1330 const charstring o := "PDU:Head:v1,v2:endvalue1:UDP"
1331 const TEXT_PDU expected_res:={f1:={field1:="v1",field2:="v2"},f2:="value1"}
1334 var charstring res:=enc_TEXT_PDU(i);
1335 var TEXT_PDU dec_pdu:=dec_TEXT_PDU(res);
1337 if( res==o and dec_pdu==expected_res){
1340 log ("enc_TEXT_PDU(i)= " , res) ;
1341 log ("dec_TEXT_PDU(res)= " , dec_pdu) ;
1345 Overall verdict: pass
1350 <TC - Record with optional fields>
1353 external function enc_TEXT_PDU(in TEXT_PDU pdu) return charstring with { extension "prototype(convert) encode(TEXT)" }
1354 external function dec_TEXT_PDU(in charstring oct) return TEXT_PDU with { extension "prototype(convert) decode(TEXT)" }
1361 } with { variant "BEGIN('Head:'),END(':end'),SEPARATOR(',')"};
1363 type record TEXT_PDU {
1366 } with { variant "BEGIN('PDU:'),END(':UDP')"};
1368 } with {encode "TEXT"}
1371 var TEXT_PDU i:={f1:={field1:="v1",field2:="v2"},f2:="value1"}
1372 var charstring o := "PDU:Head:v1,v2:endvalue1:UDP"
1373 var TEXT_PDU expected_res:={f1:={field1:="v1",field2:="v2"},f2:="value1"}
1374 var charstring res:=enc_TEXT_PDU(i);
1375 var TEXT_PDU dec_pdu:=dec_TEXT_PDU(o);
1377 if(dec_pdu==expected_res){
1379 } else {setverdict(fail);}
1381 i:={f1:=omit,f2:="value1"}
1382 o := "PDU:value1:UDP"
1383 expected_res:={f1:=omit,f2:="value1"}
1384 res:=enc_TEXT_PDU(i);
1385 dec_pdu:=dec_TEXT_PDU(o);
1387 if(dec_pdu==expected_res){
1389 } else {setverdict(fail);}
1392 Overall verdict: pass
1395 .*---------------------------------------------------------------------*
1397 .*---------------------------------------------------------------------*
1400 <TC - Set with BEGIN/END token>
1403 external function enc_TEXT_PDU(in TEXT_PDU pdu) return charstring with { extension "prototype(convert) encode(TEXT)" }
1404 external function dec_TEXT_PDU(in charstring oct) return TEXT_PDU with { extension "prototype(convert) decode(TEXT)" }
1410 } with { variant "BEGIN('Head:'),END(':end')"};
1412 } with {encode "TEXT"}
1414 const TEXT_PDU i:={f1:="value1"}
1415 const charstring o := "Head:value1:end"
1416 const TEXT_PDU expected_res:={f1:="value1"}
1419 var charstring res:=enc_TEXT_PDU(i);
1420 var TEXT_PDU dec_pdu:=dec_TEXT_PDU(res);
1422 if( res==o and dec_pdu==expected_res){
1425 log ("enc_TEXT_PDU(i)= " , res) ;
1426 log ("dec_TEXT_PDU(res)= " , dec_pdu) ;
1430 Overall verdict: pass
1435 <TC - Set with record fields>
1438 external function enc_TEXT_PDU(in TEXT_PDU pdu) return charstring with { extension "prototype(convert) encode(TEXT)" }
1439 external function dec_TEXT_PDU(in charstring oct) return TEXT_PDU with { extension "prototype(convert) decode(TEXT)" }
1446 } with { variant "BEGIN('Head:'),END(':end'),SEPARATOR(',')"};
1451 } with { variant "BEGIN('PDU:'),END(':UDP'),SEPARATOR(',')"};
1453 } with {encode "TEXT"}
1456 var TEXT_PDU i:={f1:={field1:="v1",field2:="v2"},f2:="value1"}
1457 var charstring o := "PDU:Head:v1,v2:end,value1:UDP"
1458 var charstring o2 := "PDU:value1,Head:v1,v2:end:UDP"
1459 var TEXT_PDU expected_res:={f1:={field1:="v1",field2:="v2"},f2:="value1"}
1460 var charstring res:=enc_TEXT_PDU(i);
1461 var TEXT_PDU dec_pdu:=dec_TEXT_PDU(o);
1462 var TEXT_PDU dec_pdu2:=dec_TEXT_PDU(o2);
1464 if(dec_pdu==expected_res and dec_pdu2==expected_res){
1466 } else {setverdict(fail);}
1469 Overall verdict: pass
1474 <TC - Set with optional fields>
1477 external function enc_TEXT_PDU(in TEXT_PDU pdu) return charstring with { extension "prototype(convert) encode(TEXT)" }
1478 external function dec_TEXT_PDU(in charstring oct) return TEXT_PDU with { extension "prototype(convert) decode(TEXT)" }
1485 } with { variant "BEGIN('Head:'),END(':end'),SEPARATOR(',')"};
1490 } with { variant "BEGIN('PDU:'),END(':UDP')"};
1492 } with {encode "TEXT"}
1495 var TEXT_PDU i:={f1:={field1:="v1",field2:="v2"},f2:="value1"}
1496 var charstring o := "PDU:Head:v1,v2:endvalue1:UDP"
1497 var TEXT_PDU expected_res:={f1:={field1:="v1",field2:="v2"},f2:="value1"}
1498 var charstring res:=enc_TEXT_PDU(i);
1499 var TEXT_PDU dec_pdu:=dec_TEXT_PDU(o);
1501 if(dec_pdu==expected_res){
1503 } else {setverdict(fail);}
1505 i:={f1:=omit,f2:="value1"}
1506 o := "PDU:value1:UDP"
1507 expected_res:={f1:=omit,f2:="value1"}
1508 res:=enc_TEXT_PDU(i);
1509 dec_pdu:=dec_TEXT_PDU(o);
1511 if(dec_pdu==expected_res){
1513 } else {setverdict(fail);}
1516 Overall verdict: pass
1522 <TC - Set with set of type fields>
1525 external function enc_TEXT_PDU(in TEXT_PDU pdu) return charstring with { extension "prototype(convert) encode(TEXT)" }
1526 external function dec_TEXT_PDU(in charstring oct) return TEXT_PDU with { extension "prototype(convert) decode(TEXT)" }
1530 type set of charstring sof with {variant "SEPARATOR(',')"}
1534 charstring f2 optional,
1539 } with { variant "BEGIN('Head:'),END(':end')";
1540 variant (f1) "BEGIN('f1:')";
1541 variant (f2) "BEGIN('f2:')";
1542 variant (f3) "BEGIN('f3:')";
1543 variant (f4) "BEGIN('f4:'),TEXT_CODING(,repeatable=true)";
1544 variant (f5) "BEGIN('f5:'),TEXT_CODING(,repeatable=true)";
1545 variant (f6) "BEGIN('f6:')";
1546 variant "SEPARATOR(';')" };
1548 } with {encode "TEXT"}
1550 const TEXT_PDU i:={f1:="value1",
1552 f3:={"sof1","sof1a","sof1b"},
1553 f4:={"sof2","sof2a","sof2b"},
1554 f5:={"sof3","sof3a","sof3b"},
1558 var charstring o := "Head:f1:value1;f3:sof1,sof1a,sof1b;f4:sof2,sof2a,sof2b;f5:sof3,sof3a,sof3b;f6:value6:end"
1559 var TEXT_PDU expected_res:={f1:="value1",
1561 f3:={"sof1","sof1a","sof1b"},
1562 f4:={"sof2","sof2a","sof2b"},
1563 f5:={"sof3","sof3a","sof3b"},
1565 var charstring res:=enc_TEXT_PDU(i);
1566 var TEXT_PDU dec_pdu:=dec_TEXT_PDU(o);
1568 if(dec_pdu==expected_res){
1570 } else {setverdict(fail);}
1572 o := "Head:f5:sof3a,sof3b;f3:sof1,sof1a,sof1b;f4:sof2;f1:value1;f4:sof2a,sof2b;f5:sof3;f6:value6:end"
1573 expected_res:={f1:="value1",
1575 f3:={"sof1","sof1a","sof1b"},
1576 f4:={"sof2","sof2a","sof2b"},
1577 f5:={"sof3","sof3a","sof3b"},
1579 dec_pdu:=dec_TEXT_PDU(o);
1581 if(dec_pdu==expected_res){
1583 } else {setverdict(fail);}
1584 o := "Head:f5:sof3a,sof3b;f3:sof1,sof1a,sof1b;f1:value1;f5:sof3;f6:value6:end"
1585 expected_res:={f1:="value1",
1587 f3:={"sof1","sof1a","sof1b"},
1589 f5:={"sof3","sof3a","sof3b"},
1591 dec_pdu:=dec_TEXT_PDU(o);
1593 if(dec_pdu==expected_res){
1595 } else {setverdict(fail);}
1598 Overall verdict: pass
1601 .*---------------------------------------------------------------------*
1603 .*---------------------------------------------------------------------*
1606 <TC - Record of with BEGIN/END token>
1609 external function enc_TEXT_PDU(in TEXT_PDU pdu) return charstring with { extension "prototype(convert) encode(TEXT)" }
1610 external function dec_TEXT_PDU(in charstring oct) return TEXT_PDU with { extension "prototype(convert) decode(TEXT)" }
1614 type record of charstring TEXT_PDU
1615 with { variant "BEGIN('Head:'),END(':end'),SEPARATOR(',')"};
1617 } with {encode "TEXT"}
1619 const TEXT_PDU i:={"value1","value2","value3"}
1620 const charstring o := "Head:value1,value2,value3:end"
1621 const TEXT_PDU expected_res:={"value1","value2","value3"}
1624 var charstring res:=enc_TEXT_PDU(i);
1625 var TEXT_PDU dec_pdu:=dec_TEXT_PDU(res);
1627 if( res==o and dec_pdu==expected_res){
1630 log ("enc_TEXT_PDU(i)= " , res) ;
1631 log ("dec_TEXT_PDU(res)= " , dec_pdu) ;
1635 Overall verdict: pass
1640 <TC - Record of with record fields>
1643 external function enc_TEXT_PDU(in TEXT_PDU pdu) return charstring with { extension "prototype(convert) encode(TEXT)" }
1644 external function dec_TEXT_PDU(in charstring oct) return TEXT_PDU with { extension "prototype(convert) decode(TEXT)" }
1651 } with { variant "BEGIN('Head:'),END(':end'),SEPARATOR(',')"};
1653 type record of rec1 TEXT_PDU with { variant "BEGIN('PDU:'),END(':UDP')"};
1655 } with {encode "TEXT"}
1657 const TEXT_PDU i:={{field1:="v1",field2:="v2"},{field1:="v3",field2:="v4"}}
1658 const charstring o := "PDU:Head:v1,v2:endHead:v3,v4:end:UDP"
1659 const TEXT_PDU expected_res:={{field1:="v1",field2:="v2"},{field1:="v3",field2:="v4"}}
1662 var charstring res:=enc_TEXT_PDU(i);
1663 var TEXT_PDU dec_pdu:=dec_TEXT_PDU(res);
1665 if( res==o and dec_pdu==expected_res){
1668 log ("enc_TEXT_PDU(i)= " , res) ;
1669 log ("dec_TEXT_PDU(res)= " , dec_pdu) ;
1673 Overall verdict: pass
1678 <TC - Empty record of>
1681 external function enc_TEXT_PDU(in TEXT_PDU pdu) return charstring with { extension "prototype(convert) encode(TEXT)" }
1682 external function dec_TEXT_PDU(in charstring oct) return TEXT_PDU with { extension "prototype(convert) decode(TEXT)" }
1689 } with { variant "BEGIN('Head:'),END(':end'),SEPARATOR(',')"};
1691 type record of rec1 TEXT_PDU with { variant "BEGIN('PDU:'),END(':UDP')"};
1693 } with {encode "TEXT"}
1697 var charstring o := "PDU::UDP"
1698 var TEXT_PDU expected_res:={}
1699 var charstring res:=enc_TEXT_PDU(i);
1700 var TEXT_PDU dec_pdu:=dec_TEXT_PDU(o);
1702 if(dec_pdu==expected_res){
1704 } else {setverdict(fail);}
1707 Overall verdict: pass
1710 .*---------------------------------------------------------------------*
1712 .*---------------------------------------------------------------------*
1715 <TC - Union with BEGIN/END token>
1718 external function enc_TEXT_PDU(in TEXT_PDU pdu) return charstring with { extension "prototype(convert) encode(TEXT)" }
1719 external function dec_TEXT_PDU(in charstring oct) return TEXT_PDU with { extension "prototype(convert) decode(TEXT)" }
1723 type union TEXT_PDU {
1726 } with { variant "BEGIN('Head:'),END(':end')";
1727 variant (f1) "BEGIN('f1:'),END(':1f')"
1728 variant (f2) "BEGIN('f2:'),END(':2f')" };
1729 } with {encode "TEXT"}
1731 const TEXT_PDU i:={f1:="value1"}
1734 var charstring o := "Head:f1:value1:1f:end"
1735 var TEXT_PDU expected_res:={f1:="value1"}
1736 var charstring res:=enc_TEXT_PDU(i);
1737 var TEXT_PDU dec_pdu:=dec_TEXT_PDU(o);
1739 if(dec_pdu==expected_res){
1741 } else {setverdict(fail);}
1743 o := "Head:f2:value2:2f:end"
1744 expected_res:={f2:="value2"}
1745 dec_pdu:=dec_TEXT_PDU(o);
1748 if(dec_pdu==expected_res){
1750 } else {setverdict(fail);}
1753 Overall verdict: pass
1759 .*---------------------------------------------------------------------*
1761 .*---------------------------------------------------------------------*
1764 <TC - implicit message encoding: prototype fast>
1767 external function fast_enc_TEXT_PDU(in TEXT_PDU pdu, out charstring cs) with { extension "prototype(fast) encode(TEXT)" }
1768 external function fast_dec_TEXT_PDU(in charstring cs, out TEXT_PDU pdu) with { extension "prototype(fast) decode(TEXT)" }
1772 type union TEXT_PDU {
1775 } with { variant "BEGIN('Head:'),END(':end')";
1776 variant (f1) "BEGIN('f1:'),END(':1f')"
1777 variant (f2) "BEGIN('f2:'),END(':2f')" };
1778 } with {encode "TEXT"}
1780 const TEXT_PDU i:={f1:="value1"}
1783 var charstring o := "Head:f1:value1:1f:end"
1784 var TEXT_PDU expected_res:={f1:="value1"}
1786 fast_enc_TEXT_PDU(i, res);
1787 var TEXT_PDU dec_pdu;
1788 fast_dec_TEXT_PDU(o, dec_pdu);
1790 if(dec_pdu==expected_res){
1792 } else {setverdict(fail);}
1794 o := "Head:f2:value2:2f:end"
1795 expected_res:={f2:="value2"}
1796 fast_dec_TEXT_PDU(o, dec_pdu);
1798 if(dec_pdu==expected_res){
1800 } else {setverdict(fail);}
1803 Overall verdict: pass
1808 .*---------------------------------------------------------------------*
1810 .*---------------------------------------------------------------------*
1813 <TC - implicit message encoding: prototype backtrack>
1816 external function fast_enc_TEXT_PDU(in TEXT_PDU pdu, out charstring cs)
1817 with { extension "prototype(fast) encode(TEXT)" }
1818 external function backtrack_dec_TEXT_PDU(in charstring cs, out TEXT_PDU pdu) return integer
1819 with { extension "prototype(backtrack) decode(TEXT) errorbehavior(ALL:WARNING)" }
1821 type integer TEXT_PDU with { variant "TEXT_CODING()" }
1825 var TEXT_PDU bs := 42;
1826 var TEXT_PDU decoded_bs;
1827 var charstring enc_bs;
1828 var integer ret_val;
1829 var charstring invalid_enc_bs := "bruhaha";
1831 fast_enc_TEXT_PDU(bs, enc_bs);
1832 ret_val := backtrack_dec_TEXT_PDU(enc_bs, decoded_bs);
1833 if (ret_val==0) { setverdict(pass); } else { setverdict(fail); }
1834 if (decoded_bs==bs) { setverdict(pass); } else { setverdict(fail); }
1835 ret_val := backtrack_dec_TEXT_PDU(invalid_enc_bs, decoded_bs);
1836 if (ret_val==1) { setverdict(pass); } else { setverdict(fail); }
1839 Overall verdict: pass
1844 .*---------------------------------------------------------------------*
1846 .*---------------------------------------------------------------------*
1850 <TC - implicit message encoding: prototype sliding>
1853 external function sliding_dec_TEXT_PDU(inout charstring cs, out TEXT_PDU pdu) return integer
1854 with { extension "prototype(sliding) decode(TEXT) errorbehavior(ALL:WARNING)" }
1856 type integer TEXT_PDU with { variant "TEXT_CODING(length=4)" }
1860 var TEXT_PDU out_pdu;
1861 var charstring enc_pdu1 := " 42 21";
1862 var integer ret_val;
1864 ret_val := sliding_dec_TEXT_PDU(enc_pdu1, out_pdu);
1865 if (ret_val==0 and out_pdu==42) { setverdict(pass); } else { setverdict(fail); }
1866 ret_val := sliding_dec_TEXT_PDU(enc_pdu1, out_pdu);
1867 if (ret_val==0 and out_pdu==21) { setverdict(pass); } else { setverdict(fail); }
1868 ret_val := sliding_dec_TEXT_PDU(enc_pdu1, out_pdu);
1871 Overall verdict: pass
1876 .*---------------------------------------------------------------------*
1877 :h2. Encoding/decoding of big integers
1878 .*---------------------------------------------------------------------*
1879 .*---------------------------------------------------------------------*
1880 :h3.Big integer fields
1881 .*---------------------------------------------------------------------*
1885 <TC - big integers: big integer fields>
1888 external function enc_text(in rec_text r) return charstring
1889 with { extension "encode(TEXT) prototype(convert) errorbehavior(ALL:WARNING)" }
1890 external function dec_text(in charstring r) return rec_text
1891 with { extension "decode(TEXT) prototype(convert) errorbehavior(ALL:WARNING)" }
1893 type integer myint1 with {
1894 variant "BEGIN('<myint>')"
1895 variant "END('</myint>')"
1898 type integer myint2 with {
1899 variant "BEGIN('<myint_dummy>')"
1900 variant "END('</myint_dummy>')"
1901 variant "TEXT_CODING(length=128;leading0=true)"
1904 type integer myint3 with {
1905 variant "BEGIN('<myint_super>')"
1906 variant "END('</myint_super>')"
1909 type integer myint4 with {
1910 variant "TEXT_CODING(length=256)"
1911 variant "BEGIN('<myint_pad>')"
1912 variant "END('</myint_pad>')"
1915 type record rec_text {
1918 myint2 int3 optional,
1919 myint3 int4 optional,
1920 myint4 int5 optional
1922 variant "BEGIN('<rec_text>')"
1923 // `variant "SEPARATOR(',')"' is not necessary if the fields can be found
1925 variant "END('</rec_text>')"
1929 const integer a := 214748364799
1930 const integer b := 214748364788
1931 const integer c := 0
1932 // Implicit `omit' would be great.
1933 var rec_text myrec1 := {int1 := 214748364799, int2 := 214748364788, int3 := omit, int4 := omit, int5 := omit}
1934 var rec_text myrec2 := {214748364799, 214748364788, omit, omit, omit}
1935 var rec_text myrec3 := {214748364799, 0, omit, omit, omit}
1936 var rec_text myrec4 := {int1 := 214748364799, int2 := 0, int3 := omit, int4 := omit, int5 := omit}
1937 var rec_text myrec5 := {int1 := 0, int2 := 214748364788, int3 := omit, int4 := omit, int5 := omit}
1938 var rec_text myrec6 := {0, 214748364788, omit, omit, omit}
1939 var rec_text myrec7 := {0, 0, omit, omit, omit}
1940 var rec_text myrec8 := {int1 := 0, int2 := 0, int3 := omit, int4 := omit, int5 := omit}
1941 var rec_text myrec9 := {int1 := a, int2 := b, int3 := omit, int4 := omit, int5 := omit}
1942 var rec_text myrec10 := {a, b, omit, omit, omit}
1943 // The original `sprintf' encoder encodes negative values `-' <padding>
1944 // `0123456'. We should work similarly.
1945 var rec_text myrec11 := {
1946 int1 := -11111111111111111111111111111,
1947 int2 := 22222222222222222222222222222,
1948 int3 := -33333333333333333333333333333,
1950 int5 := -2147483648 }
1951 var rec_text myrec12 := {int1 := 0, int2 := 0, int3 := 0, int4 := -1111111111111111111111111111111, int5 := -1234567891011121314151617181920}
1952 var rec_text myrec13 := {-0, -0, -0, -0, -0}
1953 var rec_text myrec14 := {-0, -1, 1234567891011121314151617181920, -1111111111111111111111111111111, -0}
1954 var rec_text myrec15 := {int1 := 1111111111111111111111111111111, int2 := -1234567891011121314151617181920, int3 := 0, int4 := -0, int5 := -111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111}
1955 var charstring ret_val
1956 ret_val := enc_text(myrec1)
1957 if (dec_text(ret_val) == myrec1) { setverdict(pass) } else { setverdict(fail) }
1958 if (dec_text(ret_val) == {int1 := 214748364799, int2 := 214748364788, int3 := omit, int4 := omit, int5 := omit}) { setverdict(pass) } else { setverdict(fail) }
1959 ret_val := enc_text(myrec2)
1960 if (dec_text(ret_val) == myrec2) { setverdict(pass) } else { setverdict(fail) }
1961 if (dec_text(ret_val) == {214748364799, 214748364788, omit, omit, omit}) { setverdict(pass) } else { setverdict(fail) }
1962 ret_val := enc_text(myrec3)
1963 if (dec_text(ret_val) == myrec3) { setverdict(pass) } else { setverdict(fail) }
1964 if (dec_text(ret_val) == {214748364799, 0, omit, omit, omit}) { setverdict(pass) } else { setverdict(fail) }
1965 ret_val := enc_text(myrec4)
1966 if (dec_text(ret_val) == myrec4) { setverdict(pass) } else { setverdict(fail) }
1967 if (dec_text(ret_val) == {int1 := 214748364799, int2 := 0, int3 := omit, int4 := omit, int5 := omit}) { setverdict(pass) } else { setverdict(fail) }
1968 ret_val := enc_text(myrec5)
1969 if (dec_text(ret_val) == myrec5) { setverdict(pass) } else { setverdict(fail) }
1970 if (dec_text(ret_val) == {int1 := 0, int2 := 214748364788, int3 := omit, int4 := omit, int5 := omit}) { setverdict(pass) } else { setverdict(fail) }
1971 ret_val := enc_text(myrec6)
1972 if (dec_text(ret_val) == myrec6) { setverdict(pass) } else { setverdict(fail) }
1973 if (dec_text(ret_val) == {0, 214748364788, omit, omit, omit}) { setverdict(pass) } else { setverdict(fail) }
1974 ret_val := enc_text(myrec7)
1975 if (dec_text(ret_val) == myrec7) { setverdict(pass) } else { setverdict(fail) }
1976 if (dec_text(ret_val) == {0, 0, omit, omit, omit}) { setverdict(pass) } else { setverdict(fail) }
1977 ret_val := enc_text(myrec8)
1978 if (dec_text(ret_val) == myrec8) { setverdict(pass) } else { setverdict(fail) }
1979 if (dec_text(ret_val) == {int1 := 0, int2 := 0, int3 := omit, int4 := omit, int5 := omit}) { setverdict(pass) } else { setverdict(fail) }
1980 ret_val := enc_text(myrec9)
1981 if (dec_text(ret_val) == myrec9) { setverdict(pass) } else { setverdict(fail) }
1982 if (dec_text(ret_val) == {int1 := a, int2 := b, int3 := omit, int4 := omit, int5 := omit}) { setverdict(pass) } else { setverdict(fail) }
1983 ret_val := enc_text(myrec10)
1984 if (dec_text(ret_val) == myrec10) { setverdict(pass) } else { setverdict(fail) }
1985 if (dec_text(ret_val) == {a, b, omit, omit, omit}) { setverdict(pass) } else { setverdict(fail) }
1986 ret_val := enc_text(myrec11)
1987 if (dec_text(ret_val) == myrec11) { setverdict(pass) } else { setverdict(fail) }
1988 if (dec_text(ret_val) == {int1 := -11111111111111111111111111111, int2 := 22222222222222222222222222222, int3 := -33333333333333333333333333333, int4 := 2147483648, int5 := -2147483648}) { setverdict(pass) } else { setverdict(fail) }
1989 ret_val := enc_text(myrec12)
1990 if (dec_text(ret_val) == myrec12) { setverdict(pass) } else { setverdict(fail) }
1991 if (dec_text(ret_val) == {int1 := 0, int2 := 0, int3 := 0, int4 := -1111111111111111111111111111111, int5 := -1234567891011121314151617181920}) { setverdict(pass) } else { setverdict(fail) }
1992 ret_val := enc_text(myrec13)
1993 if (dec_text(ret_val) == myrec13) { setverdict(pass) } else { setverdict(fail) }
1994 if (dec_text(ret_val) == {-0, -0, -0, -0, -0}) { setverdict(pass) } else { setverdict(fail) }
1995 ret_val := enc_text(myrec14)
1996 if (dec_text(ret_val) == myrec14) { setverdict(pass) } else { setverdict(fail) }
1997 if (dec_text(ret_val) == {-0, -1, 1234567891011121314151617181920, -1111111111111111111111111111111, -0}) { setverdict(pass) } else { setverdict(fail) }
1998 ret_val := enc_text(myrec15)
1999 if (dec_text(ret_val) == myrec15) { setverdict(pass) } else { setverdict(fail) }
2000 if (dec_text(ret_val) == {int1 := 1111111111111111111111111111111, int2 := -1234567891011121314151617181920, int3 := 0, int4 := -0, int5 := -111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111}) { setverdict(pass) } else { setverdict(fail) }
2003 Overall verdict: pass
2008 .*---------------------------------------------------------------------*
2009 :h3.Sliding encoding/decoding of big integers
2010 .*---------------------------------------------------------------------*
2014 <TC - big integers: sliding encoding/decoding of big integers>
2017 external function dec_text_sliding(inout charstring r, out myint5 s) return integer
2018 with { extension "prototype(sliding) decode(TEXT) errorbehavior(ALL:WARNING)" }
2020 type integer myint5 with { variant "TEXT_CODING(length=25)" }
2024 var charstring encoded := " 12345678910111213141516 -11111111111111111111"
2026 var template integer intt := 12345678910111213141516
2027 ret_val := dec_text_sliding(encoded, decoded)
2028 if (ret_val == 0 and decoded == 12345678910111213141516) {setverdict(pass)}
2029 else {setverdict(fail)}
2030 ret_val := dec_text_sliding(encoded, decoded)
2031 if (ret_val == 0 and decoded == -11111111111111111111) {setverdict(pass)}
2032 else {setverdict(fail)}
2033 ret_val := dec_text_sliding(encoded, decoded)
2034 if (match(12345678910111213141516, intt)) {setverdict(pass)}
2035 else {setverdict(fail)}
2038 Overall verdict: pass
2042 .*---------------------------------------------------------------------*
2044 .*---------------------------------------------------------------------*
2045 :nl. Requirement specification(s):
2046 :nl.-------------------------------
2048 :li. 3/ETH/RUS-2003:0087 Uen - Requirement Specification for TITAN's TTCN-3 Semantic Analyser