TEST(PropertyTests, CollectionPropertyEncapsulatesVectorOfInts) { std::vector<int> v; v.push_back(0); v.push_back(1); v.push_back(2); Property p = v; ASSERT_EQ(p.AsCollection().GetSize(), 3); Property new_int = p.AsCollection().Grow(); new_int.AsInt().Set(3); ASSERT_EQ(v.size(), 4); ASSERT_EQ(v.back(), 3); }
TEST(PropertyTests, CollectionPropertyCanGrow) { std::vector<int> v; Property p = v; p.AsCollection().Grow().AsInt().Set(0); p.AsCollection().Grow().AsInt().Set(1); p.AsCollection().Grow().AsInt().Set(2); p.AsCollection().Grow().AsInt().Set(3); ASSERT_EQ(v.size(), 4); ASSERT_EQ(v[0], 0); ASSERT_EQ(v[1], 1); ASSERT_EQ(v[2], 2); ASSERT_EQ(v[3], 3); }
TEST(PropertyTests, CollectionPropertyEncapsulatesCompositeCollections) { std::vector<std::vector<int>> v; v.resize(2); v[0].resize(2); v[0][0] = 0; v[0][1] = 1; v[1].resize(2); v[1][0] = 2; v[1][1] = 3; Property p = v; ASSERT_EQ(p.AsCollection().Get(0).AsCollection().Get(0).AsInt().Get(), 0); ASSERT_EQ(p.AsCollection().Get(0).AsCollection().Get(1).AsInt().Get(), 1); ASSERT_EQ(p.AsCollection().Get(1).AsCollection().Get(0).AsInt().Get(), 2); ASSERT_EQ(p.AsCollection().Get(1).AsCollection().Get(1).AsInt().Get(), 3); }
TEST(PropertyTests, CollectionPropertyCanBeFiltered) { std::vector<int> v; v.push_back(0); v.push_back(1); v.push_back(2); v.push_back(3); v.push_back(4); Property p = v; p.AsCollection().Filter([&] (size_t, Property p) { return (p.AsInt().Get() & 1) != 0; }); ASSERT_EQ(v.size(), 2); ASSERT_EQ(v[0], 1); ASSERT_EQ(v[1], 3); }
TEST(PropertyTests, CollectionPropertyCanBeEnumerated) { std::vector<int> v; v.push_back(0); v.push_back(1); v.push_back(2); std::vector<int> o; Property p = v; p.AsCollection().Enumerate([&] (size_t, Property p) { return o.push_back(static_cast<int>(p.AsInt().Get())), true; }); ASSERT_EQ(o.size(), 3); ASSERT_EQ(o[0], 0); ASSERT_EQ(o[1], 1); ASSERT_EQ(o[2], 2); }