From 8f58c5aa02fa992d4eb6676367f0f5a371e5d3e2 Mon Sep 17 00:00:00 2001 From: tarka Date: Sun, 14 May 2006 02:49:45 -0700 Subject: Add encoding for strings, lists and integers, and appropriate tests. --- bencode.erl | 12 ++++++++++-- tests.erl | 31 +++++++++++++++++++++++++++++-- 2 files changed, 39 insertions(+), 4 deletions(-) diff --git a/bencode.erl b/bencode.erl index fb8e9f3..a335ab9 100644 --- a/bencode.erl +++ b/bencode.erl @@ -7,8 +7,16 @@ %% %% %% %% %% %% %% %% Decoding %% %% %% %% %% %% %% %% -bencode(Val) when is_integer(Val) -> - "i" ++ integer_to_list(Val) ++ "e". +bencode({int, Val}) -> + "i" ++ integer_to_list(Val) ++ "e"; + +bencode({string, Val}) -> + integer_to_list(length(Val)) ++ ":" ++ Val; + +bencode({list, Val}) -> + Fun = fun(A) -> bencode(A) end, + "l" ++ lists:flatten(lists:map(Fun, Val)) ++ "e". + %% %% %% %% %% %% %% %% Decoding %% %% %% %% %% %% %% %% diff --git a/tests.erl b/tests.erl index 2fc7569..d140101 100644 --- a/tests.erl +++ b/tests.erl @@ -8,11 +8,38 @@ test_dec_string1/0, test_dec_string2/0, test_dec_list1/0, test_dec_list2/0, test_dec_list3/0, test_dec_list4/0, test_dec_list5/0, test_dec_dict1/0]). --export([test_enc_int1/0]). +-export([test_enc_int1/0, test_enc_int2/0, + test_enc_string1/0, test_enc_string2/0, + test_enc_list1/0, test_enc_list2/0, test_enc_list3/0]). %% Integer decoding tests test_enc_int1() -> - ?match("i999e", bencode:bencode(999)). + ?match("i999e", bencode:bencode({int, 999})). +test_enc_int2() -> + ?match("i-999e", bencode:bencode({int, -999})). + +%% String encoding tests +test_enc_string1() -> + ?match("0:", bencode:bencode({string, ""})). +test_enc_string2() -> + ?match("3:xyz", bencode:bencode({string, "xyz"})). + +%% List encoding tests +test_enc_list1() -> + ?match("li1ei2ei3ee", bencode:bencode({list, [{int, 1}, + {int, 2}, + {int, 3}]})). +test_enc_list2() -> + ?match("li1e3:xyzi3ee", bencode:bencode({list, [{int, 1}, + {string, "xyz"}, + {int, 3}]})). +test_enc_list3() -> + ?match("l3:abcli1ei2ei3ee3:xyze", bencode:bencode({list, [{string, "abc"}, + {list, [{int, 1}, + {int, 2}, + {int, 3}]}, + {string, "xyz"}]})). + %% Integer decoding tests test_dec_int1() -> -- cgit v1.2.3