12

Task

Result

配列に対して処理を加える関数をいくつか作成しました。 コードはレポート巻末に記載しました。 いくつかの関数に対して,単体テストを実施しました。 テストしたコード及び結果は以下のようになりました。

#include <gtest/gtest.h> #include <gmock/gmock.h> #include "helper.hpp" TEST(FindTest, BasicAssertions) { int _[] = {1, 2, 3, 4, 5}; EXPECT_EQ(3, find(_, 0, 5, [](int v, int i, int s[]){ return v == 3 ;})); } TEST(EveryTest, BasicAssertions) { int _[] = {1, 2, 3, 4, 5}; EXPECT_EQ(true, every(_, 0, 5, [](int v, int i, int s[]){ return v > 0; })); EXPECT_EQ(false, every(_, 0, 5, [](int v, int i, int s[]){ return v > 3; })); } TEST(SomeTest, BasicAssertions) { int _[] = {1, 2, 3, 4, 5}; EXPECT_EQ(true, some(_, 0, 5, [](int v, int i, int s[]){ return v > 3; })); EXPECT_EQ(false, some(_, 0, 5, [](int v, int i, int s[]){ return v > 5; })); }
yarn run v1.22.10 $ yarn cmake && yarn ctest $ cd modules/core/src && cmake -S . -B build && cmake --build build -- Selecting Windows SDK version 10.0.18362.0 to target Windows 10.0.19042. -- Configuring done -- Generating done -- Build files have been written to: ~/src/build Microsoft (R) Build Engine version 16.7.0+b89cb5fde for .NET Framework Copyright (C) Microsoft Corporation. All rights reserved. gmock.vcxproj -> ~\src\build\lib\Debug\gmockd.lib gmock_main.vcxproj -> ~\src\build\lib\Debug\gmock_maind.lib gtest.vcxproj -> ~\src\build\lib\Debug\gtestd.lib gtest_main.vcxproj -> ~\src\build\lib\Debug\gtest_maind.lib helper_test.cc helper_test.vcxproj -> ~\src\build\Debug\helper_test.exe $ cd modules/core/src/build && ctest Test project ~/src/build Start 1: FindTest.BasicAssertions 1/3 Test #1: FindTest.BasicAssertions ......... Passed 0.01 sec Start 2: EveryTest.BasicAssertions 2/3 Test #2: EveryTest.BasicAssertions ........ Passed 0.02 sec Start 3: SomeTest.BasicAssertions 3/3 Test #3: SomeTest.BasicAssertions ......... Passed 0.01 sec 100% tests passed, 0 tests failed out of 3 Total Test time (real) = 0.08 sec Done in 5.32s.

Consideration

まず、gccに加え、cmake、makeおよびgtestの環境を構築しました。 単体テストはGoogleTestおよびGoogleMockを使用しました。 GoogleTestはc++のテストフレームワークで、 cmakeはコンパイラに依存しないビルド自動化のソフトです。 quickstart-cmake.md およびsamples.mdを参考にしました。 関数の定義に関しては, Array - JavaScript | MDNを参考にしました。 Mockを用いたテストまで出来なかったので、今後試してみたいと思います。

Ref

#ifndef _HERLPER_HPP #define _HERLPER_HPP using $void = void (*)(int v, int i, int s[]); using $bool = bool (*)(int v, int i, int s[]); using $int = int (*)(int v, int i, int s[]); void each (int _[], int a, int b, $void $) { for (; a < b ;) $(_[a], a++, _); } void map (int _[], int a, int b, $int $) { for (; a < b ;) _[a] = $(_[a], a++, _); }; void fill (int _[], int a, int b, int value) { for (; a < b ;) _[a] = value; } void filter (int _[], int a, int b, $int $) { for (; a < b ;) _[a] = $(_[a], a++, _) && _[a - 1]; } void slice(int _[], int a, int b) { int i = 0; for (; a < b ;) if (i < a || b < i++) _[i] = -1; } int find (int _[], int a, int b, $bool $) { for (; a < b ; a++) if ($(_[a], a, _)) return _[a]; return -1; } bool every (int _[], int a, int b, $bool $) { for (; a < b ; a++) if (!$(_[a], a, _)) return false; return true; } bool some (int _[], int a, int b, $bool $) { for (; a < b ; a++) if ($(_[a], a, _)) return true; return false; } #endif // _HERLPER_HPP