一个简单的Erlang函数,带上EUnit的测试函数,最后用QuickCheck再写个同类的。
话说,还在上学那会儿,
Francesco Cesarini来给我们上课,中间出个练习就是写个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
分享到:
相关推荐
《Erlang的单元测试文档,eunit》这一资料深入探讨了Erlang编程语言中的单元测试框架——EUnit,为开发者提供了详尽的指导与实践建议。 ### Erlang与EUnit Erlang是一种通用的、并发的、容错的编程语言,由...
4. **try_test.beam** - 这可能是用于测试异常处理的代码,Erlang使用`try...catch...finally`结构来捕获和处理异常,这在编写健壮的系统时非常关键。 5. **area_server_final.beam** - 这可能是一个服务器实现,...
在这个“erlang 连接学习例子”中,我们有两个核心文件:`server.erl` 和 `client.erl`,它们分别代表了一个服务器进程和客户端进程,展示了Erlang中进程间的通信机制。 `server.erl` 文件通常包含一个持续运行的...
"Introducing Erlang"这本书将帮助初学者理解Erlang的基本语法、并发模型和 OTP 框架,是入门Erlang的好资料。同时,Erlang社区活跃,有许多在线教程、文档和论坛供学习者参考。 总结来说,Erlang以其独特的函数式...
标题中的“在erlang项目中使用protobuf例子”指的是在Erlang编程环境中使用Protocol Buffers(protobuf)这一数据序列化工具。protobuf是由Google开发的一种高效、跨语言的数据表示和序列化格式,它允许开发者定义...
每个桶内部的数据量相对较小,可以采用更简单的排序算法,如插入排序或计数排序。 2. 桶内排序:对每个桶内的数据进行排序。由于桶内数据量小,可以使用效率较高的排序算法。 3. 桶间排序:按照桶的顺序依次遍历每...
OpenPoker是使用Erlang编写的一个开源扑克游戏服务器,它为初学者提供了一个了解Erlang语言特性和并发编程模式的良好起点。 在"erlang open poker 最好的入门程序源码"中,我们可以学习到以下几个关键知识点: 1. ...
Erlang/OTP Application完整例子,含代码和二进制,对于学习Erlang/OTP Application很有帮助。 配套文章http://blog.csdn.net/mycwq/article/details/12610677
**Erlang程序设计与入门** ...通过阅读《Erlang入门手册》和《Erlang程序设计》这两本书,你可以深入了解Erlang的基础知识、编程技巧以及最佳实践,从而在函数式编程和并发系统的世界里游刃有余。
标题 "一种傻纸牌游戏的Erlang实现" 暗示了我们将探讨一个使用Erlang编程语言构建的简单纸牌游戏。Erlang是一种并发性极强、功能丰富的函数式编程语言,常用于构建分布式系统和高可用性的应用程序。 在描述中提到的...
Windows下使用NIF扩展Erlang完整例子,包含nif工程项目,erlang引用例子。 配套文章:http://blog.csdn.net/mycwq/article/details/17527485
erlang是爱立信开发的程序开发语言,融合了函数式编程与面向对象编程,并行处理内建与程序语言内部,特别适合创建并发行、容错性、分布性要求比较高的软实时系统,掌握它程序员必备的一种编程技能,与它相似的语言...
### Erlang基础知识与特性 #### 一、Erlang简介 Erlang是一种专为处理大规模并发活动设计的编程语言,由瑞典电信设备制造商爱立信的计算机科学实验室(Computer Science Laboratory, CSLab)开发。该语言的目标是...
"Introducing Erlang"是Simon St. Laurent撰写的一本入门级教程,旨在帮助初学者理解和掌握Erlang的核心概念和特性。 ### 1. 函数式编程基础 Erlang基于函数式编程范式,这意味着程序由纯函数构成,没有副作用。...
本教程将带你入门Erlang,通过实践来学习其基本概念和语法。 在Erlang中,程序是由一系列的进程构成的,这些进程独立运行且相互通信,这使得Erlang非常适合处理并发任务。"ben.erl"文件很可能是一个简单的Erlang源...
这个“erlang资源”包含两本PDF书籍——《Erlang并发编程》和《Erlang入门手册》,它们是深入理解和学习Erlang语言的关键资料。 《Erlang并发编程》这本书可能涵盖了以下知识点: 1. **并发模型**:Erlang的并发...
9. **开发工具与实践**:Erlang的开发环境如Eclipse插件(ErlyDTL)、文本编辑器集成、Git版本控制,以及测试框架如eunit和CT(Common Test)。 综上所述,这份PPT将为学习者提供一个深入了解Erlang高级特性和实际...
Erlang是一种面向并发和分布式系统的语言,以其高可靠性而著称,而Yaws是由Claes Wikström用Erlang编写的高性能Web服务器,能够处理大量并发连接。 首先,Yaws提供了几种处理动态内容和构建REST服务的方式: 1. *...
这是一本讲解Erlang编程语言的入门指南,内容通俗易懂,插图生动幽默,示例短小清晰,结构安排合理。书中从Erlang的基础知识讲起,融汇所有的基本概念和语法。 这是一本讲解Erlang编程语言的入门指南,内容通俗易懂...