robot framework 测试实体 红黑树

这周写了红黑树,不得不说红黑树是复杂难写的数据结构。尽管我闭上眼睛,能够还原出如何插入,时间充足的情况下,不给我任何资料我能写出插入部分,但是删除还是做不来。删除部分的心得并不多。因为左旋右旋,左左右右,一会就搞晕了。所以插入部分用了一个晚上就写完了,但是删除部分用了2个晚上,又是看算法导论,又是看linux kernel 内核的实现。最终仿照了wiki给出代码,参考写出了删除部分。

原理部分我就不写了,我觉得左右虽然是对称的,也算的上优美,两份本质一样的代码,对称地存在在C文件中,本质也是一种冗余。如果没有删除部分,我有雄心,不区分左右,采用child[2]的方式,把左旋右旋 插入部分代码统一在一个架构里面。可是删除写的自己很闹心,可能是我还是没有掌握红黑树的精髓所在。

另一个需要提到的事情是结果的可视化,平衡二叉树,最好的调试手段就是把结果打印出来,打印的直观,就可以分析二叉树是否是对的。我在网上找了相关的代码,不是十分优雅的解决了这个问题。接下来可以学习学习这个方面,我在stackoverflow找到一篇文章不错,还没来得及学习。


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

    #ifndef __RBTREE_H__

    #define __RBTREE_H__

    enum rb_color

    {

        RB_BLACK,

        RB_RED,

    };

    typedef struct rbtree_node

    {

        struct rbtree_node* parent;

        struct rbtree_node* left;

        struct rbtree_node* right;

        enum rb_color color;

        unsigned long long key;

        void *data;

    }rbtree_node;

    typedef struct rbtree

    {

        struct rbtree_node* root;

    }rbtree;

    struct rbtree* rbtree_init();

    int rbtree_insert(struct rbtree *tree, unsigned long long key,void* data);

    void* rbtree_lookup(struct rbtree* tree,unsigned long long key);

    int rbtree_remove(struct rbtree* tree,unsigned long long key);

    #endif

下面是测试代码:

    #include"rbtree.h"

    #include <stdio.h>

    #include <stdlib.h>

    #include<assert.h>

    #define SIZE 1600

    void padding ( char ch, int n )

    {

      int i;

      for ( i = 0; i < n; i++ )

        putchar ( ch );

    }

    void print_node ( struct rbtree_node *root, int level )

    {

      if ( root == NULL )

      {

        padding ( ‘\t‘, level );

        puts ( "NIL" );

      }

      else

      {

        print_node ( root->right, level + 1 );

        padding ( ‘\t‘, level );

        if(root->color == RB_BLACK)

        {

            printf ( "(%llu)\n", root->key );

        }

        else

           printf ( "%llu\n", root->key );

        print_node ( root->left, level + 1 );

      }

    }

    void print_tree(struct rbtree* tree)

    {

        print_node(tree->root,0);

        printf("-------------------------------------------\n");

    }

    int main()

    {

        struct rbtree* tree = rbtree_init();

        if(tree == NULL)

        {

            fprintf(stderr,"malloc tree failed\n");

            return -1;

        }

        int i = 0;

        int array[SIZE] = {0};

        for(i = 0;i<SIZE;i++)

        {

            array[i] = rand()%100000;

            unsigned long long key = array[i];

            int ret = rbtree_insert(tree,key,&array[i]);//-1 mean alloc node failed,

                                                         //-2 mean existed node with same key

           // print_tree(tree);

            void * data = rbtree_lookup(tree,key);

            if(ret == 0)

                assert(data == &array[i]);

        }

        

        for(i = 0; i <SIZE;i+=2)

        {

            rbtree_remove(tree,array[i]);

            //print_tree(tree);

        }

        return 0;

    }

print_tree把中间结果打印出来,这个test工具帮我不少帮,调试的过程,如果没有这个print_tree,全靠gdb的话,调试会特别的难受:

RB红黑树实现部分就不贴了,有点长,500行代码贴上,估计也没人看。完整部分的代码在github,需要的筒子可以拿一份自己用,如感兴趣,请访问我的github:
    https://github.com/manuscola/rbtree

robot framework 测试实体 红黑树

时间: 2024-10-31 06:50:03

robot framework 测试实体 红黑树的相关文章

用Python写Robot Framework测试

