`
wj2me
  • 浏览: 12623 次
  • 性别: Icon_minigender_1
  • 来自: 杜塞尔多夫
最近访客 更多访客>>
社区版块
存档分类
最新评论

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

阅读更多
一个简单的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
1
0
分享到:
评论

相关推荐

    erlang eunit

    《Erlang的单元测试文档,eunit》这一资料深入探讨了Erlang编程语言中的单元测试框架——EUnit,为开发者提供了详尽的指导与实践建议。 ### Erlang与EUnit Erlang是一种通用的、并发的、容错的编程语言,由...

    erlang程序设计相关例子程序

    4. **try_test.beam** - 这可能是用于测试异常处理的代码,Erlang使用`try...catch...finally`结构来捕获和处理异常,这在编写健壮的系统时非常关键。 5. **area_server_final.beam** - 这可能是一个服务器实现,...

    erlang 连接学习例子

    在这个“erlang 连接学习例子”中,我们有两个核心文件:`server.erl` 和 `client.erl`,它们分别代表了一个服务器进程和客户端进程,展示了Erlang中进程间的通信机制。 `server.erl` 文件通常包含一个持续运行的...

    Erlang入门

    "Introducing Erlang"这本书将帮助初学者理解Erlang的基本语法、并发模型和 OTP 框架,是入门Erlang的好资料。同时,Erlang社区活跃,有许多在线教程、文档和论坛供学习者参考。 总结来说,Erlang以其独特的函数式...

    在erlang项目中使用protobuf例子

    标题中的“在erlang项目中使用protobuf例子”指的是在Erlang编程环境中使用Protocol Buffers(protobuf)这一数据序列化工具。protobuf是由Google开发的一种高效、跨语言的数据表示和序列化格式,它允许开发者定义...

    Erlang 百万级用户排行榜桶排序

    每个桶内部的数据量相对较小,可以采用更简单的排序算法,如插入排序或计数排序。 2. 桶内排序:对每个桶内的数据进行排序。由于桶内数据量小,可以使用效率较高的排序算法。 3. 桶间排序:按照桶的顺序依次遍历每...

    erlang open poker 最好的入门程序源码

    OpenPoker是使用Erlang编写的一个开源扑克游戏服务器,它为初学者提供了一个了解Erlang语言特性和并发编程模式的良好起点。 在"erlang open poker 最好的入门程序源码"中,我们可以学习到以下几个关键知识点: 1. ...

    Erlang/OTP Application完整例子

    Erlang/OTP Application完整例子,含代码和二进制,对于学习Erlang/OTP Application很有帮助。 配套文章http://blog.csdn.net/mycwq/article/details/12610677

    erlang程序设计与入门

    **Erlang程序设计与入门** ...通过阅读《Erlang入门手册》和《Erlang程序设计》这两本书,你可以深入了解Erlang的基础知识、编程技巧以及最佳实践,从而在函数式编程和并发系统的世界里游刃有余。

    一种傻纸牌游戏的Erlang实现

    标题 "一种傻纸牌游戏的Erlang实现" 暗示了我们将探讨一个使用Erlang编程语言构建的简单纸牌游戏。Erlang是一种并发性极强、功能丰富的函数式编程语言,常用于构建分布式系统和高可用性的应用程序。 在描述中提到的...

    Windows下使用NIF扩展Erlang完整例子

    Windows下使用NIF扩展Erlang完整例子,包含nif工程项目,erlang引用例子。 配套文章:http://blog.csdn.net/mycwq/article/details/17527485

    erlang开发入门教程

    erlang是爱立信开发的程序开发语言,融合了函数式编程与面向对象编程,并行处理内建与程序语言内部,特别适合创建并发行、容错性、分布性要求比较高的软实时系统,掌握它程序员必备的一种编程技能,与它相似的语言...

    Erlang初级入门(英文pdf)

    ### Erlang基础知识与特性 #### 一、Erlang简介 Erlang是一种专为处理大规模并发活动设计的编程语言,由瑞典电信设备制造商爱立信的计算机科学实验室(Computer Science Laboratory, CSLab)开发。该语言的目标是...

    erlang编程 Introducing Erlang

    "Introducing Erlang"是Simon St. Laurent撰写的一本入门级教程,旨在帮助初学者理解和掌握Erlang的核心概念和特性。 ### 1. 函数式编程基础 Erlang基于函数式编程范式,这意味着程序由纯函数构成,没有副作用。...

    erlang 入门练习

    本教程将带你入门Erlang,通过实践来学习其基本概念和语法。 在Erlang中,程序是由一系列的进程构成的,这些进程独立运行且相互通信,这使得Erlang非常适合处理并发任务。"ben.erl"文件很可能是一个简单的Erlang源...

    erlang资源

    这个“erlang资源”包含两本PDF书籍——《Erlang并发编程》和《Erlang入门手册》,它们是深入理解和学习Erlang语言的关键资料。 《Erlang并发编程》这本书可能涵盖了以下知识点: 1. **并发模型**:Erlang的并发...

    erlang高级原理和应用PPT

    9. **开发工具与实践**:Erlang的开发环境如Eclipse插件(ErlyDTL)、文本编辑器集成、Git版本控制,以及测试框架如eunit和CT(Common Test)。 综上所述,这份PPT将为学习者提供一个深入了解Erlang高级特性和实际...

    使用Erlang和Yaws开发REST式的服务

    Erlang是一种面向并发和分布式系统的语言,以其高可靠性而著称,而Yaws是由Claes Wikström用Erlang编写的高性能Web服务器,能够处理大量并发连接。 首先,Yaws提供了几种处理动态内容和构建REST服务的方式: 1. *...

    Erlang趣学指南

    这是一本讲解Erlang编程语言的入门指南,内容通俗易懂,插图生动幽默,示例短小清晰,结构安排合理。书中从Erlang的基础知识讲起,融汇所有的基本概念和语法。 这是一本讲解Erlang编程语言的入门指南,内容通俗易懂...

Global site tag (gtag.js) - Google Analytics