diff options
author | HÃ¥vard Pettersen <3535158+havardpe@users.noreply.github.com> | 2020-12-02 15:32:53 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-12-02 15:32:53 +0100 |
commit | 9d59f4b003b10ae5a5a7f02874fb1b4b7e0ccccc (patch) | |
tree | f4e6e458a6e5ad1d883e3f36cf70186192104a12 | |
parent | bdea541abb7f26ffb93fffe7a799670ead1a9a04 (diff) | |
parent | 919ec00a9948c24f645daafbaea94183cc931397 (diff) |
Merge pull request #15604 from vespa-engine/arnej/use-simple-value-in-unit-tests
Arnej/use simple value in unit tests
25 files changed, 159 insertions, 114 deletions
diff --git a/document/src/tests/documentupdatetestcase.cpp b/document/src/tests/documentupdatetestcase.cpp index b88a0437fc2..3faec14ea7b 100644 --- a/document/src/tests/documentupdatetestcase.cpp +++ b/document/src/tests/documentupdatetestcase.cpp @@ -21,7 +21,8 @@ #include <vespa/document/update/tensor_remove_update.h> #include <vespa/document/update/valueupdate.h> #include <vespa/document/util/bytebuffer.h> -#include <vespa/eval/eval/engine_or_factory.h> +#include <vespa/eval/eval/simple_value.h> +#include <vespa/eval/eval/tensor_spec.h> #include <vespa/eval/eval/value.h> #include <vespa/eval/eval/test/value_compare.h> #include <vespa/vespalib/objects/nbostream.h> @@ -35,9 +36,9 @@ using namespace document::config_builder; +using vespalib::eval::SimpleValue; using vespalib::eval::TensorSpec; using vespalib::eval::ValueType; -using vespalib::eval::EngineOrFactory; using vespalib::nbostream; namespace document { @@ -775,7 +776,7 @@ TEST(DocumentUpdateTest, testMapValueUpdate) std::unique_ptr<vespalib::eval::Value> makeTensor(const TensorSpec &spec) { - return EngineOrFactory::get().from_spec(spec); + return SimpleValue::from_spec(spec); } std::unique_ptr<TensorFieldValue> diff --git a/document/src/tests/serialization/vespadocumentserializer_test.cpp b/document/src/tests/serialization/vespadocumentserializer_test.cpp index 05f1e9251db..0c9dfaf2e56 100644 --- a/document/src/tests/serialization/vespadocumentserializer_test.cpp +++ b/document/src/tests/serialization/vespadocumentserializer_test.cpp @@ -36,8 +36,9 @@ #include <vespa/document/serialization/vespadocumentdeserializer.h> #include <vespa/document/serialization/vespadocumentserializer.h> #include <vespa/document/serialization/annotationserializer.h> -#include <vespa/eval/eval/engine_or_factory.h> #include <vespa/eval/eval/value.h> +#include <vespa/eval/eval/simple_value.h> +#include <vespa/eval/eval/tensor_spec.h> #include <vespa/eval/eval/test/value_compare.h> #include <vespa/vespalib/io/fileutil.h> #include <vespa/vespalib/objects/nbostream.h> @@ -51,7 +52,7 @@ using vespalib::nbostream; using vespalib::nbostream_longlivedbuf; using vespalib::slime::Cursor; using vespalib::eval::TensorSpec; -using vespalib::eval::EngineOrFactory; +using vespalib::eval::SimpleValue; using vespalib::compression::CompressionConfig; using namespace document; using std::string; @@ -772,7 +773,7 @@ namespace { vespalib::eval::Value::UP createTensor(const TensorSpec &spec) { - return EngineOrFactory::get().from_spec(spec); + return SimpleValue::from_spec(spec); } } @@ -838,7 +839,7 @@ void checkDeserialization(const string &name, std::unique_ptr<vespalib::eval::Va TensorDataType valueType(tensor ? tensor->type() : vespalib::eval::ValueType::error_type()); TensorFieldValue value(valueType); if (tensor) { - value = EngineOrFactory::get().copy(*tensor); + value = std::move(tensor); } serializeToFile(value, data_dir + name + "__cpp"); deserializeAndCheck(data_dir + name + "__cpp", value); @@ -877,7 +878,7 @@ TensorDocFixture::TensorDocFixture(const DocumentTypeRepo &docTypeRepo, _blob() { auto fv = _doc.getField(tensor_field_name).createValue(); - dynamic_cast<TensorFieldValue &>(*fv) = EngineOrFactory::get().copy(*_tensor); + dynamic_cast<TensorFieldValue &>(*fv) = SimpleValue::from_value(*_tensor); _doc.setValue(tensor_field_name, *fv); _doc.serialize(_blob); } diff --git a/document/src/tests/tensor_fieldvalue/tensor_fieldvalue_test.cpp b/document/src/tests/tensor_fieldvalue/tensor_fieldvalue_test.cpp index 067cf4ac649..092190a427b 100644 --- a/document/src/tests/tensor_fieldvalue/tensor_fieldvalue_test.cpp +++ b/document/src/tests/tensor_fieldvalue/tensor_fieldvalue_test.cpp @@ -7,15 +7,16 @@ LOG_SETUP("fieldvalue_test"); #include <vespa/document/base/exceptions.h> #include <vespa/document/datatype/tensor_data_type.h> #include <vespa/document/fieldvalue/tensorfieldvalue.h> -#include <vespa/eval/eval/engine_or_factory.h> +#include <vespa/eval/eval/simple_value.h> +#include <vespa/eval/eval/tensor_spec.h> #include <vespa/eval/eval/value.h> #include <vespa/vespalib/testkit/testapp.h> using namespace document; +using vespalib::eval::SimpleValue; using vespalib::eval::TensorSpec; using vespalib::eval::ValueType; -using vespalib::eval::EngineOrFactory; namespace { @@ -24,14 +25,14 @@ TensorDataType xSparseTensorDataType(ValueType::from_spec("tensor(x{})")); TensorDataType xySparseTensorDataType(ValueType::from_spec("tensor(x{},y{})")); vespalib::eval::Value::UP createTensor(const TensorSpec &spec) { - return EngineOrFactory::get().from_spec(spec); + return SimpleValue::from_spec(spec); } std::unique_ptr<vespalib::eval::Value> makeSimpleTensor() { - return EngineOrFactory::get().from_spec(TensorSpec("tensor(x{},y{})"). - add({{"x", "4"}, {"y", "5"}}, 7)); + return SimpleValue::from_spec(TensorSpec("tensor(x{},y{})"). + add({{"x", "4"}, {"y", "5"}}, 7)); } FieldValue::UP clone(FieldValue &fv) { diff --git a/eval/src/vespa/eval/eval/simple_value.cpp b/eval/src/vespa/eval/eval/simple_value.cpp index 17faa635941..113f89f77fb 100644 --- a/eval/src/vespa/eval/eval/simple_value.cpp +++ b/eval/src/vespa/eval/eval/simple_value.cpp @@ -2,6 +2,8 @@ #include "simple_value.h" #include "inline_operation.h" +#include "value_codec.h" +#include <vespa/vespalib/objects/nbostream.h> #include <vespa/vespalib/util/typify.h> #include <vespa/vespalib/stllike/hash_map.hpp> @@ -203,6 +205,24 @@ SimpleValue::create_view(const std::vector<size_t> &dims) const } } +std::unique_ptr<Value> +SimpleValue::from_spec(const TensorSpec &spec) +{ + return value_from_spec(spec, SimpleValueBuilderFactory::get()); +} + +std::unique_ptr<Value> +SimpleValue::from_value(const Value& value) +{ + return from_spec(spec_from_value(value)); +} + +std::unique_ptr<Value> +SimpleValue::from_stream(nbostream &stream) +{ + return decode_value(stream, SimpleValueBuilderFactory::get()); +} + //----------------------------------------------------------------------------- template <typename T> diff --git a/eval/src/vespa/eval/eval/simple_value.h b/eval/src/vespa/eval/eval/simple_value.h index a8e84a95419..590c0b4ef16 100644 --- a/eval/src/vespa/eval/eval/simple_value.h +++ b/eval/src/vespa/eval/eval/simple_value.h @@ -7,10 +7,15 @@ #include <vector> #include <map> -namespace vespalib { class Stash; } +namespace vespalib { +class Stash; +class nbostream; +} namespace vespalib::eval { +class TensorSpec; + /** * A simple implementation of a generic value that can also be used to * build new values. This class focuses on simplicity over speed and @@ -39,6 +44,9 @@ public: const Value::Index &index() const override { return *this; } size_t size() const override { return _index.size(); } std::unique_ptr<View> create_view(const std::vector<size_t> &dims) const override; + static Value::UP from_spec(const TensorSpec &spec); + static Value::UP from_value(const Value &value); + static Value::UP from_stream(nbostream &stream); }; /** diff --git a/searchcore/src/tests/proton/attribute/attribute_test.cpp b/searchcore/src/tests/proton/attribute/attribute_test.cpp index c98127f4daf..8076e3d05e9 100644 --- a/searchcore/src/tests/proton/attribute/attribute_test.cpp +++ b/searchcore/src/tests/proton/attribute/attribute_test.cpp @@ -7,8 +7,9 @@ #include <vespa/document/update/arithmeticvalueupdate.h> #include <vespa/document/update/assignvalueupdate.h> #include <vespa/document/update/documentupdate.h> -#include <vespa/eval/eval/engine_or_factory.h> #include <vespa/eval/eval/value.h> +#include <vespa/eval/eval/simple_value.h> +#include <vespa/eval/eval/tensor_spec.h> #include <vespa/eval/eval/test/value_compare.h> #include <vespa/searchcommon/attribute/attributecontent.h> #include <vespa/searchcommon/attribute/iattributevector.h> @@ -82,7 +83,7 @@ using std::string; using vespalib::ForegroundTaskExecutor; using vespalib::ForegroundThreadExecutor; using vespalib::SequencedTaskExecutorObserver; -using vespalib::eval::EngineOrFactory; +using vespalib::eval::SimpleValue; using vespalib::eval::TensorSpec; using vespalib::eval::Value; using vespalib::eval::ValueType; @@ -644,7 +645,7 @@ TEST_F(FilterAttributeManagerTest, readable_attribute_vector_filters_attributes) namespace { Value::UP make_tensor(const TensorSpec &spec) { - return EngineOrFactory::get().from_spec(spec); + return SimpleValue::from_spec(spec); } const vespalib::string sparse_tensor = "tensor(x{},y{})"; @@ -668,7 +669,7 @@ Document::UP createTensorPutDoc(DocBuilder &builder, const Value &tensor) { return builder.startDocument("id:ns:searchdocument::1"). startAttributeField("a1"). - addTensor(EngineOrFactory::get().copy(tensor)).endField().endDocument(); + addTensor(SimpleValue::from_value(tensor)).endField().endDocument(); } } @@ -712,7 +713,7 @@ TEST_F(AttributeWriterTest, handles_tensor_assign_update) .add({{"x", "8"}, {"y", "9"}}, 11)); TensorDataType xySparseTensorDataType(vespalib::eval::ValueType::from_spec(sparse_tensor)); TensorFieldValue new_value(xySparseTensorDataType); - new_value = EngineOrFactory::get().copy(*new_tensor); + new_value = SimpleValue::from_value(*new_tensor); upd.addUpdate(FieldUpdate(upd.getType().getField("a1")) .addUpdate(AssignValueUpdate(new_value))); DummyFieldUpdateCallback onUpdate; diff --git a/searchcore/src/tests/proton/common/attribute_updater/attribute_updater_test.cpp b/searchcore/src/tests/proton/common/attribute_updater/attribute_updater_test.cpp index 5e6d8cf1659..c74c93a376a 100644 --- a/searchcore/src/tests/proton/common/attribute_updater/attribute_updater_test.cpp +++ b/searchcore/src/tests/proton/common/attribute_updater/attribute_updater_test.cpp @@ -22,8 +22,10 @@ #include <vespa/document/update/tensor_add_update.h> #include <vespa/document/update/tensor_modify_update.h> #include <vespa/document/update/tensor_remove_update.h> -#include <vespa/eval/eval/engine_or_factory.h> +#include <vespa/eval/eval/simple_value.h> +#include <vespa/eval/eval/tensor_spec.h> #include <vespa/eval/eval/value.h> +#include <vespa/eval/eval/value_codec.h> #include <vespa/searchcore/proton/common/attribute_updater.h> #include <vespa/searchlib/attribute/attributefactory.h> #include <vespa/searchlib/attribute/reference_attribute.h> @@ -50,10 +52,10 @@ using search::tensor::ITensorAttribute; using search::tensor::DenseTensorAttribute; using search::tensor::SerializedTensorAttribute; using search::tensor::TensorAttribute; -using vespalib::eval::EngineOrFactory; +using vespalib::eval::SimpleValue; +using vespalib::eval::TensorSpec; using vespalib::eval::Value; using vespalib::eval::ValueType; -using vespalib::eval::TensorSpec; namespace search { @@ -411,7 +413,7 @@ getTensorDataType(const vespalib::string &spec) std::unique_ptr<Value> makeTensor(const TensorSpec &spec) { - return EngineOrFactory::get().from_spec(spec); + return SimpleValue::from_spec(spec); } std::unique_ptr<TensorFieldValue> @@ -441,7 +443,7 @@ struct TensorFixture : public Fixture { } void assertTensor(const TensorSpec &expSpec) { - auto actual = EngineOrFactory::get().to_spec(*attribute->getTensor(1)); + auto actual = spec_from_value(*attribute->getTensor(1)); EXPECT_EQUAL(expSpec, actual); } }; diff --git a/searchcore/src/tests/proton/docsummary/docsummary.cpp b/searchcore/src/tests/proton/docsummary/docsummary.cpp index 04258b3989f..5741a844ded 100644 --- a/searchcore/src/tests/proton/docsummary/docsummary.cpp +++ b/searchcore/src/tests/proton/docsummary/docsummary.cpp @@ -2,7 +2,8 @@ #include <tests/proton/common/dummydbowner.h> #include <vespa/config/helper/configgetter.hpp> -#include <vespa/eval/eval/engine_or_factory.h> +#include <vespa/eval/eval/simple_value.h> +#include <vespa/eval/eval/tensor_spec.h> #include <vespa/eval/eval/value.h> #include <vespa/eval/eval/test/value_compare.h> #include <vespa/document/repo/documenttyperepo.h> @@ -59,7 +60,7 @@ using storage::spi::Timestamp; using vespa::config::search::core::ProtonConfig; using vespa::config::content::core::BucketspacesConfig; using vespalib::eval::TensorSpec; -using vespalib::eval::EngineOrFactory; +using vespalib::eval::SimpleValue; using namespace vespalib::slime; typedef std::unique_ptr<GeneralResult> GeneralResultPtr; @@ -139,7 +140,7 @@ getDocTypeName() } vespalib::eval::Value::UP make_tensor(const TensorSpec &spec) { - return EngineOrFactory::get().from_spec(spec); + return SimpleValue::from_spec(spec); } vespalib::string asVstring(vespalib::Memory str) { @@ -334,7 +335,7 @@ assertTensor(const vespalib::eval::Value::UP & exp, const std::string & fieldNam EXPECT_EQUAL(exp.get() == nullptr, data.size == 0u); if (exp) { vespalib::nbostream x(data.data, data.size); - auto tensor = EngineOrFactory::get().decode(x); + auto tensor = SimpleValue::from_stream(x); EXPECT_TRUE(tensor.get() != nullptr); EXPECT_EQUAL(*exp, *tensor); } diff --git a/searchcore/src/tests/proton/docsummary/summaryfieldconverter_test.cpp b/searchcore/src/tests/proton/docsummary/summaryfieldconverter_test.cpp index 6c7efda9a69..86f0e8fdcf8 100644 --- a/searchcore/src/tests/proton/docsummary/summaryfieldconverter_test.cpp +++ b/searchcore/src/tests/proton/docsummary/summaryfieldconverter_test.cpp @@ -45,7 +45,8 @@ #include <vespa/vespalib/data/slime/json_format.h> #include <vespa/vespalib/data/slime/binary_format.h> #include <vespa/searchlib/util/slime_output_raw_buf_adapter.h> -#include <vespa/eval/eval/engine_or_factory.h> +#include <vespa/eval/eval/simple_value.h> +#include <vespa/eval/eval/tensor_spec.h> #include <vespa/eval/eval/value.h> #include <vespa/eval/eval/test/value_compare.h> #include <vespa/vespalib/data/slime/slime.h> @@ -93,10 +94,10 @@ using search::linguistics::TERM; using vespa::config::search::SummarymapConfig; using vespa::config::search::SummarymapConfigBuilder; using vespalib::Slime; +using vespalib::eval::SimpleValue; +using vespalib::eval::TensorSpec; using vespalib::eval::Value; using vespalib::eval::ValueType; -using vespalib::eval::TensorSpec; -using vespalib::eval::EngineOrFactory; using vespalib::geo::ZCurve; using vespalib::slime::Cursor; using vespalib::string; @@ -676,7 +677,7 @@ Test::requireThatPredicateIsPrinted() } Value::UP make_tensor(const TensorSpec &spec) { - return EngineOrFactory::get().from_spec(spec); + return SimpleValue::from_spec(spec); } void diff --git a/searchcore/src/tests/proton/documentdb/feedhandler/feedhandler_test.cpp b/searchcore/src/tests/proton/documentdb/feedhandler/feedhandler_test.cpp index ed3bb3253c9..d06da31b415 100644 --- a/searchcore/src/tests/proton/documentdb/feedhandler/feedhandler_test.cpp +++ b/searchcore/src/tests/proton/documentdb/feedhandler/feedhandler_test.cpp @@ -5,7 +5,7 @@ #include <vespa/document/update/assignvalueupdate.h> #include <vespa/document/repo/documenttyperepo.h> #include <vespa/document/update/documentupdate.h> -#include <vespa/eval/eval/engine_or_factory.h> +#include <vespa/eval/eval/simple_value.h> #include <vespa/eval/eval/tensor_spec.h> #include <vespa/eval/eval/value.h> #include <vespa/searchcore/proton/bucketdb/bucketdbhandler.h> @@ -58,7 +58,7 @@ using storage::spi::UpdateResult; using vespalib::ThreadStackExecutor; using vespalib::ThreadStackExecutorBase; using vespalib::makeClosure; -using vespalib::eval::EngineOrFactory; +using vespalib::eval::SimpleValue; using vespalib::eval::TensorSpec; using vespalib::eval::Value; using vespalib::eval::ValueType; @@ -330,13 +330,13 @@ struct UpdateContext { auto fieldValue = field.createValue(); if (fieldName == "tensor") { dynamic_cast<TensorFieldValue &>(*fieldValue) = - EngineOrFactory::get().from_spec(TensorSpec("tensor(x{},y{})"). - add({{"x","8"},{"y","9"}}, 11)); + SimpleValue::from_spec(TensorSpec("tensor(x{},y{})"). + add({{"x","8"},{"y","9"}}, 11)); } else if (fieldName == "tensor2") { auto tensorFieldValue = std::make_unique<TensorFieldValue>(tensor1DType); *tensorFieldValue = - EngineOrFactory::get().from_spec(TensorSpec("tensor(x{})"). - add({{"x","8"}}, 11)); + SimpleValue::from_spec(TensorSpec("tensor(x{})"). + add({{"x","8"}}, 11)); fieldValue = std::move(tensorFieldValue); } else { fieldValue->assign(document::StringFieldValue("new value")); diff --git a/searchcore/src/tests/proton/matching/matching_test.cpp b/searchcore/src/tests/proton/matching/matching_test.cpp index 3bd5b36aa86..0278aba41d9 100644 --- a/searchcore/src/tests/proton/matching/matching_test.cpp +++ b/searchcore/src/tests/proton/matching/matching_test.cpp @@ -32,8 +32,9 @@ #include <vespa/searchcore/proton/matching/match_params.h> #include <vespa/searchcore/proton/matching/match_tools.h> #include <vespa/searchcore/proton/matching/match_context.h> +#include <vespa/eval/eval/simple_value.h> #include <vespa/eval/eval/tensor_spec.h> -#include <vespa/eval/eval/engine_or_factory.h> +#include <vespa/eval/eval/value_codec.h> #include <vespa/vespalib/objects/nbostream.h> #include <vespa/log/log.h> @@ -58,8 +59,8 @@ using storage::spi::Timestamp; using search::fef::indexproperties::hitcollector::HeapSize; using vespalib::nbostream; +using vespalib::eval::SimpleValue; using vespalib::eval::TensorSpec; -using vespalib::eval::EngineOrFactory; void inject_match_phase_limiting(Properties &setup, const vespalib::string &attribute, size_t max_hits, bool descending) { @@ -666,9 +667,8 @@ TEST("require that summary features are filled") { EXPECT_TRUE(!f[2].is_double()); EXPECT_TRUE(f[2].is_data()); { - auto engine = EngineOrFactory::get(); nbostream buf(f[2].as_data().data, f[2].as_data().size); - auto actual = engine.to_spec(*engine.decode(buf)); + auto actual = spec_from_value(*SimpleValue::from_stream(buf)); auto expect = TensorSpec("tensor(x[3])").add({{"x", 0}}, 0).add({{"x", 1}}, 1).add({{"x", 2}}, 2); EXPECT_EQUAL(actual, expect); } diff --git a/searchcore/src/tests/proton/matching/request_context/request_context_test.cpp b/searchcore/src/tests/proton/matching/request_context/request_context_test.cpp index 4c2ae99c9cd..7b545344e9b 100644 --- a/searchcore/src/tests/proton/matching/request_context/request_context_test.cpp +++ b/searchcore/src/tests/proton/matching/request_context/request_context_test.cpp @@ -1,7 +1,8 @@ // Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +#include <vespa/eval/eval/simple_value.h> +#include <vespa/eval/eval/value_codec.h> #include <vespa/eval/eval/tensor_spec.h> -#include <vespa/eval/eval/engine_or_factory.h> #include <vespa/searchcore/proton/matching/requestcontext.h> #include <vespa/searchlib/attribute/attribute_blueprint_params.h> #include <vespa/searchlib/fef/properties.h> @@ -13,7 +14,7 @@ using search::attribute::IAttributeContext; using search::attribute::IAttributeFunctor; using search::attribute::IAttributeVector; using search::fef::Properties; -using vespalib::eval::EngineOrFactory; +using vespalib::eval::SimpleValue; using vespalib::eval::TensorSpec; using vespalib::eval::Value; using namespace proton; @@ -37,7 +38,7 @@ private: void insert_tensor_in_properties(const vespalib::string& tensor_name, const Value& tensor_value) { vespalib::nbostream stream; - EngineOrFactory::get().encode(tensor_value, stream); + encode_value(tensor_value, stream); _props.add(tensor_name, vespalib::stringref(stream.data(), stream.size())); } @@ -48,14 +49,14 @@ public: _attr_ctx(), _props(), _request_ctx(_doom, _attr_ctx, _props, AttributeBlueprintParams()), - _query_tensor(EngineOrFactory::get().from_spec(TensorSpec("tensor(x[2])") - .add({{"x", 0}}, 3).add({{"x", 1}}, 5))) + _query_tensor(SimpleValue::from_spec(TensorSpec("tensor(x[2])") + .add({{"x", 0}}, 3).add({{"x", 1}}, 5))) { insert_tensor_in_properties("my_tensor", *_query_tensor); _props.add("my_string", "foo bar"); } TensorSpec expected_query_tensor() const { - return EngineOrFactory::get().to_spec(*_query_tensor); + return spec_from_value(*_query_tensor); } Value::UP get_query_tensor(const vespalib::string& tensor_name) const { return _request_ctx.get_query_tensor(tensor_name); @@ -67,7 +68,7 @@ TEST_F(RequestContextTest, query_tensor_can_be_retrieved) auto tensor = get_query_tensor("my_tensor"); ASSERT_TRUE(tensor); EXPECT_TRUE(tensor->is_tensor()); - EXPECT_EQ(expected_query_tensor(), EngineOrFactory::get().to_spec(*tensor)); + EXPECT_EQ(expected_query_tensor(), spec_from_value(*tensor)); } TEST_F(RequestContextTest, non_existing_query_tensor_returns_nullptr) diff --git a/searchcore/src/tests/proton/server/documentretriever_test.cpp b/searchcore/src/tests/proton/server/documentretriever_test.cpp index 019e1bce40a..058374cfc59 100644 --- a/searchcore/src/tests/proton/server/documentretriever_test.cpp +++ b/searchcore/src/tests/proton/server/documentretriever_test.cpp @@ -20,7 +20,8 @@ #include <vespa/document/fieldset/fieldsets.h> #include <vespa/document/repo/configbuilder.h> #include <vespa/document/repo/documenttyperepo.h> -#include <vespa/eval/eval/engine_or_factory.h> +#include <vespa/eval/eval/simple_value.h> +#include <vespa/eval/eval/tensor_spec.h> #include <vespa/eval/eval/value.h> #include <vespa/eval/eval/test/value_compare.h> #include <vespa/persistence/spi/bucket.h> @@ -88,7 +89,7 @@ using storage::spi::Timestamp; using storage::spi::test::makeSpiBucket; using vespalib::make_string; using vespalib::string; -using vespalib::eval::EngineOrFactory; +using vespalib::eval::SimpleValue; using vespalib::eval::TensorSpec; using vespalib::eval::ValueType; using vespalib::eval::Value; @@ -110,10 +111,8 @@ const char dyn_field_nas[] = "dynamic null attr string field"; // in document, n const char position_field[] = "position_field"; vespalib::string dyn_field_tensor("dynamic_tensor_field"); vespalib::string tensor_spec("tensor(x{})"); -std::unique_ptr<Value> static_tensor = - EngineOrFactory::get().from_spec(TensorSpec(tensor_spec).add({{"x", "1"}}, 1.5)); -std::unique_ptr<Value> dynamic_tensor = - EngineOrFactory::get().from_spec(TensorSpec(tensor_spec).add({{"x", "2"}}, 3.5)); +std::unique_ptr<Value> static_tensor = SimpleValue::from_spec(TensorSpec(tensor_spec).add({{"x", "1"}}, 1.5)); +std::unique_ptr<Value> dynamic_tensor = SimpleValue::from_spec(TensorSpec(tensor_spec).add({{"x", "2"}}, 3.5)); const char zcurve_field[] = "position_field_zcurve"; const char position_array_field[] = "position_array"; const char zcurve_array_field[] = "position_array_zcurve"; @@ -169,7 +168,7 @@ struct MyDocumentStore : proton::test::DummyDocumentStore { doc->set(zcurve_field, static_zcurve_value); doc->setValue(dyn_field_p, static_value_p); TensorFieldValue tensorFieldValue(tensorDataType); - tensorFieldValue = EngineOrFactory::get().copy(*static_tensor); + tensorFieldValue = SimpleValue::from_value(*static_tensor); doc->setValue(dyn_field_tensor, tensorFieldValue); if (_set_position_struct_field) { FieldValue::UP fv = PositionDataType::getInstance().createFieldValue(); diff --git a/searchlib/src/tests/attribute/imported_attribute_vector/imported_attribute_vector_test.cpp b/searchlib/src/tests/attribute/imported_attribute_vector/imported_attribute_vector_test.cpp index 8870593d950..2d30f89015d 100644 --- a/searchlib/src/tests/attribute/imported_attribute_vector/imported_attribute_vector_test.cpp +++ b/searchlib/src/tests/attribute/imported_attribute_vector/imported_attribute_vector_test.cpp @@ -1,7 +1,8 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -#include <vespa/eval/eval/engine_or_factory.h> #include <vespa/eval/eval/value.h> +#include <vespa/eval/eval/simple_value.h> +#include <vespa/eval/eval/tensor_spec.h> #include <vespa/eval/eval/test/value_compare.h> #include <vespa/searchcommon/attribute/search_context_params.h> #include <vespa/searchlib/fef/termfieldmatchdata.h> @@ -15,10 +16,10 @@ using search::tensor::TensorAttribute; using vespalib::eval::Value; using vespalib::eval::ValueType; using vespalib::eval::TensorSpec; -using vespalib::eval::EngineOrFactory; +using vespalib::eval::SimpleValue; Value::UP createTensor(const TensorSpec &spec) { - return EngineOrFactory::get().from_spec(spec); + return SimpleValue::from_spec(spec); } namespace search::attribute { diff --git a/searchlib/src/tests/attribute/searchable/attributeblueprint_test.cpp b/searchlib/src/tests/attribute/searchable/attributeblueprint_test.cpp index dc7dee3770d..afeb89349c7 100644 --- a/searchlib/src/tests/attribute/searchable/attributeblueprint_test.cpp +++ b/searchlib/src/tests/attribute/searchable/attributeblueprint_test.cpp @@ -1,6 +1,8 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -#include <vespa/eval/eval/engine_or_factory.h> +#include <vespa/eval/eval/tensor_spec.h> +#include <vespa/eval/eval/value.h> +#include <vespa/eval/eval/value_codec.h> #include <vespa/eval/tensor/dense/dense_tensor_view.h> #include <vespa/searchcommon/attribute/iattributecontext.h> #include <vespa/searchlib/attribute/attribute_blueprint_factory.h> @@ -50,7 +52,6 @@ using search::queryeval::SearchIterator; using std::string; using std::vector; using vespalib::eval::TensorSpec; -using vespalib::eval::EngineOrFactory; using vespalib::eval::Value; using vespalib::eval::ValueType; using namespace search::attribute; @@ -357,7 +358,7 @@ expect_nearest_neighbor_blueprint(const vespalib::string& attribute_tensor_type_ auto result = f.create_blueprint(); const auto& nearest = downcast<const NearestNeighborBlueprint>(*result); EXPECT_EQ(attribute_tensor_type_spec, nearest.get_attribute_tensor().getTensorType().to_spec()); - EXPECT_EQ(converted_query_tensor, EngineOrFactory::get().to_spec(nearest.get_query_tensor())); + EXPECT_EQ(converted_query_tensor, spec_from_value(nearest.get_query_tensor())); EXPECT_EQ(7u, nearest.get_target_num_hits()); } diff --git a/searchlib/src/tests/attribute/tensorattribute/tensorattribute_test.cpp b/searchlib/src/tests/attribute/tensorattribute/tensorattribute_test.cpp index bf46a2cc7d0..e1bd47af358 100644 --- a/searchlib/src/tests/attribute/tensorattribute/tensorattribute_test.cpp +++ b/searchlib/src/tests/attribute/tensorattribute/tensorattribute_test.cpp @@ -1,7 +1,8 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #include <vespa/document/base/exceptions.h> -#include <vespa/eval/eval/engine_or_factory.h> +#include <vespa/eval/eval/simple_value.h> +#include <vespa/eval/eval/tensor_spec.h> #include <vespa/eval/eval/value.h> #include <vespa/eval/eval/test/value_compare.h> #include <vespa/fastos/file.h> @@ -52,7 +53,7 @@ using vespalib::eval::TensorSpec; using vespalib::eval::CellType; using vespalib::eval::ValueType; using vespalib::eval::Value; -using vespalib::eval::EngineOrFactory; +using vespalib::eval::SimpleValue; using DoubleVector = std::vector<double>; using generation_t = vespalib::GenerationHandler::generation_t; @@ -62,7 +63,7 @@ vespalib::string denseSpec("tensor(x[2],y[3])"); vespalib::string vec_2d_spec("tensor(x[2])"); Value::UP createTensor(const TensorSpec &spec) { - return EngineOrFactory::get().from_spec(spec); + return SimpleValue::from_spec(spec); } TensorSpec @@ -904,7 +905,7 @@ public: } std::unique_ptr<Value> createDenseTensor(const TensorSpec &spec) { - return EngineOrFactory::get().from_spec(spec); + return SimpleValue::from_spec(spec); } std::unique_ptr<NearestNeighborBlueprint> make_blueprint(double brute_force_limit = 0.05) { diff --git a/searchlib/src/tests/features/constant/constant_test.cpp b/searchlib/src/tests/features/constant/constant_test.cpp index e513e20a35c..140c93125b0 100644 --- a/searchlib/src/tests/features/constant/constant_test.cpp +++ b/searchlib/src/tests/features/constant/constant_test.cpp @@ -6,8 +6,8 @@ #include <vespa/searchlib/fef/test/ftlib.h> #include <vespa/searchlib/fef/test/indexenvironment.h> #include <vespa/eval/eval/function.h> +#include <vespa/eval/eval/simple_value.h> #include <vespa/eval/eval/tensor_spec.h> -#include <vespa/eval/eval/engine_or_factory.h> #include <vespa/eval/eval/value.h> #include <vespa/eval/eval/test/value_compare.h> @@ -16,18 +16,18 @@ using namespace search::fef; using namespace search::fef::indexproperties; using namespace search::fef::test; using namespace search::features; -using vespalib::eval::Function; -using vespalib::eval::Value; using vespalib::eval::DoubleValue; +using vespalib::eval::Function; +using vespalib::eval::SimpleValue; using vespalib::eval::TensorSpec; +using vespalib::eval::Value; using vespalib::eval::ValueType; -using vespalib::eval::EngineOrFactory; namespace { Value::UP make_tensor(const TensorSpec &spec) { - return EngineOrFactory::get().from_spec(spec); + return SimpleValue::from_spec(spec); } } diff --git a/searchlib/src/tests/features/imported_dot_product/imported_dot_product_test.cpp b/searchlib/src/tests/features/imported_dot_product/imported_dot_product_test.cpp index ec6aa65c6c2..3c9cf209484 100644 --- a/searchlib/src/tests/features/imported_dot_product/imported_dot_product_test.cpp +++ b/searchlib/src/tests/features/imported_dot_product/imported_dot_product_test.cpp @@ -6,7 +6,8 @@ #include <vespa/searchlib/fef/test/ftlib.h> #include <vespa/searchlib/fef/test/rankresult.h> #include <vespa/searchlib/fef/test/dummy_dependency_handler.h> -#include <vespa/eval/eval/engine_or_factory.h> +#include <vespa/eval/eval/simple_value.h> +#include <vespa/eval/eval/tensor_spec.h> #include <vespa/eval/eval/value_codec.h> #include <vespa/vespalib/objects/nbostream.h> @@ -17,6 +18,7 @@ using namespace search::fef; using namespace search::fef::test; using namespace search::index; +using vespalib::eval::SimpleValue; using vespalib::eval::TensorSpec; template <typename T> @@ -118,7 +120,7 @@ struct ArrayFixture : FixtureBase { template <typename ExpectedType> void check_prepare_state_output(const TensorSpec & spec, const ExpectedType & expected) { - auto value = vespalib::eval::EngineOrFactory::get().from_spec(spec); + auto value = SimpleValue::from_spec(spec); check_prepare_state_output(*value, expected); } diff --git a/searchlib/src/tests/features/tensor/tensor_test.cpp b/searchlib/src/tests/features/tensor/tensor_test.cpp index 188a1347901..53049c4a385 100644 --- a/searchlib/src/tests/features/tensor/tensor_test.cpp +++ b/searchlib/src/tests/features/tensor/tensor_test.cpp @@ -11,8 +11,8 @@ #include <vespa/searchlib/fef/test/queryenvironment.h> #include <vespa/searchlib/tensor/tensor_attribute.h> #include <vespa/searchlib/tensor/direct_tensor_attribute.h> -#include <vespa/eval/eval/engine_or_factory.h> #include <vespa/eval/eval/function.h> +#include <vespa/eval/eval/simple_value.h> #include <vespa/eval/eval/tensor_spec.h> #include <vespa/eval/eval/value.h> #include <vespa/eval/eval/value_codec.h> @@ -28,12 +28,12 @@ using search::AttributeFactory; using search::tensor::TensorAttribute; using search::tensor::DirectTensorAttribute; using search::AttributeVector; -using vespalib::eval::EngineOrFactory; using vespalib::eval::Function; -using vespalib::eval::spec_from_value; +using vespalib::eval::SimpleValue; +using vespalib::eval::TensorSpec; using vespalib::eval::Value; using vespalib::eval::ValueType; -using vespalib::eval::TensorSpec; +using vespalib::eval::spec_from_value; using AVC = search::attribute::Config; using AVBT = search::attribute::BasicType; @@ -46,7 +46,7 @@ namespace { Value::UP make_empty(const vespalib::string &type) { - return EngineOrFactory::get().from_spec(TensorSpec(type)); + return SimpleValue::from_spec(TensorSpec(type)); } } @@ -113,10 +113,10 @@ struct ExecFixture DirectTensorAttribute *directAttr = dynamic_cast<DirectTensorAttribute *>(attrs[1].get()); - auto doc_tensor = EngineOrFactory::get().from_spec(TensorSpec("tensor(x{})") - .add({{"x", "a"}}, 3) - .add({{"x", "b"}}, 5) - .add({{"x", "c"}}, 7)); + auto doc_tensor = SimpleValue::from_spec(TensorSpec("tensor(x{})") + .add({{"x", "a"}}, 3) + .add({{"x", "b"}}, 5) + .add({{"x", "c"}}, 7)); tensorAttr->setTensor(1, *doc_tensor); directAttr->set_tensor(1, std::move(doc_tensor)); @@ -129,7 +129,7 @@ struct ExecFixture std::unique_ptr<Value> tensor) { vespalib::nbostream stream; - EngineOrFactory::get().encode(*tensor, stream); + encode_value(*tensor, stream); test.getQueryEnv().getProperties().add(tensorName, vespalib::stringref(stream.peek(), stream.size())); setQueryTensorType(tensorName, tensorTypeSpec); @@ -138,16 +138,16 @@ struct ExecFixture void setupQueryEnvironment() { setQueryTensor("tensorquery", "tensor(q{})", - EngineOrFactory::get().from_spec(TensorSpec("tensor(q{})") - .add({{"q", "d"}}, 11 ) - .add({{"q", "e"}}, 13 ) - .add({{"q", "f"}}, 17 ))); + SimpleValue::from_spec(TensorSpec("tensor(q{})") + .add({{"q", "d"}}, 11 ) + .add({{"q", "e"}}, 13 ) + .add({{"q", "f"}}, 17 ))); setQueryTensor("mappedtensorquery", "tensor(x[2])", - EngineOrFactory::get().from_spec(TensorSpec("tensor(x{},y{})") - .add({{"x", "0"},{"y", "0"}}, 11 ) - .add({{"x", "0"},{"y", "1"}}, 13 ) - .add({{"x", "1"},{"y", "0"}}, 17 ))); + SimpleValue::from_spec(TensorSpec("tensor(x{},y{})") + .add({{"x", "0"},{"y", "0"}}, 11 ) + .add({{"x", "0"},{"y", "1"}}, 13 ) + .add({{"x", "1"},{"y", "0"}}, 17 ))); setQueryTensorType("null", "tensor(q{})"); } const Value &extractTensor(uint32_t docid) { diff --git a/searchlib/src/tests/features/tensor_from_labels/tensor_from_labels_test.cpp b/searchlib/src/tests/features/tensor_from_labels/tensor_from_labels_test.cpp index 33fd7c856b3..2e83d2acbf2 100644 --- a/searchlib/src/tests/features/tensor_from_labels/tensor_from_labels_test.cpp +++ b/searchlib/src/tests/features/tensor_from_labels/tensor_from_labels_test.cpp @@ -12,8 +12,9 @@ #include <vespa/searchlib/fef/test/indexenvironment.h> #include <vespa/searchlib/fef/test/indexenvironmentbuilder.h> #include <vespa/searchlib/fef/test/queryenvironment.h> -#include <vespa/eval/eval/engine_or_factory.h> #include <vespa/eval/eval/function.h> +#include <vespa/eval/eval/simple_value.h> +#include <vespa/eval/eval/tensor_spec.h> #include <vespa/eval/eval/value.h> #include <vespa/eval/eval/test/value_compare.h> @@ -27,7 +28,7 @@ using search::StringAttribute; using vespalib::eval::Value; using vespalib::eval::Function; using vespalib::eval::TensorSpec; -using vespalib::eval::EngineOrFactory; +using vespalib::eval::SimpleValue; typedef search::attribute::Config AVC; typedef search::attribute::BasicType AVBT; @@ -36,7 +37,7 @@ typedef search::AttributeVector::SP AttributePtr; typedef FtTestApp FTA; Value::UP make_tensor(const TensorSpec &spec) { - return EngineOrFactory::get().from_spec(spec); + return SimpleValue::from_spec(spec); } Value::UP make_empty(const vespalib::string &type) { diff --git a/searchlib/src/tests/features/tensor_from_weighted_set/tensor_from_weighted_set_test.cpp b/searchlib/src/tests/features/tensor_from_weighted_set/tensor_from_weighted_set_test.cpp index 282c8134754..c339d8dae63 100644 --- a/searchlib/src/tests/features/tensor_from_weighted_set/tensor_from_weighted_set_test.cpp +++ b/searchlib/src/tests/features/tensor_from_weighted_set/tensor_from_weighted_set_test.cpp @@ -12,8 +12,8 @@ #include <vespa/searchlib/fef/test/indexenvironment.h> #include <vespa/searchlib/fef/test/indexenvironmentbuilder.h> #include <vespa/searchlib/fef/test/queryenvironment.h> -#include <vespa/eval/eval/engine_or_factory.h> #include <vespa/eval/eval/function.h> +#include <vespa/eval/eval/simple_value.h> #include <vespa/eval/eval/tensor_spec.h> #include <vespa/eval/eval/value.h> #include <vespa/eval/eval/test/value_compare.h> @@ -28,7 +28,7 @@ using search::StringAttribute; using vespalib::eval::Value; using vespalib::eval::Function; using vespalib::eval::TensorSpec; -using vespalib::eval::EngineOrFactory; +using vespalib::eval::SimpleValue; typedef search::attribute::Config AVC; typedef search::attribute::BasicType AVBT; @@ -37,7 +37,7 @@ typedef search::AttributeVector::SP AttributePtr; typedef FtTestApp FTA; Value::UP make_tensor(const TensorSpec &spec) { - return EngineOrFactory::get().from_spec(spec); + return SimpleValue::from_spec(spec); } Value::UP make_empty(const vespalib::string &type) { diff --git a/searchlib/src/tests/queryeval/nearest_neighbor/nearest_neighbor_test.cpp b/searchlib/src/tests/queryeval/nearest_neighbor/nearest_neighbor_test.cpp index 23cb3831b6d..ad450a91f33 100644 --- a/searchlib/src/tests/queryeval/nearest_neighbor/nearest_neighbor_test.cpp +++ b/searchlib/src/tests/queryeval/nearest_neighbor/nearest_neighbor_test.cpp @@ -3,7 +3,8 @@ #include <vespa/vespalib/testkit/test_kit.h> #include <vespa/vespalib/util/stringfmt.h> -#include <vespa/eval/eval/engine_or_factory.h> +#include <vespa/eval/eval/simple_value.h> +#include <vespa/eval/eval/tensor_spec.h> #include <vespa/searchlib/common/bitvector.h> #include <vespa/searchlib/common/feature.h> #include <vespa/searchlib/fef/matchdata.h> @@ -27,7 +28,7 @@ using vespalib::eval::Value; using vespalib::eval::ValueType; using vespalib::eval::CellType; using vespalib::eval::TensorSpec; -using vespalib::eval::EngineOrFactory; +using vespalib::eval::SimpleValue; using search::tensor::DistanceFunction; using search::attribute::DistanceMetric; @@ -41,7 +42,7 @@ DistanceFunction::UP euclid_d = search::tensor::make_distance_function(DistanceM DistanceFunction::UP euclid_f = search::tensor::make_distance_function(DistanceMetric::Euclidean, CellType::FLOAT); std::unique_ptr<Value> createTensor(const TensorSpec &spec) { - return EngineOrFactory::get().from_spec(spec); + return SimpleValue::from_spec(spec); } std::unique_ptr<Value> createTensor(const vespalib::string& type_spec, double v1, double v2) { diff --git a/searchlib/src/tests/tensor/dense_tensor_store/dense_tensor_store_test.cpp b/searchlib/src/tests/tensor/dense_tensor_store/dense_tensor_store_test.cpp index 4bdae05e02f..a3b59909ac8 100644 --- a/searchlib/src/tests/tensor/dense_tensor_store/dense_tensor_store_test.cpp +++ b/searchlib/src/tests/tensor/dense_tensor_store/dense_tensor_store_test.cpp @@ -3,18 +3,18 @@ LOG_SETUP("dense_tensor_store_test"); #include <vespa/vespalib/testkit/test_kit.h> #include <vespa/searchlib/tensor/dense_tensor_store.h> -#include <vespa/eval/eval/engine_or_factory.h> +#include <vespa/eval/eval/simple_value.h> #include <vespa/eval/eval/tensor_spec.h> -#include <vespa/eval/eval/test/value_compare.h> #include <vespa/eval/eval/value.h> #include <vespa/eval/eval/value_type.h> +#include <vespa/eval/eval/test/value_compare.h> #include <vespa/eval/tensor/dense/mutable_dense_tensor_view.h> using search::tensor::DenseTensorStore; +using vespalib::eval::SimpleValue; using vespalib::eval::TensorSpec; using vespalib::eval::Value; using vespalib::eval::ValueType; -using vespalib::eval::EngineOrFactory; using vespalib::tensor::MutableDenseTensorView; using EntryRef = DenseTensorStore::EntryRef; @@ -22,7 +22,7 @@ using EntryRef = DenseTensorStore::EntryRef; Value::UP makeTensor(const TensorSpec &spec) { - return EngineOrFactory::get().from_spec(spec); + return SimpleValue::from_spec(spec); } struct Fixture diff --git a/searchlib/src/tests/tensor/direct_tensor_store/direct_tensor_store_test.cpp b/searchlib/src/tests/tensor/direct_tensor_store/direct_tensor_store_test.cpp index a6f4d56425b..f5160e4b879 100644 --- a/searchlib/src/tests/tensor/direct_tensor_store/direct_tensor_store_test.cpp +++ b/searchlib/src/tests/tensor/direct_tensor_store/direct_tensor_store_test.cpp @@ -2,14 +2,15 @@ #include <vespa/searchlib/tensor/direct_tensor_store.h> #include <vespa/vespalib/gtest/gtest.h> -#include <vespa/eval/eval/engine_or_factory.h> +#include <vespa/eval/eval/simple_value.h> +#include <vespa/eval/eval/tensor_spec.h> #include <vespa/eval/eval/value.h> #include <vespa/vespalib/datastore/datastore.hpp> using namespace search::tensor; using vespalib::datastore::EntryRef; -using vespalib::eval::EngineOrFactory; +using vespalib::eval::SimpleValue; using vespalib::eval::TensorSpec; using vespalib::eval::Value; using vespalib::eval::ValueType; @@ -40,7 +41,7 @@ public: Value::UP make_tensor(const TensorSpec& spec) { - auto value = EngineOrFactory::get().from_spec(spec); + auto value = SimpleValue::from_spec(spec); return std::make_unique<MockBigTensor>(std::move(value)); } diff --git a/streamingvisitors/src/tests/hitcollector/hitcollector_test.cpp b/streamingvisitors/src/tests/hitcollector/hitcollector_test.cpp index e2c47da6997..087a3be86d3 100644 --- a/streamingvisitors/src/tests/hitcollector/hitcollector_test.cpp +++ b/streamingvisitors/src/tests/hitcollector/hitcollector_test.cpp @@ -6,9 +6,10 @@ #include <vespa/searchlib/fef/matchdata.h> #include <vespa/searchlib/fef/feature_resolver.h> #include <vespa/searchvisitor/hitcollector.h> -#include <vespa/eval/eval/value.h> +#include <vespa/eval/eval/simple_value.h> #include <vespa/eval/eval/tensor_spec.h> -#include <vespa/eval/eval/engine_or_factory.h> +#include <vespa/eval/eval/value.h> +#include <vespa/eval/eval/value_codec.h> #include <vespa/vespalib/objects/nbostream.h> using namespace document; @@ -17,10 +18,11 @@ using namespace vespalib; using namespace vdslib; using namespace vsm; using vespalib::nbostream; -using vespalib::eval::EngineOrFactory; -using vespalib::eval::Value; using vespalib::eval::DoubleValue; +using vespalib::eval::SimpleValue; using vespalib::eval::TensorSpec; +using vespalib::eval::Value; + namespace streaming { @@ -252,7 +254,7 @@ public: ~MyRankProgram(); virtual void run(uint32_t docid, const std::vector<search::fef::TermFieldMatchData> &) override { _boxed_double = std::make_unique<DoubleValue>(docid + 30); - _tensor = EngineOrFactory::get().from_spec(TensorSpec("tensor(x{})").add({{"x", "a"}}, docid + 20)); + _tensor = SimpleValue::from_spec(TensorSpec("tensor(x{})").add({{"x", "a"}}, docid + 20)); _fooValue.as_number = docid + 10; _barValue.as_object = *_boxed_double; _bazValue.as_object = *_tensor; @@ -307,9 +309,8 @@ HitCollectorTest::testFeatureSet() EXPECT_TRUE(!f[2].is_double()); EXPECT_TRUE(f[2].is_data()); { - auto engine = EngineOrFactory::get(); nbostream buf(f[2].as_data().data, f[2].as_data().size); - auto actual = engine.to_spec(*engine.decode(buf)); + auto actual = spec_from_value(*SimpleValue::from_stream(buf)); auto expect = TensorSpec("tensor(x{})").add({{"x", "a"}}, 23); EXPECT_EQUAL(actual, expect); } |