solstice-solver

Solver library of the solstice app
git clone git://git.meso-star.com/solstice-solver.git
Log | Files | Refs | README | LICENSE

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 }