Robot Framework 框架是基于 Python 语言开发的,所以,它本质上是 Python 的一个库. 百度搜索实例 创建 py_robot.py 文件,代码如下: from robot.api import TestSuite from robot.api import ResultWriter from robot.model import Keyword # 百度搜索测试 class BaiduSearchTest: def __init__(self, name, librar

Robot Framework测试框架学习笔记

一.Robot Framework框架简介 Robot Framework是一种基于Python的可扩展关键字驱动自动化测试框架,通常用于端到端的可接收测试和可接收测试驱动的开发.可以用于测试声明涉及到多种技术和接口的分布式的,异构的应用系统. 测试用例位于HTML或者TSV(以tab分隔值)文件,使用在测试库中实现的关键词来在测试中运行程序.因为Robot Framework 是灵活和可扩展的,所以它很合适用于测试具有多种接口的复杂软件:用户接口,命令行,web service,编程接口等.

Robot FrameWork测试案例

Robot FrameWork是一个自动测试框架,可到官网查看详细介绍. 安装 Robot Framework 本文中的Robot framework安装在Win7 (32 bit) 平台上. 接下来按顺序安装以下的软件/包. Software Version Post-steps Note Python python-2.7.6 Set ENV Var to PATH: C:\Python27 C:\Python27\Scripts   Robot Framework robotframewo

Robot Framework测试框架用例脚本设计方法

Robot Framework介绍 Robot Framework是一个通用的关键字驱动自动化测试框架.测试用例以HTML,纯文本或TSV(制表符分隔的一系列值)文件存储.通过测试库中实现的关键字驱动被测软件.    Robot Framework灵活且易于扩展.它非常适合测试有不同接口的复杂软件:用户接口.命令行,Web服务,专有的编程接口等. Robot Framework是开源软件,通用的测试库源码安装包和文档等可通过http://robotframework.org获取.Robot Fr

robot framework测试驱动无法定位页面元素

robot framework错误提示: [ WARN ] Keyword 'Capture Page Screenshot' could not be run on failure: NoSuchWindowException: Message: u'Unable to get browser' 环境信息: IE版本是IE 11,windows 7 64位 解决方案(修改注册表): 1.需要设置注册表项(运行regedit). 2.对于32位操作系统:进入HKEY_LOCAL_MACHINE\

Python3 Robot Framework测试框架

一 环境搭建 前提:Python3 环境已经搭建好 1.安装 Robot Framework 框架 管理员运行 cmd 后输入 pip install robotframework 2.安装Requests库 pip install requests 3.安装 robotframework-requests库 pip install -U robotframework-requests 二 sublime安装 这里不使用RIDE编写和运行robot framework (因为它暂时不支持Pyth

robot framework测试https接口实例

关于怎么创建testcase就不写了,网上很多这样的例子. 我测试的这个接口是https的post请求,并且接口传参类型是json格式. 导入测试库: 这里主要用到了这两种 在测试这个接口的时候,遇到了不少坑,主要是在第四步,这个header的传值上.根据F5查询到的RequstsLibrary库的post request方法,传参是要先把uri,data先传,header后传的. 根据这个方法,写出来请求: 结果却是执行失败的.并且参数没传进入 试过多种方法,查了N多资料.都没有对这方面有很多

算法-红黑树

之前的一片博客中关于二叉查找树在最差的情况是O(n),不能完全的达到O(lgN),在一棵还有N个节点的树中,如果树的高度为lgN,那么我们可以在lgN次比较内结束查找,不过动态插入保证树的平衡性代码量和额外的空间都会是很大的代价.为了保证查找树的平衡性,我们可以允许树中的节点可以保存多个键,标准的二叉树的节点我们可以称之为2-节点(一个键和两条链接),3-节点(含有两个键和三条链接),这就是2-3树.一个2-结点左链接小于该结点,右链接大于该节点.3-节点左链接小于所有键,中链介于两个键之间,右

Robot Framework+AutoItLibrary使用

目的:用Robot Framework测试win7桌面程序 因为安装完了才补的记录,估计有错漏:( 步骤: 1. 尝试pip install AutoItLibrary 失败 2. 下载AutoItLibrary安装包:AutoItLibrary-1.1.zip 地址:http://www.softpedia.com/get/Programming/Components-Libraries/AutoItLibrary.shtml 解压后,python setup.py install pip l