test_ssf_blinn_distribution.c (2706B)
1 /* Copyright (C) 2016-2018, 2021-2025 |Méso|Star> (contact@meso-star.com) 2 * 3 * This program is free software: you can redistribute it and/or modify 4 * it under the terms of the GNU General Public License as published by 5 * the Free Software Foundation, either version 3 of the License, or 6 * (at your option) any later version. 7 * 8 * This program is distributed in the hope that it will be useful, 9 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 * GNU General Public License for more details. 12 * 13 * You should have received a copy of the GNU General Public License 14 * along with this program. If not, see <http://www.gnu.org/licenses/>. */ 15 16 #define _POSIX_C_SOURCE 200112L /* nextafter support */ 17 18 #include "ssf.h" 19 #include "test_ssf_utils.h" 20 21 int 22 main(int argc, char** argv) 23 { 24 struct mem_allocator allocator; 25 struct ssp_rng* rng; 26 struct ssf_microfacet_distribution* distrib; 27 struct ssf_microfacet_distribution* dummy; 28 const size_t NTESTS = 5; 29 size_t itest; 30 (void)argc, (void)argv; 31 32 mem_init_proxy_allocator(&allocator, &mem_default_allocator); 33 CHK(ssp_rng_create(&allocator, SSP_RNG_THREEFRY, &rng) == RES_OK); 34 35 CHK(ssf_microfacet_distribution_create 36 (&allocator, &ssf_blinn_distribution, &distrib) == RES_OK); 37 CHK(ssf_microfacet_distribution_create 38 (&allocator, µfacet_dummy, &dummy) == RES_OK); 39 40 CHK(ssf_blinn_distribution_setup(NULL, -1) == RES_BAD_ARG); 41 CHK(ssf_blinn_distribution_setup(distrib, -1) == RES_BAD_ARG); 42 CHK(ssf_blinn_distribution_setup(NULL, 8) == RES_BAD_ARG); 43 CHK(ssf_blinn_distribution_setup(distrib, 8) == RES_OK); 44 CHK(ssf_blinn_distribution_setup(distrib, 0) == RES_OK); 45 CHK(ssf_blinn_distribution_setup(dummy, 0) == RES_BAD_ARG); 46 47 CHK(ssf_blinn_distribution_setup 48 (distrib, SSF_BLINN_DISTRIBUTION_MAX_EXPONENT) ==RES_OK); 49 CHK(ssf_blinn_distribution_setup 50 (distrib, nextafter(SSF_BLINN_DISTRIBUTION_MAX_EXPONENT, DBL_MAX)) == 51 RES_BAD_ARG); 52 CHK(ssf_blinn_distribution_setup(distrib, nextafter(0,-1)) == RES_BAD_ARG); 53 CHK(ssf_blinn_distribution_setup(distrib, 32.32) == RES_OK); 54 55 FOR_EACH(itest, 0, NTESTS) { 56 const double exponent = ssp_rng_uniform_double 57 (rng, 0, SSF_BLINN_DISTRIBUTION_MAX_EXPONENT); 58 CHK(ssf_blinn_distribution_setup(distrib, exponent) == RES_OK); 59 check_microfacet_distribution(distrib, rng); 60 } 61 62 CHK(ssf_microfacet_distribution_ref_put(distrib) == RES_OK); 63 CHK(ssf_microfacet_distribution_ref_put(dummy) == RES_OK); 64 CHK(ssp_rng_ref_put(rng) == RES_OK); 65 66 check_memory_allocator(&allocator); 67 mem_shutdown_proxy_allocator(&allocator); 68 CHK(mem_allocated_size() == 0); 69 return 0; 70 }