summaryrefslogtreecommitdiffstats
path: root/eval/src/apps/tensor_conformance
diff options
context:
space:
mode:
authorHåvard Pettersen <havardpe@oath.com>2020-11-30 13:42:14 +0000
committerHåvard Pettersen <havardpe@oath.com>2020-12-01 14:20:12 +0000
commit31fb5db2fe872581ee9b7d81514d5309c136b6b1 (patch)
tree0e28f9c97e9549bdb4472b1d80305227ec236294 /eval/src/apps/tensor_conformance
parent8d9680d2101c76229190598547362ab2760d3d2f (diff)
clean up tensor conformance testing
Diffstat (limited to 'eval/src/apps/tensor_conformance')
-rw-r--r--eval/src/apps/tensor_conformance/tensor_conformance.cpp63
1 files changed, 38 insertions, 25 deletions
diff --git a/eval/src/apps/tensor_conformance/tensor_conformance.cpp b/eval/src/apps/tensor_conformance/tensor_conformance.cpp
index 1f8069db06d..4e0b5d62b9a 100644
--- a/eval/src/apps/tensor_conformance/tensor_conformance.cpp
+++ b/eval/src/apps/tensor_conformance/tensor_conformance.cpp
@@ -7,14 +7,15 @@
#include <vespa/vespalib/objects/nbostream.h>
#include <vespa/vespalib/util/stringfmt.h>
#include <vespa/eval/eval/tensor_spec.h>
-#include <vespa/eval/eval/tensor.h>
#include <vespa/eval/eval/function.h>
#include <vespa/eval/eval/interpreted_function.h>
-#include <vespa/eval/eval/tensor_engine.h>
-#include <vespa/eval/eval/simple_tensor_engine.h>
-#include <vespa/eval/tensor/default_tensor_engine.h>
#include <vespa/eval/eval/value_type.h>
#include <vespa/eval/eval/value.h>
+#include <vespa/eval/eval/value_codec.h>
+#include <vespa/eval/eval/simple_value.h>
+#include <vespa/eval/eval/fast_value.h>
+#include <vespa/eval/streamed/streamed_value_builder_factory.h>
+#include <vespa/eval/eval/test/reference_evaluation.h>
#include <vespa/eval/eval/test/test_io.h>
#include <unistd.h>
#include <functional>
@@ -28,11 +29,16 @@ using namespace vespalib::slime::convenience;
using vespalib::slime::inject;
using vespalib::slime::SlimeInserter;
using slime::JsonFormat;
-using tensor::DefaultTensorEngine;
using namespace std::placeholders;
//-----------------------------------------------------------------------------
+const ValueBuilderFactory &prod_factory = FastValueBuilderFactory::get();
+const ValueBuilderFactory &simple_factory = SimpleValueBuilderFactory::get();
+const ValueBuilderFactory &streamed_factory = StreamedValueBuilderFactory::get();
+
+//-----------------------------------------------------------------------------
+
uint8_t unhex(char c) {
if (c >= '0' && c <= '9') {
return (c - '0');
@@ -67,15 +73,25 @@ nbostream extract_data(const Inspector &value) {
void insert_value(Cursor &cursor, const vespalib::string &name, const TensorSpec &spec) {
nbostream data;
- Value::UP value = SimpleTensorEngine::ref().from_spec(spec);
- SimpleTensorEngine::ref().encode(*value, data);
+ Value::UP value = value_from_spec(spec, simple_factory);
+ encode_value(*value, data);
cursor.setData(name, Memory(data.peek(), data.size()));
}
TensorSpec extract_value(const Inspector &inspector) {
nbostream data = extract_data(inspector);
- const auto &engine = SimpleTensorEngine::ref();
- return engine.to_spec(*engine.decode(data));
+ return spec_from_value(*decode_value(data, simple_factory));
+}
+
+//-----------------------------------------------------------------------------
+
+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);
}
//-----------------------------------------------------------------------------
@@ -88,23 +104,21 @@ std::vector<ValueType> get_types(const std::vector<Value::UP> &param_values) {
return param_types;
}
-TensorSpec eval_expr(const Inspector &test, EngineOrFactory engine, bool typed) {
+TensorSpec eval_expr(const Inspector &test, const ValueBuilderFactory &factory) {
auto fun = Function::parse(test["expression"].asString().make_string());
std::vector<Value::UP> param_values;
std::vector<Value::CREF> param_refs;
for (size_t i = 0; i < fun->num_params(); ++i) {
- param_values.emplace_back(engine.from_spec(extract_value(test["inputs"][fun->param_name(i)])));
+ param_values.emplace_back(value_from_spec(extract_value(test["inputs"][fun->param_name(i)]), factory));
param_refs.emplace_back(*param_values.back());
}
- NodeTypes types = typed ? NodeTypes(*fun, get_types(param_values)) : NodeTypes();
- InterpretedFunction ifun(engine, *fun, types);
+ NodeTypes types = NodeTypes(*fun, get_types(param_values));
+ InterpretedFunction ifun(factory, *fun, types);
InterpretedFunction::Context ctx(ifun);
SimpleObjectParams params(param_refs);
const Value &result = ifun.eval(ctx, params);
- if (typed) {
- ASSERT_EQUAL(result.type(), types.get_type(fun->root()));
- }
- return engine.to_spec(result);
+ ASSERT_EQUAL(result.type(), types.get_type(fun->root()));
+ return spec_from_value(result);
}
//-----------------------------------------------------------------------------
@@ -138,8 +152,7 @@ private:
if (expect != nullptr) {
insert_value(test.setObject("result"), "expect", *expect);
} else {
- insert_value(test.setObject("result"), "expect",
- eval_expr(test, SimpleTensorEngine::ref(), false));
+ insert_value(test.setObject("result"), "expect", ref_eval(test));
}
}
public:
@@ -168,11 +181,11 @@ void evaluate(Input &in, Output &out) {
auto handle_test = [&out](Slime &slime)
{
insert_value(slime["result"], "cpp_prod",
- eval_expr(slime.get(), DefaultTensorEngine::ref(), true));
- insert_value(slime["result"], "cpp_prod_untyped",
- eval_expr(slime.get(), DefaultTensorEngine::ref(), false));
- insert_value(slime["result"], "cpp_ref_typed",
- eval_expr(slime.get(), SimpleTensorEngine::ref(), true));
+ eval_expr(slime.get(), prod_factory));
+ insert_value(slime["result"], "cpp_simple_value",
+ eval_expr(slime.get(), simple_factory));
+ insert_value(slime["result"], "cpp_streamed_value",
+ eval_expr(slime.get(), streamed_factory));
write_compact(slime, out);
};
auto handle_summary = [&out](Slime &slime)
@@ -196,7 +209,7 @@ void verify(Input &in, Output &out) {
std::map<vespalib::string,size_t> result_map;
auto handle_test = [&result_map](Slime &slime)
{
- TensorSpec reference_result = eval_expr(slime.get(), SimpleTensorEngine::ref(), false);
+ TensorSpec reference_result = ref_eval(slime.get());
for (const auto &result: extract_fields(slime["result"])) {
++result_map[result];
TEST_STATE(make_string("verifying result: '%s'", result.c_str()).c_str());