diff options
| author | UENISHI Kota <kuenishi+github@gmail.com> | 2010-07-09 01:21:35 +0900 |
|---|---|---|
| committer | UENISHI Kota <kuenishi+github@gmail.com> | 2010-07-09 01:21:35 +0900 |
| commit | e799082e5c4d39094c666da0f1c52ab2d6eb088c (patch) | |
| tree | 22337b31696afb872e625c159de47caa31ffad53 | |
| parent | eab66a022e5b5fd9c4731ae8ba970b2146e27599 (diff) | |
| download | msgpack-python-e799082e5c4d39094c666da0f1c52ab2d6eb088c.tar.gz | |
erlang: better test cases, except 'Broken pipe'
| -rw-r--r-- | erlang/msgpack.erl | 74 |
1 files changed, 27 insertions, 47 deletions
diff --git a/erlang/msgpack.erl b/erlang/msgpack.erl index d4fd0ba..96ea407 100644 --- a/erlang/msgpack.erl +++ b/erlang/msgpack.erl @@ -142,7 +142,7 @@ pack_int_(N) -> << 16#D3:8, N:64/big-signed-integer-unit:1 >>. % float : erlang's float is always IEEE 754 64bit format. -%pack_float(F) when is_float(F)-> +% pack_float(F) when is_float(F)-> % << 16#CA:8, F:32/big-float-unit:1 >>. % pack_double(F). % double @@ -198,10 +198,7 @@ unpack_map_(Bin, Len, Acc) -> % unpack then all -spec unpack_(Bin::binary()) -> {msgpack_term(), binary()} | {error, reason()} | no_return(). -unpack_(Bin) when not is_binary(Bin)-> - throw(badarg); -unpack_(<<>>)-> - throw(short); +unpack_(Bin) when not is_binary(Bin)-> throw(badarg); unpack_(Bin) when bit_size(Bin) >= 8 -> case Bin of % ATOMS @@ -239,43 +236,31 @@ unpack_(Bin) when bit_size(Bin) >= 8 -> <<2#1000:4, L:4, Rest/binary>> -> unpack_map_(Rest, L, []); % map % Incomplete / invalid data -% <<_:16/integer, _/binary>> - _ -> throw(short) -%% <<16#CA, _/binary>> -> {more, 4-byte_size(Rest)}; -%% <<16#CB, Rest/binary>> -> {more, 8-byte_size(Rest)}; -%% <<16#CC>> -> {more, 1}; -%% <<16#CD, Rest/binary>> -> {more, 2-byte_size(Rest)}; -%% <<16#CE, Rest/binary>> -> {more, 4-byte_size(Rest)}; -%% <<16#CF, Rest/binary>> -> {more, 8-byte_size(Rest)}; -%% <<16#D0>> -> {more, 1}; -%% <<16#D1, Rest/binary>> -> {more, 2-byte_size(Rest)}; -%% <<16#D2, Rest/binary>> -> {more, 4-byte_size(Rest)}; -%% <<16#D3, Rest/binary>> -> {more, 8-byte_size(Rest)}; -%% <<16#DA, Rest/binary>> -> {more, 16-byte_size(Rest)}; -%% <<16#DB, Rest/binary>> -> {more, 32-byte_size(Rest)}; -%% <<16#DC, Rest/binary>> -> {more, 2-byte_size(Rest)}; -%% <<16#DD, Rest/binary>> -> {more, 4-byte_size(Rest)}; -%% <<16#DE, Rest/binary>> -> {more, 2-byte_size(Rest)}; -%% <<16#DF, Rest/binary>> -> {more, 4-byte_size(Rest)}; -%% <<2#101:3, L:5, Rest/binary>> -> throw(short); % {more, L-byte_size(Rest)}; - -%% <<>> -> throw(short); % {more, 1}; -%% <<2#101:3, _/binary>> -> {more, undefined}; -%% <<F:8, Rest/binary>> when F==16#C1; -%% F==16#C7; F==16#C8; F==16#C9; F==16#D5; -%% F==16#D6; F==16#D7; F==16#D8; F==16#D9-> -%% throw({badarg, <<F, Rest/binary>>}); -% Other -> -% throw({unknown, Other}) - end. + <<F:16, _/binary>> when F==16#CA; F==16#CB; F==16#CC; + F==16#CD; F==16#CE; F==16#CF; + F==16#D0; F==16#D1; F==16#D2; + F==16#D3; F==16#DA; F==16#DB; + F==16#DC; F==16#DD; F==16#DE; + F==16#DF -> + throw(short); + <<F:16, _/binary>> when F==16#C1; + F==16#C7; F==16#C8; F==16#C9; + F==16#D5; F==16#D6; F==16#D7; + F==16#D8; F==16#D9 -> + throw(badarg); + _ -> + throw(short) % or unknown/badarg? + end; +unpack_(<<>>)-> throw(short); +unpack_(<<2#101:3, _/binary>>) -> throw(short). % ===== test codes ===== % -include_lib("eunit/include/eunit.hrl"). -ifdef(EUNIT). compare_all([], [])-> ok; -compare_all([], R)-> {toomuchrhs, R}; -compare_all(L, [])-> {toomuchlhs, L}; +compare_all([], R)-> {toomuchrhs, R}; +compare_all(L, [])-> {toomuchlhs, L}; compare_all([LH|LTL], [RH|RTL]) -> ?assertEqual(LH, RH), compare_all(LTL, RTL). @@ -305,9 +290,9 @@ basic_test()-> Passed = length(Tests). port_test()-> + Port = open_port({spawn, "ruby ../test/crosslang.rb"}, [binary]), Tests = test_data(), {[Tests],<<>>} = msgpack:unpack(msgpack:pack([Tests])), - Port = open_port({spawn, "ruby ../test/crosslang.rb"}, [binary]), true = port_command(Port, msgpack:pack(Tests) ), receive {Port, {data, Data}}-> {Tests, <<>>}=msgpack:unpack(Data) @@ -328,10 +313,7 @@ partial_test()-> % error handling test. long_test()-> Longer = lists:seq(0, 655), -% Longest = lists:seq(0,12345), - {Longer, <<>>} = msgpack:unpack(msgpack:pack(Longer)), -% {Longest, <<>>} = msgpack:unpack(msgpack:pack(Longest)). - ok. + {Longer, <<>>} = msgpack:unpack(msgpack:pack(Longer)). map_test()-> Ints = lists:seq(0, 65), @@ -341,6 +323,7 @@ map_test()-> ok. unknown_test()-> + Port = open_port({spawn, "ruby testcase_generator.rb"}, [binary]), Tests = [0, 1, 2, 123, 512, 1230, 678908, -1, -23, -512, -1230, -567898, <<"hogehoge">>, <<"243546rf7g68h798j">>, @@ -348,16 +331,13 @@ unknown_test()-> -234.4355, 1.0e-34, 1.0e64, [23, 234, 0.23], [0,42,<<"sum">>, [1,2]], [1,42, nil, [3]], - {[{1,2},{<<"hoge">>,nil}]}, + {[{1,2},{<<"hoge">>,nil}]}, % map -234, -50000, 42 ], - Port = open_port({spawn, "ruby testcase_generator.rb"}, [binary]), - timer:sleep(1), receive - {Port, {data, Data}}-> - compare_all(Tests, msgpack:unpack_all(Data)) - after 1024-> ?assert(false) end, + {Port, {data, Data}}-> compare_all(Tests, msgpack:unpack_all(Data)) + after 1024-> ?assert(false) end, port_close(Port). other_test()-> |
