Open drop-stones opened 3 years ago
$ clang++ -o task_utest task_utest.cpp /usr/local/lib/libCppUTest.a
$ ./task_utest
..
OK (2 tests, 2 ran, 2 checks, 0 ignored, 0 filtered out, 0 ms)
$ clang++ -o pri_utest pri_utest.cpp /usr/local/lib/libCppUTest.a
pri_utest.cpp:5:10: fatal error: '../schedule_pri.hpp' file not found
#include "../schedule_pri.hpp"
^~~~~~~~~~~~~~~~~~~~~
1 error generated.
$ ./test.sh
Compile tests...
clang++ -std=c++17 -g -o fcfs_test fcfs_test.cpp
clang++ -std=c++17 -g -o pri_test pri_test.cpp
FCFS test...
Test pass!
PRI test...
pri_test: pri_test.cpp:16: void FetchTaskTest(): Assertion `tsk != nullptr' failed.
./test.sh: line 23: 130211 Aborted (core dumped) ./pri_test
$ ./test.sh
Compile tests...
clang++ -std=c++17 -g -o fcfs_test fcfs_test.cpp
clang++ -std=c++17 -g -o pri_test pri_test.cpp
FCFS test...
Test pass!
PRI test...
Test pass!
Clean ...
rm -rf fcfs_test pri_test
// hiker.c
#include "hiker.h"
int doors[DOORS] = {0};
int *answer(void) {
return NULL;
}
// start is 0-origin int *pass (int arr[], int size, int start) { int step = start + 1; for (int i = start; i < size; i = i + step) { arr[i] = (arr[i] + 1) % 2; } return arr; }
- hiker.h
// hiker.h
int answer(void); int pass (int arr[], int size, int start);
int isSameArr (int arr1, int arr2, int size);
- hiker.test.c
// hiker.test.c
//
int isSameArr (int arr1, int arr2, int size)
{
int result = TRUE;
for (int i = 0; i < size; i++)
{
if (arr1[i] != arr2[i]) result = FALSE;
}
return result;
}
static void first_passing(void) { int init_doors[DOORS] = {FALSE}; int correct[100]; for (int i = 0; i < DOORS; i++) correct [i] = 1; //printf ("%d\n", correct [5]); assert(isSameArr(pass(init_doors, DOORS, 0), correct, DOORS)); }
static void second_passing (void) { int init_doors[DOORS] = {FALSE}; int correct[DOORS]; for (int i = 0; i < DOORS; i++) { if ((i + 1)%2 == 0) correct [i] = FALSE; else correct [i] = TRUE; } pass (init_doors, DOORS, 0);
assert(isSameArr(pass(init_doors, DOORS, 1), correct, DOORS));
}
static void final_passing (void) { assert(isSameArr(, correct)); }
int main(void) { puts("Testing first_passing"); first_passing(); puts("Testing second_passing"); second_passing(); puts("Testing third_passing"); third_passing();
puts("All tests passed");
}
- 感想
- コーディングスタイルが違うので、やりにくい
- 命名規則、宣言位置(define,global宣言,local宣言)、関数への切り分け方など
- でも、ミスリーディングな変数名に気付けたり、いろんな作法があるんだなと気付けた!!
- オンラインでやると議論がしにくい
- 話が被ったり、表情が見えないことで理解度の確認が難しかったりする
- こっからのご時世、慣れないといけないかも
- 自分一人では書かない(書けない)コードができる
- 複数人で意見を出し合うため、当然だが一人では書かないようなコードが出来上がり、面白い
- 余談
- 同じ授業を受けていた友達(チーム2)に話を聞いてみたところ、100 doorsにはとても効率の良いアルゴリズムがあるとのこと
- 考え方
- 約数の数だけ訪問(ドアの開け閉め)される
- 4 = 1 * 4 = 2 * 2: (1, 2, 4)の三回
- 6 = 1 * 6 = 2 * 3: (1, 2, 3, 6)の四回
- 8 = 1 * 8 = 2 * 4: (1, 2, 4, 8)の四回
- 平方数のみ約数の数は奇数、他は偶数になる
- 平方数: 掛け算で表した時、平方根 * 平方根という式が現れ、この表現から得られる約数は平方根ただ一つ
- 平方数以外: 掛け算で表すと、a * b (a !=b)で表され、必ず二つの約数a,bが得られる
- 以上より、ドアが開くのは奇数回開け閉めされる平方数のみ!!
演習1: 自分のOSSにテストを1つ追加せよ