Implement less than operator.

Summary:
Add test.

Vertex accessor test checks for sortability.

Reviewers: buda, florijan, mislav.bradac

Reviewed By: buda

Subscribers: pullbot

Differential Revision: https://phabricator.memgraph.io/D62
This commit is contained in:
Dominik Gleich 2017-02-23 15:08:03 +01:00
parent ca90f813ad
commit af23253e7e
2 changed files with 45 additions and 0 deletions

View File

@ -87,6 +87,16 @@ class RecordAccessor {
handler,
std::function<void()> finish = {}) const;
/**
* This should be used with care as it's comparing vlist_ pointer records and
* not actual values inside RecordAccessors.
*/
friend bool operator<(const RecordAccessor& a, const RecordAccessor& b) {
assert(&a.db_accessor_ ==
&b.db_accessor_); // assume the same db_accessor / transaction
return &a.vlist_ < &b.vlist_;
}
friend bool operator==(const RecordAccessor& a, const RecordAccessor& b) {
assert(&a.db_accessor_ ==
&b.db_accessor_); // assume the same db_accessor / transaction

View File

@ -58,6 +58,41 @@ TEST(RecordAccessor, RecordEquality) {
EXPECT_NE(e1, e2);
}
TEST(RecordAccessor, RecordLessThan) {
Dbms dbms;
GraphDbAccessor dba = dbms.active();
auto v1 = dba.insert_vertex();
auto v2 = dba.insert_vertex();
EXPECT_NE(v1, v2);
EXPECT_TRUE(v1 < v2 || v2 < v1);
EXPECT_FALSE(v1 < v1);
EXPECT_FALSE(v2 < v2);
auto e1 = dba.insert_edge(v1, v2, dba.edge_type("type"));
auto e2 = dba.insert_edge(v1, v2, dba.edge_type("type"));
EXPECT_NE(e1, e2);
EXPECT_TRUE(e1 < e2 || e2 < e1);
EXPECT_FALSE(e1 < e1);
EXPECT_FALSE(e2 < e2);
std::vector<VertexAccessor> vertices = dba.vertices();
std::vector<VertexAccessor*> A;
for (int i = 0; i < vertices.size(); ++i) A.push_back(&vertices[i]);
std::sort(A.begin(), A.end(),
[](const VertexAccessor* a, const VertexAccessor* b) -> bool {
return *a < *b;
});
std::vector<VertexAccessor*> B;
for (int i = 0; i < vertices.size(); ++i) B.push_back(&vertices[i]);
std::sort(B.begin(), B.end(),
[](const VertexAccessor* a, const VertexAccessor* b) -> bool {
return *a < *b;
});
for (int i = 0; i < A.size(); ++i) EXPECT_EQ(*A[i], *B[i]);
}
TEST(RecordAccessor, VertexLabels) {
Dbms dbms;
GraphDbAccessor dba = dbms.active();