Loading cmds/statsd/src/FieldValue.cpp +19 −0 Original line number Diff line number Diff line Loading @@ -435,6 +435,25 @@ bool equalDimensions(const std::vector<Matcher>& dimension_a, return eq; } bool subsetDimensions(const std::vector<Matcher>& dimension_a, const std::vector<Matcher>& dimension_b) { if (dimension_a.size() > dimension_b.size()) { return false; } for (size_t i = 0; i < dimension_a.size(); ++i) { bool found = false; for (size_t j = 0; j < dimension_b.size(); ++j) { if (dimension_a[i] == dimension_b[j]) { found = true; } } if (!found) { return false; } } return true; } bool HasPositionANY(const FieldMatcher& matcher) { if (matcher.has_position() && matcher.position() == Position::ANY) { return true; Loading cmds/statsd/src/FieldValue.h +4 −0 Original line number Diff line number Diff line Loading @@ -396,6 +396,10 @@ bool isUidField(const Field& field, const Value& value); bool equalDimensions(const std::vector<Matcher>& dimension_a, const std::vector<Matcher>& dimension_b); // Returns true if dimension_a is a subset of dimension_b. bool subsetDimensions(const std::vector<Matcher>& dimension_a, const std::vector<Matcher>& dimension_b); } // namespace statsd } // namespace os } // namespace android cmds/statsd/tests/FieldValue_test.cpp +131 −0 Original line number Diff line number Diff line Loading @@ -480,6 +480,137 @@ TEST(AtomMatcherTest, TestWriteAtomToProto) { EXPECT_EQ(999, atom.num_results()); } /* * Test two Matchers is not a subset of one Matcher. * Test one Matcher is subset of two Matchers. */ TEST(AtomMatcherTest, TestSubsetDimensions1) { // Initialize first set of matchers FieldMatcher matcher1; matcher1.set_field(10); FieldMatcher* child = matcher1.add_child(); child->set_field(1); child->set_position(Position::ALL); child->add_child()->set_field(1); child->add_child()->set_field(2); vector<Matcher> matchers1; translateFieldMatcher(matcher1, &matchers1); EXPECT_EQ(2, matchers1.size()); // Initialize second set of matchers FieldMatcher matcher2; matcher2.set_field(10); child = matcher2.add_child(); child->set_field(1); child->set_position(Position::ALL); child->add_child()->set_field(1); vector<Matcher> matchers2; translateFieldMatcher(matcher2, &matchers2); EXPECT_EQ(1, matchers2.size()); EXPECT_FALSE(subsetDimensions(matchers1, matchers2)); EXPECT_TRUE(subsetDimensions(matchers2, matchers1)); } /* * Test not a subset with one matching Matcher, one non-matching Matcher. */ TEST(AtomMatcherTest, TestSubsetDimensions2) { // Initialize first set of matchers FieldMatcher matcher1; matcher1.set_field(10); FieldMatcher* child = matcher1.add_child(); child->set_field(1); child = matcher1.add_child(); child->set_field(2); vector<Matcher> matchers1; translateFieldMatcher(matcher1, &matchers1); // Initialize second set of matchers FieldMatcher matcher2; matcher2.set_field(10); child = matcher2.add_child(); child->set_field(1); child = matcher2.add_child(); child->set_field(3); vector<Matcher> matchers2; translateFieldMatcher(matcher2, &matchers2); EXPECT_FALSE(subsetDimensions(matchers1, matchers2)); } /* * Test not a subset if parent field is not equal. */ TEST(AtomMatcherTest, TestSubsetDimensions3) { // Initialize first set of matchers FieldMatcher matcher1; matcher1.set_field(10); FieldMatcher* child = matcher1.add_child(); child->set_field(1); vector<Matcher> matchers1; translateFieldMatcher(matcher1, &matchers1); // Initialize second set of matchers FieldMatcher matcher2; matcher2.set_field(5); child = matcher2.add_child(); child->set_field(1); vector<Matcher> matchers2; translateFieldMatcher(matcher2, &matchers2); EXPECT_FALSE(subsetDimensions(matchers1, matchers2)); } /* * Test is subset with two matching Matchers. */ TEST(AtomMatcherTest, TestSubsetDimensions4) { // Initialize first set of matchers FieldMatcher matcher1; matcher1.set_field(10); FieldMatcher* child = matcher1.add_child(); child->set_field(1); child = matcher1.add_child(); child->set_field(2); vector<Matcher> matchers1; translateFieldMatcher(matcher1, &matchers1); // Initialize second set of matchers FieldMatcher matcher2; matcher2.set_field(10); child = matcher2.add_child(); child->set_field(1); child = matcher2.add_child(); child->set_field(2); child = matcher2.add_child(); child->set_field(3); vector<Matcher> matchers2; translateFieldMatcher(matcher2, &matchers2); EXPECT_TRUE(subsetDimensions(matchers1, matchers2)); EXPECT_FALSE(subsetDimensions(matchers2, matchers1)); } } // namespace statsd } // namespace os Loading Loading
cmds/statsd/src/FieldValue.cpp +19 −0 Original line number Diff line number Diff line Loading @@ -435,6 +435,25 @@ bool equalDimensions(const std::vector<Matcher>& dimension_a, return eq; } bool subsetDimensions(const std::vector<Matcher>& dimension_a, const std::vector<Matcher>& dimension_b) { if (dimension_a.size() > dimension_b.size()) { return false; } for (size_t i = 0; i < dimension_a.size(); ++i) { bool found = false; for (size_t j = 0; j < dimension_b.size(); ++j) { if (dimension_a[i] == dimension_b[j]) { found = true; } } if (!found) { return false; } } return true; } bool HasPositionANY(const FieldMatcher& matcher) { if (matcher.has_position() && matcher.position() == Position::ANY) { return true; Loading
cmds/statsd/src/FieldValue.h +4 −0 Original line number Diff line number Diff line Loading @@ -396,6 +396,10 @@ bool isUidField(const Field& field, const Value& value); bool equalDimensions(const std::vector<Matcher>& dimension_a, const std::vector<Matcher>& dimension_b); // Returns true if dimension_a is a subset of dimension_b. bool subsetDimensions(const std::vector<Matcher>& dimension_a, const std::vector<Matcher>& dimension_b); } // namespace statsd } // namespace os } // namespace android
cmds/statsd/tests/FieldValue_test.cpp +131 −0 Original line number Diff line number Diff line Loading @@ -480,6 +480,137 @@ TEST(AtomMatcherTest, TestWriteAtomToProto) { EXPECT_EQ(999, atom.num_results()); } /* * Test two Matchers is not a subset of one Matcher. * Test one Matcher is subset of two Matchers. */ TEST(AtomMatcherTest, TestSubsetDimensions1) { // Initialize first set of matchers FieldMatcher matcher1; matcher1.set_field(10); FieldMatcher* child = matcher1.add_child(); child->set_field(1); child->set_position(Position::ALL); child->add_child()->set_field(1); child->add_child()->set_field(2); vector<Matcher> matchers1; translateFieldMatcher(matcher1, &matchers1); EXPECT_EQ(2, matchers1.size()); // Initialize second set of matchers FieldMatcher matcher2; matcher2.set_field(10); child = matcher2.add_child(); child->set_field(1); child->set_position(Position::ALL); child->add_child()->set_field(1); vector<Matcher> matchers2; translateFieldMatcher(matcher2, &matchers2); EXPECT_EQ(1, matchers2.size()); EXPECT_FALSE(subsetDimensions(matchers1, matchers2)); EXPECT_TRUE(subsetDimensions(matchers2, matchers1)); } /* * Test not a subset with one matching Matcher, one non-matching Matcher. */ TEST(AtomMatcherTest, TestSubsetDimensions2) { // Initialize first set of matchers FieldMatcher matcher1; matcher1.set_field(10); FieldMatcher* child = matcher1.add_child(); child->set_field(1); child = matcher1.add_child(); child->set_field(2); vector<Matcher> matchers1; translateFieldMatcher(matcher1, &matchers1); // Initialize second set of matchers FieldMatcher matcher2; matcher2.set_field(10); child = matcher2.add_child(); child->set_field(1); child = matcher2.add_child(); child->set_field(3); vector<Matcher> matchers2; translateFieldMatcher(matcher2, &matchers2); EXPECT_FALSE(subsetDimensions(matchers1, matchers2)); } /* * Test not a subset if parent field is not equal. */ TEST(AtomMatcherTest, TestSubsetDimensions3) { // Initialize first set of matchers FieldMatcher matcher1; matcher1.set_field(10); FieldMatcher* child = matcher1.add_child(); child->set_field(1); vector<Matcher> matchers1; translateFieldMatcher(matcher1, &matchers1); // Initialize second set of matchers FieldMatcher matcher2; matcher2.set_field(5); child = matcher2.add_child(); child->set_field(1); vector<Matcher> matchers2; translateFieldMatcher(matcher2, &matchers2); EXPECT_FALSE(subsetDimensions(matchers1, matchers2)); } /* * Test is subset with two matching Matchers. */ TEST(AtomMatcherTest, TestSubsetDimensions4) { // Initialize first set of matchers FieldMatcher matcher1; matcher1.set_field(10); FieldMatcher* child = matcher1.add_child(); child->set_field(1); child = matcher1.add_child(); child->set_field(2); vector<Matcher> matchers1; translateFieldMatcher(matcher1, &matchers1); // Initialize second set of matchers FieldMatcher matcher2; matcher2.set_field(10); child = matcher2.add_child(); child->set_field(1); child = matcher2.add_child(); child->set_field(2); child = matcher2.add_child(); child->set_field(3); vector<Matcher> matchers2; translateFieldMatcher(matcher2, &matchers2); EXPECT_TRUE(subsetDimensions(matchers1, matchers2)); EXPECT_FALSE(subsetDimensions(matchers2, matchers1)); } } // namespace statsd } // namespace os Loading