test_ssol_sun.c (10553B)
1 /* Copyright (C) 2018-2026 |Meso|Star> (contact@meso-star.com) 2 * Copyright (C) 2016, 2018 CNRS 3 * 4 * This program is free software: you can redistribute it and/or modify 5 * it under the terms of the GNU General Public License as published by 6 * the Free Software Foundation, either version 3 of the License, or 7 * (at your option) any later version. 8 * 9 * This program is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 * GNU General Public License for more details. 13 * 14 * You should have received a copy of the GNU General Public License 15 * along with this program. If not, see <http://www.gnu.org/licenses/>. */ 16 17 #include "ssol.h" 18 #include "test_ssol_utils.h" 19 20 #include <rsys/double3.h> 21 22 int 23 main(int argc, char** argv) 24 { 25 struct mem_allocator allocator; 26 struct ssol_device* dev; 27 struct ssol_spectrum* spectrum; 28 struct ssol_spectrum* spectrum2; 29 struct ssol_sun* sun; 30 const double dir0[3] = { 0, 0, 0 }; 31 double dir[3] = { 1, 0, 0 }; 32 double tmp[3]; 33 double dni; 34 (void) argc, (void) argv; 35 36 mem_init_proxy_allocator(&allocator, &mem_default_allocator); 37 38 CHK(ssol_device_create 39 (NULL, &allocator, SSOL_NTHREADS_DEFAULT, 0, &dev) == RES_OK); 40 41 CHK(ssol_spectrum_create(dev, &spectrum) == RES_OK); 42 CHK(ssol_spectrum_create(dev, &spectrum2) == RES_OK); 43 44 CHK(ssol_sun_create_directional(NULL, &sun) == RES_BAD_ARG); 45 CHK(ssol_sun_create_directional(dev, NULL) == RES_BAD_ARG); 46 CHK(ssol_sun_create_directional(dev, &sun) == RES_OK); 47 48 CHK(ssol_sun_ref_get(NULL) == RES_BAD_ARG); 49 CHK(ssol_sun_ref_get(sun) == RES_OK); 50 51 CHK(ssol_sun_ref_put(NULL) == RES_BAD_ARG); 52 CHK(ssol_sun_ref_put(sun) == RES_OK); 53 54 CHK(ssol_sun_set_spectrum(NULL, spectrum) == RES_BAD_ARG); 55 CHK(ssol_sun_set_spectrum(sun, NULL) == RES_BAD_ARG); 56 CHK(ssol_sun_set_spectrum(sun, spectrum) == RES_OK); 57 CHK(ssol_sun_set_spectrum(sun, spectrum) == RES_OK); 58 59 CHK(ssol_sun_set_direction(NULL, dir) == RES_BAD_ARG); 60 CHK(ssol_sun_set_direction(sun, NULL) == RES_BAD_ARG); 61 CHK(ssol_sun_set_direction(sun, dir0) == RES_BAD_ARG); 62 CHK(ssol_sun_set_direction(sun, dir) == RES_OK); 63 CHK(ssol_sun_set_direction(sun, dir) == RES_OK); 64 65 CHK(ssol_sun_get_direction(NULL, tmp) == RES_BAD_ARG); 66 CHK(ssol_sun_get_direction(sun, NULL) == RES_BAD_ARG); 67 CHK(ssol_sun_get_direction(sun, tmp) == RES_OK); 68 CHK(d3_eq(dir, tmp) == 1); 69 70 CHK(ssol_sun_set_dni(NULL, 1000) == RES_BAD_ARG); 71 CHK(ssol_sun_set_dni(sun, 0) == RES_BAD_ARG); 72 CHK(ssol_sun_set_dni(sun, 1000) == RES_OK); 73 CHK(ssol_sun_set_dni(sun, 1000) == RES_OK); 74 75 CHK(ssol_sun_get_dni(NULL, &dni) == RES_BAD_ARG); 76 CHK(ssol_sun_get_dni(sun, NULL) == RES_BAD_ARG); 77 CHK(ssol_sun_get_dni(sun, &dni) == RES_OK); 78 CHK(dni == 1000); 79 80 CHK(ssol_sun_pillbox_set_half_angle(NULL, 0.1) == RES_BAD_ARG); 81 CHK(ssol_sun_pillbox_set_half_angle(sun, -0.1) == RES_BAD_ARG); 82 CHK(ssol_sun_pillbox_set_half_angle(sun, 999) == RES_BAD_ARG); 83 CHK(ssol_sun_pillbox_set_half_angle(sun, 0.1) == RES_BAD_ARG); 84 85 CHK(ssol_sun_gaussian_set_std_dev(NULL, 0.1) == RES_BAD_ARG); 86 CHK(ssol_sun_gaussian_set_std_dev(sun, -0.1) == RES_BAD_ARG); 87 CHK(ssol_sun_gaussian_set_std_dev(sun, 0.1) == RES_BAD_ARG); 88 89 CHK(ssol_sun_set_buie_param(NULL, 0.1) == RES_BAD_ARG); 90 CHK(ssol_sun_set_buie_param(sun, -0.1) == RES_BAD_ARG); 91 CHK(ssol_sun_set_buie_param(sun, 999) == RES_BAD_ARG); 92 CHK(ssol_sun_set_buie_param(sun, 0.1) == RES_BAD_ARG); 93 94 CHK(ssol_sun_ref_put(sun) == RES_OK); 95 96 CHK(ssol_sun_create_pillbox(NULL, &sun) == RES_BAD_ARG); 97 CHK(ssol_sun_create_pillbox(dev, NULL) == RES_BAD_ARG); 98 CHK(ssol_sun_create_pillbox(dev, &sun) == RES_OK); 99 100 CHK(ssol_sun_ref_get(NULL) == RES_BAD_ARG); 101 CHK(ssol_sun_ref_get(sun) == RES_OK); 102 103 CHK(ssol_sun_ref_put(NULL) == RES_BAD_ARG); 104 CHK(ssol_sun_ref_put(sun) == RES_OK); 105 106 CHK(ssol_sun_set_spectrum(NULL, spectrum) == RES_BAD_ARG); 107 CHK(ssol_sun_set_spectrum(sun, NULL) == RES_BAD_ARG); 108 CHK(ssol_sun_set_spectrum(sun, spectrum) == RES_OK); 109 CHK(ssol_sun_set_spectrum(sun, spectrum2) == RES_OK); 110 CHK(ssol_sun_set_spectrum(sun, spectrum2) == RES_OK); 111 112 CHK(ssol_sun_set_direction(NULL, dir) == RES_BAD_ARG); 113 CHK(ssol_sun_set_direction(sun, NULL) == RES_BAD_ARG); 114 CHK(ssol_sun_set_direction(sun, dir0) == RES_BAD_ARG); 115 CHK(ssol_sun_set_direction(sun, dir) == RES_OK); 116 CHK(ssol_sun_set_direction(sun, dir) == RES_OK); 117 118 CHK(ssol_sun_get_direction(NULL, tmp) == RES_BAD_ARG); 119 CHK(ssol_sun_get_direction(sun, NULL) == RES_BAD_ARG); 120 CHK(ssol_sun_get_direction(sun, tmp) == RES_OK); 121 CHK(d3_eq(dir, tmp) == 1); 122 123 CHK(ssol_sun_set_dni(NULL, 1000) == RES_BAD_ARG); 124 CHK(ssol_sun_set_dni(sun, 0) == RES_BAD_ARG); 125 CHK(ssol_sun_set_dni(sun, 1000) == RES_OK); 126 CHK(ssol_sun_set_dni(sun, 1000) == RES_OK); 127 128 CHK(ssol_sun_get_dni(NULL, &dni) == RES_BAD_ARG); 129 CHK(ssol_sun_get_dni(sun, NULL) == RES_BAD_ARG); 130 CHK(ssol_sun_get_dni(sun, &dni) == RES_OK); 131 CHK(dni == 1000); 132 133 CHK(ssol_sun_pillbox_set_half_angle(NULL, 0.1) == RES_BAD_ARG); 134 CHK(ssol_sun_pillbox_set_half_angle(sun, -0.1) == RES_BAD_ARG); 135 CHK(ssol_sun_pillbox_set_half_angle(sun, 999) == RES_BAD_ARG); 136 CHK(ssol_sun_pillbox_set_half_angle(sun, 0.1) == RES_OK); 137 CHK(ssol_sun_pillbox_set_half_angle(sun, 0.1) == RES_OK); 138 139 CHK(ssol_sun_gaussian_set_std_dev(NULL, 0.1) == RES_BAD_ARG); 140 CHK(ssol_sun_gaussian_set_std_dev(sun, -0.1) == RES_BAD_ARG); 141 CHK(ssol_sun_gaussian_set_std_dev(sun, 0.1) == RES_BAD_ARG); 142 143 CHK(ssol_sun_set_buie_param(NULL, 0.1) == RES_BAD_ARG); 144 CHK(ssol_sun_set_buie_param(sun, -0.1) == RES_BAD_ARG); 145 CHK(ssol_sun_set_buie_param(sun, 999) == RES_BAD_ARG); 146 CHK(ssol_sun_set_buie_param(sun, 0.1) == RES_BAD_ARG); 147 148 CHK(ssol_sun_ref_put(sun) == RES_OK); 149 150 CHK(ssol_sun_create_gaussian(NULL, &sun) == RES_BAD_ARG); 151 CHK(ssol_sun_create_gaussian(dev, NULL) == RES_BAD_ARG); 152 CHK(ssol_sun_create_gaussian(dev, &sun) == RES_OK); 153 154 CHK(ssol_sun_ref_get(NULL) == RES_BAD_ARG); 155 CHK(ssol_sun_ref_get(sun) == RES_OK); 156 157 CHK(ssol_sun_ref_put(NULL) == RES_BAD_ARG); 158 CHK(ssol_sun_ref_put(sun) == RES_OK); 159 160 CHK(ssol_sun_set_spectrum(NULL, spectrum) == RES_BAD_ARG); 161 CHK(ssol_sun_set_spectrum(sun, NULL) == RES_BAD_ARG); 162 CHK(ssol_sun_set_spectrum(sun, spectrum) == RES_OK); 163 CHK(ssol_sun_set_spectrum(sun, spectrum2) == RES_OK); 164 CHK(ssol_sun_set_spectrum(sun, spectrum2) == RES_OK); 165 166 CHK(ssol_sun_set_direction(NULL, dir) == RES_BAD_ARG); 167 CHK(ssol_sun_set_direction(sun, NULL) == RES_BAD_ARG); 168 CHK(ssol_sun_set_direction(sun, dir0) == RES_BAD_ARG); 169 CHK(ssol_sun_set_direction(sun, dir) == RES_OK); 170 CHK(ssol_sun_set_direction(sun, dir) == RES_OK); 171 172 CHK(ssol_sun_get_direction(NULL, tmp) == RES_BAD_ARG); 173 CHK(ssol_sun_get_direction(sun, NULL) == RES_BAD_ARG); 174 CHK(ssol_sun_get_direction(sun, tmp) == RES_OK); 175 CHK(d3_eq(dir, tmp) == 1); 176 177 CHK(ssol_sun_set_dni(NULL, 1000) == RES_BAD_ARG); 178 CHK(ssol_sun_set_dni(sun, 0) == RES_BAD_ARG); 179 CHK(ssol_sun_set_dni(sun, 1000) == RES_OK); 180 CHK(ssol_sun_set_dni(sun, 1000) == RES_OK); 181 182 CHK(ssol_sun_get_dni(NULL, &dni) == RES_BAD_ARG); 183 CHK(ssol_sun_get_dni(sun, NULL) == RES_BAD_ARG); 184 CHK(ssol_sun_get_dni(sun, &dni) == RES_OK); 185 CHK(dni == 1000); 186 187 CHK(ssol_sun_pillbox_set_half_angle(NULL, 0.1) == RES_BAD_ARG); 188 CHK(ssol_sun_pillbox_set_half_angle(sun, -0.1) == RES_BAD_ARG); 189 CHK(ssol_sun_pillbox_set_half_angle(sun, 999) == RES_BAD_ARG); 190 CHK(ssol_sun_pillbox_set_half_angle(sun, 0.1) == RES_BAD_ARG); 191 CHK(ssol_sun_pillbox_set_half_angle(sun, 0.1) == RES_BAD_ARG); 192 193 CHK(ssol_sun_gaussian_set_std_dev(NULL, 0.1) == RES_BAD_ARG); 194 CHK(ssol_sun_gaussian_set_std_dev(sun, -0.1) == RES_BAD_ARG); 195 CHK(ssol_sun_gaussian_set_std_dev(sun, 0.1) == RES_OK); 196 CHK(ssol_sun_gaussian_set_std_dev(sun, 0.1) == RES_OK); 197 198 CHK(ssol_sun_set_buie_param(NULL, 0.1) == RES_BAD_ARG); 199 CHK(ssol_sun_set_buie_param(sun, -0.1) == RES_BAD_ARG); 200 CHK(ssol_sun_set_buie_param(sun, 999) == RES_BAD_ARG); 201 CHK(ssol_sun_set_buie_param(sun, 0.1) == RES_BAD_ARG); 202 203 CHK(ssol_sun_ref_put(sun) == RES_OK); 204 205 CHK(ssol_sun_create_buie(NULL, &sun) == RES_BAD_ARG); 206 CHK(ssol_sun_create_buie(dev, NULL) == RES_BAD_ARG); 207 CHK(ssol_sun_create_buie(dev, &sun) == RES_OK); 208 209 CHK(ssol_sun_ref_get(NULL) == RES_BAD_ARG); 210 CHK(ssol_sun_ref_get(sun) == RES_OK); 211 212 CHK(ssol_sun_ref_put(NULL) == RES_BAD_ARG); 213 CHK(ssol_sun_ref_put(sun) == RES_OK); 214 215 CHK(ssol_sun_set_spectrum(NULL, spectrum) == RES_BAD_ARG); 216 CHK(ssol_sun_set_spectrum(sun, NULL) == RES_BAD_ARG); 217 CHK(ssol_sun_set_spectrum(sun, spectrum) == RES_OK); 218 CHK(ssol_sun_set_spectrum(sun, spectrum) == RES_OK); 219 220 CHK(ssol_sun_set_direction(NULL, dir) == RES_BAD_ARG); 221 CHK(ssol_sun_set_direction(sun, NULL) == RES_BAD_ARG); 222 CHK(ssol_sun_set_direction(sun, dir0) == RES_BAD_ARG); 223 CHK(ssol_sun_set_direction(sun, dir) == RES_OK); 224 CHK(ssol_sun_set_direction(sun, dir) == RES_OK); 225 226 CHK(ssol_sun_get_direction(NULL, tmp) == RES_BAD_ARG); 227 CHK(ssol_sun_get_direction(sun, NULL) == RES_BAD_ARG); 228 CHK(ssol_sun_get_direction(sun, tmp) == RES_OK); 229 CHK(d3_eq(dir, tmp) == 1); 230 231 CHK(ssol_sun_set_dni(NULL, 1000) == RES_BAD_ARG); 232 CHK(ssol_sun_set_dni(sun, 0) == RES_BAD_ARG); 233 CHK(ssol_sun_set_dni(sun, 1000) == RES_OK); 234 CHK(ssol_sun_set_dni(sun, 1000) == RES_OK); 235 236 CHK(ssol_sun_get_dni(NULL, &dni) == RES_BAD_ARG); 237 CHK(ssol_sun_get_dni(sun, NULL) == RES_BAD_ARG); 238 CHK(ssol_sun_get_dni(sun, &dni) == RES_OK); 239 CHK(dni == 1000); 240 241 CHK(ssol_sun_pillbox_set_half_angle(NULL, 0.1) == RES_BAD_ARG); 242 CHK(ssol_sun_pillbox_set_half_angle(sun, -0.1) == RES_BAD_ARG); 243 CHK(ssol_sun_pillbox_set_half_angle(sun, 999) == RES_BAD_ARG); 244 CHK(ssol_sun_pillbox_set_half_angle(sun, 0.1) == RES_BAD_ARG); 245 246 CHK(ssol_sun_gaussian_set_std_dev(NULL, 0.1) == RES_BAD_ARG); 247 CHK(ssol_sun_gaussian_set_std_dev(sun, -0.1) == RES_BAD_ARG); 248 CHK(ssol_sun_gaussian_set_std_dev(sun, 0.1) == RES_BAD_ARG); 249 250 CHK(ssol_sun_set_buie_param(NULL, 0.1) == RES_BAD_ARG); 251 CHK(ssol_sun_set_buie_param(sun, -0.1) == RES_BAD_ARG); 252 CHK(ssol_sun_set_buie_param(sun, 999) == RES_BAD_ARG); 253 CHK(ssol_sun_set_buie_param(sun, 0.1) == RES_OK); 254 CHK(ssol_sun_set_buie_param(sun, 0.1) == RES_OK); 255 256 CHK(ssol_sun_ref_put(sun) == RES_OK); 257 258 CHK(ssol_spectrum_ref_put(spectrum) == RES_OK); 259 CHK(ssol_spectrum_ref_put(spectrum2) == RES_OK); 260 CHK(ssol_device_ref_put(dev) == RES_OK); 261 262 check_memory_allocator(&allocator); 263 mem_shutdown_proxy_allocator(&allocator); 264 CHK(mem_allocated_size() == 0); 265 266 return 0; 267 }