/** * 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 #include #include #include #include #include "utils/log_adapter.h" #include "utils/ms_utils.h" #include "common/common.h" #include "gtest/gtest.h" #include "securec.h" #include "minddata/dataset/include/datasets.h" #include "minddata/dataset/include/status.h" #include "minddata/dataset/include/transforms.h" #include "minddata/dataset/include/iterator.h" #include "minddata/dataset/core/constants.h" #include "minddata/dataset/core/tensor_shape.h" #include "minddata/dataset/core/tensor.h" #include "minddata/dataset/include/samplers.h" using namespace mindspore::dataset::api; using mindspore::MsLogLevel::ERROR; using mindspore::ExceptionType::NoExceptionType; using mindspore::LogStream; using mindspore::dataset::Tensor; using mindspore::dataset::TensorShape; using mindspore::dataset::TensorImpl; using mindspore::dataset::DataType; using mindspore::dataset::Status; using mindspore::dataset::BorderType; using mindspore::dataset::dsize_t; class MindDataTestPipeline : public UT::DatasetOpTesting { protected: }; TEST_F(MindDataTestPipeline, TestMnistFail1) { MS_LOG(INFO) << "Doing MindDataTestPipeline-TestMnistFail1."; // Create a Mnist Dataset std::shared_ptr ds = Mnist("", RandomSampler(false, 10)); EXPECT_EQ(ds, nullptr); } TEST_F(MindDataTestPipeline, TestImageFolderFail1) { MS_LOG(INFO) << "Doing MindDataTestPipeline-TestImageFolderFail1."; // Create an ImageFolder Dataset std::shared_ptr ds = ImageFolder("", true, nullptr); EXPECT_EQ(ds, nullptr); } TEST_F(MindDataTestPipeline, TestCelebADataset) { MS_LOG(INFO) << "Doing MindDataTestPipeline-TestCelebADataset."; // Create a CelebA Dataset std::string folder_path = datasets_root_path_ + "/testCelebAData/"; std::shared_ptr ds = CelebA(folder_path, "all", SequentialSampler(0, 2), false, {}); EXPECT_NE(ds, nullptr); // Create an iterator over the result of the above dataset // This will trigger the creation of the Execution Tree and launch it. std::shared_ptr iter = ds->CreateIterator(); EXPECT_NE(iter, nullptr); // Iterate the dataset and get each row std::unordered_map> row; iter->GetNextRow(&row); // Check if CelebAOp read correct images/attr std::string expect_file[] = {"1.JPEG", "2.jpg"}; std::vector> expect_attr_vector = {{0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1}, {0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}}; uint64_t i = 0; while (row.size() != 0) { auto image = row["image"]; auto attr = row["attr"]; std::shared_ptr expect_image; Tensor::CreateFromFile(folder_path + expect_file[i], &expect_image); EXPECT_EQ(*image, *expect_image); std::shared_ptr expect_attr; Tensor::CreateFromVector(expect_attr_vector[i], TensorShape({40}), &expect_attr); EXPECT_EQ(*attr, *expect_attr); iter->GetNextRow(&row); i++; } EXPECT_EQ(i, 2); // Manually terminate the pipeline iter->Stop(); } TEST_F(MindDataTestPipeline, TestCelebADefault) { MS_LOG(INFO) << "Doing MindDataTestPipeline-TestCelebADefault."; // Create a CelebA Dataset std::string folder_path = datasets_root_path_ + "/testCelebAData/"; std::shared_ptr ds = CelebA(folder_path); EXPECT_NE(ds, nullptr); // Create an iterator over the result of the above dataset // This will trigger the creation of the Execution Tree and launch it. std::shared_ptr iter = ds->CreateIterator(); EXPECT_NE(iter, nullptr); // Iterate the dataset and get each row std::unordered_map> row; iter->GetNextRow(&row); // Check if CelebAOp read correct images/attr uint64_t i = 0; while (row.size() != 0) { auto image = row["image"]; auto attr = row["attr"]; MS_LOG(INFO) << "Tensor image shape: " << image->shape(); MS_LOG(INFO) << "Tensor attr shape: " << attr->shape(); iter->GetNextRow(&row); i++; } EXPECT_EQ(i, 2); // Manually terminate the pipeline iter->Stop(); } TEST_F(MindDataTestPipeline, TestCelebAException) { MS_LOG(INFO) << "Doing MindDataTestPipeline-TestCelebAException."; // Create a CelebA Dataset std::string folder_path = datasets_root_path_ + "/testCelebAData/"; std::string invalid_folder_path = "./testNotExist"; std::string invalid_dataset_type = "invalid_type"; std::shared_ptr ds = CelebA(invalid_folder_path); EXPECT_EQ(ds, nullptr); std::shared_ptr ds1 = CelebA(folder_path, invalid_dataset_type); EXPECT_EQ(ds1, nullptr); }