annotate test/suite_aggrs/globals.c @ 457:90b1d927912a

- suite_aggrs: make sure random memory used doesn't ever result in NaN fp values (for every possible address), as this messes with result comparison
author Tassilo Philipp
date Fri, 28 Jan 2022 14:11:21 +0100
parents a3b2afc35730
children 1c18c2377c24
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
432
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
1 /*
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
2
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
3 Package: dyncall
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
4 Library: test
445
4bd3ed699de8 name fix
Tassilo Philipp
parents: 442
diff changeset
5 File: test/suite_aggrs/globals.c
432
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
6 Description:
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
7 License:
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
8
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
9 Copyright (c) 2022 Tassilo Philipp <tphilipp@potion-studios.com>
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
10
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
11 Permission to use, copy, modify, and distribute this software for any
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
12 purpose with or without fee is hereby granted, provided that the above
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
13 copyright notice and this permission notice appear in all copies.
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
14
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
15 THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
16 WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
17 MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
18 ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
19 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
20 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
21 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
22
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
23 */
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
24
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
25 #include <stdlib.h>
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
26 #include "globals.h"
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
27 #include <float.h>
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
28
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
29 #define X(CH,T) T *V_##CH; T *K_##CH;
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
30 DEF_TYPES
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
31 #undef X
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
32
439
252f32fa59d8 - suite_aggrs: added compile time knob to enforce intentional struct instance misalignment (should maybe be part of generator)
Tassilo Philipp
parents: 438
diff changeset
33 #define AGGR_MISALIGN 0
252f32fa59d8 - suite_aggrs: added compile time knob to enforce intentional struct instance misalignment (should maybe be part of generator)
Tassilo Philipp
parents: 438
diff changeset
34
457
90b1d927912a - suite_aggrs: make sure random memory used doesn't ever result in NaN fp values (for every possible address), as this messes with result comparison
Tassilo Philipp
parents: 450
diff changeset
35 static double rand_d() { return ( ( (double) rand() ) / ( (double) RAND_MAX ) ); }
90b1d927912a - suite_aggrs: make sure random memory used doesn't ever result in NaN fp values (for every possible address), as this messes with result comparison
Tassilo Philipp
parents: 450
diff changeset
36
90b1d927912a - suite_aggrs: make sure random memory used doesn't ever result in NaN fp values (for every possible address), as this messes with result comparison
Tassilo Philipp
parents: 450
diff changeset
37 /* fill mem with random values, make sure no float aligned memory location
90b1d927912a - suite_aggrs: make sure random memory used doesn't ever result in NaN fp values (for every possible address), as this messes with result comparison
Tassilo Philipp
parents: 450
diff changeset
38 * results in a NaN, as they always compare to false; so avaid all ones in
90b1d927912a - suite_aggrs: make sure random memory used doesn't ever result in NaN fp values (for every possible address), as this messes with result comparison
Tassilo Philipp
parents: 450
diff changeset
39 * exporent (for simplicity we just look at first 7 exponent bits and make sure
90b1d927912a - suite_aggrs: make sure random memory used doesn't ever result in NaN fp values (for every possible address), as this messes with result comparison
Tassilo Philipp
parents: 450
diff changeset
40 * they aren't all set, which would work for all IEEE754 precision formats) */
90b1d927912a - suite_aggrs: make sure random memory used doesn't ever result in NaN fp values (for every possible address), as this messes with result comparison
Tassilo Philipp
parents: 450
diff changeset
41 static void rand_mem__fp_friendly(void* p, size_t s)
90b1d927912a - suite_aggrs: make sure random memory used doesn't ever result in NaN fp values (for every possible address), as this messes with result comparison
Tassilo Philipp
parents: 450
diff changeset
42 {
90b1d927912a - suite_aggrs: make sure random memory used doesn't ever result in NaN fp values (for every possible address), as this messes with result comparison
Tassilo Philipp
parents: 450
diff changeset
43 int i;
90b1d927912a - suite_aggrs: make sure random memory used doesn't ever result in NaN fp values (for every possible address), as this messes with result comparison
Tassilo Philipp
parents: 450
diff changeset
44 for(i = 0; i<s; ++i) {
90b1d927912a - suite_aggrs: make sure random memory used doesn't ever result in NaN fp values (for every possible address), as this messes with result comparison
Tassilo Philipp
parents: 450
diff changeset
45 char* c = (char*)p;
90b1d927912a - suite_aggrs: make sure random memory used doesn't ever result in NaN fp values (for every possible address), as this messes with result comparison
Tassilo Philipp
parents: 450
diff changeset
46 c[i] = (char)rand(); /* slowish, byte by byte, but whatev */
90b1d927912a - suite_aggrs: make sure random memory used doesn't ever result in NaN fp values (for every possible address), as this messes with result comparison
Tassilo Philipp
parents: 450
diff changeset
47 if((c[i]&0x7f) == 0x7f)
90b1d927912a - suite_aggrs: make sure random memory used doesn't ever result in NaN fp values (for every possible address), as this messes with result comparison
Tassilo Philipp
parents: 450
diff changeset
48 c[i] ^= 1;
90b1d927912a - suite_aggrs: make sure random memory used doesn't ever result in NaN fp values (for every possible address), as this messes with result comparison
Tassilo Philipp
parents: 450
diff changeset
49 }
90b1d927912a - suite_aggrs: make sure random memory used doesn't ever result in NaN fp values (for every possible address), as this messes with result comparison
Tassilo Philipp
parents: 450
diff changeset
50 }
432
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
51
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
52 static int calc_max_aggr_size()
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
53 {
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
54 int i, s = 0;
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
55 for(i=0; i<G_naggs; ++i)
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
56 if(G_agg_sizes[i] > s)
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
57 s = G_agg_sizes[i];
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
58 return s;
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
59 }
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
60
438
b4ddad459690 suite_aggr;
Tassilo Philipp
parents: 432
diff changeset
61 void init_test_data()
432
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
62 {
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
63 int i;
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
64 int maxaggrsize = calc_max_aggr_size();
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
65 #define X(CH,T) V_##CH = (T*) malloc(sizeof(T)*(G_maxargs+1)); K_##CH = (T*) malloc(sizeof(T)*(G_maxargs+1));
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
66 DEF_TYPES
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
67 #undef X
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
68
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
69 for(i=0;i<G_maxargs+1;++i) {
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
70 K_c[i] = (char) (((rand_d()-0.5)*2) * (1<<7));
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
71 K_s[i] = (short) (((rand_d()-0.5)*2) * (1<<(sizeof(short)*8-1)));
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
72 K_i[i] = (int) (((rand_d()-0.5)*2) * (1<<(sizeof(int)*8-2)));
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
73 K_j[i] = (long) (((rand_d()-0.5)*2) * (1L<<(sizeof(long)*8-2)));
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
74 K_l[i] = (long long) (((rand_d()-0.5)*2) * (1LL<<(sizeof(long long)*8-2)));
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
75 K_p[i] = (void*) (long) (((rand_d()-0.5)*2) * (1LL<<(sizeof(void*)*8-1)));
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
76 K_f[i] = (float) (rand_d() * FLT_MAX);
442
94c7904977aa - cleanup hardcoded DBL_MAX
Tassilo Philipp
parents: 439
diff changeset
77 K_d[i] = (double) (((rand_d()-0.5)*2) * DBL_MAX);
439
252f32fa59d8 - suite_aggrs: added compile time knob to enforce intentional struct instance misalignment (should maybe be part of generator)
Tassilo Philipp
parents: 438
diff changeset
78 K_a[i] = malloc(maxaggrsize+AGGR_MISALIGN);
457
90b1d927912a - suite_aggrs: make sure random memory used doesn't ever result in NaN fp values (for every possible address), as this messes with result comparison
Tassilo Philipp
parents: 450
diff changeset
79 rand_mem__fp_friendly(K_a[i], maxaggrsize+AGGR_MISALIGN);
439
252f32fa59d8 - suite_aggrs: added compile time knob to enforce intentional struct instance misalignment (should maybe be part of generator)
Tassilo Philipp
parents: 438
diff changeset
80 K_a[i] = (char*)K_a[i]+AGGR_MISALIGN;
432
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
81 }
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
82 }
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
83
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
84 void clear_V()
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
85 {
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
86 static int aggr_init = 0;
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
87 int maxaggrsize = calc_max_aggr_size();
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
88
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
89 int i;
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
90 for(i=0;i<G_maxargs+1;++i) {
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
91 if(aggr_init)
439
252f32fa59d8 - suite_aggrs: added compile time knob to enforce intentional struct instance misalignment (should maybe be part of generator)
Tassilo Philipp
parents: 438
diff changeset
92 free((char*)V_a[i]-AGGR_MISALIGN);
432
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
93 #define X(CH,T) V_##CH[i] = (T) 0;
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
94 DEF_TYPES
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
95 #undef X
439
252f32fa59d8 - suite_aggrs: added compile time knob to enforce intentional struct instance misalignment (should maybe be part of generator)
Tassilo Philipp
parents: 438
diff changeset
96 V_a[i] = malloc(maxaggrsize+AGGR_MISALIGN);
252f32fa59d8 - suite_aggrs: added compile time knob to enforce intentional struct instance misalignment (should maybe be part of generator)
Tassilo Philipp
parents: 438
diff changeset
97 V_a[i] = (char*)V_a[i]+AGGR_MISALIGN;
432
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
98 }
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
99 aggr_init = 1;
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
100 }
167faab0c0be first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
Tassilo Philipp
parents:
diff changeset
101
438
b4ddad459690 suite_aggr;
Tassilo Philipp
parents: 432
diff changeset
102 void deinit_test_data()
b4ddad459690 suite_aggr;
Tassilo Philipp
parents: 432
diff changeset
103 {
b4ddad459690 suite_aggr;
Tassilo Philipp
parents: 432
diff changeset
104 int i;
b4ddad459690 suite_aggr;
Tassilo Philipp
parents: 432
diff changeset
105 for(i=0;i<G_maxargs+1;++i) {
439
252f32fa59d8 - suite_aggrs: added compile time knob to enforce intentional struct instance misalignment (should maybe be part of generator)
Tassilo Philipp
parents: 438
diff changeset
106 free((char*)V_a[i]-AGGR_MISALIGN);
252f32fa59d8 - suite_aggrs: added compile time knob to enforce intentional struct instance misalignment (should maybe be part of generator)
Tassilo Philipp
parents: 438
diff changeset
107 free((char*)K_a[i]-AGGR_MISALIGN);
438
b4ddad459690 suite_aggr;
Tassilo Philipp
parents: 432
diff changeset
108 }
b4ddad459690 suite_aggr;
Tassilo Philipp
parents: 432
diff changeset
109
b4ddad459690 suite_aggr;
Tassilo Philipp
parents: 432
diff changeset
110 #define X(CH,T) free(V_##CH); free(K_##CH);
b4ddad459690 suite_aggr;
Tassilo Philipp
parents: 432
diff changeset
111 DEF_TYPES
b4ddad459690 suite_aggr;
Tassilo Philipp
parents: 432
diff changeset
112 #undef X
b4ddad459690 suite_aggr;
Tassilo Philipp
parents: 432
diff changeset
113 }
b4ddad459690 suite_aggr;
Tassilo Philipp
parents: 432
diff changeset
114