位元幣原始碼解析 3 準備知識 Boost

2021-08-15 14:45:24 字數 2826 閱讀 5266

boost中test模組是用來給**做單元測試的,測試的方法是白盒測試,所以編寫測試必須對待測試的模組有深度的理解,然後再對正常功能和可能會出現的問題進行測試,測試的實際過程就是給定輸入判定是否和預期的輸出相同,所以test本質上也是個驗證等式的工具外加了一層包裝。

測試過程中三個主要的工具是boost_warnboost_checkboost_require

// example5.cpp

#define boost_test_module mytest

#include

boost_auto_test_suite(mytest)

boost_auto_test_case(test1)

boost_auto_test_case(test2) color;

color c = green;

boost_warn(sizeof(green) > sizeof(char));

boost_check(c == 2); // boost_check斷言失敗繼續執行

boost_require(yellow > red); //boost_require斷言失敗,測試停止

boost_check(black != 4);

}boost_auto_test_suite_end()

/*g++ example5.cpp -lboost_unit_test_framework

./a.out

running 2 test case...

example5.cpp(15): error in "test2": check c == 2 failed

example5.cpp(16): fatal error in "test2": critical check yellow > red failed

*** 2 failures detected in test suite "mytest"

*/

另外,對於浮點數比較,boost還提供了boost_check_close_fraction(left-value, right-value, tolerance-limit),呼叫的過程中left-valueright-value的型別要一致,否則會報錯。

test中還有乙個比較重要的概念是叫做test fixture,是指為測試case開始時設定乙個上下文環境,測試結束時清楚環境。具體來說就是定義乙個新的物件在物件的建構函式中完成環境設定工作,在物件的析構函式中完成清除工作。具體使用看下面例項。

// example5_2.cpp

#define boost_test_module mytest

#include

#include

struct f

~f()

};boost_auto_test_suite(mytest)

// boost_fixture_test_suite(mytest, f), 也可以直接為該suite中所有的case都配置f上下文

// case執行前先呼叫f(),執行完後呼叫~f()

boost_fixture_test_case(test1, f)

//test2不受影響

boost_auto_test_case(test2) color;

color c = green;

boost_warn(sizeof(green) > sizeof(char));

boost_check(c == 2); // boost_check斷言失敗繼續執行

boost_require(yellow > red); //boost_require斷言失敗,測試停止

boost_check(black != 4);

}boost_auto_test_suite_end()

在編寫命令列程式時,經常會碰到的乙個問題就是引數解析問題,就是說我們在執行程式時給程式附上不同的引數值使得程式能夠完成不同的功能。而boost中的program options就是用來處理命令列傳入的引數的模組,使得程式更簡潔高效。

// exmaple6.cpp

#include

#include

#include

#include

using

namespace

std;

int main(int argc, char* argv)

cout

<< "hello "

<< vm["person"].as() << endl;

if(vm.count("file"))

return0;}

/* ubuntu 16.04 lts

g++ example6.cpp -lboost_program_options

./a.out

hello world

./a.out -h

commad line options:

-h [ --help ] print help message

-p [ --person ] arg (=world) person name

-f [ --file ] arg input file name

./a.out -p splay

hello splay

*/**:

位元幣原始碼解析 RPC詳解

在這裡,我們暫時先拋開bitcoin 僅僅來談rpc,提到rpc大家肯定首先會想到遠端過程服務呼叫,既然是呼叫,那就肯定存在乙個client端和乙個server端,clent端與server端通過rpc這個黑盒通過http請求進行互動,那麼就有乙個問題,我自定義的json格式的字串 這裡拿json來...

位元幣原始碼解析之初始化

本文主要描述了程序啟動時節點位址 區塊資訊和錢包資訊的初始化 節點執行緒和礦工挖礦執行緒在後續 位元幣原始碼解析之執行緒處理 一文中介紹,孤立塊處理在後續 位元幣原始碼解讀之挖礦 一文中介紹 初始化流程圖如下所示 1 首先呼叫caddrdb類的loadaddresses 函式 同時caddrdb的建...

位元幣原始碼解讀一

上次在ubuntu系統中將位元處原始碼編譯環境設定好了後,還沒有具體分析裡面的 今天我們就解讀一下。原始碼版本是bitcoin 0.9.5rc2。我們說驗證位元幣客戶端安裝成功就是從 which bitcoind 這個命令進行驗證的,因為位元幣客戶端有兩個。乙個是圖形介面的版本,通常被稱為 bitc...