GaitGeneration by Graph Search
読み取り中…
検索中…
一致する文字列を見つけられません
divided_map_state_test.h
[詳解]
1
3
4// Copyright(c) 2023-2025 Design Engineering Laboratory, Saitama University
5// Released under the MIT license
6// https://opensource.org/licenses/mit-license.php
7
8#ifndef DESIGNLAB_DIVIDED_MAP_STATE_TEST_H_
9#define DESIGNLAB_DIVIDED_MAP_STATE_TEST_H_
10
11#include <vector>
12
13#include "doctest.h"
14
15#include "divided_map_state.h"
17
18
20{
21
26
27class TestMapCreator final : public IMapCreator
28{
29public:
30 static constexpr float kMax{ 1000.f };
31 static constexpr float kMin{ -kMax };
32 static constexpr float kInterval{ 10.f };
33
35 MapState InitMap() override
36 {
37 std::vector<Vector3> map_point;
38
39 for (float x = kMin; x <= kMax; x += kInterval)
40 {
41 for (float y = kMin; y <= kMax; y += kInterval)
42 {
43 Vector3 point(x, y, 0);
44 map_point.emplace_back(point);
45 }
46 }
47
48 return MapState(map_point);
49 }
50
51 void UpdateMap([[maybe_unused]] MapState* current_map) override
52 {
53 }
54
55private:
56 static_assert(kMax > DividedMapState::kDividedMapMaxX, "テストマップのサイズが足りません.");
57 static_assert(kMin < DividedMapState::kDividedMapMinX, "テストマップのサイズが足りません.");
58 static_assert(kMax > DividedMapState::kDividedMapMaxY, "テストマップのサイズが足りません.");
59 static_assert(kMin < DividedMapState::kDividedMapMinY, "テストマップのサイズが足りません.");
60};
61
62} // namespace divided_map_state_test_internal
63
64
65TEST_SUITE("DividedMapState::Init")
66{
70
71 TEST_CASE("マップの状態とロボットの重心座標を渡した時,マップを重心を中心に格子状に分割するべき")
72 {
74
75 // Act.テスト用のマップを生成する.
76 TestMapCreator test_map_creator;
77 MapState map_state = test_map_creator.InitMap();
78
79 // Act.テスト用のロボットの重心座標を生成する.
80 const Vector3 global_robot_com(0, 0, 0);
81
82 // Arrange.テスト対象のクラスのメソッドを呼び出す.
83 DividedMapState divided_map_state;
84 divided_map_state.Init(map_state, global_robot_com);
85
86 // Assert.マップのサイズが正しいか確認する.
87 int center_index_x = divided_map_state.GetDividedMapIndexX(global_robot_com.x);
88 int center_index_y = divided_map_state.GetDividedMapIndexX(global_robot_com.y);
89
90 constexpr int expected_num = static_cast<int>(
91 (DividedMapState::kDividedAreaLength / TestMapCreator::kInterval) *
92 (DividedMapState::kDividedAreaLength / TestMapCreator::kInterval));
93
94 CHECK_EQ(divided_map_state.GetPointNum(center_index_x, center_index_y), expected_num);
95 }
96}
97
98TEST_SUITE("DividedMapState::ClampDividedMapIndex")
99{
101
102 TEST_CASE("0未満の値を渡した時,0を返すべき")
103 {
104 CHECK_EQ(DividedMapState::ClampDividedMapIndex(-1), 0);
105 CHECK_EQ(DividedMapState::ClampDividedMapIndex(-100), 0);
106
107 CHECK_EQ(DividedMapState::ClampDividedMapIndex(0), 0);
108 }
109
110 TEST_CASE("最大値を渡した時,最大値 - 1を返すべき")
111 {
112 CHECK_EQ(DividedMapState::ClampDividedMapIndex(DividedMapState::kDividedNum),
113 DividedMapState::kDividedNum - 1);
114
115 CHECK_EQ(DividedMapState::ClampDividedMapIndex(DividedMapState::kDividedNum + 1),
116 DividedMapState::kDividedNum - 1);
117
118 CHECK_EQ(DividedMapState::ClampDividedMapIndex(DividedMapState::kDividedNum + 100),
119 DividedMapState::kDividedNum - 1);
120
121
122 CHECK_EQ(DividedMapState::ClampDividedMapIndex(DividedMapState::kDividedNum - 1),
123 DividedMapState::kDividedNum - 1);
124 }
125}
126
127
128#endif // DESIGNLAB_DIVIDED_MAP_STATE_TEST_H_
マップを格子状に分割して管理するクラス.
static constexpr float kDividedMapMaxX
マップの最大のX座標.
static constexpr float kDividedMapMinX
マップの最小のX座標.
static constexpr float kDividedMapMinY
マップの最小のY座標.
static constexpr float kDividedMapMaxY
マップの最大のY座標.
マップ生成クラスのインターフェース.
マップを表すクラス.
Definition map_state.h:32
MapState InitMap() override
kMin [mm] ~ kMax [mm]の範囲に kInterval [mm]間隔で脚設置可能点を生成する.
void UpdateMap(MapState *current_map) override
マップの更新を行う.
TEST_SUITE("DividedMapState::Init")
3次元の位置ベクトルを表す構造体.