libjxl

FORK: libjxl patches used on blog
git clone https://git.neptards.moe/blog/libjxl.git
Log | Files | Refs | Submodules | README | LICENSE

data_parallel_test.cc (2950B)


      1 // Copyright (c) the JPEG XL Project Authors. All rights reserved.
      2 //
      3 // Use of this source code is governed by a BSD-style
      4 // license that can be found in the LICENSE file.
      5 
      6 #include "lib/jxl/base/data_parallel.h"
      7 
      8 #include "lib/jxl/test_utils.h"
      9 #include "lib/jxl/testing.h"
     10 
     11 namespace jxl {
     12 namespace {
     13 
     14 class DataParallelTest : public ::testing::Test {
     15  protected:
     16   // A fake class to verify that DataParallel is properly calling the
     17   // client-provided runner functions.
     18   static int FakeRunner(void* runner_opaque, void* jpegxl_opaque,
     19                         JxlParallelRunInit init, JxlParallelRunFunction func,
     20                         uint32_t start_range, uint32_t end_range) {
     21     DataParallelTest* self = static_cast<DataParallelTest*>(runner_opaque);
     22     self->runner_called_++;
     23     self->jpegxl_opaque_ = jpegxl_opaque;
     24     self->init_ = init;
     25     self->func_ = func;
     26     self->start_range_ = start_range;
     27     self->end_range_ = end_range;
     28     return self->runner_return_;
     29   }
     30 
     31   ThreadPool pool_{&DataParallelTest::FakeRunner, this};
     32 
     33   // Number of times FakeRunner() was called.
     34   int runner_called_ = 0;
     35 
     36   // Parameters passed to FakeRunner.
     37   void* jpegxl_opaque_ = nullptr;
     38   JxlParallelRunInit init_ = nullptr;
     39   JxlParallelRunFunction func_ = nullptr;
     40   uint32_t start_range_ = -1;
     41   uint32_t end_range_ = -1;
     42 
     43   // Return value that FakeRunner will return.
     44   int runner_return_ = 0;
     45 };
     46 
     47 // JxlParallelRunInit interface.
     48 typedef int (*JxlParallelRunInit)();
     49 
     50 }  // namespace
     51 
     52 TEST_F(DataParallelTest, RunnerCalledParameters) {
     53   EXPECT_TRUE(pool_.Run(
     54       1234, 5678, [](size_t /* num_threads */) { return true; },
     55       [](uint32_t /* task */, size_t /* thread */) { return; }));
     56   EXPECT_EQ(1, runner_called_);
     57   EXPECT_NE(nullptr, init_);
     58   EXPECT_NE(nullptr, func_);
     59   EXPECT_NE(nullptr, jpegxl_opaque_);
     60   EXPECT_EQ(1234u, start_range_);
     61   EXPECT_EQ(5678u, end_range_);
     62 }
     63 
     64 TEST_F(DataParallelTest, RunnerFailurePropagates) {
     65   runner_return_ = -1;  // FakeRunner return value.
     66   EXPECT_FALSE(pool_.Run(
     67       1234, 5678, [](size_t /* num_threads */) { return false; },
     68       [](uint32_t /* task */, size_t /* thread */) { return; }));
     69   EXPECT_FALSE(RunOnPool(
     70       nullptr, 1234, 5678, [](size_t /* num_threads */) { return false; },
     71       [](uint32_t /* task */, size_t /* thread */) { return; }, "Test"));
     72 }
     73 
     74 TEST_F(DataParallelTest, RunnerNotCalledOnEmptyRange) {
     75   runner_return_ = -1;  // FakeRunner return value.
     76   EXPECT_TRUE(pool_.Run(
     77       123, 123, [](size_t /* num_threads */) { return false; },
     78       [](uint32_t /* task */, size_t /* thread */) { return; }));
     79   EXPECT_TRUE(RunOnPool(
     80       nullptr, 123, 123, [](size_t /* num_threads */) { return false; },
     81       [](uint32_t /* task */, size_t /* thread */) { return; }, "Test"));
     82   // We don't call the external runner when the range is empty. We don't even
     83   // need to call the init function.
     84   EXPECT_EQ(0, runner_called_);
     85 }
     86 
     87 }  // namespace jxl