1141cc406Sopenharmony_ci/* sane - Scanner Access Now Easy. 2141cc406Sopenharmony_ci 3141cc406Sopenharmony_ci Copyright (C) 2019 Povilas Kanapickas <povilas@radix.lt> 4141cc406Sopenharmony_ci 5141cc406Sopenharmony_ci This file is part of the SANE package. 6141cc406Sopenharmony_ci 7141cc406Sopenharmony_ci This program is free software; you can redistribute it and/or 8141cc406Sopenharmony_ci modify it under the terms of the GNU General Public License as 9141cc406Sopenharmony_ci published by the Free Software Foundation; either version 2 of the 10141cc406Sopenharmony_ci License, or (at your option) any later version. 11141cc406Sopenharmony_ci 12141cc406Sopenharmony_ci This program is distributed in the hope that it will be useful, but 13141cc406Sopenharmony_ci WITHOUT ANY WARRANTY; without even the implied warranty of 14141cc406Sopenharmony_ci MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15141cc406Sopenharmony_ci General Public License for more details. 16141cc406Sopenharmony_ci 17141cc406Sopenharmony_ci You should have received a copy of the GNU General Public License 18141cc406Sopenharmony_ci along with this program. If not, see <https://www.gnu.org/licenses/>. 19141cc406Sopenharmony_ci*/ 20141cc406Sopenharmony_ci 21141cc406Sopenharmony_ci#define DEBUG_DECLARE_ONLY 22141cc406Sopenharmony_ci 23141cc406Sopenharmony_ci#include "tests.h" 24141cc406Sopenharmony_ci#include "tests_printers.h" 25141cc406Sopenharmony_ci#include "minigtest.h" 26141cc406Sopenharmony_ci 27141cc406Sopenharmony_ci#include "../../../backend/genesys/utilities.h" 28141cc406Sopenharmony_ci 29141cc406Sopenharmony_cinamespace genesys { 30141cc406Sopenharmony_ci 31141cc406Sopenharmony_civoid test_utilities_compute_array_percentile_approx_empty() 32141cc406Sopenharmony_ci{ 33141cc406Sopenharmony_ci std::vector<std::uint16_t> data; 34141cc406Sopenharmony_ci data.resize(1, 0); 35141cc406Sopenharmony_ci 36141cc406Sopenharmony_ci ASSERT_RAISES(compute_array_percentile_approx(data.data(), data.data(), 0, 0, 0.0f), 37141cc406Sopenharmony_ci SaneException); 38141cc406Sopenharmony_ci} 39141cc406Sopenharmony_ci 40141cc406Sopenharmony_civoid test_utilities_compute_array_percentile_approx_single_line() 41141cc406Sopenharmony_ci{ 42141cc406Sopenharmony_ci std::vector<std::uint16_t> data = { 43141cc406Sopenharmony_ci 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 44141cc406Sopenharmony_ci }; 45141cc406Sopenharmony_ci std::vector<std::uint16_t> expected = data; 46141cc406Sopenharmony_ci std::vector<std::uint16_t> result; 47141cc406Sopenharmony_ci result.resize(data.size(), 0); 48141cc406Sopenharmony_ci 49141cc406Sopenharmony_ci compute_array_percentile_approx(result.data(), data.data(), 1, data.size(), 0.5f); 50141cc406Sopenharmony_ci ASSERT_EQ(result, expected); 51141cc406Sopenharmony_ci} 52141cc406Sopenharmony_ci 53141cc406Sopenharmony_civoid test_utilities_compute_array_percentile_approx_multiple_lines() 54141cc406Sopenharmony_ci{ 55141cc406Sopenharmony_ci std::vector<std::uint16_t> data = { 56141cc406Sopenharmony_ci 5, 17, 4, 14, 3, 9, 9, 5, 10, 1, 57141cc406Sopenharmony_ci 6, 1, 0, 18, 8, 5, 11, 11, 15, 12, 58141cc406Sopenharmony_ci 6, 8, 7, 3, 2, 15, 5, 12, 3, 3, 59141cc406Sopenharmony_ci 6, 12, 17, 6, 7, 7, 1, 6, 3, 18, 60141cc406Sopenharmony_ci 10, 5, 8, 0, 14, 3, 3, 7, 10, 5, 61141cc406Sopenharmony_ci 18, 7, 3, 11, 0, 14, 12, 19, 18, 11, 62141cc406Sopenharmony_ci 5, 16, 2, 9, 8, 2, 7, 6, 11, 18, 63141cc406Sopenharmony_ci 16, 5, 2, 2, 14, 18, 19, 13, 16, 1, 64141cc406Sopenharmony_ci 5, 9, 14, 6, 17, 16, 1, 1, 16, 0, 65141cc406Sopenharmony_ci 19, 18, 4, 12, 0, 7, 15, 3, 2, 6, 66141cc406Sopenharmony_ci }; 67141cc406Sopenharmony_ci std::vector<std::uint16_t> result; 68141cc406Sopenharmony_ci result.resize(10, 0); 69141cc406Sopenharmony_ci 70141cc406Sopenharmony_ci std::vector<std::uint16_t> expected = { 71141cc406Sopenharmony_ci 5, 1, 0, 0, 0, 2, 1, 1, 2, 0, 72141cc406Sopenharmony_ci }; 73141cc406Sopenharmony_ci compute_array_percentile_approx(result.data(), data.data(), 10, 10, 0.0f); 74141cc406Sopenharmony_ci ASSERT_EQ(result, expected); 75141cc406Sopenharmony_ci 76141cc406Sopenharmony_ci expected = { 77141cc406Sopenharmony_ci 5, 5, 2, 3, 2, 5, 3, 5, 3, 1, 78141cc406Sopenharmony_ci }; 79141cc406Sopenharmony_ci compute_array_percentile_approx(result.data(), data.data(), 10, 10, 0.25f); 80141cc406Sopenharmony_ci ASSERT_EQ(result, expected); 81141cc406Sopenharmony_ci 82141cc406Sopenharmony_ci expected = { 83141cc406Sopenharmony_ci 6, 9, 4, 9, 8, 9, 9, 7, 11, 6, 84141cc406Sopenharmony_ci }; 85141cc406Sopenharmony_ci compute_array_percentile_approx(result.data(), data.data(), 10, 10, 0.5f); 86141cc406Sopenharmony_ci ASSERT_EQ(result, expected); 87141cc406Sopenharmony_ci 88141cc406Sopenharmony_ci expected = { 89141cc406Sopenharmony_ci 16, 16, 8, 12, 14, 15, 12, 12, 16, 12, 90141cc406Sopenharmony_ci }; 91141cc406Sopenharmony_ci compute_array_percentile_approx(result.data(), data.data(), 10, 10, 0.75f); 92141cc406Sopenharmony_ci ASSERT_EQ(result, expected); 93141cc406Sopenharmony_ci 94141cc406Sopenharmony_ci expected = { 95141cc406Sopenharmony_ci 19, 18, 17, 18, 17, 18, 19, 19, 18, 18, 96141cc406Sopenharmony_ci }; 97141cc406Sopenharmony_ci compute_array_percentile_approx(result.data(), data.data(), 10, 10, 1.0f); 98141cc406Sopenharmony_ci ASSERT_EQ(result, expected); 99141cc406Sopenharmony_ci} 100141cc406Sopenharmony_ci 101141cc406Sopenharmony_civoid test_utilities() 102141cc406Sopenharmony_ci{ 103141cc406Sopenharmony_ci test_utilities_compute_array_percentile_approx_empty(); 104141cc406Sopenharmony_ci test_utilities_compute_array_percentile_approx_single_line(); 105141cc406Sopenharmony_ci test_utilities_compute_array_percentile_approx_multiple_lines(); 106141cc406Sopenharmony_ci} 107141cc406Sopenharmony_ci 108141cc406Sopenharmony_ci} // namespace genesys 109