Linux GNU 11.4.0 Code Coverage Report


Directory: ./
Coverage: low: ≥ 0% medium: ≥ 75.0% high: ≥ 90.0%
Coverage Exec / Excl / Total
Lines: 100.0% 27 / 0 / 27
Functions: -% 0 / 6 / 6
Branches: 64.1% 232 / 0 / 362

OMCompiler/SimulationRuntime/c/util/utility.h
Line Branch Exec Source
1 /*
2 * This file belongs to the OpenModelica Run-Time System
3 *
4 * Copyright (c) 1998-2026, Open Source Modelica Consortium (OSMC), c/o Linköpings
5 * universitet, Department of Computer and Information Science, SE-58183 Linköping, Sweden. All rights
6 * reserved.
7 *
8 * THIS PROGRAM IS PROVIDED UNDER THE TERMS OF THE BSD NEW LICENSE OR THE
9 * AGPL VERSION 3 LICENSE OR THE OSMC PUBLIC LICENSE (OSMC-PL) VERSION 1.8. ANY
10 * USE, REPRODUCTION OR DISTRIBUTION OF THIS PROGRAM CONSTITUTES RECIPIENT'S
11 * ACCEPTANCE OF THE BSD NEW LICENSE OR THE OSMC PUBLIC LICENSE OR THE AGPL
12 * VERSION 3, ACCORDING TO RECIPIENTS CHOICE.
13 *
14 * The OpenModelica software and the OSMC (Open Source Modelica Consortium) Public License
15 * (OSMC-PL) are obtained from OSMC, either from the above address, from the URLs:
16 * http://www.openmodelica.org or https://github.com/OpenModelica/ or
17 * http://www.ida.liu.se/projects/OpenModelica, and in the OpenModelica distribution. GNU
18 * AGPL version 3 is obtained from: https://www.gnu.org/licenses/licenses.html#GPL. The BSD NEW
19 * License is obtained from: http://www.opensource.org/licenses/BSD-3-Clause.
20 *
21 * This program is distributed WITHOUT ANY WARRANTY; without even the implied warranty of
22 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, EXCEPT AS EXPRESSLY
23 * SET FORTH IN THE BY RECIPIENT SELECTED SUBSIDIARY LICENSE CONDITIONS OF
24 * OSMC-PL.
25 *
26 */
27
28
29 #ifndef UTILITY_H
30 #define UTILITY_H
31
32 #include "../openmodelica.h"
33 #include <math.h>
34
35 static inline int in_range_boolean(modelica_integer b,
36 modelica_integer start,
37 modelica_integer stop)
38 {
39 if(start <= stop) {
40 if((b >= start) && (b <= stop)) {
41 return 1;
42 }
43 } else {
44 if((b >= stop) && (b <= start)) {
45 return 1;
46 }
47 }
48 return 0;
49 }
50
51 static inline int in_range_integer(modelica_integer i,
52 modelica_integer start,
53 modelica_integer stop)
54 {
55
14/16
✓ Branch 0 taken 1118527 times.
✓ Branch 1 taken 75376889 times.
✓ Branch 2 taken 127375 times.
✓ Branch 3 taken 562498 times.
✓ Branch 4 taken 26626 times.
✓ Branch 5 taken 192484 times.
✓ Branch 6 taken 2534 times.
✓ Branch 7 taken 125235 times.
✓ Branch 8 taken 6 times.
✓ Branch 9 taken 42 times.
✓ Branch 10 taken 72 times.
✓ Branch 11 taken 317416 times.
✓ Branch 12 taken 144 times.
✓ Branch 13 taken 271235 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
78121083 if(start <= stop) {
56
112/128
<unknown function 55>:
✓ Branch 0 taken 3913329 times.
✓ Branch 1 taken 2807877 times.
✓ Branch 2 taken 763534 times.
✓ Branch 3 taken 208010 times.
✓ Branch 4 taken 3282990 times.
✓ Branch 5 taken 639151 times.
✓ Branch 6 taken 2775380 times.
✓ Branch 7 taken 688739 times.
✓ Branch 8 taken 25535147 times.
✓ Branch 9 taken 2331369 times.
✓ Branch 10 taken 5639259 times.
✓ Branch 11 taken 1832214 times.
✓ Branch 12 taken 46278722 times.
✓ Branch 13 taken 9345675 times.
✓ Branch 14 taken 3740477 times.
✓ Branch 15 taken 708357 times.
✓ Branch 16 taken 665724 times.
✓ Branch 17 taken 151627 times.
✓ Branch 18 taken 61796019 times.
✓ Branch 19 taken 442225 times.
✓ Branch 20 taken 6155774 times.
✓ Branch 21 taken 82927 times.
✓ Branch 22 taken 22763518 times.
✓ Branch 23 taken 181681 times.
✓ Branch 24 taken 2335294 times.
✓ Branch 25 taken 293054 times.
✓ Branch 26 taken 202713 times.
✓ Branch 27 taken 10342 times.
✓ Branch 28 taken 5574606 times.
✓ Branch 29 taken 383588 times.
✓ Branch 30 taken 81726 times.
✓ Branch 31 taken 5983 times.
✓ Branch 32 taken 17602 times.
✓ Branch 33 taken 11201 times.
✓ Branch 34 taken 1115314 times.
✓ Branch 35 taken 110861 times.
✓ Branch 36 taken 378068 times.
✓ Branch 37 taken 8963 times.
✓ Branch 38 taken 419191 times.
✓ Branch 39 taken 10152 times.
✓ Branch 40 taken 7814 times.
✓ Branch 41 taken 3836 times.
✓ Branch 42 taken 14324615 times.
✓ Branch 43 taken 1979917 times.
✓ Branch 44 taken 4154 times.
✓ Branch 45 taken 623 times.
✓ Branch 46 taken 1699 times.
✓ Branch 47 taken 169 times.
✓ Branch 48 taken 422 times.
✓ Branch 49 taken 6 times.
✓ Branch 50 taken 317460 times.
✓ Branch 51 taken 2212 times.
✓ Branch 52 taken 50 times.
✓ Branch 53 taken 50 times.
✓ Branch 54 taken 66677 times.
✓ Branch 55 taken 1258 times.
✓ Branch 56 taken 3099 times.
✓ Branch 57 taken 860 times.
✓ Branch 58 taken 900287 times.
✓ Branch 59 taken 15403 times.
✓ Branch 60 taken 3626 times.
✓ Branch 61 taken 1276 times.
✓ Branch 62 taken 10396 times.
✓ Branch 63 taken 3596 times.
✓ Branch 64 taken 3596 times.
✓ Branch 65 taken 1246 times.
✓ Branch 66 taken 38702 times.
✓ Branch 67 taken 19663 times.
✓ Branch 68 taken 192167 times.
✓ Branch 69 taken 79599 times.
✗ Branch 70 not taken.
✗ Branch 71 not taken.
✗ Branch 72 not taken.
✗ Branch 73 not taken.
✗ Branch 74 not taken.
✗ Branch 75 not taken.
✓ Branch 76 taken 318 times.
✓ Branch 77 taken 147 times.
✓ Branch 78 taken 127 times.
✓ Branch 79 taken 127 times.
✓ Branch 80 taken 340 times.
✓ Branch 81 taken 146 times.
<unknown function 56>:
✓ Branch 0 taken 22104084 times.
✓ Branch 1 taken 9469610 times.
✓ Branch 2 taken 451465622 times.
✓ Branch 3 taken 653908 times.
✓ Branch 4 taken 749046676 times.
✓ Branch 5 taken 2482993 times.
✓ Branch 6 taken 587342 times.
✓ Branch 7 taken 104421 times.
✓ Branch 8 taken 10636 times.
✓ Branch 9 taken 428 times.
✓ Branch 10 taken 9446 times.
✓ Branch 11 taken 292 times.
✓ Branch 12 taken 1057 times.
✓ Branch 13 taken 133 times.
✓ Branch 14 taken 1102198 times.
✓ Branch 15 taken 119967 times.
✓ Branch 16 taken 577 times.
✓ Branch 17 taken 64 times.
✓ Branch 18 taken 1998 times.
✓ Branch 19 taken 22 times.
✓ Branch 20 taken 1683 times.
✓ Branch 21 taken 21 times.
✓ Branch 22 taken 41 times.
✓ Branch 23 taken 21 times.
✓ Branch 24 taken 3148 times.
✓ Branch 25 taken 38 times.
✓ Branch 26 taken 535 times.
✓ Branch 27 taken 25 times.
✓ Branch 28 taken 560 times.
✓ Branch 29 taken 33 times.
✓ Branch 30 taken 5606 times.
✓ Branch 31 taken 8 times.
✓ Branch 32 taken 996 times.
✓ Branch 33 taken 14 times.
✓ Branch 34 taken 996 times.
✓ Branch 35 taken 14 times.
✗ Branch 36 not taken.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✗ Branch 45 not taken.
1468849260 if((i >= start) && (i <= stop)) {
57 return 1;
58 }
59 } else {
60
14/16
✓ Branch 0 taken 75134296 times.
✓ Branch 1 taken 242593 times.
✓ Branch 2 taken 451029 times.
✓ Branch 3 taken 111469 times.
✓ Branch 4 taken 152149 times.
✓ Branch 5 taken 40335 times.
✓ Branch 6 taken 121559 times.
✓ Branch 7 taken 3676 times.
✓ Branch 8 taken 30 times.
✓ Branch 9 taken 12 times.
✓ Branch 10 taken 316180 times.
✓ Branch 11 taken 1236 times.
✓ Branch 12 taken 269748 times.
✓ Branch 13 taken 1487 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
76845799 if((i >= stop) && (i <= start)) {
61 return 1;
62 }
63 }
64 return 0;
65 }
66
67 static inline int in_range_real(modelica_real i,
68 modelica_real start,
69 modelica_real stop)
70 {
71 if(start <= stop) {
72 if((i >= start) && (i <= stop)) {
73 return 1;
74 }
75 } else {
76 if((i >= stop) && (i <= start)) {
77 return 1;
78 }
79 }
80 return 0;
81 }
82
83
84 /* div is already defined in stdlib, so it's redefined here to modelica_div */
85 static inline modelica_real modelica_div(modelica_real x, modelica_real y)
86 {
87 return (modelica_real)((modelica_integer)(x/y));
88 }
89
90 static inline modelica_integer modelica_integer_min(modelica_integer x,modelica_integer y)
91 {
92
4/6
<unknown function 55>:
✓ Branch 0 taken 947502 times.
✓ Branch 1 taken 1964088 times.
<unknown function 56>:
✗ Branch 0 not taken.
✓ Branch 0 taken 498 times.
✗ Branch 1 not taken.
✓ Branch 1 taken 41 times.
9329501 return (x < y) ? x : y;
93 }
94
95 static inline modelica_integer modelica_integer_max(modelica_integer x,modelica_integer y)
96 {
97
9/22
<unknown function 55>:
✓ Branch 0 taken 6069 times.
✓ Branch 1 taken 31 times.
✓ Branch 2 taken 9706 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 44385 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
<unknown function 56>:
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
<unknown function 97>:
✓ Branch 2 taken 15271607 times.
✓ Branch 3 taken 108336686 times.
✓ Branch 6 taken 4 times.
✓ Branch 7 taken 15 times.
154796899 return (x > y) ? x : y;
98 }
99
100 static inline modelica_real modelica_real_min(modelica_real x,modelica_real y)
101 {
102
2/2
✓ Branch 0 taken 163 times.
✓ Branch 1 taken 41 times.
204 return (x < y) ? x : y;
103 }
104
105 static inline modelica_real modelica_real_max(modelica_real x,modelica_real y)
106 {
107
2/2
✓ Branch 0 taken 277 times.
✓ Branch 1 taken 208 times.
485 return (x > y) ? x : y;
108 }
109
110
111 #define reduction_sum(X,Y) ((X)+(Y))
112 #define reduction_product(X,Y) ((X)*(Y))
113
114 /* pow(), but for integer exponents (faster implementation) */
115 extern modelica_real real_int_pow(threadData_t *threadData, modelica_real base,modelica_integer n);
116
117 #if !defined(OMC_MINIMAL_RUNTIME)
118 /* Returns 0 on failure. The first element in nmatches contains the error-message. */
119 extern int OpenModelica_regexImpl(const char* str, const char* re, const int maxn, int extended, int sensitive, void*(*)(const char*), void **result);
120 /* Wrapper for the builtin call */
121 extern int OpenModelica_regex(const char* str, const char* re, int maxn, int extended, int sensitive, const char **result);
122 #endif
123
124 extern void OpenModelica_decode_uri_inplace(char *uri);
125
126 extern modelica_string OpenModelica_uriToFilename_impl(threadData_t *threadData, modelica_string uri, const char *resourcesDir);
127 #define OpenModelica_uriToFilename(URI) OpenModelica_uriToFilename_impl(threadData, URI, NULL)
128 #define OpenModelica__uriToFilename(URI) OpenModelica_uriToFilename(URI)
129 extern void OpenModelica_updateUriMapping(threadData_t *threadData, void *namesAndDirs);
130
131 static inline modelica_real modelica_real_mod(modelica_real x, modelica_real y)
132 {
133
7/8
<unknown function 133>:
✓ Branch 0 taken 249 times.
✓ Branch 1 taken 40 times.
<unknown function 56>:
✓ Branch 1 taken 36 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 81732 times.
✓ Branch 4 taken 14534 times.
✓ Branch 5 taken 7046 times.
✓ Branch 6 taken 3125 times.
119334 return x-floor(x/y)*y;
134 }
135
136 /* Returns res such that 0 <= abs(res) < abs(y) and res has the same sign as y */
137 static inline modelica_integer modelica_integer_mod(modelica_integer x, modelica_integer y)
138 {
139
1/4
<unknown function 56>:
✗ Branch 0 not taken.
✗ Branch 1 not taken.
<unknown function 92>:
✓ Branch 0 taken 1 time.
✗ Branch 1 not taken.
80080287 modelica_integer res = x % y;
140
67/158
<unknown function 139>:
✗ Branch 0 not taken.
✓ Branch 0 taken 99 times.
✓ Branch 1 taken 21554 times.
✓ Branch 1 taken 50 times.
✗ Branch 2 not taken.
✗ Branch 2 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 3 taken 99 times.
✓ Branch 3 taken 34341 times.
✓ Branch 4 taken 114317 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 114317 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 20416 times.
✓ Branch 9 taken 12733711 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 3336 times.
<unknown function 55>:
✓ Branch 0 taken 1750 times.
✓ Branch 0 taken 24623 times.
✓ Branch 0 taken 89319 times.
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 9394 times.
✗ Branch 1 not taken.
✗ Branch 1 not taken.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 2 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 113944 times.
✓ Branch 3 taken 8556 times.
✓ Branch 3 taken 1160 times.
✓ Branch 4 taken 1546968 times.
✗ Branch 4 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 5 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 6 not taken.
✓ Branch 6 taken 6245 times.
✓ Branch 7 taken 1546968 times.
✗ Branch 7 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 17980201 times.
✗ Branch 8 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 9 taken 6245 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 10 taken 6072 times.
✓ Branch 11 taken 17980201 times.
✓ Branch 11 taken 2 times.
✓ Branch 12 taken 2784675 times.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✓ Branch 13 taken 6069 times.
✗ Branch 14 not taken.
✓ Branch 14 taken 6069 times.
✓ Branch 15 taken 2784675 times.
✗ Branch 15 not taken.
✓ Branch 16 taken 207292 times.
✗ Branch 16 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 17 not taken.
✓ Branch 17 taken 6069 times.
✗ Branch 18 not taken.
✗ Branch 18 not taken.
✓ Branch 18 taken 6069 times.
✓ Branch 19 taken 207292 times.
✗ Branch 19 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 20 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 3449821 times.
✗ Branch 21 not taken.
✓ Branch 21 taken 6069 times.
✗ Branch 22 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2177711 times.
✗ Branch 23 not taken.
✓ Branch 24 taken 2975 times.
✓ Branch 24 taken 20492264 times.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 25 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2975 times.
✓ Branch 27 taken 20492264 times.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✓ Branch 33 taken 19 times.
✗ Branch 34 not taken.
✓ Branch 35 taken 1338 times.
✓ Branch 36 taken 5841 times.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✓ Branch 39 taken 5841 times.
<unknown function 56>:
✓ Branch 0 taken 4011865 times.
✗ Branch 0 not taken.
✓ Branch 0 taken 1 time.
✓ Branch 1 taken 46114 times.
✗ Branch 1 not taken.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 time.
✓ Branch 3 taken 4020844 times.
✗ Branch 4 not taken.
✓ Branch 4 taken 172 times.
✓ Branch 5 taken 8979 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 7 taken 172 times.
✗ Branch 8 not taken.
✓ Branch 8 taken 18 times.
✗ Branch 9 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✓ Branch 11 taken 18 times.
✗ Branch 12 not taken.
✓ Branch 12 taken 12101335 times.
✗ Branch 13 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 15 taken 12101335 times.
✓ Branch 16 taken 1841476 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 1841476 times.
<unknown function 92>:
✓ Branch 0 taken 128 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 128 times.
<unknown function 97>:
✓ Branch 0 taken 44 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 44 times.
✓ Branch 4 taken 3120 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 3120 times.
79742199 return ((y > 0 && res < 0) || (y < 0 && res > 0)) ? (res + y) : res;
141 }
142
143 /* Modelica.Constants.inf and .Integer_inf. */
144 extern modelica_real realMaxLit(void);
145 extern modelica_integer intMaxLit(void);
146
147 #endif
148