6#include <knowCore/Uris/xsd.h>
7#include <knowDBC/Result.h>
8#include <knowRDF/BlankNode.h>
9#include <knowRDF/Graph.h>
10#include <knowRDF/Literal.h>
11#include <knowRDF/Node.h>
19 auto const& [s, v, m] = _v1.
compare(_v2, knowCore::ComparisonOperator::AlmostEqual);
20 return s and v.value();
25 clog_print<clog_print_flag::bold>(
"Fields: ");
26 for(
int j = 0; j < r.fields(); ++j)
33 for(
int j = 0; j < r.tuples(); ++j)
35 clog_print<clog_print_flag::bold | clog_print_flag::nonewline>(
"{}th: ", j);
36 for(
int k = 0; k < r.fields(); ++k)
38 clog_print<clog_print_flag::nonewline>(
"{} ", r.value(j, k));
45 clog_print<clog_print_flag::blue>(
"Possible reference values were");
48 clog_print<clog_print_flag::red>(
"Tested values were");
54 QVector<bool> indexes(r2.tuples(),
false);
55 for(
int i = 0; i < r1.tuples(); ++i)
57 bool found_one =
false;
58 for(
int j = 0; j < r2.tuples(); ++j)
62 bool equal_tuple =
true;
63 for(
int k = 0; k < r1.fields(); ++k)
70 and not details::comparable_special(val1, val2))
87 clog_print<clog_print_flag::red | clog_print_flag::nonewline>(
88 "Error: No match for {}th tuple: ", i);
89 for(
int k = 0; k < r1.fields(); ++k)
91 clog_print<clog_print_flag::red | clog_print_flag::nonewline>(
"{} ", r1.value(i, k));
107 case knowRDF::Node::Type::Undefined:
108 clog_print<clog_print_flag::nonewline>(
"undefined");
110 case knowRDF::Node::Type::Uri:
111 clog_print<clog_print_flag::nonewline>(
"{}", node->
uri());
113 case knowRDF::Node::Type::BlankNode:
114 clog_print<clog_print_flag::nonewline>(
"{}", node->
blankNode());
116 case knowRDF::Node::Type::Literal:
117 clog_print<clog_print_flag::nonewline>(
"{}", node->
literal());
119 case knowRDF::Node::Type::Variable:
120 clog_print<clog_print_flag::nonewline>(
"{}", node->
variable());
126 QMultiHash<knowCore::Uri, const knowRDF::Node*> children = node->
children();
127 clog_print<clog_print_flag::nonewline>(
"{{");
129 clog_print<clog_print_flag::nonewline>(
" -> ");
130 for(QMultiHash<knowCore::Uri, const knowRDF::Node*>::const_iterator it = children.begin();
131 it != children.end(); ++it)
133 clog_print<clog_print_flag::nonewline>(
"({})", it.key());
134 print_one(it.value());
135 clog_print<clog_print_flag::nonewline>(
")");
143 switch(node1->
type())
145 case knowRDF::Node::Type::Undefined:
147 case knowRDF::Node::Type::Uri:
148 return node1->
uri() == node2->
uri();
149 case knowRDF::Node::Type::BlankNode:
151 case knowRDF::Node::Type::Literal:
153 case knowRDF::Node::Type::Variable:
154 clog_fatal(
"Impossible");
160 toPairList(
const QMultiHash<knowCore::Uri, const knowRDF::Node*>& _hash)
163 for(QMultiHash<knowCore::Uri, const knowRDF::Node*>::const_iterator it = _hash.begin();
164 it != _hash.end(); ++it)
166 r.append(QPair<knowCore::Uri, const knowRDF::Node*>(it.key(), it.value()));
176 QVector<bool> indexes(nodes_2.size(),
false);
178 for(
int i = 0; i < nodes_1.size(); ++i)
180 bool found_one =
false;
182 for(
int j = 0; j < nodes_2.size(); ++j)
187 if(details::similar(node1, node2)
191 = details::toPairList(node1->
children());
193 = details::toPairList(node2->
children());
194 QVector<bool> indexes_children(children2.size(),
false);
196 bool all_children_found =
true;
198 for(
int k = 0; k < children1.size(); ++k)
200 bool found_one_child =
false;
201 QPair<knowCore::Uri, const knowRDF::Node*> c1 = children1[k];
202 for(
int l = 0; l < children2.size(); ++l)
204 if(not indexes_children[l])
206 QPair<knowCore::Uri, const knowRDF::Node*> c2 = children2[l];
207 if(c1.first == c2.first and details::similar(c1.second, c2.second))
209 found_one_child =
true;
210 indexes_children[l] =
true;
215 if(not found_one_child)
217 all_children_found =
false;
221 if(all_children_found)
232 clog_print<clog_print_flag::red | clog_print_flag::nonewline>(
233 "Error: No match for {}th node: ", i);
234 details::print(node1);
237 clog_print<clog_print_flag::blue>(
"Possible reference values were");
238 for(
int j = 0; j < nodes_2.size(); ++j)
240 clog_print<clog_print_flag::bold>(
"{}th: ", j);
241 details::print(nodes_2[j]);
244 clog_print<clog_print_flag::red>(
"Tested values were");
245 for(
int j = 0; j < nodes_1.size(); ++j)
247 clog_print<clog_print_flag::bold>(
"{}th: ", j);
248 details::print(nodes_1[j]);
258 if(nodes_1.size() != nodes_2.size())
260 clog_print<clog_print_flag::red>(
"Different test results got: {} expecting: ", nodes_1.size(),
cres_qresult< bool > compare(const Value &_value, ComparisonOperators _operators) const
Definition Value.cpp:316
int fieldIndex(const QString &_name) const
Definition Result.cpp:59
QString fieldName(int _index) const
Definition Result.h:65
knowCore::Uri uri() const
Definition Node.cpp:121
QString variable() const
Definition Node.cpp:119
Literal literal() const
Definition Node.cpp:123
QMultiHash< knowCore::Uri, const Node * > children() const
Definition Node.cpp:157
BlankNode blankNode() const
Definition Node.cpp:117
Type type() const
Definition Node.cpp:9