enc_photon_noise_test.cc (1850B)
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/enc_photon_noise.h" 7 8 #include "lib/jxl/test_utils.h" 9 #include "lib/jxl/testing.h" 10 11 namespace jxl { 12 namespace { 13 14 using ::testing::FloatNear; 15 using ::testing::Pointwise; 16 17 MATCHER(AreApproximatelyEqual, "") { 18 constexpr float kTolerance = 1e-6; 19 const float actual = std::get<0>(arg); 20 const float expected = std::get<1>(arg); 21 return testing::ExplainMatchResult(FloatNear(expected, kTolerance), actual, 22 result_listener); 23 } 24 25 TEST(EncPhotonNoiseTest, LUTs) { 26 EXPECT_THAT( 27 SimulatePhotonNoise(/*xsize=*/6000, /*ysize=*/4000, /*iso=*/100).lut, 28 Pointwise(AreApproximatelyEqual(), 29 {0.00259652, 0.0139648, 0.00681551, 0.00632582, 0.00694917, 30 0.00803922, 0.00934574, 0.0107607})); 31 EXPECT_THAT( 32 SimulatePhotonNoise(/*xsize=*/6000, /*ysize=*/4000, /*iso=*/800).lut, 33 Pointwise(AreApproximatelyEqual(), 34 {0.02077220, 0.0420923, 0.01820690, 0.01439020, 0.01293670, 35 0.01254030, 0.01277390, 0.0134161})); 36 EXPECT_THAT( 37 SimulatePhotonNoise(/*xsize=*/6000, /*ysize=*/4000, /*iso=*/6400).lut, 38 Pointwise(AreApproximatelyEqual(), 39 {0.1661770, 0.1691120, 0.05309080, 0.03963960, 0.03357410, 40 0.03001650, 0.02776740, 0.0263478})); 41 42 // Lower when measured on a per-pixel basis as there are fewer of them. 43 EXPECT_THAT( 44 SimulatePhotonNoise(/*xsize=*/4000, /*ysize=*/3000, /*iso=*/6400).lut, 45 Pointwise(AreApproximatelyEqual(), 46 {0.0830886, 0.1008720, 0.0367748, 0.0280305, 0.0240236, 47 0.0218040, 0.0205771, 0.0200058})); 48 } 49 50 } // namespace 51 } // namespace jxl