-module(zlists_tests). -compile(export_all). -import(zlists, [list_to_zlist/1, zlist_to_list/1, prev/1, next/1, current/1, replace/2, insert/2, delete/1, map/2, rmap/2]). -include_lib("eunit/include/eunit.hrl"). list_to_zlist_test_() -> % Dialyzer will warn about improper lists. [?_assertEqual({[], []}, list_to_zlist([])), ?_assertEqual({[], [a]}, list_to_zlist([a])), ?_assertEqual({[], [a,b,c]}, list_to_zlist([a,b,c]))]. zlist_to_list_test_() -> [?_assertEqual([], zlist_to_list({[], []})), ?_assertEqual([a], zlist_to_list({[a], []})), ?_assertEqual([a], zlist_to_list({[], [a]})), ?_assertEqual([a,b], zlist_to_list({[a], [b]})), ?_assertEqual([a,b,c,d], zlist_to_list({[b,a], [c,d]}))]. prev_test_() -> [?_assertError(function_clause, prev({[],[1,2,3]})), ?_assertEqual({[1], [2,3,4]}, prev({[2,1], [3,4]}))]. next_test_() -> [?_assertError(function_clause, next({[1,2,3],[]})), ?_assertEqual({[2,1], [3,4]}, next({[1], [2,3,4]}))]. current_test_() -> [?_assertError(function_clause, current({[], []})), ?_assertError(function_clause, current({[1], []})), ?_assertEqual(2, current({[1], [2,3]}))]. replace_test_() -> [?_assertError(function_clause, replace(1, {[a], []})), ?_assertEqual({[], [3,2]}, replace(3, {[], [1,2]}))]. insert_test_() -> [?_assertEqual({[],[1]}, insert(1, {[], []})), ?_assertEqual({[1], [2,3,4]}, insert(2, {[1], [3,4]}))]. delete_test_() -> [?_assertError(function_clause, delete({[], []})), ?_assertEqual({[1],[3]}, delete({[1], [2,3]}))]. maps_test_() -> [?_assertEqual({[4,3,2], []}, map(fun(X) -> X+1 end, list_to_zlist([1,2,3]))), ?_assertEqual(list_to_zlist([1,2,3]), rmap(fun(X) -> X-1 end, {[4,3,2], []}))].