Merge "Serialization now adheres to new VAB serialization scheme."
diff --git a/sdks/c++/basys.sdk.cc/include/BaSyx/shared/object/impl/object_access_impl.h b/sdks/c++/basys.sdk.cc/include/BaSyx/shared/object/impl/object_access_impl.h
index fa7a8bd..c21fb3d 100644
--- a/sdks/c++/basys.sdk.cc/include/BaSyx/shared/object/impl/object_access_impl.h
+++ b/sdks/c++/basys.sdk.cc/include/BaSyx/shared/object/impl/object_access_impl.h
@@ -16,21 +16,18 @@
auto & vec = this->Get<object::list_t<T>&>();
vec.push_back(t);
return true;
- };
- break;
- case basyx::type::objectType::Set:
- if (this->InstanceOf<object::set_t<T>>())
+ }
+ else if (this->InstanceOf<object::object_list_t>())
{
- auto & set = this->Get<object::set_t<T>&>();
- return set.emplace(t).second;
- };
+ auto & vec = this->Get<object::object_list_t&>();
+ vec.emplace_back(t);
+ return true;
+ }
break;
};
return false;
};
-
-
template<typename T>
bool basyx::object::insertKey(const std::string & key, const T & t, bool override)
{
@@ -76,13 +73,6 @@
// Check if contained object is list or set
switch (content->object_type())
{
- case basyx::type::objectType::Set:
- if (this->InstanceOf<object::set_t<T>>())
- {
- auto & set = this->Get<object::set_t<T>&>();
- return set.erase(t) > 0;
- };
- break;
case basyx::type::objectType::List:
auto & list = this->Get<object::list_t<T>&>();
list.erase(std::remove(list.begin(), list.end(), t), list.end());
@@ -109,7 +99,6 @@
case basyx::type::valueType::Float:
return this->remove(obj.Get<const double>());
break;
-
};
return false;
diff --git a/sdks/c++/basys.sdk.cc/include/BaSyx/shared/object/impl/object_factories_impl.h b/sdks/c++/basys.sdk.cc/include/BaSyx/shared/object/impl/object_factories_impl.h
index 0872f31..6720e8f 100644
--- a/sdks/c++/basys.sdk.cc/include/BaSyx/shared/object/impl/object_factories_impl.h
+++ b/sdks/c++/basys.sdk.cc/include/BaSyx/shared/object/impl/object_factories_impl.h
@@ -42,18 +42,6 @@
return basyx::object{ object::list_t<basyx::object>(std::forward<Args>(args)...) };
};
-template<typename T, typename... Args>
-basyx::object basyx::object::make_set(Args && ... args)
-{
- return basyx::object{ object::set_t<T>(std::forward<Args>(args)...) };
-};
-
-template<typename... Args>
-basyx::object basyx::object::make_object_set(Args && ... args)
-{
- return basyx::object{ object::set_t<basyx::object>(std::forward<Args>(args)...) };
-};
-
template<typename... Args>
basyx::object basyx::object::make_map(Args && ... args)
{
diff --git a/sdks/c++/basys.sdk.cc/include/BaSyx/shared/object/object_header.h b/sdks/c++/basys.sdk.cc/include/BaSyx/shared/object/object_header.h
index 627ce3d..aab6a07 100644
--- a/sdks/c++/basys.sdk.cc/include/BaSyx/shared/object/object_header.h
+++ b/sdks/c++/basys.sdk.cc/include/BaSyx/shared/object/object_header.h
@@ -19,7 +19,6 @@
#include <vector>
#include <unordered_map>
-#include <unordered_set>
namespace basyx {
// basyx::object
@@ -35,17 +34,12 @@
using list_t = std::vector<T>;
template<typename T>
- using set_t = std::unordered_set<T>;
-
- template<typename T>
using hash_map_t = std::unordered_map<std::string, T>;
using object_list_t = list_t<basyx::object>;
- using object_set_t = set_t<basyx::object>;
using object_map_t = object::hash_map_t<basyx::object>;
using function_t = std::function<basyx::object(basyx::object*)>;
-
public: // Constructors
object();
object(const char *);
@@ -135,6 +129,7 @@
template<typename T>
bool insertKey(const std::string & key, const T & t, bool override = false);
+ std::size_t size();
template<typename T>
bool remove(const T & t);
@@ -177,12 +172,6 @@
template<typename T>
static object make_list(std::initializer_list<T>);
- template<typename T, typename... Args>
- static object make_set(Args && ... args);
-
- template<typename... Args>
- static object make_object_set(Args && ... args);
-
template<typename... Args>
static object make_map(Args && ... args);
@@ -213,7 +202,6 @@
{
std::size_t operator()(basyx::object const & o) const noexcept
{
- auto TEST = reinterpret_cast<std::size_t>(o.content->get_address());
return reinterpret_cast<std::size_t>(o.content->get_address());
};
};
diff --git a/sdks/c++/basys.sdk.cc/include/BaSyx/shared/object/object_type.h b/sdks/c++/basys.sdk.cc/include/BaSyx/shared/object/object_type.h
index 67a5e52..96471c8 100644
--- a/sdks/c++/basys.sdk.cc/include/BaSyx/shared/object/object_type.h
+++ b/sdks/c++/basys.sdk.cc/include/BaSyx/shared/object/object_type.h
@@ -22,7 +22,6 @@
enum class objectType {
Primitive,
List,
- Set,
Map,
Function
};
@@ -100,14 +99,6 @@
static constexpr basyx::type::valueType value_type = basyx::type::basyx_type<T>::value_type;
};
- // Specialization for std::unordered_set
- template <typename T>
- struct basyx_type<std::unordered_set<T>>
- {
- static constexpr basyx::type::objectType object_type = basyx::type::objectType::Set;
- static constexpr basyx::type::valueType value_type = basyx::type::basyx_type<T>::value_type;
- };
-
// Specialization for std::unordered_map
template <typename T>
struct basyx_type<std::unordered_map<std::string, T>>
@@ -154,12 +145,6 @@
template <typename T>
constexpr basyx::type::objectType basyx_type<std::vector<T>>::object_type;
-
- template <typename T>
- constexpr basyx::type::valueType basyx_type<std::unordered_set<T>>::value_type;
-
- template <typename T>
- constexpr basyx::type::objectType basyx_type<std::unordered_set<T>>::object_type;
};
};
diff --git a/sdks/c++/basys.sdk.cc/include/BaSyx/shared/serialization/json/json_deserializer.h b/sdks/c++/basys.sdk.cc/include/BaSyx/shared/serialization/json/json_deserializer.h
index eff536a..52688eb 100644
--- a/sdks/c++/basys.sdk.cc/include/BaSyx/shared/serialization/json/json_deserializer.h
+++ b/sdks/c++/basys.sdk.cc/include/BaSyx/shared/serialization/json/json_deserializer.h
@@ -31,18 +31,16 @@
if (json.is_primitive()) {
return deserialize_helper::fundamental(json);
- } else // deserialize objectMap
- if (json.is_object())
+ }
+ // deserialize list
+ else if( json.is_array())
{
- if (json.find(basyx::serialization::typeSpecifier) != json.end())
- {
- // deserialize typed basyx list
- return collection(json);
- }
- else // assume is map
- {
- return basyx::object{ std::forward<basyx::object::object_map_t>(deserialize_helper::objectMap(json)) };
- }
+ return deserialize_helper::list(json);
+ }
+ // deserialize objectMap
+ else if (json.is_object())
+ {
+ return basyx::object{ std::forward<basyx::object::object_map_t>(deserialize_helper::objectMap(json)) };
}
return basyx::object::make_null();
@@ -61,29 +59,6 @@
else if (json.is_string())
return basyx::object { json.get<std::string>() };
- // Get the typeId and value node
- //auto typeId = json[basyx::serialization::typeIdSpecifier].get<std::string>();
- //auto valueJson = json[basyx::serialization::valueSpecifier];
-
- //if (typeId == basyx::serialization::basysType<int>::string) {
- // return basyx::object{ valueJson.get<int>() };
- //}
- //else if (typeId == basyx::serialization::basysType<bool>::string) {
- // return basyx::object{ valueJson.get<bool>() };
- //}
- //else if (typeId == basyx::serialization::basysType<float>::string) {
- // return basyx::object{ valueJson.get<float>() };
- //}
- //else if (typeId == basyx::serialization::basysType<double>::string) {
- // return basyx::object{ valueJson.get<double>() };
- //}
- //else if (typeId == basyx::serialization::basysType<char>::string) {
- // return basyx::object{ valueJson.get<char>() };
- //}
- //else if (typeId == basyx::serialization::basysType<std::string>::string) {
- // return basyx::object{ valueJson.get<std::string>() };
- //}
-
return basyx::object::make_null();
}
@@ -115,26 +90,10 @@
return last_type;
};
- static basyx::object collection(const json_t & json)
+ static basyx::object list(const json_t & json_array)
{
- if (json[basyx::serialization::typeSpecifier] == "list")
- {
- return deserialize_helper::list(json);
- }
- else if (json[basyx::serialization::typeSpecifier] == "set")
- {
- return deserialize_helper::set(json);
- };
-
- return basyx::object::make_null();
- };
-
- static basyx::object list(const json_t & json)
- {
- auto json_array = json[basyx::serialization::valueSpecifier];
-
if (json_array.empty())
- return basyx::object::make_list<int>();
+ return basyx::object::object_list_t();
if (json_array.is_array())
{
@@ -158,33 +117,6 @@
return basyx::object::make_null();
};
- static basyx::object set(const json_t & json)
- {
- auto json_array = json[basyx::serialization::valueSpecifier];
-
- if (json_array.empty())
- return basyx::object::make_set<int>();
-
- if (json_array.is_array())
- {
- auto value_type = check_array_type(json_array);
-
- switch (value_type)
- {
- case basyx::type::valueType::Bool:
- return deserialize_helper::set_t<bool>(json_array);
- case basyx::type::valueType::Int:
- return deserialize_helper::set_t<int>(json_array);
- case basyx::type::valueType::String:
- return deserialize_helper::set_t<std::string>(json_array);
- case basyx::type::valueType::Float:
- return deserialize_helper::set_t<double>(json_array);
- };
- }
-
- return basyx::object::make_null();
- };
-
static basyx::object object_list(const json_t& json)
{
basyx::object::object_list_t objectList;
@@ -208,18 +140,6 @@
return list;
};
- template<typename T>
- static basyx::object set_t(const json_t & json)
- {
- basyx::object set = basyx::object::make_set<T>();
-
- for (const auto& val : json) {
- set.insert(deserialize(val));
- }
-
- return set;
- };
-
// Deserializes an objectMap from the given JSON
static basyx::object::object_map_t objectMap(const json_t& json)
{
diff --git a/sdks/c++/basys.sdk.cc/include/BaSyx/shared/serialization/json/json_serializer.h b/sdks/c++/basys.sdk.cc/include/BaSyx/shared/serialization/json/json_serializer.h
index 3cd35fa..8917501 100644
--- a/sdks/c++/basys.sdk.cc/include/BaSyx/shared/serialization/json/json_serializer.h
+++ b/sdks/c++/basys.sdk.cc/include/BaSyx/shared/serialization/json/json_serializer.h
@@ -50,42 +50,15 @@
template<typename T>
inline void serialize_helper(json_t & json, const basyx::object::list_t<T> & list)
{
- json[basyx::serialization::typeSpecifier] = "list";
- json[basyx::serialization::valueSpecifier] = list ;
- };
-
- template<typename T>
- inline void serialize_helper(json_t & json, const basyx::object::set_t<T> & set)
- {
- json[basyx::serialization::typeSpecifier] = "set";
- json[basyx::serialization::valueSpecifier] = set;
+ json = list ;
};
// basyx::object::object_map_t serializer
inline void serialize_helper(json_t& json, const basyx::object::object_map_t & objectMap)
{
// Initialize as valid json object, even if map is empty
- json = json_t::object();
- json_t collectionTypes;
-
- for (const auto& entry : objectMap) {
- if (entry.second.InstanceOf<basyx::object::object_list_t>()) {
- collectionTypes[entry.first] = "list";
- };
-
- json[entry.first] = entry.second;
- if (collectionTypes.size() > 0)
- json["_basyxTypes"] = collectionTypes;
- }
+ json = objectMap;
}
-
- // basyx::object::object_list_t serializer
- //inline void serialize_helper(json_t& json, const basyx::object::object_list_t& objectCollection)
- //{
- // for (const auto& object : objectCollection) {
- // json.push_back(object);
- // }
- //}
};
};
};
diff --git a/sdks/c++/basys.sdk.cc/src/shared/shared/object/impl/object_impl.cpp b/sdks/c++/basys.sdk.cc/src/shared/shared/object/impl/object_impl.cpp
index 1c043eb..2a931bd 100644
--- a/sdks/c++/basys.sdk.cc/src/shared/shared/object/impl/object_impl.cpp
+++ b/sdks/c++/basys.sdk.cc/src/shared/shared/object/impl/object_impl.cpp
@@ -42,22 +42,6 @@
return this->Get<object::object_list_t&>().empty();
break;
};
- case basyx::type::objectType::Set:
- switch (value_type)
- {
- case basyx::type::valueType::Bool:
- return this->Get<object::set_t<bool>&>().empty();
- break;
- case basyx::type::valueType::Int:
- return this->Get<object::set_t<int>&>().empty();
- break;
- case basyx::type::valueType::Float:
- return this->Get<object::set_t<double>&>().empty();
- break;
- case basyx::type::valueType::String:
- return this->Get<object::set_t<std::string>&>().empty();
- break;
- };
case basyx::type::objectType::Map:
return this->Get<object::object_map_t&>().empty();
break;
@@ -85,14 +69,6 @@
this->Get<basyx::object::object_list_t&>().emplace_back(obj);
return true;
}
- case basyx::type::objectType::Set:
- if (this->content->value_type() == basyx::type::valueType::Object)
- {
- auto & objectSet = this->Get<basyx::object::set_t<basyx::object>&>();
- auto resultSet = objectSet.emplace(obj);
- return resultSet.second;
- break;
- };
if (this->content->value_type() == value_type)
{
@@ -158,6 +134,44 @@
return this->content->compare(rhs.content.get());
}
+std::size_t basyx::object::size()
+{
+ if (!this->content)
+ return 0;
+
+ auto valueType = this->GetValueType();
+
+ // Check if contained object is list or set
+ switch (content->object_type())
+ {
+ case basyx::type::objectType::List:
+ switch (valueType)
+ {
+ case basyx::type::valueType::Bool:
+ return this->Get<object::list_t<bool>&>().size();
+ break;
+ case basyx::type::valueType::Int:
+ return this->Get<object::list_t<int>&>().size();
+ break;
+ case basyx::type::valueType::Float:
+ return this->Get<object::list_t<float>&>().size();
+ break;
+ case basyx::type::valueType::String:
+ return this->Get<object::list_t<std::string>&>().size();
+ break;
+ case basyx::type::valueType::Object:
+ return this->Get<object::object_list_t&>().size();
+ break;
+ };
+ break;
+ case basyx::type::objectType::Map:
+ return this->Get<object::object_map_t&>().size();
+ break;
+ };
+
+ return 1;
+};
+
basyx::object basyx::object::make_null()
{
return basyx::object{ nullptr };
diff --git a/sdks/c++/basys.sdk.cc/src/submodel/submodel/map/submodelelement/langstring/LangStringSet.cpp b/sdks/c++/basys.sdk.cc/src/submodel/submodel/map/submodelelement/langstring/LangStringSet.cpp
index 6690121..004fc40 100644
--- a/sdks/c++/basys.sdk.cc/src/submodel/submodel/map/submodelelement/langstring/LangStringSet.cpp
+++ b/sdks/c++/basys.sdk.cc/src/submodel/submodel/map/submodelelement/langstring/LangStringSet.cpp
@@ -3,7 +3,7 @@
const std::string empty{};
basyx::submodel::LangStringSet::LangStringSet()
- : vab::ElementMap{basyx::object::make_object_set()}
+ : vab::ElementMap{basyx::object::make_object_list()}
{
}
@@ -16,7 +16,7 @@
const std::string & basyx::submodel::LangStringSet::getLangString(const std::string & languageCode) const
{
- auto & objectSet = this->getMap().Get<basyx::object::object_set_t&>();
+ auto & objectSet = this->getMap().Get<basyx::object::object_list_t&>();
for (auto & entry : objectSet)
{
@@ -31,15 +31,15 @@
basyx::submodel::LangStringSet::langCodeSet_t basyx::submodel::LangStringSet::getLanguageCodes() const
{
- auto & objectSet = this->getMap().Get<basyx::object::object_set_t&>();
+ auto & objectList = this->getMap().Get<basyx::object::object_list_t&>();
std::remove_const<langCodeSet_t>::type ret;
- ret.reserve(objectSet.size());
+ ret.reserve(objectList.size());
- for (auto & entry : objectSet)
+ for (auto & entry : objectList)
{
auto & object = const_cast<basyx::object&>(entry);
- ret.emplace_back( std::cref( object.getProperty(Path::Language).GetStringContent()) );
+ ret.emplace_back( std::cref( object.getProperty(Path::Language).GetStringContent()) );
};
return ret;
diff --git a/sdks/c++/basys.sdk.cc/tests/regression/util/fundamentals/test_basyx_object.cc b/sdks/c++/basys.sdk.cc/tests/regression/util/fundamentals/test_basyx_object.cc
index 700b457..2cc09dc 100644
--- a/sdks/c++/basys.sdk.cc/tests/regression/util/fundamentals/test_basyx_object.cc
+++ b/sdks/c++/basys.sdk.cc/tests/regression/util/fundamentals/test_basyx_object.cc
@@ -98,19 +98,6 @@
ASSERT_EQ(basyx::type::basyx_type<basyx::object::list_t<double>>::object_type, basyx::type::objectType::List);
ASSERT_EQ(basyx::type::basyx_type<basyx::object::list_t<double>>::value_type, basyx::type::valueType::Float);
- // sets
- ASSERT_EQ(basyx::type::basyx_type<basyx::object::set_t<int>>::object_type, basyx::type::objectType::Set);
- ASSERT_EQ(basyx::type::basyx_type<basyx::object::set_t<int>>::value_type, basyx::type::valueType::Int);
-
- ASSERT_EQ(basyx::type::basyx_type<basyx::object::set_t<uint64_t>>::object_type, basyx::type::objectType::Set);
- ASSERT_EQ(basyx::type::basyx_type<basyx::object::set_t<uint64_t>>::value_type, basyx::type::valueType::Int);
-
- ASSERT_EQ(basyx::type::basyx_type<basyx::object::set_t<std::string>>::object_type, basyx::type::objectType::Set);
- ASSERT_EQ(basyx::type::basyx_type<basyx::object::set_t<std::string>>::value_type, basyx::type::valueType::String);
-
- ASSERT_EQ(basyx::type::basyx_type<basyx::object::set_t<double>>::object_type, basyx::type::objectType::Set);
- ASSERT_EQ(basyx::type::basyx_type<basyx::object::set_t<double>>::value_type, basyx::type::valueType::Float);
-
// functions
ASSERT_EQ(basyx::type::basyx_type<basyx::detail::functionWrapper>::object_type, basyx::type::objectType::Function);
ASSERT_EQ(basyx::type::basyx_type<basyx::detail::functionWrapper>::value_type, basyx::type::valueType::Object);
@@ -223,14 +210,6 @@
ASSERT_EQ(vec.size(), 2);
ASSERT_TRUE(anyVec.insert(3));
ASSERT_EQ(vec.size(), 3);
-
- basyx::object anySet = std::unordered_set<int>{ 1,2 };
- auto & set = anySet.Get<std::unordered_set<int>&>();
-
- ASSERT_EQ(set.size(), 2);
- ASSERT_FALSE(anySet.insert(2));
- ASSERT_TRUE(anySet.insert(3));
- ASSERT_EQ(set.size(), 3);
}
TEST_F(TestBaSyxObject, InsertTestObject)
@@ -254,13 +233,7 @@
TEST_F(TestBaSyxObject, RemoveTest)
{
- basyx::object anySet = std::unordered_set<int>{ 1,2,3 };
- auto & set = anySet.Get<std::unordered_set<int>&>();
- ASSERT_EQ(set.size(), 3);
- ASSERT_FALSE(anySet.remove(4));
- ASSERT_TRUE(anySet.remove(3));
- ASSERT_EQ(set.size(), 2);
}
TEST_F(TestBaSyxObject, HashMapTest_Object)
@@ -294,43 +267,6 @@
ASSERT_EQ(obj.Get<int>(), i);
}
-TEST_F(TestBaSyxObject, ObjectSetTestInt)
-{
- basyx::object objectSet = basyx::object::make_set<int>();
-
- ASSERT_TRUE(objectSet.InstanceOf<basyx::object::set_t<int>>());
- auto & set = objectSet.Get<basyx::object::set_t<int>&>();
-
- // Insert two elements, same type
- ASSERT_TRUE(objectSet.insert(2));
- ASSERT_TRUE(objectSet.insert(3));
- ASSERT_EQ(set.size(), 2);
- ASSERT_EQ(set.count(2), 1);
- ASSERT_EQ(set.count(3), 1);
-
- // Insert new element, already existing value
- ASSERT_FALSE(objectSet.insert(2));
- ASSERT_EQ(set.size(), 2);
- ASSERT_EQ(set.count(2), 1);
- ASSERT_EQ(set.count(3), 1);
-
- // Remove non-existing value
- ASSERT_FALSE(objectSet.remove(5));
- ASSERT_EQ(set.size(), 2);
-
- // Remove existing value
- ASSERT_TRUE(objectSet.remove(2));
- ASSERT_EQ(set.size(), 1);
- ASSERT_EQ(set.count(2), 0);
- ASSERT_EQ(set.count(3), 1);
-
- // Insert wrong type
- ASSERT_FALSE(objectSet.insert(4.0));
- ASSERT_EQ(set.size(), 1);
- ASSERT_EQ(set.count(2), 0);
- ASSERT_EQ(set.count(3), 1);
-}
-
TEST_F(TestBaSyxObject, ObjectFunctionTest)
{
basyx::object argSingle = 2;
@@ -401,34 +337,4 @@
ASSERT_NE(hash(map1), hash(map2));
ASSERT_NE(hash(map1), hash(objInt));
-}
-
-TEST_F(TestBaSyxObject, ObjectSetTestObject)
-{
- auto objectSet = basyx::object::make_object_set();
-
- ASSERT_TRUE(objectSet.InstanceOf<basyx::object::object_set_t>());
-
- auto & set = objectSet.Get<basyx::object::object_set_t&>();
-
- basyx::object objInt = 5;
- auto map1 = basyx::object::make_map();
- auto map2 = basyx::object::make_map();
- map1.insertKey("test", 2);
-
- // Insert new element
- objectSet.insert(map1);
- ASSERT_EQ(set.size(), 1);
-
- // Insert same element, shouldn't insert
- objectSet.insert(map1);
- ASSERT_EQ(set.size(), 1);
-
- // Insert new element
- objectSet.insert(map2);
- ASSERT_EQ(set.size(), 2);
-
- // Insert new element, different type
- objectSet.insert(objInt);
- ASSERT_EQ(set.size(), 3);
}
\ No newline at end of file
diff --git a/sdks/c++/basys.sdk.cc/tests/regression/util/serialization/test_basyx_object_serializer_json.cc b/sdks/c++/basys.sdk.cc/tests/regression/util/serialization/test_basyx_object_serializer_json.cc
index bfa4318..41bd4a6 100644
--- a/sdks/c++/basys.sdk.cc/tests/regression/util/serialization/test_basyx_object_serializer_json.cc
+++ b/sdks/c++/basys.sdk.cc/tests/regression/util/serialization/test_basyx_object_serializer_json.cc
@@ -14,16 +14,93 @@
public:
};
-TEST_F(TestBaSyxObjectSerializerJson, PrimitiveTest)
+TEST_F(TestBaSyxObjectSerializerJson, FullTest)
{
- json_t jsonInt = basyx::object{ 1 };
- auto objList = basyx::object::make_list<basyx::object>({ 1,"22" });
+ auto innerMap = basyx::object::make_map();
+ innerMap.insertKey("a", 1);
+ innerMap.insertKey("b", 2);
- json_t jsonList = basyx::serialization::json::serialize(objList);
- auto dumped = jsonList.dump(4);
+ auto intList = basyx::object::make_list<int>({ 1,2,3 });
+ auto objList = basyx::object::make_object_list();
+ objList.insert(false);
+ objList.insert(4);
+ objList.insert(5.0);
+ objList.insert(std::string("6,0"));
+ objList.insert(innerMap);
+
+ auto emptyList = basyx::object::make_object_list();
+ auto emptyMap = basyx::object::make_map();
+
+ auto objectMap = basyx::object::make_map();
+ objectMap.insertKey("bool", true);
+ objectMap.insertKey("int", 1);
+ objectMap.insertKey("double", 2.0);
+ objectMap.insertKey("string", std::string("test"));
+ objectMap.insertKey("innerMap", innerMap);
+ objectMap.insertKey("intList", intList);
+ objectMap.insertKey("objList", objList);
+ objectMap.insertKey("emptyList", emptyList);
+ objectMap.insertKey("emptyMap", emptyMap);
+
+ json_t jsonMap = basyx::serialization::json::serialize(objectMap);
+ auto dumped = jsonMap.dump(4);
auto deserialized = basyx::serialization::json::deserialize(dumped);
- ASSERT_TRUE(deserialized.InstanceOf<basyx::object::object_list_t>());
- ASSERT_EQ(deserialized.Get<basyx::object::object_list_t&>().size(), 2);
-}
+ ASSERT_TRUE(deserialized.InstanceOf<basyx::object::object_map_t>());
+ ASSERT_EQ(deserialized.size(), objectMap.size());
+
+ // Test primitives
+ auto dBool = deserialized.getProperty("bool");
+ ASSERT_TRUE(dBool.InstanceOf<bool>());
+ ASSERT_EQ(dBool.Get<bool>(), true);
+
+ auto dInt = deserialized.getProperty("int");
+ ASSERT_TRUE(dInt.InstanceOf<int>());
+ ASSERT_EQ(dInt.Get<int>(), 1);
+
+ auto dFloat = deserialized.getProperty("double");
+ ASSERT_TRUE(dFloat.InstanceOf<double>());
+ ASSERT_EQ(dFloat.Get<double>(), 2.0);
+
+ auto dString = deserialized.getProperty("string");
+ ASSERT_TRUE(dString.InstanceOf<std::string>());
+ ASSERT_EQ(dString.Get<std::string&>(), "test");
+
+ // Test empty containers
+
+ auto dEmptyList = deserialized.getProperty("emptyList");
+ ASSERT_TRUE(dEmptyList.InstanceOf<basyx::object::object_list_t>());
+ ASSERT_EQ(dEmptyList.size(), 0);
+
+ auto dEmptyMap = deserialized.getProperty("emptyMap");
+ ASSERT_TRUE(dEmptyMap.InstanceOf<basyx::object::object_map_t>());
+ ASSERT_EQ(dEmptyMap.size(), 0);
+
+ // Test inner map
+
+ auto dInnerMap = deserialized.getProperty("innerMap");
+ ASSERT_TRUE(dInnerMap.InstanceOf<basyx::object::object_map_t>());
+ ASSERT_EQ(dInnerMap.size(), 2);
+ auto & aInnerMap = dInnerMap.Get<basyx::object::object_map_t&>();
+ auto & bInnerMap = innerMap.Get<basyx::object::object_map_t&>();
+ ASSERT_EQ(aInnerMap, bInnerMap);
+
+ // Test lists
+
+ auto dIntList = deserialized.getProperty("intList");
+ ASSERT_TRUE(dIntList.InstanceOf<basyx::object::list_t<int>>());
+ ASSERT_EQ(dIntList.size(), 3);
+ auto & aIntList = dIntList.Get<basyx::object::list_t<int>&>();
+ auto & bIntList = intList.Get<basyx::object::list_t<int>&>();
+ ASSERT_EQ(aIntList, bIntList);
+
+ auto dObjList = deserialized.getProperty("objList");
+ ASSERT_TRUE(dObjList.InstanceOf<basyx::object::object_list_t>());
+ ASSERT_EQ(dObjList.size(), 5);
+ auto & aObjList = dObjList.Get<basyx::object::object_list_t&>();
+ auto & bObjList = objList.Get<basyx::object::object_list_t&>();
+ ASSERT_EQ(aObjList, bObjList);
+
+ return;
+}
\ No newline at end of file
diff --git a/sdks/c++/basys.sdk.cc/tests/regression/vab/snippet/TestCollectionProperty.h b/sdks/c++/basys.sdk.cc/tests/regression/vab/snippet/TestCollectionProperty.h
index b4a5530..464d628 100644
--- a/sdks/c++/basys.sdk.cc/tests/regression/vab/snippet/TestCollectionProperty.h
+++ b/sdks/c++/basys.sdk.cc/tests/regression/vab/snippet/TestCollectionProperty.h
@@ -52,14 +52,6 @@
static void testCreateDelete(basyx::vab::core::IModelProvider * modelProvider)
{
- // Create element in Set (no key provided)
- modelProvider->createValue("/structure/set/", true);
- auto anySet = modelProvider->getModelPropertyValue("/structure/set/");
-
- ASSERT_TRUE(anySet.InstanceOf<basyx::object::set_t<bool>>());
-
- auto & objectSet = anySet.Get<basyx::object::set_t<bool>&>();
-
// Create elements in List (no key provided)
modelProvider->createValue("/structure/list/", 56);
auto toTest = modelProvider->getModelPropertyValue("/structure/list/");
@@ -94,13 +86,6 @@
toTest = modelProvider->getModelPropertyValue("listInRoot");
ASSERT_TRUE(toTest.IsNull());
- // Delete at Set
- // by value
- modelProvider->deleteValue("/structure/set/", true);
- toTest = modelProvider->getModelPropertyValue("/structure/set/");
- //ASSERT_EQ(toTest.Get<basyx::object::set_t<bool>&>().count(true), 0);
- ASSERT_TRUE(toTest.empty());
-
return;
}
diff --git a/sdks/c++/basys.sdk.cc/tests/support/vab/stub/elements/SimpleVABElement.cpp b/sdks/c++/basys.sdk.cc/tests/support/vab/stub/elements/SimpleVABElement.cpp
index 109afd0..16debc0 100644
--- a/sdks/c++/basys.sdk.cc/tests/support/vab/stub/elements/SimpleVABElement.cpp
+++ b/sdks/c++/basys.sdk.cc/tests/support/vab/stub/elements/SimpleVABElement.cpp
@@ -39,7 +39,7 @@
// Add structure types
vabElement.insertKey("structure", basyx::object::make_map());
vabElement.getProperty("structure").insertKey("map", basyx::object::make_map());
- vabElement.getProperty("structure").insertKey("set", basyx::object::make_set<bool>());
+// vabElement.getProperty("structure").insertKey("set", basyx::object::make_set<bool>());
vabElement.getProperty("structure").insertKey("list", basyx::object::make_list<int>());
// Add corner cases