用Erlang的冒泡排序小例子简单入门EUnit和QuickCheck

[b]一个简单的Erlang函数,带上EUnit的测试函数,最后用QuickCheck再写个同类的。[/b]

话说,还在上学那会儿,[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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值