%%
%% %CopyrightBegin%
%%
%% Copyright Ericsson AB 2008-2010. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
%% compliance with the License. You should have received a copy of the
%% Erlang Public License along with this software. If not, it can be
%% retrieved online at http://www.erlang.org/.
%%
%% Software distributed under the License is distributed on an "AS IS"
%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
%% the License for the specific language governing rights and limitations
%% under the License.
%%
%% %CopyrightEnd%
%%
%%
-module(test_x691).
-export([compile/3]).
-export([cases/2]).
-include_lib("test_server/include/test_server.hrl").
compile(Config,Rules,Option) ->
?line DataDir = ?config(data_dir,Config),
?line OutDir = ?config(priv_dir,Config),
?line true = code:add_patha(?config(priv_dir,Config)),
?line ok = asn1ct:compile(DataDir ++ "P-RecordA1",
[Rules, {outdir,OutDir}]++Option),
?line ok = asn1ct:compile(DataDir ++ "P-RecordA2",
[Rules, {outdir,OutDir}]++Option),
?line ok = asn1ct:compile(DataDir ++ "P-RecordA3",
[Rules, {outdir,OutDir}]++Option).
cases(Erule,Variant) ->
MsgA1 = a1(),
?line {ok,B1} = asn1_wrapper:encode('P-RecordA1','PersonnelRecord',MsgA1),
?line {ok,MsgA1} = asn1_wrapper:decode('P-RecordA1','PersonnelRecord',B1),
io:format("compare_format(~p,B1) ->~p~nencval(a1,~p,binary) ->~p~n",
[Erule,
compare_format(Erule,B1),
Variant,
encval(a1,Variant,binary)]),
?line true = (compare_format(Erule,B1) == encval(a1,Variant,binary)),
MsgA2 = a2(),
?line {ok,B2} = asn1_wrapper:encode('P-RecordA2','PersonnelRecord',MsgA2),
?line {ok,MsgA2} = asn1_wrapper:decode('P-RecordA2','PersonnelRecord',B2),
io:format("compare_format(~p,B2) ->~p~nencval(a2,~p,binary) ->~p~n",
[Erule,
compare_format(Erule,B2),
Variant,
encval(a2,Variant,binary)]),
?line true = (compare_format(Erule,B2) == encval(a2,Variant,binary)),
MsgA3 = a3(),
?line {ok,B3} = asn1_wrapper:encode('P-RecordA3','PersonnelRecord',MsgA3),
?line {ok,MsgA3} = asn1_wrapper:decode('P-RecordA3','PersonnelRecord',B3),
io:format("compare_format(~p,B3) ->~p~nencval(a3,~p,binary) ->~p~n",
[Erule,
compare_format(Erule,B3),
Variant,
encval(a3,Variant,binary)]),
?line true = (compare_format(Erule,B3) == encval(a3,Variant,binary)).
compare_format(Erule,Val) when is_list(Val) ->
compare_format(Erule,list_to_binary(Val));
%% compare_format(per,Val) ->
%% binary_to_list(Val);
compare_format(_,Val) ->
Val.
a1() ->
{'PersonnelRecord',
{'Name',"John", "P", "Smith"},
"Director",
51,
"19710917",
{'Name', "Mary", "T", "Smith"},
[{'ChildInformation',
{'Name', "Ralph", "T", "Smith"},
"19571111"},
{'ChildInformation',
{'Name', "Susan", "B", "Jones"},
"19590717"}]}.
a2() ->
a1().
a3() ->
{'PersonnelRecord',
{'Name',"John", "P", "Smith"},
"Director",
51,
"19710917",
{'Name', "Mary", "T", "Smith"},
[{'ChildInformation',
{'Name', "Ralph", "T", "Smith"},
"19571111",
asn1_NOVALUE},
{'ChildInformation',
{'Name', "Susan", "B", "Jones"},
"19590717",
female}]}.
encval(An,Variant,Encoding) when Encoding == hex; Encoding == binary ->
Msg = encval(An,Variant),
encoding(Encoding,Msg).
encval(a1,aligned) ->
"80044A6F 686E0150 05536D69 74680133 08446972 6563746F 72083139 37313039 3137044D 61727901 5405536D 69746802 0552616C 70680154 05536D69 74680831 39353731 31313105 53757361 6E014205 4A6F6E65 73083139 35393037 3137";
encval(a1,unaligned) ->
"824ADFA3 700D005A 7B74F4D0 02661113 4F2CB8FA 6FE410C5 CB762C1C B16E0937 0F2F2035 0169EDD3 D340102D 2C3B3868 01A80B4F 6E9E9A02 18B96ADD 8B162C41 69F5E787 700C2059 5BF765E6 10C5CB57 2C1BB16E";
encval(a2,aligned) ->
"864A6F68 6E501053 6D697468 01330844 69726563 746F7219 7109170C 4D617279 5410536D 69746802 1052616C 70685410 536D6974 68195711 11105375 73616E42 104A6F6E 65731959 0717";
encval(a2,unaligned) ->
"865D51D2 888A5125 F1809984 44D3CB2E 3E9BF90C B8848B86 7396E8A8 8A5125F1 81089B93 D71AA229 4497C632 AE222222 985CE521 885D54C1 70CAC838 B8";
encval(a3,aligned) ->
"40C04A6F 686E5008 536D6974 68000033 08446972 6563746F 72001971 0917034D 61727954 08536D69 74680100 52616C70 68540853 6D697468 00195711 11820053 7573616E 42084A6F 6E657300 19590717 010140";
encval(a3,unaligned) ->
"40CBAA3A 5108A512 5F180330 889A7965 C7D37F20 CB8848B8 19CE5BA2 A114A24B E3011372 7AE35422 94497C61 95711118 22985CE5 21842EAA 60B832B2 0E2E0202 80".
encoding(binary,Msg) ->
list_to_binary(bin(Msg));
encoding(hex,Msg) ->
hex(Msg).
bin(Msg) ->
HexList = hex(Msg),
Fun = fun([H1,H2|Rest],F) -> [(H1 bsl 4) + H2|F(Rest,F)];([],_) -> [] end,
Fun(HexList,Fun).
hex(Msg) ->
[to_hex(X)||X <- Msg,X /= $ ].
to_hex(I) when I >= $0, I =< $9 ->
I-48;
to_hex(C) when C >= $A,C =< $F ->
C - 55.
%% ex('EUTRA','BCCH-DL-SCH-Message',1) ->
%% {'BCCH-DL-SCH-Message',
%% {c1,
%% {systemInformation1,
%% {'SystemInformationBlockType1',
%% {'SystemInformationBlockType1_cellAccessRelatedInformation',
%% [{'SystemInformationBlockType1_cellAccessRelatedInformation_SOF',
%% {'PLMN-Identity'},
%% true},
%% {'SystemInformationBlockType1_cellAccessRelatedInformation_SOF',
%% {'PLMN-Identity'},
%% false},
%% {'SystemInformationBlockType1_cellAccessRelatedInformation_SOF',
%% {'PLMN-Identity'},
%% true}],
%% {'TrackingAreaCode'},
%% {'CellIdentity'},
%% false,
%% true,
%% true,
%% true},
%% {'SystemInformationBlockType1_cellSelectionInfo',
%% -50},
%% 24,
%% [{'SystemInformationBlockType1_schedulinInformation_SOF',
%% {'SystemInformationBlockType1_schedulinInformation_SOF_si-MessageType'},
%% ms320,
%% {'SystemInformationBlockType1_schedulinInformation_SOF_sib-MappingInfo'}
%% }],
%% 0
%% }
%% }
%% }
%% }.
%% eutra1(msg) ->
%% {'BCCH-BCH-Message',{'MasterInformationBlock',[0,1,0,1],[1,0,1,0],{'PHICH-Configuration',short,ffs},[1,0,1,0,0,0,0,0]}};
%% eutra1(result) ->
%% <<90,80,0>>.
%% eutra2(msg) ->
%% {'BCCH-DL-SCH-Message',
%% {c1,
%% {systemInformation1,
%% {'SystemInformationBlockType1',
%% {'SystemInformationBlockType1_cellAccessRelatedInformation',
%% [{'SystemInformationBlockType1_cellAccessRelatedInformation_plmn-IdentityList_SEQOF',{'PLMN-Identity'},true},
%% {'SystemInformationBlockType1_cellAccessRelatedInformation_plmn-IdentityList_SEQOF',{'PLMN-Identity'},false},
%% {'SystemInformationBlockType1_cellAccessRelatedInformation_plmn-IdentityList_SEQOF',{'PLMN-Identity'},true}],
%% {'TrackingAreaCode'},
%% {'CellIdentity'},
%% false,
%% true,
%% true,
%% true
%% },
%% {'SystemInformationBlockType1_cellSelectionInfo',-50},
%% 24,
%% [{'SystemInformationBlockType1_schedulinInformation_SEQOF',
%% {'SystemInformationBlockType1_schedulinInformation_SEQOF_si-MessageType'},
%% ms320,
%% {'SystemInformationBlockType1_schedulinInformation_SEQOF_sib-MappingInfo'}}],
%% 0
%% }
%% }
%% }
%% };
%% eutra2(result) ->
%% %% 55 5C A5 E0
%% <<85,92,165,224>>.
%% compare([H|T1],[H|T2],Acc) ->
%% compare(T1,T2,[H|Acc]);
%% compare([],[],_Acc) ->
%% ok;
%% compare(L1,L2,Acc) ->
%% {miss_match,L1,L2,lists:reverse(Acc)}.