File Coverage

lib/PDL/Primitive-pp-random.c
Criterion Covered Total %
statement 33 124 26.6
branch 45 418 10.7
condition n/a
subroutine n/a
pod n/a
total 78 542 14.3


line stmt bran cond sub pod time code
1              
2             #line 453 "lib/PDL/PP.pm"
3             /*
4             * THIS FILE WAS GENERATED BY PDL::PP from lib/PDL/Primitive.pd! Do not modify!
5             */
6              
7             #define PDL_FREE_CODE(trans, destroy, comp_free_code, ntpriv_free_code) \
8             if (destroy) { \
9             comp_free_code \
10             } \
11             if ((trans)->dims_redone) { \
12             ntpriv_free_code \
13             }
14              
15             #include "EXTERN.h"
16             #include "perl.h"
17             #include "XSUB.h"
18             #include "pdl.h"
19             #include "pdlcore.h"
20             #define PDL PDL_Primitive
21             extern Core* PDL; /* Structure hold core C functions */
22             #line 23 "lib/PDL/Primitive-pp-random.c"
23             extern int pdl_srand_threads;
24             extern uint64_t *pdl_rand_state;
25             void pdl_srand(uint64_t **s, uint64_t seed, int n);
26             double pdl_drand(uint64_t *s);
27             #define PDL_MAYBE_SRAND \
28             if (pdl_srand_threads < 0) \
29             pdl_srand(&pdl_rand_state, PDL->pdl_seed(), PDL->online_cpus());
30             #define PDL_RAND_SET_OFFSET(v, thr, pdl) \
31             if (v < 0) { \
32             if (thr.mag_nthr >= 0) { \
33             int thr_no = PDL->magic_get_thread(pdl); \
34             if (thr_no < 0) return PDL->make_error_simple(PDL_EFATAL, "Invalid pdl_magic_get_thread!"); \
35             v = thr_no == 0 ? thr_no : thr_no % PDL->online_cpus(); \
36             } else { \
37             v = 0; \
38             } \
39             }
40              
41             #line 1857 "lib/PDL/PP.pm"
42             pdl_error pdl_random_readdata(pdl_trans *__privtrans) {
43             pdl_error PDL_err = {0, NULL, 0};
44             #line 45 "lib/PDL/Primitive-pp-random.c"
45 24 50         if (!__privtrans->broadcast.incs) return PDL->make_error(PDL_EUSERERROR, "Error in random:" "broadcast.incs NULL");
46             /* broadcastloop declarations */
47             int __brcloopval;
48             register PDL_Indx __tind0,__tind1; /* counters along dim */
49 24           register PDL_Indx __tnpdls = __privtrans->broadcast.npdls;
50             /* dims here are how many steps along those dims */
51 24           register PDL_Indx __tinc0_a = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,0);
52 24           register PDL_Indx __tinc1_a = PDL_BRC_INC(__privtrans->broadcast.incs,__tnpdls,0,1);
53             #define PDL_BROADCASTLOOP_START_random_readdata PDL_BROADCASTLOOP_START( \
54             readdata, \
55             __privtrans->broadcast, \
56             __privtrans->vtable, \
57             a_datap += __offsp[0]; \
58             , \
59             ( ,a_datap += __tinc1_a - __tinc0_a * __tdims0 \
60             ), \
61             ( ,a_datap += __tinc0_a \
62             ) \
63             )
64             #define PDL_BROADCASTLOOP_END_random_readdata PDL_BROADCASTLOOP_END( \
65             __privtrans->broadcast, \
66             a_datap -= __tinc1_a * __tdims1 + __offsp[0]; \
67             )
68             #ifndef PDL_DECLARE_PARAMS_random_1
69             #define PDL_DECLARE_PARAMS_random_1(PDL_TYPE_OP,PDL_PPSYM_OP) \
70             PDL_DECLARE_PARAMETER(PDL_TYPE_OP, a, (__privtrans->pdls[0]), 1, PDL_PPSYM_OP)
71             #endif
72             #define PDL_IF_BAD(t,f) f
73 24           switch (__privtrans->__datatype) { /* Start generic switch */
74 0           case PDL_SB: {
75 0 0         PDL_DECLARE_PARAMS_random_1(PDL_SByte,A)
    0          
    0          
76 0 0         {PDL_MAYBE_SRAND
77 0           int rand_offset = -1;
78 0 0         PDL_BROADCASTLOOP_START_random_readdata
    0          
    0          
    0          
    0          
    0          
    0          
79 0 0         PDL_RAND_SET_OFFSET(rand_offset, __privtrans->broadcast, __privtrans->pdls[0]);
    0          
    0          
    0          
80 0           (a_datap)[0] = pdl_drand(pdl_rand_state + 4*rand_offset);
81 0 0         PDL_BROADCASTLOOP_END_random_readdata
    0          
82             }
83 0           } break;
84 0           case PDL_B: {
85 0 0         PDL_DECLARE_PARAMS_random_1(PDL_Byte,B)
    0          
    0          
86 0 0         {PDL_MAYBE_SRAND
87 0           int rand_offset = -1;
88 0 0         PDL_BROADCASTLOOP_START_random_readdata
    0          
    0          
    0          
    0          
    0          
    0          
89 0 0         PDL_RAND_SET_OFFSET(rand_offset, __privtrans->broadcast, __privtrans->pdls[0]);
    0          
    0          
    0          
90 0           (a_datap)[0] = pdl_drand(pdl_rand_state + 4*rand_offset);
91 0 0         PDL_BROADCASTLOOP_END_random_readdata
    0          
92             }
93 0           } break;
94 0           case PDL_S: {
95 0 0         PDL_DECLARE_PARAMS_random_1(PDL_Short,S)
    0          
    0          
96 0 0         {PDL_MAYBE_SRAND
97 0           int rand_offset = -1;
98 0 0         PDL_BROADCASTLOOP_START_random_readdata
    0          
    0          
    0          
    0          
    0          
    0          
99 0 0         PDL_RAND_SET_OFFSET(rand_offset, __privtrans->broadcast, __privtrans->pdls[0]);
    0          
    0          
    0          
100 0           (a_datap)[0] = pdl_drand(pdl_rand_state + 4*rand_offset);
101 0 0         PDL_BROADCASTLOOP_END_random_readdata
    0          
102             }
103 0           } break;
104 0           case PDL_US: {
105 0 0         PDL_DECLARE_PARAMS_random_1(PDL_Ushort,U)
    0          
    0          
106 0 0         {PDL_MAYBE_SRAND
107 0           int rand_offset = -1;
108 0 0         PDL_BROADCASTLOOP_START_random_readdata
    0          
    0          
    0          
    0          
    0          
    0          
109 0 0         PDL_RAND_SET_OFFSET(rand_offset, __privtrans->broadcast, __privtrans->pdls[0]);
    0          
    0          
    0          
110 0           (a_datap)[0] = pdl_drand(pdl_rand_state + 4*rand_offset);
111 0 0         PDL_BROADCASTLOOP_END_random_readdata
    0          
112             }
113 0           } break;
114 0           case PDL_L: {
115 0 0         PDL_DECLARE_PARAMS_random_1(PDL_Long,L)
    0          
    0          
116 0 0         {PDL_MAYBE_SRAND
117 0           int rand_offset = -1;
118 0 0         PDL_BROADCASTLOOP_START_random_readdata
    0          
    0          
    0          
    0          
    0          
    0          
119 0 0         PDL_RAND_SET_OFFSET(rand_offset, __privtrans->broadcast, __privtrans->pdls[0]);
    0          
    0          
    0          
120 0           (a_datap)[0] = pdl_drand(pdl_rand_state + 4*rand_offset);
121 0 0         PDL_BROADCASTLOOP_END_random_readdata
    0          
122             }
123 0           } break;
124 0           case PDL_UL: {
125 0 0         PDL_DECLARE_PARAMS_random_1(PDL_ULong,K)
    0          
    0          
126 0 0         {PDL_MAYBE_SRAND
127 0           int rand_offset = -1;
128 0 0         PDL_BROADCASTLOOP_START_random_readdata
    0          
    0          
    0          
    0          
    0          
    0          
129 0 0         PDL_RAND_SET_OFFSET(rand_offset, __privtrans->broadcast, __privtrans->pdls[0]);
    0          
    0          
    0          
130 0           (a_datap)[0] = pdl_drand(pdl_rand_state + 4*rand_offset);
131 0 0         PDL_BROADCASTLOOP_END_random_readdata
    0          
132             }
133 0           } break;
134 12           case PDL_IND: {
135 12 50         PDL_DECLARE_PARAMS_random_1(PDL_Indx,N)
    50          
    50          
136 12 100         {PDL_MAYBE_SRAND
137 12           int rand_offset = -1;
138 8712 50         PDL_BROADCASTLOOP_START_random_readdata
    50          
    50          
    50          
    50          
    100          
    100          
139 8676 100         PDL_RAND_SET_OFFSET(rand_offset, __privtrans->broadcast, __privtrans->pdls[0]);
    50          
    0          
    0          
140 8676           (a_datap)[0] = pdl_drand(pdl_rand_state + 4*rand_offset);
141 12 50         PDL_BROADCASTLOOP_END_random_readdata
    50          
142             }
143 12           } break;
144 0           case PDL_ULL: {
145 0 0         PDL_DECLARE_PARAMS_random_1(PDL_ULongLong,P)
    0          
    0          
146 0 0         {PDL_MAYBE_SRAND
147 0           int rand_offset = -1;
148 0 0         PDL_BROADCASTLOOP_START_random_readdata
    0          
    0          
    0          
    0          
    0          
    0          
149 0 0         PDL_RAND_SET_OFFSET(rand_offset, __privtrans->broadcast, __privtrans->pdls[0]);
    0          
    0          
    0          
150 0           (a_datap)[0] = pdl_drand(pdl_rand_state + 4*rand_offset);
151 0 0         PDL_BROADCASTLOOP_END_random_readdata
    0          
152             }
153 0           } break;
154 0           case PDL_LL: {
155 0 0         PDL_DECLARE_PARAMS_random_1(PDL_LongLong,Q)
    0          
    0          
156 0 0         {PDL_MAYBE_SRAND
157 0           int rand_offset = -1;
158 0 0         PDL_BROADCASTLOOP_START_random_readdata
    0          
    0          
    0          
    0          
    0          
    0          
159 0 0         PDL_RAND_SET_OFFSET(rand_offset, __privtrans->broadcast, __privtrans->pdls[0]);
    0          
    0          
    0          
160 0           (a_datap)[0] = pdl_drand(pdl_rand_state + 4*rand_offset);
161 0 0         PDL_BROADCASTLOOP_END_random_readdata
    0          
162             }
163 0           } break;
164 0           case PDL_F: {
165 0 0         PDL_DECLARE_PARAMS_random_1(PDL_Float,F)
    0          
    0          
166 0 0         {PDL_MAYBE_SRAND
167 0           int rand_offset = -1;
168 0 0         PDL_BROADCASTLOOP_START_random_readdata
    0          
    0          
    0          
    0          
    0          
    0          
169 0 0         PDL_RAND_SET_OFFSET(rand_offset, __privtrans->broadcast, __privtrans->pdls[0]);
    0          
    0          
    0          
170 0           (a_datap)[0] = pdl_drand(pdl_rand_state + 4*rand_offset);
171 0 0         PDL_BROADCASTLOOP_END_random_readdata
    0          
172             }
173 0           } break;
174 12           case PDL_D: {
175 12 50         PDL_DECLARE_PARAMS_random_1(PDL_Double,D)
    100          
    50          
176 12 100         {PDL_MAYBE_SRAND
177 12           int rand_offset = -1;
178 1400 50         PDL_BROADCASTLOOP_START_random_readdata
    50          
    100          
    50          
    50          
    100          
    100          
179 1351 100         PDL_RAND_SET_OFFSET(rand_offset, __privtrans->broadcast, __privtrans->pdls[0]);
    50          
    0          
    0          
180 1351           (a_datap)[0] = pdl_drand(pdl_rand_state + 4*rand_offset);
181 11 50         PDL_BROADCASTLOOP_END_random_readdata
    50          
182             }
183 11           } break;
184 0           case PDL_LD: {
185 0 0         PDL_DECLARE_PARAMS_random_1(PDL_LDouble,E)
    0          
    0          
186 0 0         {PDL_MAYBE_SRAND
187 0           int rand_offset = -1;
188 0 0         PDL_BROADCASTLOOP_START_random_readdata
    0          
    0          
    0          
    0          
    0          
    0          
189 0 0         PDL_RAND_SET_OFFSET(rand_offset, __privtrans->broadcast, __privtrans->pdls[0]);
    0          
    0          
    0          
190 0           (a_datap)[0] = pdl_drand(pdl_rand_state + 4*rand_offset);
191 0 0         PDL_BROADCASTLOOP_END_random_readdata
    0          
192             }
193 0           } break;
194 0           default: return PDL->make_error(PDL_EUSERERROR, "PP INTERNAL ERROR in random: unhandled datatype(%d), only handles (ABSULKNPQFDE)! PLEASE MAKE A BUG REPORT\n", __privtrans->__datatype);
195             }
196             #undef PDL_IF_BAD
197 23           return PDL_err;
198             }
199              
200             static pdl_datatypes pdl_random_vtable_gentypes[] = { PDL_SB, PDL_B, PDL_S, PDL_US, PDL_L, PDL_UL, PDL_IND, PDL_ULL, PDL_LL, PDL_F, PDL_D, PDL_LD, -1 };
201             static PDL_Indx pdl_random_vtable_realdims[] = { 0 };
202             static char *pdl_random_vtable_parnames[] = { "a" };
203             static short pdl_random_vtable_parflags[] = {
204             PDL_PARAM_ISCREAT|PDL_PARAM_ISOUT|PDL_PARAM_ISWRITE
205             };
206             static pdl_datatypes pdl_random_vtable_partypes[] = { -1 };
207             static PDL_Indx pdl_random_vtable_realdims_starts[] = { 0 };
208             static PDL_Indx pdl_random_vtable_realdims_ind_ids[] = { 0 };
209             static char *pdl_random_vtable_indnames[] = { "" };
210             pdl_transvtable pdl_random_vtable = {
211             PDL_TRANS_DO_BROADCAST, 0, pdl_random_vtable_gentypes, 0, 1, NULL /*CORE21*/,
212             pdl_random_vtable_realdims, pdl_random_vtable_parnames,
213             pdl_random_vtable_parflags, pdl_random_vtable_partypes,
214             pdl_random_vtable_realdims_starts, pdl_random_vtable_realdims_ind_ids, 0,
215             0, pdl_random_vtable_indnames,
216             NULL, pdl_random_readdata, NULL,
217             NULL,
218             0,"PDL::Primitive::random"
219             };
220              
221              
222 24           pdl_error pdl_run_random(pdl *a) {
223 24           pdl_error PDL_err = {0, NULL, 0};
224 24 50         if (!PDL) return (pdl_error){PDL_EFATAL, "PDL core struct is NULL, can't continue",0};
225 24           pdl_trans *__privtrans = PDL->create_trans(&pdl_random_vtable);
226 24 50         if (!__privtrans) return PDL->make_error_simple(PDL_EFATAL, "Couldn't create trans");
227 24           __privtrans->pdls[0] = a;
228 24 50         PDL_RETERROR(PDL_err, PDL->type_coerce(__privtrans));
229 24 50         PDL_RETERROR(PDL_err, PDL->make_trans_mutual(__privtrans));
230 24           return PDL_err;
231             }