00001 /****************************************************************************** 00002 * Copyright (C) 2014 by Ralf Kaestner * 00003 * ralf.kaestner@gmail.com * 00004 * * 00005 * This program is free software; you can redistribute it and/or modify * 00006 * it under the terms of the Lesser GNU General Public License as published by* 00007 * the Free Software Foundation; either version 3 of the License, or * 00008 * (at your option) any later version. * 00009 * * 00010 * This program is distributed in the hope that it will be useful, * 00011 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 00012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 00013 * Lesser GNU General Public License for more details. * 00014 * * 00015 * You should have received a copy of the Lesser GNU General Public License * 00016 * along with this program. If not, see <http://www.gnu.org/licenses/>. * 00017 ******************************************************************************/ 00018 00019 #include <gtest/gtest.h> 00020 00021 #include <std_msgs/Bool.h> 00022 #include <std_msgs/String.h> 00023 00024 #include <variant_topic_tools/DataTypeRegistry.h> 00025 00026 using namespace variant_topic_tools; 00027 00028 TEST(DataTypeRegistry, Array) { 00029 DataTypeRegistry registry; 00030 00031 ArrayDataType a1 = registry.addArrayDataType<int, 3>(); 00032 ArrayDataType a2 = registry.addArrayDataType<int, 0>(); 00033 ArrayDataType a3 = registry.addArrayDataType<double[3]>(); 00034 ArrayDataType a4 = registry.addArrayDataType<double[]>(); 00035 ArrayDataType a5 = registry.addArrayDataType<bool[3]>(); 00036 ArrayDataType a6 = registry.addArrayDataType<bool[]>(); 00037 ArrayDataType a7 = registry.addArrayDataType("int8", 3); 00038 ArrayDataType a8 = registry.addArrayDataType(typeid(int8_t)); 00039 00040 EXPECT_TRUE(registry.getDataType<int[3]>().isArray()); 00041 EXPECT_TRUE(registry.getDataType("int32[3]").isArray()); 00042 EXPECT_TRUE(registry.getDataType<int[]>().isArray()); 00043 EXPECT_TRUE(registry.getDataType("int32[]").isArray()); 00044 EXPECT_TRUE(registry.getDataType<double[3]>().isArray()); 00045 EXPECT_TRUE(registry.getDataType("float64[3]").isArray()); 00046 EXPECT_TRUE(registry.getDataType<double[]>().isArray()); 00047 EXPECT_TRUE(registry.getDataType("float64[]").isArray()); 00048 EXPECT_TRUE(registry.getDataType<bool[3]>().isArray()); 00049 EXPECT_TRUE(registry.getDataType("bool[3]").isArray()); 00050 EXPECT_TRUE(registry.getDataType<bool[]>().isArray()); 00051 EXPECT_TRUE(registry.getDataType("bool[]").isArray()); 00052 EXPECT_TRUE(registry.getDataType<int8_t[3]>().isArray()); 00053 EXPECT_TRUE(registry.getDataType("int8[3]").isArray()); 00054 EXPECT_TRUE(registry.getDataType<int8_t[]>().isArray()); 00055 EXPECT_TRUE(registry.getDataType("int8[]").isArray()); 00056 EXPECT_FALSE(const_cast<const DataTypeRegistry&>(registry). 00057 getDataType("uint8[3]").isArray()); 00058 EXPECT_TRUE(registry.getDataType("uint8[3]").isArray()); 00059 EXPECT_FALSE(const_cast<const DataTypeRegistry&>(registry). 00060 getDataType("uint8[]").isArray()); 00061 EXPECT_TRUE(registry.getDataType("uint8[]").isArray()); 00062 00063 registry.clear(); 00064 } 00065 00066 TEST(DataTypeRegistry, Builtin) { 00067 DataTypeRegistry registry; 00068 00069 EXPECT_TRUE(registry.getDataType<int8_t>().isBuiltin()); 00070 EXPECT_TRUE(registry.getDataType("int8").isBuiltin()); 00071 EXPECT_TRUE(registry["int8"].isBuiltin()); 00072 EXPECT_TRUE(registry[typeid(int8_t)].isBuiltin()); 00073 } 00074 00075 TEST(DataTypeRegistry, Message) { 00076 DataTypeRegistry registry; 00077 00078 MessageDataType m1 = registry.addMessageDataType<std_msgs::String>(); 00079 MessageDataType m2 = registry.addMessageDataType( 00080 ros::message_traits::datatype<std_msgs::Bool>(), 00081 ros::message_traits::definition<std_msgs::Bool>()); 00082 MessageDataType m3 = registry.addMessageDataType("my_msgs/Double"); 00083 m3.addVariableMember<double>("data"); 00084 00085 EXPECT_TRUE(registry.getDataType<std_msgs::String>().isMessage()); 00086 EXPECT_TRUE(registry.getDataType( 00087 ros::message_traits::datatype<std_msgs::String>()).isMessage()); 00088 EXPECT_TRUE(registry.getDataType<std_msgs::Bool>().isMessage()); 00089 EXPECT_TRUE(registry.getDataType("my_msgs/Double").isMessage()); 00090 00091 registry.clear(); 00092 }