2010年1月14日木曜日

etc - GoogleTest

はじめの一歩。


/// Main.cpp ///
#include "Common.h"

int _tmain(int argc, _TCHAR* argv[])
{
    // GoogleTestしる!
testing::InitGoogleTest(&argc, argv);
// ↓こいつが勝手に全てのテストを探し出して実行してくれるらしい
RUN_ALL_TESTS();

getchar(); //コンソールウインド止める用
return 0;
}

/// CameraTest.cpp ///

#include "Common.h"
#include "gtest/gtest.h"

// テストセットアップ用クラス
// いゆるTestSuiteってやつか?
// xUnitでは、SetUp → テストケース実行 → TearDown
// が、全テストケースにわたり実行される。
class CameraTest : public ::testing::Test {
protected:
LPDIRECT3D9 pDirect3D;

float w, h, span, start, end, lens;

virtual void SetUp() {
pDirect3D = ::Direct3DCreate9(D3D_SDK_VERSION);
w = 800;
h = 600;
span = 0.2f;
start = 10.0f;
end = 1024.0f;
lens = 60.0f;
}
virtual void TearDown() {
SAFE_RELEASE(pDirect3D);
}
};

// 今回のテスト用関数。
// D3DXMatrixOrthoLHと同じ出力になって欲しい
// 正射影の行列を生成する
void um_matrix_ortho_lh(
float projection[][4], float w, float h, float zn, float zf)
{
projection[0][0] = 2/w;
projection[1][0] = 0.0f;
projection[2][0] = 0.0f;
projection[3][0] = 0.0f;

projection[0][1] = 0.0f;
projection[1][1] = 2/h;
projection[2][1] = 0.0f;
projection[3][1] = 0.0f;

projection[0][2] = 0.0f;
projection[1][2] = 0.0f;
projection[2][2] = 1/(zf-zn);
projection[3][2] = zn/(zn-zf);

projection[0][3] = 0.0f;
projection[1][3] = 0.0f;
projection[2][3] = 0.0f;
projection[3][3] = 1.0f;

}

// TestCase. 第一引数がTestSuite、第二引数がテストケース名
TEST_F(CameraTest, OrthoLH1)
{
D3DXMATRIX dx_projection;
float my_projection[4][4];

// Dx 正射影行列
D3DXMatrixOrthoLH(&dx_projection,
w * span,
h * span, start, end);

// My 正射影行列
um_matrix_ortho_lh(&my_projection[0],
w * span,
h * span, start, end);

for (int j = 0; j < 4; ++j) {
for (int k = 0; k < 4; ++k) {
// だいたいあってるか?
ASSERT_NEAR(dx_projection.m[k][j], my_projection[k][j], 1e-6);
// 中身見る用
// dprintf(_T("%d, %d, %f, %f\n"), j, k, dx_projection.m[k][j], my_projection[k][j]);
}
}
}


結果

0 件のコメント: