Erlang实现斐波、快排、冒泡及EUnit测试用例

  1. 斐波那契数列实现
-module(fibonacci2).

-include_lib("eunit/include/eunit.hrl").

-export([fibo/1]).

fibo(N) -> check(N).
%fibo(N) -> fb(1, [0], 0, N).

check(N) ->
  if
    N < 0 -> false;
	is_integer(N) -> fb(1, [0], 0, N);
	true -> false
end.

fb(A, [B|Acc], I, N) when I == N -> reverse([B|Acc], []);
fb(A, [B|Acc], I, N) when I < N -> fb(A+B, [A|[B|Acc]], I+1, N).

reverse([], Acc) -> Acc;
reverse([H|T], Acc) -> reverse(T, [H|Acc]).

%%-------------------------------------
%% 				测试用例
%%-------------------------------------
fibo_test_() ->
[?_assert(fibo(0) =:= [0]),
?_assert(fibo(5) =:= [0,1,1,2,3,5]),
?_assert(fibo(9) =:= [0,1,1,2,3,5,8,13,21,34]),
%?_assertException(error, function_clause, fibo(9.0)),
%?_assertException(error, function_clause, fibo(-9)),
%?_assertException(error, function_clause, fibo(a))
?_assertEqual(false, fibo(9.0)),
?_assertEqual(false, fibo(-9)),
?_assertEqual(false, fibo(a))
].

运行实例:
在这里插入图片描述
测试实例:
在这里插入图片描述
2.快速排序实现

-module(quick_sort2).

-include_lib("eunit/include/eunit.hrl").

-export([qs/1]).

qs(Acc) -> qsort(Acc).

qsort([]) -> [];
qsort([H|T]) -> 
  qsort([ X || X <- T, X =< H])
  ++ [H] ++
  qsort([ X || X <- T, X > H]).
  
%%--------------------------------------------
%%                  测试用例
%%--------------------------------------------
qs_test_() ->
[
?_assert(qs([5,7,3,2,6,1,9,0]) =:= [0,1,2,3,5,6,7,9]),
?_assert(qs([0,0,0]) =:= [0,0,0]),
?_assert(qs([]) =:= []),
?_assert(qs([2,3,77,5,3,1]) =:= [1,2,3,3,5,77]),
?_assert(qs([3,2.0,5.3,3.6,8.1]) =:= [2.0,3,3.6,5.3,8.1]),
?_assert(qs([2,-5,-15,1,0]) =:= [-15,-5,0,1,2]),
?_assert(qs([a, b, a, c]) =:= [a,a,b,c]),
?_assertException(error, function_clause, qs({2,7,3,5.2,1})),
?_assertException(error, function_clause, qs(234))
].

运行实例:
在这里插入图片描述
测试实例:
在这里插入图片描述
3.冒泡排序实现

-module(bubble_sort2).

-include_lib("eunit/include/eunit.hrl").

-export([bsort/1]).

bsort(Acc) -> boutsort(Acc, length(Acc)).

%% 冒泡外层循环
boutsort(Acc, 0) -> Acc;
boutsort(Acc, N) -> boutsort(binnersort(Acc), N-1).

%%冒泡内层循环(从小到大排序)
binnersort([A, B|Rest]) when A < B ->
  [A | binnersort([B | Rest])];
binnersort([A, B|Rest]) ->
  [B | binnersort([A | Rest])];
binnersort([Lastone]) ->
  [Lastone].							%% lastone必须要大写
  
%%--------------------------------------------
%%                  测试用例
%%--------------------------------------------
bsort_test_() ->
[
?_assert(bsort([5,7,3,2,6,1,9,0]) =:= [0,1,2,3,5,6,7,9]),
?_assert(bsort([0,0,0]) =:= [0,0,0]),
?_assert(bsort([]) =:= []),
?_assert(bsort([2,3,77,5,3,1]) =:= [1,2,3,3,5,77]),
?_assert(bsort([3,2.0,5.3,3.6,8.1]) =:= [2.0,3,3.6,5.3,8.1]),
?_assert(bsort([2,-5,-15,1,0]) =:= [-15,-5,0,1,2]),
?_assert(bsort([a, b, a, c]) =:= [a,a,b,c]),
?_assertException(error, badarg, bsort({2,7,3,5.2,1})),
?_assertException(error, badarg, bsort(234))
].
                           

运行实例:
在这里插入图片描述
测试实例:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值