[b]一个简单的Erlang函数,带上EUnit的测试函数,最后用QuickCheck再写个同类的。[/b]
话说,还在上学那会儿,[url=http://www.amazon.com/Francesco-Cesarini/e/B002UKN2G2/ref=ntt_athr_dp_pel_1]Francesco Cesarini[/url]来给我们上课,中间出个练习就是写个Erlang的冒泡排序,那会儿费半天劲写了一个,现在回想起这个又写了一次,不过这次偷懒,用个计数器,比完全递归简单多了就。
简单的代码
加入EUnit的测试代码:
因为并列多种,所以用EUnit的xxx_test_形式,中间对应的用?_xxx的形式,简单列出几种情况来。
再来看比较好玩的QuickCheck随着Quviq发布了免费的QuickCheck mini玩这个方便多了
注意的就是因为EUnit和QuickCheck都有?LET的定义,所以,别放到一起。在QuickCheck当中,这里用了list与int组合的generator,赋值给List最后的是property
话说,还在上学那会儿,[url=http://www.amazon.com/Francesco-Cesarini/e/B002UKN2G2/ref=ntt_athr_dp_pel_1]Francesco Cesarini[/url]来给我们上课,中间出个练习就是写个Erlang的冒泡排序,那会儿费半天劲写了一个,现在回想起这个又写了一次,不过这次偷懒,用个计数器,比完全递归简单多了就。
简单的代码
bubble_sort(List) -> do_bubble_sort(List, length(List)).
do_bubble_sort(List, 0) -> List;
do_bubble_sort(List, N) ->
do_bubble_sort(do_bubble(List), N-1).
do_bubble([A, B|Rest]) when A > B ->
[B|do_bubble([A|Rest])];
do_bubble([A, B|Rest]) ->
[A|do_bubble([B|Rest])];
do_bubble([Value]) ->
[Value].
加入EUnit的测试代码:
-include_lib("eunit/include/eunit.hrl").
....
bubble_sort_test_() ->
[?_assertEqual([], bubble_sort([]))
,?_assertEqual([1,2], bubble_sort([1,2]))
,?_assertEqual([1,2], bubble_sort([2,1]))
,?_assertEqual([1,2,3], bubble_sort([2,1,3]))
].
因为并列多种,所以用EUnit的xxx_test_形式,中间对应的用?_xxx的形式,简单列出几种情况来。
再来看比较好玩的QuickCheck随着Quviq发布了免费的QuickCheck mini玩这个方便多了
-include_lib("eqc/include/eqc.hrl").
....
prop_bubble_sort() ->
?FORALL(List, list(int()),
bubble_sort(List) == lists:sort(List)).
注意的就是因为EUnit和QuickCheck都有?LET的定义,所以,别放到一起。在QuickCheck当中,这里用了list与int组合的generator,赋值给List最后的是property