1. 下載:
http://code.google.com/p/googletest/downloads/detail?name=gtest-1.6.0.zip
2. 解壓並參考 README 檔中使用 cmake 編譯的方法
mkdir mybuild
cd mybuild
cmake -Dgtest_build_samples=ON ../
即會在 mybuild 資料夾裡看到 libgtest.a 及 libgtest_main.a
前著為 gtest 的 library, 後者我猜是用來呼叫測試 function 的 main()
另外還會產生幾個 sample/ 資料夾的測試程式,可以執行看看結果如何?
3. 測試用程式碼:
測試程式 square_test.c
#include "square.h"
#include "gtest/gtest.h"
TEST(SquareTest, integer) {
EXPECT_EQ(4, mysquare(2));
}
TEST(SquareTest, negtive) {
EXPECT_TRUE( mysquare(-2) > 0 );
}
TEST(BoundaryTest, large) {
EXPECT_EQ(10497436849, mysquare(102457));
}
假設我們要測一個 function, 它會傳回參數的平方,TEST() 的第一個引數為測試類別,名字自已取,第二個為測試名稱,一樣自已取。所以上述程式碼建立了三個測試,先測試傳入整數 2,並驗証傳回值是不是 4?第二個傳入負數 -2, 並檢查它是不是大於 0? 第三個測試 102457 的平方, 因為 mysquare() 的引數跟回傳值訂為 int,所以值一定會太大沒辦法用 int 表示,這個測試應該要失敗。
接下來是 square.h 及 square.c, 即 mysquare() 這個 function 的實作:
square.h 的內容:
int mysquare(int val);
square.c 的內容:
#include "mysquare.h"
int mysquare(int val)
{
return val*val;
}
4. 編譯及連結:
g++ -I./ -I${GTEST_DIR}/include -c square_test.c -o square_test.o
g++ -I./ -I${GTEST_DIR}/include -c square.c -o square.o
g++ -L../mybuild/ -lgtest_main -lgtest square.o square_test.o -o test
5. 測試結果:
由測試結果可以看到,有兩個 testcase, 即 SquareTest 跟 BoundaryTest,有三個 test,即 integer 跟 negtive 以及 large。
成功的測試以綠色表示,失敗的測試以紅色表示。這即是 TDD 開發方法中提及的 Red-Green-Refactor 三元素的前面兩個。先寫出測試程式讓測試不過,再實作 function 讓測試通過,最後重構以改進程式碼。
生活在軟體
軟體知識學習筆記
2012年12月30日 星期日
2012年12月25日 星期二
使用 R 來做股票預測
1. 安裝 R 及 quantmod
http://www.quantmod.com/
2. 在 R shell 裡載入模組
library(quantmod)
2. 抓取股票資料
s = getSymbols('2330.TW', auto.assign=FALSE)
如果抓完資料後要使用 chartSeries(AAPL, subset='last 3 months') 來畫圖,就要加 auto.assign=FALSE,否則會有問題。
3. 查看資料內容:
attributes(s[0])
發現有以下數筆類型的資料
$dimnames[[2]]
[1] "2330.TW.Open" "2330.TW.High" "2330.TW.Low" "2330.TW.Close"
[5] "2330.TW.Volume" "2330.TW.Adjusted"
4. 取出其中一筆資料:
o=s$'2330.TW.Open'
即把每天的開盤價存到 o 這個變數裡
5. 算均價(這裡用到的是 TTR 這個模組,它是 quantmod 的相依模組之一):
求三日均價
ma3=SMA(o, n=3)
http://www.quantmod.com/
2. 在 R shell 裡載入模組
library(quantmod)
2. 抓取股票資料
s = getSymbols('2330.TW', auto.assign=FALSE)
如果抓完資料後要使用 chartSeries(AAPL, subset='last 3 months') 來畫圖,就要加 auto.assign=FALSE,否則會有問題。
3. 查看資料內容:
attributes(s[0])
發現有以下數筆類型的資料
$dimnames[[2]]
[1] "2330.TW.Open" "2330.TW.High" "2330.TW.Low" "2330.TW.Close"
[5] "2330.TW.Volume" "2330.TW.Adjusted"
4. 取出其中一筆資料:
o=s$'2330.TW.Open'
即把每天的開盤價存到 o 這個變數裡
5. 算均價(這裡用到的是 TTR 這個模組,它是 quantmod 的相依模組之一):
求三日均價
ma3=SMA(o, n=3)
2011年10月2日 星期日
[u-boot] bootdelay 時仍然可以中斷自動開機
u-boot 環境變數中, bootcmd 指定了上電後 u-boot 要執行的動作, 像是
bootcmd=mmc init&& fatload mmc 1 0x80800000 u-boot.bin&& go 0x80800000
可以在開機後自動從 mmc 卡下載第二階段 bootloader 進記憶體, 然後執行記憶體中的程式.
而 bootdelay 會是用來設定執行 bootcmd 之前要等待幾秒, 使用者可以在倒數時按下鍵盤進入 u-boot 的命令提示, 而不是去執行 bootcmd 的內容.
bootdealy = 0 可以把 delay 減至最小, 但是又可以讓我們有機會進到命令提示.
但是要另外在 board config 裡定義
CONFIG_ZERO_BOOTDELAY_CHECK
這樣就不用浪費時間等待使用者中斷了.
更多細節可以看 u-boot 原始碼中的 doc/README.autoboot 文件
2007年12月15日 星期六
Quick, short, effect and save his time
這是我師兄在幫我改面試投影片時提出來的一個原則。
至於投影片的原則,因為投影片是輔助工具,所以字少一點,用來帶領流程就夠了。另外我覺得用圖片來帶出一個故事也是重點。底下是我師兄給我的 link:
http://presentationzen.blogs.com/presentationzen/2005/09/living_large_ta.html
至於投影片的原則,因為投影片是輔助工具,所以字少一點,用來帶領流程就夠了。另外我覺得用圖片來帶出一個故事也是重點。底下是我師兄給我的 link:
http://presentationzen.blogs.com/presentationzen/2005/09/living_large_ta.html
2007年7月16日 星期一
像正常人一點的MSN代價
在 mac 上, 我常用的 msn client 是 adium, 它比微軟出給 mac 用的 msn 好用多了. 但是這兩個都不能用視訊, 唯一一個可以用視訊的聽說叫做 Mecurry, 但是它是慢到不行的 java 寫的. 所以我就裝了 parallels , 用它來開 boot camp 裡的 xp. 為了視訊跟動畫快遞. 付出的代價就是這個:
訂閱:
文章 (Atom)