diff --git a/modules/planning/common/BUILD b/modules/planning/common/BUILD index 78c7bf9681ee3c4cc543e46cdb2539a56c196ef7..ff27b30c327118d8f6203bf20f68a2339ec13e16 100644 --- a/modules/planning/common/BUILD +++ b/modules/planning/common/BUILD @@ -9,6 +9,18 @@ cc_library( ], ) +cc_test( + name = "indexed_list_test", + srcs = [ + "indexed_list_test.cc", + ], + deps = [ + ":indexed_list", + "//modules/common/util", + "@gtest//:main", + ], +) + cc_library( name = "indexed_queue", hdrs = [ diff --git a/modules/planning/common/indexed_list_test.cc b/modules/planning/common/indexed_list_test.cc new file mode 100644 index 0000000000000000000000000000000000000000..0c176c0e99809770b2f760cac45b33ebe145617c --- /dev/null +++ b/modules/planning/common/indexed_list_test.cc @@ -0,0 +1,74 @@ +/****************************************************************************** + * Copyright 2017 The Apollo Authors. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *****************************************************************************/ + +/** + * @file + **/ + +#include +#include +#include + +#include "gmock/gmock.h" +#include "gtest/gtest.h" + +#include "modules/common/proto/pnc_point.pb.h" + +#include "modules/common/util/util.h" +#include "modules/planning/common/indexed_list.h" + +namespace apollo { +namespace planning { + +using StringIndexedList = IndexedList; +TEST(IndexedList, Add) { + StringIndexedList object; + { + ASSERT_TRUE(object.Add(1, common::util::make_unique("one"))); + ASSERT_TRUE(object.Find(1) != nullptr); + const auto& items = object.Items(); + ASSERT_TRUE(object.Find(2) == nullptr); + ASSERT_FALSE(object.Add(1, common::util::make_unique("one"))); + ASSERT_EQ(1, items.size()); + ASSERT_EQ("one", *items[0]); + } + { + ASSERT_TRUE(object.Add(2, common::util::make_unique("two"))); + ASSERT_FALSE(object.Add(2, common::util::make_unique("two"))); + ASSERT_TRUE(object.Find(1) != nullptr); + ASSERT_TRUE(object.Find(2) != nullptr); + const auto& items = object.Items(); + ASSERT_EQ(2, items.size()); + ASSERT_EQ("one", *items[0]); + ASSERT_EQ("two", *items[1]); + } +} + +TEST(IndexedList, Find) { + StringIndexedList object; + ASSERT_TRUE(object.Add(1, common::util::make_unique("one"))); + auto* one = object.Find(1); + ASSERT_EQ(*one, "one"); + ASSERT_TRUE(one != nullptr); + *one = "one_again"; + const auto* one_again = object.Find(1); + ASSERT_TRUE(one_again != nullptr); + ASSERT_EQ("one_again", *one_again); + ASSERT_FALSE(object.Find(2)); +} + +} // namespace planning +} // namespace apollo