From 57f0598373ce542f7499218792a15fa0eee161f7 Mon Sep 17 00:00:00 2001 From: UENISHI Kota Date: Fri, 25 Jun 2010 00:44:14 +0900 Subject: [PATCH] erlang: code refined and tests added --- erlang/msgpack.erl | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/erlang/msgpack.erl b/erlang/msgpack.erl index 0d4151b5..789ed535 100644 --- a/erlang/msgpack.erl +++ b/erlang/msgpack.erl @@ -116,8 +116,7 @@ pack_int_( N ) when is_integer( N )-> << 16#D3:8, N:64/big-signed-integer-unit:1 >>. % nil -pack_nil()-> - << 16#C0:8 >>. +pack_nil()-> << 16#C0:8 >>. % pack_true / pack_false pack_bool(true)-> << 16#C3:8 >>; pack_bool(false)-> << 16#C2:8 >>. @@ -132,11 +131,10 @@ pack_double(F) when is_float(F)-> % raw bytes pack_raw(Bin) when is_binary(Bin)-> - MaxLen = 16#10000, % 65536 case byte_size(Bin) of Len when Len < 6-> << 2#101:3, Len:5, Bin/binary >>; - Len when Len < MaxLen -> + Len when Len < 16#10000 -> % 65536 << 16#DA:8, Len:16/big-unsigned-integer-unit:1, Bin/binary >>; Len -> << 16#DB:8, Len:32/big-unsigned-integer-unit:1, Bin/binary >> @@ -144,11 +142,10 @@ pack_raw(Bin) when is_binary(Bin)-> % list / tuple pack_array(L) when is_list(L)-> - MaxLen = 16#10000, %65536 case length(L) of Len when Len < 16 -> << 2#1001:4, Len:4/integer-unit:1, (pack_array_(L))/binary >>; - Len when Len < MaxLen -> + Len when Len < 16#10000 -> % 65536 << 16#DC:8, Len:16/big-unsigned-integer-unit:1,(pack_array_(L))/binary >>; Len -> << 16#DD:8, Len:32/big-unsigned-integer-unit:1,(pack_array_(L))/binary >> @@ -164,17 +161,15 @@ unpack_array_(<<>>, RestLen, _RetList) when RestLen > 0 -> {more, RestLen}; unpack_array_(Bin, RestLen, RetList) when is_binary(Bin)-> case unpack(Bin) of {more, Len} -> {more, Len+RestLen-1}; - {Term, Rest}-> - unpack_array_(Rest, RestLen-1, [Term|RetList]) + {Term, Rest}-> unpack_array_(Rest, RestLen-1, [Term|RetList]) end. % FIXME: write test for pack_map/1 pack_map(M)-> - MaxLen = 16#10000, %65536 case dict:size(M) of Len when Len < 16 -> << 2#1001:4, Len:4/integer-unit:1, (pack_map_(dict:to_list(M))) >>; - Len when Len < MaxLen -> + Len when Len < 16#10000 -> % 65536 << 16#DE:8, Len:16/big-unsigned-integer-unit:1, (pack_map_(dict:to_list(M)))/binary >>; Len -> << 16#DF:8, Len:32/big-unsigned-integer-unit:1, (pack_map_(dict:to_list(M)))/binary >> @@ -348,13 +343,15 @@ compare_all([LH|LTL], [RH|RTL]) -> compare_all(LTL, RTL). test_data()-> - [0, 1, 2, 123, 512, 1230, 678908, 16#FFFFFFFFFF, + [true, false, nil, + 0, 1, 2, 123, 512, 1230, 678908, 16#FFFFFFFFFF, -1, -23, -512, -1230, -567898, -16#FFFFFFFFFF, 123.123, -234.4355, 1.0e-34, 1.0e64, [23, 234, 0.23], <<"hogehoge">>, <<"243546rf7g68h798j", 0, 23, 255>>, <<"hoasfdafdas][">>, - [0,42,"sum", [1,2]], [1,42, nil, [3]] + [0,42, <<"sum">>, [1,2]], [1,42, nil, [3]], + 42 ]. basic_test()-> @@ -395,7 +392,7 @@ long_test()-> map_test()-> Ints = lists:seq(0, 65), - Map = dict:from_list([ {X, X*2} || X <- Ints ]), + Map = dict:from_list([ {X, X*2} || X <- Ints ] ++ [{<<"hage">>, 324}, {43542, [nil, true, false]}]), {Map2, <<>>} = msgpack:unpack(msgpack:pack(Map)), ?assertEqual(dict:size(Map), dict:size(Map2)), OrdMap = orddict:from_list( dict:to_list(Map) ),