/** * Copyright 2020 Huawei Technologies Co., Ltd * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "minddata/dataset/core/client.h" #include "common/common.h" #include "gtest/gtest.h" #include "minddata/dataset/core/tensor.h" #include "minddata/dataset/core/tensor_row.h" using namespace mindspore::dataset; namespace py = pybind11; class MindDataTestTensorRowDE : public UT::Common { public: MindDataTestTensorRowDE() {} void SetUp() { GlobalInit(); } }; TEST_F(MindDataTestTensorRowDE, ConvertToTensorRowBoolTest) { Status s; TensorRow bool_output; bool bool_value = true; s = TensorRow::ConvertToTensorRow(bool_value, &bool_output); ASSERT_EQ(s, Status::OK()); TensorRow expected_bool; std::shared_ptr expected_tensor; Tensor::CreateScalar(bool_value, &expected_tensor); expected_bool.push_back(expected_tensor); ASSERT_EQ(*(bool_output.at(0)) == *(expected_bool.at(0)), true); } TEST_F(MindDataTestTensorRowDE, ConvertToTensorRowIntTest) { Status s; TensorRow int_output; int32_t int_value = 12; TensorRow expected_int; s = TensorRow::ConvertToTensorRow(int_value, &int_output); ASSERT_EQ(s, Status::OK()); std::shared_ptr expected_tensor; Tensor::CreateScalar(int_value, &expected_tensor); expected_int.push_back(expected_tensor); ASSERT_EQ(*(int_output.at(0)) == *(expected_int.at(0)), true); } TEST_F(MindDataTestTensorRowDE, ConvertToTensorRowFloatTest) { Status s; TensorRow expected_bool; TensorRow float_output; float float_value = 12.57; TensorRow expected_float; s = TensorRow::ConvertToTensorRow(float_value, &float_output); ASSERT_EQ(s, Status::OK()); std::shared_ptr expected_tensor; Tensor::CreateScalar(float_value, &expected_tensor); expected_float.push_back(expected_tensor); ASSERT_EQ(*(float_output.at(0)) == *(expected_float.at(0)), true); } TEST_F(MindDataTestTensorRowDE, ConvertToTensorRowBoolVectorTest) { Status s; TensorRow bool_output; std::vector bool_value = {true, false}; s = TensorRow::ConvertToTensorRow(bool_value, &bool_output); ASSERT_EQ(s, Status::OK()); TensorRow expected_bool; std::shared_ptr expected_tensor; Tensor::CreateFromVector(bool_value, &expected_tensor); expected_bool.push_back(expected_tensor); ASSERT_EQ(*(bool_output.at(0)) == *(expected_bool.at(0)), true); } TEST_F(MindDataTestTensorRowDE, ConvertToTensorRowIntVectorTest) { Status s; TensorRow int_output; std::vector int_value = {12, 16}; TensorRow expected_int; s = TensorRow::ConvertToTensorRow(int_value, &int_output); ASSERT_EQ(s, Status::OK()); std::shared_ptr expected_tensor; Tensor::CreateFromVector(int_value, &expected_tensor); expected_int.push_back(expected_tensor); ASSERT_EQ(*(int_output.at(0)) == *(expected_int.at(0)), true); } TEST_F(MindDataTestTensorRowDE, ConvertToTensorRowFloatVectorTest) { Status s; TensorRow float_output; std::vector float_value = {12.57, 0.264}; TensorRow expected_float; s = TensorRow::ConvertToTensorRow(float_value, &float_output); ASSERT_EQ(s, Status::OK()); std::shared_ptr expected_tensor; Tensor::CreateFromVector(float_value, &expected_tensor); expected_float.push_back(expected_tensor); ASSERT_EQ(*(float_output.at(0)) == *(expected_float.at(0)), true); } TEST_F(MindDataTestTensorRowDE, ConvertFromTensorRowBoolTest) { Status s; bool bool_value = true; bool result; TensorRow input_tensor_row; std::shared_ptr input_tensor; Tensor::CreateScalar(bool_value, &input_tensor); input_tensor_row.push_back(input_tensor); s = TensorRow::ConvertFromTensorRow(input_tensor_row, &result); ASSERT_EQ(s, Status::OK()); ASSERT_EQ(bool_value, result); } TEST_F(MindDataTestTensorRowDE, ConvertFromTensorRowIntTest) { Status s; int32_t int_value = 12; int32_t result; TensorRow input_tensor_row; std::shared_ptr input_tensor; Tensor::CreateScalar(int_value, &input_tensor); input_tensor_row.push_back(input_tensor); s = TensorRow::ConvertFromTensorRow(input_tensor_row, &result); ASSERT_EQ(s, Status::OK()); ASSERT_EQ(int_value, result); } TEST_F(MindDataTestTensorRowDE, ConvertFromTensorRowFloatTest) { Status s; float float_value = 12.57; float result; TensorRow input_tensor_row; std::shared_ptr input_tensor; Tensor::CreateScalar(float_value, &input_tensor); input_tensor_row.push_back(input_tensor); s = TensorRow::ConvertFromTensorRow(input_tensor_row, &result); ASSERT_EQ(s, Status::OK()); ASSERT_EQ(float_value, result); } TEST_F(MindDataTestTensorRowDE, ConvertFromTensorRowBoolVectorTest) { Status s; std::vector bool_value = {true, false}; std::vector result; TensorRow input_tensor_row; std::shared_ptr input_tensor; Tensor::CreateFromVector(bool_value, &input_tensor); input_tensor_row.push_back(input_tensor); s = TensorRow::ConvertFromTensorRow(input_tensor_row, &result); ASSERT_EQ(s, Status::OK()); ASSERT_EQ(result, bool_value); } TEST_F(MindDataTestTensorRowDE, ConvertFromTensorRowIntVectorTest) { Status s; std::vector int_value = {12, 16}; std::vector result; TensorRow input_tensor_row; std::shared_ptr input_tensor; Tensor::CreateFromVector(int_value, &input_tensor); input_tensor_row.push_back(input_tensor); s = TensorRow::ConvertFromTensorRow(input_tensor_row, &result); ASSERT_EQ(s, Status::OK()); ASSERT_EQ(result, int_value); } TEST_F(MindDataTestTensorRowDE, ConvertFromTensorRowFloatVectorTest) { Status s; std::vector float_value = {12.57, 0.264}; std::vector result; TensorRow input_tensor_row; std::shared_ptr input_tensor; Tensor::CreateFromVector(float_value, &input_tensor); input_tensor_row.push_back(input_tensor); s = TensorRow::ConvertFromTensorRow(input_tensor_row, &result); ASSERT_EQ(s, Status::OK()); ASSERT_EQ(result, float_value); } TEST_F(MindDataTestTensorRowDE, ConvertToTensorRowInvalidDataTest) { TensorRow output; std::string string_input = "Bye"; ASSERT_FALSE(TensorRow::ConvertToTensorRow(string_input, &output).IsOk()); std::vector string_vector_input = {"Hello"}; ASSERT_FALSE(TensorRow::ConvertToTensorRow(string_vector_input, &output).IsOk()); } TEST_F(MindDataTestTensorRowDE, ConvertFromTensorRowTypeMismatchTest) { TensorRow input_tensor_row; std::shared_ptr input_tensor1; Tensor::CreateScalar(false, &input_tensor1); input_tensor_row.push_back(input_tensor1); double output; ASSERT_FALSE(TensorRow::ConvertFromTensorRow(input_tensor_row, &output).IsOk()); std::vector output_vector; ASSERT_FALSE(TensorRow::ConvertFromTensorRow(input_tensor_row, &output_vector).IsOk()); } TEST_F(MindDataTestTensorRowDE, ConvertFromTensorRowInvalidShapeTest) { TensorRow input_tensor_row; std::shared_ptr input_tensor1; Tensor::CreateEmpty(TensorShape({2, 2}), DataType(DataType::DE_FLOAT64), &input_tensor1); input_tensor_row.push_back(input_tensor1); std::vector output; ASSERT_FALSE(TensorRow::ConvertFromTensorRow(input_tensor_row, &output).IsOk()); std::vector output_vector; ASSERT_FALSE(TensorRow::ConvertFromTensorRow(input_tensor_row, &output_vector).IsOk()); } TEST_F(MindDataTestTensorRowDE, ConvertFromTensorRowEmptyInputTest) { TensorRow input_tensor_row; double output; ASSERT_FALSE(TensorRow::ConvertFromTensorRow(input_tensor_row, &output).IsOk()); }