summaryrefslogtreecommitdiffstats
path: root/eval/src/apps/tensor_conformance/tensor_conformance.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'eval/src/apps/tensor_conformance/tensor_conformance.cpp')
-rw-r--r--eval/src/apps/tensor_conformance/tensor_conformance.cpp54
1 files changed, 31 insertions, 23 deletions
diff --git a/eval/src/apps/tensor_conformance/tensor_conformance.cpp b/eval/src/apps/tensor_conformance/tensor_conformance.cpp
index 2f01f9a7e4d..b5b2e2792a2 100644
--- a/eval/src/apps/tensor_conformance/tensor_conformance.cpp
+++ b/eval/src/apps/tensor_conformance/tensor_conformance.cpp
@@ -7,6 +7,7 @@
#include <vespa/vespalib/objects/nbostream.h>
#include <vespa/vespalib/testkit/test_kit.h>
#include <vespa/vespalib/util/size_literals.h>
+#include <vespa/vespalib/util/require.h>
#include <vespa/vespalib/util/stringfmt.h>
#include <vespa/eval/eval/fast_value.h>
#include <vespa/eval/eval/function.h>
@@ -87,13 +88,41 @@ TensorSpec extract_value(const Inspector &inspector) {
//-----------------------------------------------------------------------------
+std::vector<vespalib::string> extract_fields(const Inspector &object) {
+ struct FieldExtractor : slime::ObjectTraverser {
+ std::vector<vespalib::string> result;
+ void field(const Memory &symbol, const Inspector &) override {
+ result.push_back(symbol.make_string());
+ }
+ } extractor;
+ object.traverse(extractor);
+ return std::move(extractor.result);
+};
+
+//-----------------------------------------------------------------------------
+
+void dump_test(const Inspector &test) {
+ fprintf(stderr, "expression: '%s'\n", test["expression"].asString().make_string().c_str());
+ for (const auto &input: extract_fields(test["inputs"])) {
+ auto value = extract_value(test["inputs"][input]);
+ fprintf(stderr, "input '%s': %s\n", input.c_str(), value.to_string().c_str());
+ }
+}
+
+//-----------------------------------------------------------------------------
+
TensorSpec ref_eval(const Inspector &test) {
auto fun = Function::parse(test["expression"].asString().make_string());
std::vector<TensorSpec> params;
for (size_t i = 0; i < fun->num_params(); ++i) {
params.push_back(extract_value(test["inputs"][fun->param_name(i)]));
}
- return ReferenceEvaluation::eval(*fun, params);
+ auto result = ReferenceEvaluation::eval(*fun, params);
+ if (result.type() == "error") {
+ dump_test(test);
+ REQUIRE(((void)"reference evaluation failed!", false));
+ }
+ return result;
}
//-----------------------------------------------------------------------------
@@ -119,25 +148,12 @@ TensorSpec eval_expr(const Inspector &test, const ValueBuilderFactory &factory)
InterpretedFunction::Context ctx(ifun);
SimpleObjectParams params(param_refs);
const Value &result = ifun.eval(ctx, params);
- ASSERT_EQUAL(result.type(), types.get_type(fun->root()));
+ REQUIRE_EQ(result.type(), types.get_type(fun->root()));
return spec_from_value(result);
}
//-----------------------------------------------------------------------------
-std::vector<vespalib::string> extract_fields(const Inspector &object) {
- struct FieldExtractor : slime::ObjectTraverser {
- std::vector<vespalib::string> result;
- void field(const Memory &symbol, const Inspector &) override {
- result.push_back(symbol.make_string());
- }
- } extractor;
- object.traverse(extractor);
- return std::move(extractor.result);
-};
-
-//-----------------------------------------------------------------------------
-
void print_test(const Inspector &test, OutputWriter &dst) {
dst.printf("expression: '%s'\n", test["expression"].asString().make_string().c_str());
for (const auto &input: extract_fields(test["inputs"])) {
@@ -195,14 +211,6 @@ void evaluate(Input &in, Output &out) {
//-----------------------------------------------------------------------------
-void dump_test(const Inspector &test) {
- fprintf(stderr, "expression: '%s'\n", test["expression"].asString().make_string().c_str());
- for (const auto &input: extract_fields(test["inputs"])) {
- auto value = extract_value(test["inputs"][input]);
- fprintf(stderr, "input '%s': %s\n", input.c_str(), value.to_string().c_str());
- }
-}
-
void verify(Input &in, Output &out) {
std::map<vespalib::string,size_t> result_map;
auto handle_test = [&result_map](Slime &slime)