zoukankan      html  css  js  c++  java
  • C++单元测试 之 gtest -- 组合数计算.

    本文将介绍如何使用gtest进行单元测试. 

    gtest是google单元测试框架.使用非常方便.

    首先,下载gtest (有些google项目包含gtest,如 protobuf),复制目录即可使用.

    http://code.google.com/p/googletest/ 

    如果被墙,就百度搜下,很多.

    解压 gtest.zip, 得到gtest.1.x.x目录.

    export GTEST_HOME=该目录

    编译:
    cd $GTEST_HOME/make
    make

    运行示例程序, 熟悉 gtest风格
    ./sample1_unittes

    编译后还会得到一个 gtest_main.a 的静态库.
    ln -s gtest_main.a libgtest.a
    软链接以便符合 gcc 库引用规范.

    按 sample1_unittes.cc 写好自己的测试代码(test.cpp)后,就可以开始编译

    g++ -I$GTEST_HOME/include -L$GTEST_HOME/make -lgtest test.cpp -o test.exe
    生成测试程序 test.exe

    组合数计算代码 combination.cpp:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include "combination.h"
    
    long combination(long base,long select) {
    long res=0;
    if(base<select || base <= 0) return 0;
    if(base==select) return 1;
    if(select >= base - select) {
    res=arrangement(select+1,base) / arrangement (1,base - select);
    }
    else {
    res=arrangement(base-select+1,base) / arrangement (1,select);
    }
    return res;
    }
    
    
    long arrangement(long start,long end) {
    if( start <= 0 || start > end) {
    return 1;
    }
    long res=start;
    for(long i=start+1;i<=end;i++) {
    res*=i;
    }
    return res;
    } 

    头文件combination.h: 

    long combination(long base,long select);
    long arrangement(long start,long end); 

    测试代码 gtest_combination.cpp

    #include <limits.h>
    #include "combination.h"
    #include <gtest/gtest.h>
    
    
    TEST(arrangement, all) {
      EXPECT_EQ(1, arrangement(0,1));
      EXPECT_EQ(1, arrangement(1,1));
      EXPECT_EQ(1, arrangement(1,0));
      EXPECT_EQ(1, arrangement(5,0));
      EXPECT_EQ(2, arrangement(2,2));
      EXPECT_EQ(24, arrangement(2,4));
      EXPECT_EQ(120, arrangement(1,5));
      EXPECT_EQ(7*8*9, arrangement(7,9));
    
    }
    
    TEST(combination, all) {
      EXPECT_EQ(0, combination(0,1));
      EXPECT_EQ(0, combination(0,0));
      EXPECT_EQ(0, combination(-1,1));
      EXPECT_EQ(0, combination(1,2));
      EXPECT_EQ(1, combination(1,1));
      EXPECT_EQ(2, combination(2,1));
      EXPECT_EQ(3, combination(3,1));
      EXPECT_EQ(1, combination(2,2));
      EXPECT_EQ(3, combination(3,2));
      EXPECT_EQ(1, combination(3,3));
      EXPECT_EQ(1, combination(4,0));
      EXPECT_EQ(4, combination(4,1));
      EXPECT_EQ(6, combination(4,2));
      EXPECT_EQ(4, combination(4,3));
      EXPECT_EQ(1, combination(4,4));
      EXPECT_EQ(0, combination(4,5));
      EXPECT_EQ(84, combination(9,3));
    }

    Makefile:

    TEST=gtest_combination
    TESTOBJ=$(TEST).o
    TAROBJ=combination.o

    all: $(TEST)

    $(TEST): $(TESTOBJ) $(TAROBJ)
    g++ -I$(GTEST_HOME)/include -L$(GTEST_HOME)/make -lgtest $^ -o $@

    %.o: %.cpp
    g++ -c -I$(GTEST_HOME)/include -g -o $@ $<

    编译及测试:

    $make

    $gtest_combination

    输出结果:

    Running main() from gtest_main.cc
    [==========] Running 2 tests from 2 test cases.
    [----------] Global test environment set-up.
    [----------] 1 test from arrangement
    [ RUN ] arrangement.all
    [ OK ] arrangement.all (0 ms)
    [----------] 1 test from arrangement (0 ms total)

    [----------] 1 test from combination
    [ RUN ] combination.all
    [ OK ] combination.all (0 ms)
    [----------] 1 test from combination (0 ms total)

    [----------] Global test environment tear-down
    [==========] 2 tests from 2 test cases ran. (6 ms total)
    [ PASSED ] 2 tests.

  • 相关阅读:
    hdu 1017 A Mathematical Curiosity 解题报告
    hdu 2069 Coin Change 解题报告
    hut 1574 组合问题 解题报告
    hdu 2111 Saving HDU 解题报
    hut 1054 Jesse's Code 解题报告
    hdu1131 Count the Trees解题报告
    hdu 2159 FATE 解题报告
    hdu 1879 继续畅通工程 解题报告
    oracle的系统和对象权限
    oracle 自定义函数 返回一个表类型
  • 原文地址:https://www.cnblogs.com/aauutthh/p/3949246.html
Copyright © 2011-2022 走看看