Skip to content

Commit

Permalink
All functions now accept IoLists as well
Browse files Browse the repository at this point in the history
  • Loading branch information
fdmanana committed Mar 27, 2011
1 parent 97d1aa2 commit 36dd21f
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 18 deletions.
8 changes: 4 additions & 4 deletions c_src/snappy.cc
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ extern "C" {
ERL_NIF_TERM snappy_compress(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) { ERL_NIF_TERM snappy_compress(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) {
ErlNifBinary input; ErlNifBinary input;


if (!enif_inspect_binary(env, argv[0], &input)) { if (!enif_inspect_iolist_as_binary(env, argv[0], &input)) {
return enif_make_badarg(env); return enif_make_badarg(env);
} }


Expand All @@ -110,7 +110,7 @@ extern "C" {
ERL_NIF_TERM snappy_decompress(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) { ERL_NIF_TERM snappy_decompress(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) {
ErlNifBinary input; ErlNifBinary input;


if (!enif_inspect_binary(env, argv[0], &input)) { if (!enif_inspect_iolist_as_binary(env, argv[0], &input)) {
return enif_make_badarg(env); return enif_make_badarg(env);
} }


Expand Down Expand Up @@ -151,7 +151,7 @@ extern "C" {
ERL_NIF_TERM snappy_get_uncompressed_length(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) { ERL_NIF_TERM snappy_get_uncompressed_length(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) {
ErlNifBinary input; ErlNifBinary input;


if (!enif_inspect_binary(env, argv[0], &input)) { if (!enif_inspect_iolist_as_binary(env, argv[0], &input)) {
return enif_make_badarg(env); return enif_make_badarg(env);
} }


Expand All @@ -174,7 +174,7 @@ extern "C" {
ERL_NIF_TERM snappy_is_valid_compressed_buffer(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) { ERL_NIF_TERM snappy_is_valid_compressed_buffer(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) {
ErlNifBinary input; ErlNifBinary input;


if (!enif_inspect_binary(env, argv[0], &input)) { if (!enif_inspect_iolist_as_binary(env, argv[0], &input)) {
return enif_make_badarg(env); return enif_make_badarg(env);
} }


Expand Down
8 changes: 4 additions & 4 deletions src/snappy.erl
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -37,17 +37,17 @@ init() ->
erlang:load_nif(SoName, 0). erlang:load_nif(SoName, 0).




compress(_Bin) -> compress(_IoList) ->
exit({snappy_nif_not_loaded, module, ?MODULE, line, ?LINE}). exit({snappy_nif_not_loaded, module, ?MODULE, line, ?LINE}).




decompress(_Bin) -> decompress(_IoList) ->
exit({snappy_nif_not_loaded, module, ?MODULE, line, ?LINE}). exit({snappy_nif_not_loaded, module, ?MODULE, line, ?LINE}).




get_uncompressed_length(_Bin) -> get_uncompressed_length(_IoList) ->
exit({snappy_nif_not_loaded, module, ?MODULE, line, ?LINE}). exit({snappy_nif_not_loaded, module, ?MODULE, line, ?LINE}).




is_valid_compressed_buffer(_Bin) -> is_valid_compressed_buffer(_IoList) ->
exit({snappy_nif_not_loaded, module, ?MODULE, line, ?LINE}). exit({snappy_nif_not_loaded, module, ?MODULE, line, ?LINE}).
32 changes: 22 additions & 10 deletions test/snappy_tests.erl
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ decompression_test_() ->




compression() -> compression() ->
Data = iolist_to_binary( DataIoList = lists:duplicate(11, <<"words that go unspoken, deeds that go undone">>),
lists:duplicate(11, <<"words that go unspoken, deeds that go undone">>)), Data = iolist_to_binary(DataIoList),
Result = snappy:compress(Data), Result = snappy:compress(Data),
?assertMatch({ok, _}, Result), ?assertMatch({ok, _}, Result),
{ok, Compressed} = Result, {ok, Compressed} = Result,
Expand All @@ -36,27 +36,39 @@ compression() ->
?assertEqual(true, snappy:is_valid_compressed_buffer(Compressed)), ?assertEqual(true, snappy:is_valid_compressed_buffer(Compressed)),
?assertEqual(false, snappy:is_valid_compressed_buffer(Data)), ?assertEqual(false, snappy:is_valid_compressed_buffer(Data)),
?assertEqual(false, snappy:is_valid_compressed_buffer(<<"foobar123">>)), ?assertEqual(false, snappy:is_valid_compressed_buffer(<<"foobar123">>)),

?assertEqual({ok, byte_size(Data)}, snappy:get_uncompressed_length(Compressed)), ?assertEqual({ok, byte_size(Data)}, snappy:get_uncompressed_length(Compressed)),

Result2 = snappy:compress(DataIoList),
?assertMatch({ok, _}, Result2),
{ok, Compressed2} = Result2,

?assertEqual(byte_size(Compressed2), byte_size(Compressed)),
?assertEqual(true, snappy:is_valid_compressed_buffer(Compressed2)),
?assertEqual({ok, byte_size(Data)}, snappy:get_uncompressed_length(Compressed2)),
ok. ok.




decompression() -> decompression() ->
Data = iolist_to_binary( DataIoList = lists:duplicate(11, <<"words that go unspoken, deeds that go undone">>),
lists:duplicate(11, <<"words that go unspoken, deeds that go undone">>)), Data = iolist_to_binary(DataIoList),
Result = snappy:compress(Data), Result = snappy:compress(Data),
?assertMatch({ok, _}, Result), ?assertMatch({ok, _}, Result),
{ok, Compressed} = Result, {ok, Compressed} = Result,

?assertEqual({ok, Data}, snappy:decompress(Compressed)), ?assertEqual({ok, Data}, snappy:decompress(Compressed)),


Result2 = snappy:compress(DataIoList),
?assertMatch({ok, _}, Result2),
{ok, Compressed2} = Result2,
?assertEqual({ok, Data}, snappy:decompress(Compressed2)),

BigData = <<"mVPZzfDzKNeZrh1QdkMEgh2U0Bv2i3+bLJaCqgNibXuMuwfjrqTuxPGupxjI", BigData = <<"mVPZzfDzKNeZrh1QdkMEgh2U0Bv2i3+bLJaCqgNibXuMuwfjrqTuxPGupxjI",
"xEbuYR+u/KZvSDhoxnkpPbgJo7oiQv2ibDrrGZx7RDs3Nn7Ww51B7+zUL4tr", "xEbuYR+u/KZvSDhoxnkpPbgJo7oiQv2ibDrrGZx7RDs3Nn7Ww51B7+zUL4tr",
"G+16TlJilJT47Z4cQn8EpWex2bMRFAoJ6AMJAodLGbiD78yUyIorRKVcCa+k", "G+16TlJilJT47Z4cQn8EpWex2bMRFAoJ6AMJAodLGbiD78yUyIorRKVcCa+k",
"udzjsqYAoXzW/z8JCB6rbGGSbnLyqztR//ch5sRwSvYARlV+IamzBkDXFZxj", "udzjsqYAoXzW/z8JCB6rbGGSbnLyqztR//ch5sRwSvYARlV+IamzBkDXFZxj",
"5TAwAl2ZcbCeMX0qgXX4EonVZxc=">>, "5TAwAl2ZcbCeMX0qgXX4EonVZxc=">>,
Result2 = snappy:compress(BigData), Result3 = snappy:compress(BigData),
?assertMatch({ok, _}, Result2), ?assertMatch({ok, _}, Result3),
{ok, Compressed2} = Result2, {ok, Compressed3} = Result3,
?assertEqual({ok, BigData}, snappy:decompress(Compressed2)), ?assertEqual({ok, BigData}, snappy:decompress(Compressed3)),
ok. ok.

0 comments on commit 36dd21f

Please sign in to comment.