File: testCompressParms_8c-source.html

package info (click to toggle)
polylib 5.22.5-4%2Bdfsg
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye, buster, trixie
  • size: 14,428 kB
  • sloc: ansic: 16,342; sh: 10,134; makefile: 506
file content (422 lines) | stat: -rw-r--r-- 54,240 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>polylib: testCompressParms.c Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.6 -->
<div class="navigation" id="top">
  <div class="tabs">
    <ul>
      <li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
      <li><a href="annotated.html"><span>Classes</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
<h1>testCompressParms.c</h1><a href="testCompressParms_8c.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/** </span>
<a name="l00002"></a>00002 <span class="comment"> * $Id: testCompressParms.c,v 1.4 2006/09/18 03:09:03 meister Exp $</span>
<a name="l00003"></a>00003 <span class="comment"> * </span>
<a name="l00004"></a>00004 <span class="comment"> * Test routines for kernel/compress_parms.c functions</span>
<a name="l00005"></a>00005 <span class="comment"> * @author B. Meister, 3/2006</span>
<a name="l00006"></a>00006 <span class="comment"> * </span>
<a name="l00007"></a>00007 <span class="comment"> */</span>
<a name="l00008"></a>00008 
<a name="l00009"></a>00009 <span class="preprocessor">#include &lt;<a class="code" href="polylib_8h.html">polylib/polylib.h</a>&gt;</span>
<a name="l00010"></a>00010 <span class="preprocessor">#include &lt;stdio.h&gt;</span>
<a name="l00011"></a>00011 <span class="preprocessor">#include &lt;stdlib.h&gt;</span>
<a name="l00012"></a>00012 <span class="preprocessor">#include &lt;string.h&gt;</span>
<a name="l00013"></a>00013 
<a name="l00014"></a>00014 <span class="preprocessor">#ifdef dbg</span>
<a name="l00015"></a>00015 <span class="preprocessor"></span><span class="preprocessor">#undef dbg</span>
<a name="l00016"></a>00016 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00017"></a><a class="code" href="testCompressParms_8c.html#5bac03f035357aca807646cff28cdc4e">00017</a> <span class="preprocessor"></span><span class="preprocessor">#define dbg 1</span>
<a name="l00018"></a>00018 <span class="preprocessor"></span>
<a name="l00019"></a><a class="code" href="testCompressParms_8c.html#8c3f19654117e3b2c6ff5304d86f660d">00019</a> <span class="preprocessor">#define TEST(a) if (isOk = a) { \</span>
<a name="l00020"></a>00020 <span class="preprocessor">                  printf(#a" tested ok.\n"); \</span>
<a name="l00021"></a>00021 <span class="preprocessor">                } \</span>
<a name="l00022"></a>00022 <span class="preprocessor">                else { \</span>
<a name="l00023"></a>00023 <span class="preprocessor">                  printf(#a" NOT OK\n"); \</span>
<a name="l00024"></a>00024 <span class="preprocessor">                } </span>
<a name="l00025"></a>00025 <span class="preprocessor"></span>
<a name="l00026"></a><a class="code" href="testCompressParms_8c.html#508eb31b6faa4939e1c32adaef41b8c8">00026</a> <span class="preprocessor">#define maxRays 200</span>
<a name="l00027"></a>00027 <span class="preprocessor"></span>
<a name="l00028"></a><a class="code" href="testCompressParms_8c.html#9c1dc820fe3bdbb2b3657bd03338fc91">00028</a> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="testCompressParms_8c.html#9c1dc820fe3bdbb2b3657bd03338fc91">origNames</a>[] =
<a name="l00029"></a>00029         {<span class="stringliteral">"n"</span>, <span class="stringliteral">"o"</span>, <span class="stringliteral">"p"</span>, <span class="stringliteral">"q"</span>, <span class="stringliteral">"r"</span>, <span class="stringliteral">"s"</span>, <span class="stringliteral">"t"</span>, <span class="stringliteral">"u"</span>, <span class="stringliteral">"v"</span>, <span class="stringliteral">"w"</span>, <span class="stringliteral">"x"</span>, <span class="stringliteral">"y"</span>, <span class="stringliteral">"z"</span>};
<a name="l00030"></a>00030 
<a name="l00031"></a><a class="code" href="testCompressParms_8c.html#3c04138a5bfe5d72780bb7e82a18e627">00031</a> <span class="keywordtype">int</span> <a class="code" href="c2p_8c.html#e66f6b31b5ad750f1fe042a706a4e3d4">main</a>(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> ** argv) {
<a name="l00032"></a>00032   <span class="keywordtype">int</span> isOk = 0;
<a name="l00033"></a>00033   <a class="code" href="structmatrix.html">Matrix</a> * A, * B;
<a name="l00034"></a>00034   <span class="keywordflow">if</span> (argc&gt;1) {
<a name="l00035"></a>00035     printf(<span class="stringliteral">"Warning: No arguments taken into account: testing"</span>
<a name="l00036"></a>00036            <span class="stringliteral">"remove_parm_eqs().\n"</span>);
<a name="l00037"></a>00037   }
<a name="l00038"></a>00038 
<a name="l00039"></a>00039   A = <a class="code" href="matrix_8c.html#3a087ae9a03d5baf0b81831177931143">Matrix_Read</a>();
<a name="l00040"></a>00040   B = <a class="code" href="matrix_8c.html#3a087ae9a03d5baf0b81831177931143">Matrix_Read</a>();
<a name="l00041"></a>00041   <a class="code" href="testCompressParms_8c.html#8c3f19654117e3b2c6ff5304d86f660d">TEST</a>( <a class="code" href="testCompressParms_8c.html#22b21b8ecf472b992a0ab44a58c9a231" title="extracts the equalities involving the parameters only, try to introduce them back...">test_Constraints_Remove_parm_eqs</a>(A, B) )
<a name="l00042"></a>00042   <a class="code" href="testCompressParms_8c.html#8c3f19654117e3b2c6ff5304d86f660d">TEST</a>( <a class="code" href="testCompressParms_8c.html#9f6efefce285d8dcb806a7baabba1d5d" title="extracts the equalities holding on the parameters only, try to introduce them back...">test_Polyhedron_Remove_parm_eqs</a>(A, B) )
<a name="l00043"></a>00043   <a class="code" href="testCompressParms_8c.html#8c3f19654117e3b2c6ff5304d86f660d">TEST</a>( <a class="code" href="testCompressParms_8c.html#0ff3dbf2dc32c224644d0fb139dbcbb8" title="Tests Constraints_fullDimensionize by comparing the Ehrhart polynomials.">test_Constraints_fullDimensionize</a>(A, B, 4) )
<a name="l00044"></a>00044   <a class="code" href="matrix_8c.html#fcb312b7c12a6997cd66964ecc34e1a6">Matrix_Free</a>(A);
<a name="l00045"></a>00045   <a class="code" href="matrix_8c.html#fcb312b7c12a6997cd66964ecc34e1a6">Matrix_Free</a>(B);
<a name="l00046"></a>00046   <span class="keywordflow">return</span> (1-isOk);
<a name="l00047"></a>00047 }
<a name="l00048"></a>00048 
<a name="l00049"></a>00049 <span class="comment"></span>
<a name="l00050"></a>00050 <span class="comment">/** extracts the equalities involving the parameters only, try to introduce</span>
<a name="l00051"></a>00051 <span class="comment">    them back and compare the two polyhedra.</span>
<a name="l00052"></a>00052 <span class="comment">    Reads a polyhedron and a context.</span>
<a name="l00053"></a>00053 <span class="comment"> */</span>
<a name="l00054"></a><a class="code" href="testCompressParms_8c.html#22b21b8ecf472b992a0ab44a58c9a231">00054</a> <span class="keywordtype">int</span> <a class="code" href="testCompressParms_8c.html#22b21b8ecf472b992a0ab44a58c9a231" title="extracts the equalities involving the parameters only, try to introduce them back...">test_Constraints_Remove_parm_eqs</a>(<a class="code" href="structmatrix.html">Matrix</a> * A, <a class="code" href="structmatrix.html">Matrix</a> * B) {
<a name="l00055"></a>00055   <span class="keywordtype">int</span> isOk = 1;
<a name="l00056"></a>00056   <a class="code" href="structmatrix.html">Matrix</a> * M, *C, *Cp, * Eqs, *M1, *C1;
<a name="l00057"></a>00057   <a class="code" href="structpolyhedron.html">Polyhedron</a> *Pm, *Pc, *Pcp, *Peqs, *Pint;
<a name="l00058"></a>00058   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> * elimParms;
<a name="l00059"></a>00059   printf(<span class="stringliteral">"----- test_Constraints_Remove_parm_eqs() -----\n"</span>);
<a name="l00060"></a>00060   M1 = <a class="code" href="Matop_8c.html#9d027e9fc6b85e6fa37fc284bf1b5e06">Matrix_Copy</a>(A);
<a name="l00061"></a>00061   C1 = <a class="code" href="Matop_8c.html#9d027e9fc6b85e6fa37fc284bf1b5e06">Matrix_Copy</a>(B);
<a name="l00062"></a>00062 
<a name="l00063"></a>00063   M = <a class="code" href="Matop_8c.html#9d027e9fc6b85e6fa37fc284bf1b5e06">Matrix_Copy</a>(M1);
<a name="l00064"></a>00064   C = <a class="code" href="Matop_8c.html#9d027e9fc6b85e6fa37fc284bf1b5e06">Matrix_Copy</a>(C1);
<a name="l00065"></a>00065 
<a name="l00066"></a>00066    <span class="comment">/* compute the combined polyhedron */</span>
<a name="l00067"></a>00067   Pm = <a class="code" href="polyhedron_8c.html#efb77665a187d751bdd44f106b12465e" title="Given a matrix of constraints (&amp;#39;Constraints&amp;#39;), construct and return a polyhedron...">Constraints2Polyhedron</a>(M, <a class="code" href="testCompressParms_8c.html#508eb31b6faa4939e1c32adaef41b8c8">maxRays</a>);
<a name="l00068"></a>00068   Pc = <a class="code" href="polyhedron_8c.html#efb77665a187d751bdd44f106b12465e" title="Given a matrix of constraints (&amp;#39;Constraints&amp;#39;), construct and return a polyhedron...">Constraints2Polyhedron</a>(C, <a class="code" href="testCompressParms_8c.html#508eb31b6faa4939e1c32adaef41b8c8">maxRays</a>);
<a name="l00069"></a>00069   Pcp = <a class="code" href="polyhedron_8c.html#ffd77db2a2f748d557ab6be0fcede209">align_context</a>(Pc, Pm-&gt;<a class="code" href="structpolyhedron.html#2a02cea8b7ba3dde415041b8b2373bc8">Dimension</a>, <a class="code" href="testCompressParms_8c.html#508eb31b6faa4939e1c32adaef41b8c8">maxRays</a>);
<a name="l00070"></a>00070   <a class="code" href="polyhedron_8c.html#4ae97b9794e3a616f1d38c68e6515cc3">Polyhedron_Free</a>(Pc);
<a name="l00071"></a>00071   Pc = <a class="code" href="polyhedron_8c.html#c5a1a2751f0b833183560af25b18033b">DomainIntersection</a>(Pm, Pcp, <a class="code" href="testCompressParms_8c.html#508eb31b6faa4939e1c32adaef41b8c8">maxRays</a>);
<a name="l00072"></a>00072   <a class="code" href="polyhedron_8c.html#4ae97b9794e3a616f1d38c68e6515cc3">Polyhedron_Free</a>(Pm);
<a name="l00073"></a>00073   <a class="code" href="polyhedron_8c.html#4ae97b9794e3a616f1d38c68e6515cc3">Polyhedron_Free</a>(Pcp);
<a name="l00074"></a>00074   <a class="code" href="matrix_8c.html#fcb312b7c12a6997cd66964ecc34e1a6">Matrix_Free</a>(M);
<a name="l00075"></a>00075   <a class="code" href="matrix_8c.html#fcb312b7c12a6997cd66964ecc34e1a6">Matrix_Free</a>(C);
<a name="l00076"></a>00076 
<a name="l00077"></a>00077   <span class="comment">/* extract the parm-equalities, expressed in the combined space */</span>
<a name="l00078"></a>00078   Eqs = <a class="code" href="compress__parms_8c.html#ca0035f9313236fd8046ab042180f544" title="Removes the equalities that involve only parameters, by eliminating some parameters...">Constraints_Remove_parm_eqs</a>(&amp;M1, &amp;C1, 1, &amp;elimParms);
<a name="l00079"></a>00079 
<a name="l00080"></a>00080   printf(<span class="stringliteral">"Removed equalities: \n"</span>);
<a name="l00081"></a>00081   <a class="code" href="matrix__addon_8h.html#11468159c7fa7d75fadfa10e2e929fee" title="Polylib matrix addons Mainly, deals with polyhedra represented in implicit form (set...">show_matrix</a>(Eqs); 
<a name="l00082"></a>00082   printf(<span class="stringliteral">"Polyhedron without equalities involving only parameters: \n"</span>);
<a name="l00083"></a>00083   <a class="code" href="matrix__addon_8h.html#11468159c7fa7d75fadfa10e2e929fee" title="Polylib matrix addons Mainly, deals with polyhedra represented in implicit form (set...">show_matrix</a>(M1);  
<a name="l00084"></a>00084   printf(<span class="stringliteral">"Context without equalities: \n"</span>);
<a name="l00085"></a>00085   <a class="code" href="matrix__addon_8h.html#11468159c7fa7d75fadfa10e2e929fee" title="Polylib matrix addons Mainly, deals with polyhedra represented in implicit form (set...">show_matrix</a>(C1);  
<a name="l00086"></a>00086   
<a name="l00087"></a>00087   <span class="comment">/* compute the supposedly-same polyhedron, using the extracted equalities */</span>
<a name="l00088"></a>00088   Pm = <a class="code" href="polyhedron_8c.html#efb77665a187d751bdd44f106b12465e" title="Given a matrix of constraints (&amp;#39;Constraints&amp;#39;), construct and return a polyhedron...">Constraints2Polyhedron</a>(M1, <a class="code" href="testCompressParms_8c.html#508eb31b6faa4939e1c32adaef41b8c8">maxRays</a>);
<a name="l00089"></a>00089   Pcp = <a class="code" href="polyhedron_8c.html#efb77665a187d751bdd44f106b12465e" title="Given a matrix of constraints (&amp;#39;Constraints&amp;#39;), construct and return a polyhedron...">Constraints2Polyhedron</a>(C1, <a class="code" href="testCompressParms_8c.html#508eb31b6faa4939e1c32adaef41b8c8">maxRays</a>);
<a name="l00090"></a>00090   Peqs = <a class="code" href="polyhedron_8c.html#ffd77db2a2f748d557ab6be0fcede209">align_context</a>(Pcp, Pm-&gt;<a class="code" href="structpolyhedron.html#2a02cea8b7ba3dde415041b8b2373bc8">Dimension</a>, <a class="code" href="testCompressParms_8c.html#508eb31b6faa4939e1c32adaef41b8c8">maxRays</a>);
<a name="l00091"></a>00091   <a class="code" href="polyhedron_8c.html#4ae97b9794e3a616f1d38c68e6515cc3">Polyhedron_Free</a>(Pcp);
<a name="l00092"></a>00092   Pcp = <a class="code" href="polyhedron_8c.html#c5a1a2751f0b833183560af25b18033b">DomainIntersection</a>(Pm, Peqs, <a class="code" href="testCompressParms_8c.html#508eb31b6faa4939e1c32adaef41b8c8">maxRays</a>);
<a name="l00093"></a>00093   <a class="code" href="polyhedron_8c.html#4ae97b9794e3a616f1d38c68e6515cc3">Polyhedron_Free</a>(Peqs);
<a name="l00094"></a>00094   <a class="code" href="polyhedron_8c.html#4ae97b9794e3a616f1d38c68e6515cc3">Polyhedron_Free</a>(Pm);
<a name="l00095"></a>00095   Peqs = <a class="code" href="polyhedron_8c.html#efb77665a187d751bdd44f106b12465e" title="Given a matrix of constraints (&amp;#39;Constraints&amp;#39;), construct and return a polyhedron...">Constraints2Polyhedron</a>(Eqs, <a class="code" href="testCompressParms_8c.html#508eb31b6faa4939e1c32adaef41b8c8">maxRays</a>);
<a name="l00096"></a>00096   <a class="code" href="matrix_8c.html#fcb312b7c12a6997cd66964ecc34e1a6">Matrix_Free</a>(Eqs);
<a name="l00097"></a>00097   <a class="code" href="matrix_8c.html#fcb312b7c12a6997cd66964ecc34e1a6">Matrix_Free</a>(M1);
<a name="l00098"></a>00098   <a class="code" href="matrix_8c.html#fcb312b7c12a6997cd66964ecc34e1a6">Matrix_Free</a>(C1);
<a name="l00099"></a>00099   Pint = <a class="code" href="polyhedron_8c.html#c5a1a2751f0b833183560af25b18033b">DomainIntersection</a>(Pcp, Peqs, <a class="code" href="testCompressParms_8c.html#508eb31b6faa4939e1c32adaef41b8c8">maxRays</a>);
<a name="l00100"></a>00100   <a class="code" href="polyhedron_8c.html#4ae97b9794e3a616f1d38c68e6515cc3">Polyhedron_Free</a>(Pcp);
<a name="l00101"></a>00101   <a class="code" href="polyhedron_8c.html#4ae97b9794e3a616f1d38c68e6515cc3">Polyhedron_Free</a>(Peqs);
<a name="l00102"></a>00102 
<a name="l00103"></a>00103   <span class="comment">/* test their equality */</span>
<a name="l00104"></a>00104   <span class="keywordflow">if</span> (!<a class="code" href="polyhedron_8c.html#107a96d44465428ffcd25f1ab3d67b43">PolyhedronIncludes</a>(Pint, Pc)) {
<a name="l00105"></a>00105     isOk = 0;
<a name="l00106"></a>00106   }
<a name="l00107"></a>00107   <span class="keywordflow">else</span> {
<a name="l00108"></a>00108     <span class="keywordflow">if</span> (!<a class="code" href="polyhedron_8c.html#107a96d44465428ffcd25f1ab3d67b43">PolyhedronIncludes</a>(Pc, Pint)) {
<a name="l00109"></a>00109       isOk = 0;
<a name="l00110"></a>00110     }
<a name="l00111"></a>00111   }
<a name="l00112"></a>00112   <a class="code" href="polyhedron_8c.html#4ae97b9794e3a616f1d38c68e6515cc3">Polyhedron_Free</a>(Pc);
<a name="l00113"></a>00113   <a class="code" href="polyhedron_8c.html#4ae97b9794e3a616f1d38c68e6515cc3">Polyhedron_Free</a>(Pint);
<a name="l00114"></a>00114   <span class="keywordflow">return</span> isOk;
<a name="l00115"></a>00115 } <span class="comment">/* test_Constraints_Remove_parm_eqs() */</span>
<a name="l00116"></a>00116 
<a name="l00117"></a>00117 <span class="comment"></span>
<a name="l00118"></a>00118 <span class="comment">/** extracts the equalities holding on the parameters only, try to introduce</span>
<a name="l00119"></a>00119 <span class="comment">    them back and compare the two polyhedra.</span>
<a name="l00120"></a>00120 <span class="comment">    Reads a polyhedron and a context.</span>
<a name="l00121"></a>00121 <span class="comment"> */</span>
<a name="l00122"></a><a class="code" href="testCompressParms_8c.html#9f6efefce285d8dcb806a7baabba1d5d">00122</a> <span class="keywordtype">int</span> <a class="code" href="testCompressParms_8c.html#9f6efefce285d8dcb806a7baabba1d5d" title="extracts the equalities holding on the parameters only, try to introduce them back...">test_Polyhedron_Remove_parm_eqs</a>(<a class="code" href="structmatrix.html">Matrix</a> * A, <a class="code" href="structmatrix.html">Matrix</a> * B) {
<a name="l00123"></a>00123   <span class="keywordtype">int</span> isOk = 1;
<a name="l00124"></a>00124   <a class="code" href="structmatrix.html">Matrix</a> * M, *C;
<a name="l00125"></a>00125   <a class="code" href="structpolyhedron.html">Polyhedron</a> *Pm, *Pc, *Pcp, *Peqs, *Pint, *Pint1;
<a name="l00126"></a>00126   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> * elimParms;
<a name="l00127"></a>00127   printf(<span class="stringliteral">"----- test_Polyhedron_Remove_parm_eqs() -----\n"</span>);
<a name="l00128"></a>00128 
<a name="l00129"></a>00129   M = <a class="code" href="Matop_8c.html#9d027e9fc6b85e6fa37fc284bf1b5e06">Matrix_Copy</a>(A);
<a name="l00130"></a>00130   C = <a class="code" href="Matop_8c.html#9d027e9fc6b85e6fa37fc284bf1b5e06">Matrix_Copy</a>(B);
<a name="l00131"></a>00131 
<a name="l00132"></a>00132    <span class="comment">/* compute the combined polyhedron */</span>
<a name="l00133"></a>00133   Pm = <a class="code" href="polyhedron_8c.html#efb77665a187d751bdd44f106b12465e" title="Given a matrix of constraints (&amp;#39;Constraints&amp;#39;), construct and return a polyhedron...">Constraints2Polyhedron</a>(M, <a class="code" href="testCompressParms_8c.html#508eb31b6faa4939e1c32adaef41b8c8">maxRays</a>);
<a name="l00134"></a>00134   Pc = <a class="code" href="polyhedron_8c.html#efb77665a187d751bdd44f106b12465e" title="Given a matrix of constraints (&amp;#39;Constraints&amp;#39;), construct and return a polyhedron...">Constraints2Polyhedron</a>(C, <a class="code" href="testCompressParms_8c.html#508eb31b6faa4939e1c32adaef41b8c8">maxRays</a>);
<a name="l00135"></a>00135   Pcp = <a class="code" href="polyhedron_8c.html#ffd77db2a2f748d557ab6be0fcede209">align_context</a>(Pc, Pm-&gt;<a class="code" href="structpolyhedron.html#2a02cea8b7ba3dde415041b8b2373bc8">Dimension</a>, <a class="code" href="testCompressParms_8c.html#508eb31b6faa4939e1c32adaef41b8c8">maxRays</a>);
<a name="l00136"></a>00136   <a class="code" href="polyhedron_8c.html#4ae97b9794e3a616f1d38c68e6515cc3">Polyhedron_Free</a>(Pc);
<a name="l00137"></a>00137   Pint1 = <a class="code" href="polyhedron_8c.html#c5a1a2751f0b833183560af25b18033b">DomainIntersection</a>(Pm, Pcp, <a class="code" href="testCompressParms_8c.html#508eb31b6faa4939e1c32adaef41b8c8">maxRays</a>);
<a name="l00138"></a>00138   <a class="code" href="polyhedron_8c.html#4ae97b9794e3a616f1d38c68e6515cc3">Polyhedron_Free</a>(Pm);
<a name="l00139"></a>00139   <a class="code" href="polyhedron_8c.html#4ae97b9794e3a616f1d38c68e6515cc3">Polyhedron_Free</a>(Pcp);
<a name="l00140"></a>00140   <a class="code" href="matrix_8c.html#fcb312b7c12a6997cd66964ecc34e1a6">Matrix_Free</a>(M);
<a name="l00141"></a>00141   <a class="code" href="matrix_8c.html#fcb312b7c12a6997cd66964ecc34e1a6">Matrix_Free</a>(C);
<a name="l00142"></a>00142 
<a name="l00143"></a>00143   M = <a class="code" href="Matop_8c.html#9d027e9fc6b85e6fa37fc284bf1b5e06">Matrix_Copy</a>(A);
<a name="l00144"></a>00144   C = <a class="code" href="Matop_8c.html#9d027e9fc6b85e6fa37fc284bf1b5e06">Matrix_Copy</a>(B);
<a name="l00145"></a>00145   <span class="comment">/* extract the parm-equalities, expressed in the combined space */</span>
<a name="l00146"></a>00146   Pm = <a class="code" href="polyhedron_8c.html#efb77665a187d751bdd44f106b12465e" title="Given a matrix of constraints (&amp;#39;Constraints&amp;#39;), construct and return a polyhedron...">Constraints2Polyhedron</a>(M, <a class="code" href="testCompressParms_8c.html#508eb31b6faa4939e1c32adaef41b8c8">maxRays</a>);
<a name="l00147"></a>00147   Pc = <a class="code" href="polyhedron_8c.html#efb77665a187d751bdd44f106b12465e" title="Given a matrix of constraints (&amp;#39;Constraints&amp;#39;), construct and return a polyhedron...">Constraints2Polyhedron</a>(C, <a class="code" href="testCompressParms_8c.html#508eb31b6faa4939e1c32adaef41b8c8">maxRays</a>);
<a name="l00148"></a>00148   <a class="code" href="matrix_8c.html#fcb312b7c12a6997cd66964ecc34e1a6">Matrix_Free</a>(M);
<a name="l00149"></a>00149   <a class="code" href="matrix_8c.html#fcb312b7c12a6997cd66964ecc34e1a6">Matrix_Free</a>(C);
<a name="l00150"></a>00150   Peqs = <a class="code" href="compress__parms_8c.html#86df15994f14c73d49980bbf61f6f7e5" title="Removes equalities involving only parameters, but starting from a Polyhedron and...">Polyhedron_Remove_parm_eqs</a>(&amp;Pm, &amp;Pc, 1, &amp;elimParms, 200);
<a name="l00151"></a>00151   
<a name="l00152"></a>00152   <span class="comment">/* compute the supposedly-same polyhedron, using the extracted equalities */</span>
<a name="l00153"></a>00153   Pcp = <a class="code" href="polyhedron_8c.html#ffd77db2a2f748d557ab6be0fcede209">align_context</a>(Pc, Pm-&gt;<a class="code" href="structpolyhedron.html#2a02cea8b7ba3dde415041b8b2373bc8">Dimension</a>, <a class="code" href="testCompressParms_8c.html#508eb31b6faa4939e1c32adaef41b8c8">maxRays</a>);
<a name="l00154"></a>00154   <a class="code" href="polyhedron_8c.html#4ae97b9794e3a616f1d38c68e6515cc3">Polyhedron_Free</a>(Pc);
<a name="l00155"></a>00155   Pc = <a class="code" href="polyhedron_8c.html#c5a1a2751f0b833183560af25b18033b">DomainIntersection</a>(Pm, Pcp, <a class="code" href="testCompressParms_8c.html#508eb31b6faa4939e1c32adaef41b8c8">maxRays</a>);
<a name="l00156"></a>00156   <a class="code" href="polyhedron_8c.html#4ae97b9794e3a616f1d38c68e6515cc3">Polyhedron_Free</a>(Pm);
<a name="l00157"></a>00157   <a class="code" href="polyhedron_8c.html#4ae97b9794e3a616f1d38c68e6515cc3">Polyhedron_Free</a>(Pcp);
<a name="l00158"></a>00158  
<a name="l00159"></a>00159   Pint = <a class="code" href="polyhedron_8c.html#c5a1a2751f0b833183560af25b18033b">DomainIntersection</a>(Pc, Peqs, <a class="code" href="testCompressParms_8c.html#508eb31b6faa4939e1c32adaef41b8c8">maxRays</a>);
<a name="l00160"></a>00160   <a class="code" href="polyhedron_8c.html#4ae97b9794e3a616f1d38c68e6515cc3">Polyhedron_Free</a>(Pc);
<a name="l00161"></a>00161   <a class="code" href="polyhedron_8c.html#4ae97b9794e3a616f1d38c68e6515cc3">Polyhedron_Free</a>(Peqs);
<a name="l00162"></a>00162 
<a name="l00163"></a>00163   <span class="comment">/* test their equality */</span>
<a name="l00164"></a>00164   <span class="keywordflow">if</span> (!<a class="code" href="polyhedron_8c.html#107a96d44465428ffcd25f1ab3d67b43">PolyhedronIncludes</a>(Pint, Pint1)) {
<a name="l00165"></a>00165     isOk = 0;
<a name="l00166"></a>00166   }
<a name="l00167"></a>00167   <span class="keywordflow">else</span> {
<a name="l00168"></a>00168     <span class="keywordflow">if</span> (!<a class="code" href="polyhedron_8c.html#107a96d44465428ffcd25f1ab3d67b43">PolyhedronIncludes</a>(Pint1, Pint)) {
<a name="l00169"></a>00169       isOk = 0;
<a name="l00170"></a>00170     }
<a name="l00171"></a>00171   }
<a name="l00172"></a>00172   <a class="code" href="polyhedron_8c.html#4ae97b9794e3a616f1d38c68e6515cc3">Polyhedron_Free</a>(Pint1);
<a name="l00173"></a>00173   <a class="code" href="polyhedron_8c.html#4ae97b9794e3a616f1d38c68e6515cc3">Polyhedron_Free</a>(Pint);
<a name="l00174"></a>00174   <span class="keywordflow">return</span> isOk;
<a name="l00175"></a>00175 } <span class="comment">/* test_Polyhedron_remove_parm_eqs() */</span>
<a name="l00176"></a>00176 
<a name="l00177"></a>00177 <span class="comment"></span>
<a name="l00178"></a>00178 <span class="comment">/** </span>
<a name="l00179"></a>00179 <span class="comment"> * Eliminates certain parameters from a vector of values for parameters</span>
<a name="l00180"></a>00180 <span class="comment"> * @param origParms the initial vector of values of parameters</span>
<a name="l00181"></a>00181 <span class="comment"> * @param elimParms the list of parameters to be eliminated in the vector</span>
<a name="l00182"></a>00182 <span class="comment"> * @param newParms the vector of values without the eliminated ones.</span>
<a name="l00183"></a>00183 <span class="comment"> */</span>
<a name="l00184"></a><a class="code" href="testCompressParms_8c.html#fb08ff56d9ba869c706006d6b5c941ee">00184</a> <span class="keywordtype">void</span> <a class="code" href="testCompressParms_8c.html#fb08ff56d9ba869c706006d6b5c941ee" title="Eliminates certain parameters from a vector of values for parameters.">valuesWithoutElim</a>(<a class="code" href="structmatrix.html">Matrix</a> * origParms, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> * elimParms, 
<a name="l00185"></a>00185                        <a class="code" href="structmatrix.html">Matrix</a> ** newParms) {
<a name="l00186"></a>00186   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i, j=0;
<a name="l00187"></a>00187   <span class="keywordflow">if</span> (*newParms==NULL) {
<a name="l00188"></a>00188     *newParms = <a class="code" href="matrix_8c.html#c0b29e1d99a2823ad00b5f2157879d80">Matrix_Alloc</a>(1, origParms-&gt;<a class="code" href="structmatrix.html#68858fd3b57684ef38bdfce13c65d182">NbColumns</a>-elimParms[0]);
<a name="l00189"></a>00189   } <span class="comment">/* else assume enough space is allocated */</span>
<a name="l00190"></a>00190   <span class="keywordflow">if</span> (elimParms[0] ==0) {
<a name="l00191"></a>00191     <span class="keywordflow">for</span> (i=0; i&lt; origParms-&gt;<a class="code" href="structmatrix.html#68858fd3b57684ef38bdfce13c65d182">NbColumns</a>; i++) {
<a name="l00192"></a>00192       <a class="code" href="source_2arith_2arithmetique_8h.html#864613888dc46f15679aa4f63e468f89">value_assign</a>((*newParms)-&gt;p[0][i], origParms-&gt;<a class="code" href="structmatrix.html#2c6d840d8d911ae95c2ae4fc96f4b5ba">p</a>[0][i]);
<a name="l00193"></a>00193     }
<a name="l00194"></a>00194   }
<a name="l00195"></a>00195   <span class="keywordflow">for</span> (i=0; i&lt; origParms-&gt;<a class="code" href="structmatrix.html#68858fd3b57684ef38bdfce13c65d182">NbColumns</a>; i++) {
<a name="l00196"></a>00196     <span class="keywordflow">if</span> (i!=elimParms[j+1]) {
<a name="l00197"></a>00197       <a class="code" href="source_2arith_2arithmetique_8h.html#864613888dc46f15679aa4f63e468f89">value_assign</a>((*newParms)-&gt;p[0][i-j], origParms-&gt;<a class="code" href="structmatrix.html#2c6d840d8d911ae95c2ae4fc96f4b5ba">p</a>[0][i]);
<a name="l00198"></a>00198     }
<a name="l00199"></a>00199     <span class="keywordflow">else</span> {
<a name="l00200"></a>00200       j++;
<a name="l00201"></a>00201     }
<a name="l00202"></a>00202   }
<a name="l00203"></a>00203 }<span class="comment">/* valuesWithoutElim */</span>
<a name="l00204"></a>00204 
<a name="l00205"></a>00205 <span class="comment"></span>
<a name="l00206"></a>00206 <span class="comment">/**</span>
<a name="l00207"></a>00207 <span class="comment"> * takes a list of parameter names, a list ofparameters to eliminate, and</span>
<a name="l00208"></a>00208 <span class="comment"> * returns the list of parameters without the eliminated ones.</span>
<a name="l00209"></a>00209 <span class="comment"> * @param parms the original parameter names</span>
<a name="l00210"></a>00210 <span class="comment"> * @param nbParms the number of original parmaeters</span>
<a name="l00211"></a>00211 <span class="comment"> * @param elimParms the array-list of indices of parameters to eliminate (first</span>
<a name="l00212"></a>00212 <span class="comment"> * element set to the number of its elements)</span>
<a name="l00213"></a>00213 <span class="comment"> * @param newParms the returned list of parm names. Allocated if set to NULL,</span>
<a name="l00214"></a>00214 <span class="comment"> * reused if not.</span>
<a name="l00215"></a>00215 <span class="comment"> * @return the number of names in the returned list.</span>
<a name="l00216"></a>00216 <span class="comment"> */</span>
<a name="l00217"></a><a class="code" href="testCompressParms_8c.html#79ed5185c3a1604ee7b0c7e7e6071992">00217</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="testCompressParms_8c.html#79ed5185c3a1604ee7b0c7e7e6071992" title="takes a list of parameter names, a list ofparameters to eliminate, and returns the...">namesWithoutElim</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> **parms, <span class="keywordtype">unsigned</span> nbParms,
<a name="l00218"></a>00218                               <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> * elimParms,
<a name="l00219"></a>00219                               <span class="keyword">const</span> <span class="keywordtype">char</span> ***newParms)
<a name="l00220"></a>00220 {
<a name="l00221"></a>00221   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i, j=0;
<a name="l00222"></a>00222   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> newSize = nbParms -elimParms[0];
<a name="l00223"></a>00223   <span class="keywordflow">if</span> (<a class="code" href="testCompressParms_8c.html#5bac03f035357aca807646cff28cdc4e" title="IdtestCompressParms.c,v 1.4 2006/09/18 03:09:03 meister Exp ">dbg</a>) {
<a name="l00224"></a>00224     printf(<span class="stringliteral">"Size of the new parm vector: %d\n"</span>, newSize);
<a name="l00225"></a>00225   }
<a name="l00226"></a>00226   <span class="keywordflow">if</span> (*newParms==NULL) {
<a name="l00227"></a>00227     *newParms = malloc(newSize*<span class="keyword">sizeof</span>(<span class="keywordtype">char</span> *));
<a name="l00228"></a>00228   }
<a name="l00229"></a>00229   <span class="keywordflow">if</span> (elimParms[0]==0) {
<a name="l00230"></a>00230     <span class="keywordflow">for</span> (i=0; i&lt; nbParms; i++) {
<a name="l00231"></a>00231       (*newParms)[i] = strdup(parms[i]);
<a name="l00232"></a>00232     }
<a name="l00233"></a>00233     <span class="keywordflow">return</span> newSize;
<a name="l00234"></a>00234   }
<a name="l00235"></a>00235   <span class="keywordflow">for</span> (i=0; i&lt; nbParms; i++) {
<a name="l00236"></a>00236     <span class="keywordflow">if</span> (i!=elimParms[j+1]) {
<a name="l00237"></a>00237       (*newParms)[i-j] = strdup(parms[i]);
<a name="l00238"></a>00238     }
<a name="l00239"></a>00239     <span class="keywordflow">else</span> {
<a name="l00240"></a>00240       j++;
<a name="l00241"></a>00241     }
<a name="l00242"></a>00242   }
<a name="l00243"></a>00243   <span class="keywordflow">return</span> newSize;
<a name="l00244"></a>00244 }
<a name="l00245"></a>00245 
<a name="l00246"></a>00246 <span class="comment"></span>
<a name="l00247"></a>00247 <span class="comment">/**</span>
<a name="l00248"></a>00248 <span class="comment"> * Tests Constraints_fullDimensionize by comparing the Ehrhart polynomials </span>
<a name="l00249"></a>00249 <span class="comment"> * @param A the input set of constraints</span>
<a name="l00250"></a>00250 <span class="comment"> * @param B the corresponding context</span>
<a name="l00251"></a>00251 <span class="comment"> * @param the number of samples to generate for the test</span>
<a name="l00252"></a>00252 <span class="comment"> * @return 1 if the Ehrhart polynomial had the same value for the</span>
<a name="l00253"></a>00253 <span class="comment"> * full-dimensional and non-full-dimensional sets of constraints, for their</span>
<a name="l00254"></a>00254 <span class="comment"> * corresponding sample parameters values.</span>
<a name="l00255"></a>00255 <span class="comment"> */</span>
<a name="l00256"></a><a class="code" href="testCompressParms_8c.html#0ff3dbf2dc32c224644d0fb139dbcbb8">00256</a> <span class="keywordtype">int</span> <a class="code" href="testCompressParms_8c.html#0ff3dbf2dc32c224644d0fb139dbcbb8" title="Tests Constraints_fullDimensionize by comparing the Ehrhart polynomials.">test_Constraints_fullDimensionize</a>(<a class="code" href="structmatrix.html">Matrix</a> * A, <a class="code" href="structmatrix.html">Matrix</a> * B, 
<a name="l00257"></a>00257                                       <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nbSamples) {
<a name="l00258"></a>00258   <a class="code" href="structmatrix.html">Matrix</a> * Eqs= NULL, *ParmEqs=NULL, *VL=NULL;
<a name="l00259"></a>00259   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> * elimVars=NULL, * elimParms=NULL;
<a name="l00260"></a>00260   <a class="code" href="structmatrix.html">Matrix</a> * sample, * smallerSample=NULL;
<a name="l00261"></a>00261   <a class="code" href="structmatrix.html">Matrix</a> * transfSample=NULL;
<a name="l00262"></a>00262   <a class="code" href="structmatrix.html">Matrix</a> * parmVL=NULL;
<a name="l00263"></a>00263   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i, j, r, nbOrigParms, nbParms;
<a name="l00264"></a>00264   Value div, mod, *origVal=NULL, *fullVal=NULL;
<a name="l00265"></a>00265   <a class="code" href="structmatrix.html">Matrix</a> * VLInv;
<a name="l00266"></a>00266   <a class="code" href="structpolyhedron.html">Polyhedron</a> * P, *PC;
<a name="l00267"></a>00267   <a class="code" href="structmatrix.html">Matrix</a> * M, *C;
<a name="l00268"></a>00268   <a class="code" href="struct__enumeration.html">Enumeration</a> * origEP, * fullEP=NULL;
<a name="l00269"></a>00269   <span class="keyword">const</span> <span class="keywordtype">char</span> **fullNames = NULL;
<a name="l00270"></a>00270   <span class="keywordtype">int</span> isOk = 1; <span class="comment">/* holds the result */</span>
<a name="l00271"></a>00271 
<a name="l00272"></a>00272   <span class="comment">/* compute the origial Ehrhart polynomial */</span>
<a name="l00273"></a>00273   M = <a class="code" href="Matop_8c.html#9d027e9fc6b85e6fa37fc284bf1b5e06">Matrix_Copy</a>(A);
<a name="l00274"></a>00274   C = <a class="code" href="Matop_8c.html#9d027e9fc6b85e6fa37fc284bf1b5e06">Matrix_Copy</a>(B);
<a name="l00275"></a>00275   P = <a class="code" href="polyhedron_8c.html#efb77665a187d751bdd44f106b12465e" title="Given a matrix of constraints (&amp;#39;Constraints&amp;#39;), construct and return a polyhedron...">Constraints2Polyhedron</a>(M, <a class="code" href="testCompressParms_8c.html#508eb31b6faa4939e1c32adaef41b8c8">maxRays</a>);
<a name="l00276"></a>00276   PC = <a class="code" href="polyhedron_8c.html#efb77665a187d751bdd44f106b12465e" title="Given a matrix of constraints (&amp;#39;Constraints&amp;#39;), construct and return a polyhedron...">Constraints2Polyhedron</a>(C, <a class="code" href="testCompressParms_8c.html#508eb31b6faa4939e1c32adaef41b8c8">maxRays</a>);
<a name="l00277"></a>00277   origEP = <a class="code" href="ehrhart_8c.html#3c3e442b1d2c924f03f02f9e9283141a" title="Procedure to count points in a parameterized polytope.">Polyhedron_Enumerate</a>(P, PC, <a class="code" href="testCompressParms_8c.html#508eb31b6faa4939e1c32adaef41b8c8">maxRays</a>, <a class="code" href="testCompressParms_8c.html#9c1dc820fe3bdbb2b3657bd03338fc91">origNames</a>);
<a name="l00278"></a>00278   <a class="code" href="matrix_8c.html#fcb312b7c12a6997cd66964ecc34e1a6">Matrix_Free</a>(M);
<a name="l00279"></a>00279   <a class="code" href="matrix_8c.html#fcb312b7c12a6997cd66964ecc34e1a6">Matrix_Free</a>(C);
<a name="l00280"></a>00280   <a class="code" href="polyhedron_8c.html#4ae97b9794e3a616f1d38c68e6515cc3">Polyhedron_Free</a>(P);
<a name="l00281"></a>00281   <a class="code" href="polyhedron_8c.html#4ae97b9794e3a616f1d38c68e6515cc3">Polyhedron_Free</a>(PC);
<a name="l00282"></a>00282 
<a name="l00283"></a>00283   <span class="comment">/* compute the full-dimensional polyhedron corresponding to A and its Ehrhart</span>
<a name="l00284"></a>00284 <span class="comment">     polynomial */</span>
<a name="l00285"></a>00285   M = <a class="code" href="Matop_8c.html#9d027e9fc6b85e6fa37fc284bf1b5e06">Matrix_Copy</a>(A);
<a name="l00286"></a>00286   C = <a class="code" href="Matop_8c.html#9d027e9fc6b85e6fa37fc284bf1b5e06">Matrix_Copy</a>(B);
<a name="l00287"></a>00287   nbOrigParms = B-&gt;<a class="code" href="structmatrix.html#68858fd3b57684ef38bdfce13c65d182">NbColumns</a>-2;
<a name="l00288"></a>00288   <a class="code" href="compress__parms_8c.html#1a9cd66aec30116cfd3b07c2e38c73c8" title="Eliminates all the equalities in a set of constraints and returns the set of constraints...">Constraints_fullDimensionize</a>(&amp;M, &amp;C, &amp;VL, &amp;Eqs, &amp;ParmEqs, 
<a name="l00289"></a>00289                                &amp;elimVars, &amp;elimParms, <a class="code" href="testCompressParms_8c.html#508eb31b6faa4939e1c32adaef41b8c8">maxRays</a>);
<a name="l00290"></a>00290   <span class="keywordflow">if</span> ((Eqs-&gt;<a class="code" href="structmatrix.html#16ad614d15c6e81c0041e877b623c72d">NbRows</a>==0) &amp;&amp; (ParmEqs-&gt;NbRows==0)) {
<a name="l00291"></a>00291     <a class="code" href="matrix_8c.html#fcb312b7c12a6997cd66964ecc34e1a6">Matrix_Free</a>(M);
<a name="l00292"></a>00292     <a class="code" href="matrix_8c.html#fcb312b7c12a6997cd66964ecc34e1a6">Matrix_Free</a>(C);
<a name="l00293"></a>00293     <a class="code" href="matrix_8c.html#fcb312b7c12a6997cd66964ecc34e1a6">Matrix_Free</a>(Eqs);
<a name="l00294"></a>00294     <a class="code" href="matrix_8c.html#fcb312b7c12a6997cd66964ecc34e1a6">Matrix_Free</a>(ParmEqs);
<a name="l00295"></a>00295     free(elimVars);
<a name="l00296"></a>00296     free(elimParms);
<a name="l00297"></a>00297     <span class="keywordflow">return</span> 1;
<a name="l00298"></a>00298   }
<a name="l00299"></a>00299   nbParms = C-&gt;<a class="code" href="structmatrix.html#68858fd3b57684ef38bdfce13c65d182">NbColumns</a>-2;
<a name="l00300"></a>00300   P = <a class="code" href="polyhedron_8c.html#efb77665a187d751bdd44f106b12465e" title="Given a matrix of constraints (&amp;#39;Constraints&amp;#39;), construct and return a polyhedron...">Constraints2Polyhedron</a>(M, <a class="code" href="testCompressParms_8c.html#508eb31b6faa4939e1c32adaef41b8c8">maxRays</a>);
<a name="l00301"></a>00301   PC = <a class="code" href="polyhedron_8c.html#efb77665a187d751bdd44f106b12465e" title="Given a matrix of constraints (&amp;#39;Constraints&amp;#39;), construct and return a polyhedron...">Constraints2Polyhedron</a>(C, <a class="code" href="testCompressParms_8c.html#508eb31b6faa4939e1c32adaef41b8c8">maxRays</a>);
<a name="l00302"></a>00302   <a class="code" href="testCompressParms_8c.html#79ed5185c3a1604ee7b0c7e7e6071992" title="takes a list of parameter names, a list ofparameters to eliminate, and returns the...">namesWithoutElim</a>(<a class="code" href="testCompressParms_8c.html#9c1dc820fe3bdbb2b3657bd03338fc91">origNames</a>, nbOrigParms, elimParms, &amp;fullNames);
<a name="l00303"></a>00303   fullEP = <a class="code" href="ehrhart_8c.html#3c3e442b1d2c924f03f02f9e9283141a" title="Procedure to count points in a parameterized polytope.">Polyhedron_Enumerate</a>(P, PC, <a class="code" href="testCompressParms_8c.html#508eb31b6faa4939e1c32adaef41b8c8">maxRays</a>, fullNames);
<a name="l00304"></a>00304   <a class="code" href="matrix_8c.html#fcb312b7c12a6997cd66964ecc34e1a6">Matrix_Free</a>(M);
<a name="l00305"></a>00305   <a class="code" href="matrix_8c.html#fcb312b7c12a6997cd66964ecc34e1a6">Matrix_Free</a>(C);
<a name="l00306"></a>00306   <a class="code" href="polyhedron_8c.html#4ae97b9794e3a616f1d38c68e6515cc3">Polyhedron_Free</a>(P);
<a name="l00307"></a>00307   <a class="code" href="polyhedron_8c.html#4ae97b9794e3a616f1d38c68e6515cc3">Polyhedron_Free</a>(PC);
<a name="l00308"></a>00308   
<a name="l00309"></a>00309   <span class="comment">/* make a set of sample parameter values and compare the corresponding</span>
<a name="l00310"></a>00310 <span class="comment">     Ehrhart polnomials */</span>
<a name="l00311"></a>00311   sample = <a class="code" href="matrix_8c.html#c0b29e1d99a2823ad00b5f2157879d80">Matrix_Alloc</a>(1,nbOrigParms);
<a name="l00312"></a>00312   transfSample = <a class="code" href="matrix_8c.html#c0b29e1d99a2823ad00b5f2157879d80">Matrix_Alloc</a>(1, nbParms);
<a name="l00313"></a>00313   <a class="code" href="compress__parms_8c.html#9a39676ea22cef575c08911c95badba2" title="Given a matrix that defines a full-dimensional affine lattice, returns the affine...">Lattice_extractSubLattice</a>(VL, nbParms, &amp;parmVL);
<a name="l00314"></a>00314   VLInv = <a class="code" href="matrix_8c.html#c0b29e1d99a2823ad00b5f2157879d80">Matrix_Alloc</a>(parmVL-&gt;<a class="code" href="structmatrix.html#16ad614d15c6e81c0041e877b623c72d">NbRows</a>, parmVL-&gt;<a class="code" href="structmatrix.html#16ad614d15c6e81c0041e877b623c72d">NbRows</a>+1);
<a name="l00315"></a>00315   <a class="code" href="matrix_8c.html#e2b2f031eb75c5011091536d7ef4befc">MatInverse</a>(parmVL, VLInv);
<a name="l00316"></a>00316   <span class="keywordflow">if</span> (<a class="code" href="testCompressParms_8c.html#5bac03f035357aca807646cff28cdc4e" title="IdtestCompressParms.c,v 1.4 2006/09/18 03:09:03 meister Exp ">dbg</a>) {
<a name="l00317"></a>00317     <a class="code" href="matrix__addon_8h.html#11468159c7fa7d75fadfa10e2e929fee" title="Polylib matrix addons Mainly, deals with polyhedra represented in implicit form (set...">show_matrix</a>(parmVL);
<a name="l00318"></a>00318     <a class="code" href="matrix__addon_8h.html#11468159c7fa7d75fadfa10e2e929fee" title="Polylib matrix addons Mainly, deals with polyhedra represented in implicit form (set...">show_matrix</a>(VLInv);
<a name="l00319"></a>00319   }
<a name="l00320"></a>00320   srand(nbSamples);
<a name="l00321"></a>00321   <a class="code" href="source_2arith_2arithmetique_8h.html#f71a2ca0294a19cff0cdcbdcc052ee27">value_init</a>(mod);
<a name="l00322"></a>00322   <a class="code" href="source_2arith_2arithmetique_8h.html#f71a2ca0294a19cff0cdcbdcc052ee27">value_init</a>(div);
<a name="l00323"></a>00323   <span class="keywordflow">for</span> (i = 0; i&lt; nbSamples; i++) {
<a name="l00324"></a>00324     <span class="comment">/* create a random sample */</span>
<a name="l00325"></a>00325     <span class="keywordflow">for</span> (j=0; j&lt; nbOrigParms; j++) {
<a name="l00326"></a>00326       <a class="code" href="source_2arith_2arithmetique_8h.html#8cc56567a4a29271559ac0fd5f6c5bfa">value_set_si</a>(sample-&gt;<a class="code" href="structmatrix.html#2c6d840d8d911ae95c2ae4fc96f4b5ba">p</a>[0][j], rand()%100);
<a name="l00327"></a>00327     }
<a name="l00328"></a>00328     <span class="comment">/* compute the corresponding value for the full-dimensional</span>
<a name="l00329"></a>00329 <span class="comment">       constraints */</span>
<a name="l00330"></a>00330     <a class="code" href="testCompressParms_8c.html#fb08ff56d9ba869c706006d6b5c941ee" title="Eliminates certain parameters from a vector of values for parameters.">valuesWithoutElim</a>(sample, elimParms, &amp;smallerSample); 
<a name="l00331"></a>00331     <span class="comment">/* (N' i' 1)^T = VLinv.(N i 1)^T*/</span>
<a name="l00332"></a>00332     <span class="keywordflow">for</span> (r = 0; r &lt; nbParms; r++) {
<a name="l00333"></a>00333       <a class="code" href="vector_8c.html#29ab9dcdb0a2666d54c5698d5e3a802f">Inner_Product</a>(&amp;(VLInv-&gt;<a class="code" href="structmatrix.html#2c6d840d8d911ae95c2ae4fc96f4b5ba">p</a>[r][0]), smallerSample-&gt;<a class="code" href="structmatrix.html#2c6d840d8d911ae95c2ae4fc96f4b5ba">p</a>[0], nbParms,
<a name="l00334"></a>00334                     &amp;(transfSample-&gt;<a class="code" href="structmatrix.html#2c6d840d8d911ae95c2ae4fc96f4b5ba">p</a>[0][r]));
<a name="l00335"></a>00335       <span class="comment">/* add the constant part */</span>
<a name="l00336"></a>00336       <a class="code" href="source_2arith_2arithmetique_8h.html#ea216a0e750144f0e6eb9b0a82583739">value_addto</a>(transfSample-&gt;<a class="code" href="structmatrix.html#2c6d840d8d911ae95c2ae4fc96f4b5ba">p</a>[0][r], transfSample-&gt;<a class="code" href="structmatrix.html#2c6d840d8d911ae95c2ae4fc96f4b5ba">p</a>[0][r], 
<a name="l00337"></a>00337                                          VLInv-&gt;<a class="code" href="structmatrix.html#2c6d840d8d911ae95c2ae4fc96f4b5ba">p</a>[r][VLInv-&gt;<a class="code" href="structmatrix.html#68858fd3b57684ef38bdfce13c65d182">NbColumns</a>-2]);
<a name="l00338"></a>00338       <a class="code" href="source_2arith_2arithmetique_8h.html#1d5fd16549d53f259c2e7699a22045cb">value_pdivision</a>(div, transfSample-&gt;<a class="code" href="structmatrix.html#2c6d840d8d911ae95c2ae4fc96f4b5ba">p</a>[0][r], 
<a name="l00339"></a>00339                          VLInv-&gt;<a class="code" href="structmatrix.html#2c6d840d8d911ae95c2ae4fc96f4b5ba">p</a>[r][VLInv-&gt;<a class="code" href="structmatrix.html#68858fd3b57684ef38bdfce13c65d182">NbColumns</a>-1]);
<a name="l00340"></a>00340       <a class="code" href="source_2arith_2arithmetique_8h.html#e92a58eee3b6f5c6a99e6837e68407e1">value_subtract</a>(mod, transfSample-&gt;<a class="code" href="structmatrix.html#2c6d840d8d911ae95c2ae4fc96f4b5ba">p</a>[0][r], div);
<a name="l00341"></a>00341       <span class="comment">/* if the parameters value does not belong to the validity lattice, the</span>
<a name="l00342"></a>00342 <span class="comment">         Ehrhart polynomial is zero. */</span>
<a name="l00343"></a>00343       <span class="keywordflow">if</span> (!<a class="code" href="source_2arith_2arithmetique_8h.html#827532f2140ae2aa96e46baebae09723">value_zero_p</a>(mod)) {
<a name="l00344"></a>00344         fullEP = <a class="code" href="ehrhart_8c.html#b9d946f486657c1fde2ff63537f004fb" title="returns a constant Ehrhart polynomial whose value is zero for any value of the parameters...">Enumeration_zero</a>(nbParms, <a class="code" href="testCompressParms_8c.html#508eb31b6faa4939e1c32adaef41b8c8">maxRays</a>);
<a name="l00345"></a>00345         <span class="keywordflow">break</span>;
<a name="l00346"></a>00346       }
<a name="l00347"></a>00347     }
<a name="l00348"></a>00348     <span class="comment">/* compare the two forms of the Ehrhart polynomial.*/</span>
<a name="l00349"></a>00349     <span class="keywordflow">if</span> (origEP ==NULL) <span class="keywordflow">break</span>; <span class="comment">/* NULL has loose semantics for EPs */</span>
<a name="l00350"></a>00350     origVal = <a class="code" href="eval__ehrhart_8c.html#f970e7f69cbf548188a8f3754001a150">compute_poly</a>(origEP, sample-&gt;<a class="code" href="structmatrix.html#2c6d840d8d911ae95c2ae4fc96f4b5ba">p</a>[0]);
<a name="l00351"></a>00351     fullVal = <a class="code" href="eval__ehrhart_8c.html#f970e7f69cbf548188a8f3754001a150">compute_poly</a>(fullEP, transfSample-&gt;<a class="code" href="structmatrix.html#2c6d840d8d911ae95c2ae4fc96f4b5ba">p</a>[0]);
<a name="l00352"></a>00352     <span class="keywordflow">if</span> (!<a class="code" href="source_2arith_2arithmetique_8h.html#aac63aa93e7c9fa23ebcde2dc80a12b9">value_eq</a>(*origVal, *fullVal)) {
<a name="l00353"></a>00353       isOk = 0;
<a name="l00354"></a>00354       printf(<span class="stringliteral">"EPs don't match. \n Original value = "</span>);
<a name="l00355"></a>00355       <a class="code" href="source_2arith_2arithmetique_8h.html#d34605b56b571830b928b50a74d618b7">value_print</a>(stdout, VALUE_FMT, *origVal);
<a name="l00356"></a>00356       printf(<span class="stringliteral">"\n Original sample = ["</span>);
<a name="l00357"></a>00357       <span class="keywordflow">for</span> (j=0; j&lt;sample-&gt;<a class="code" href="structmatrix.html#68858fd3b57684ef38bdfce13c65d182">NbColumns</a>; j++) {
<a name="l00358"></a>00358         <a class="code" href="source_2arith_2arithmetique_8h.html#d34605b56b571830b928b50a74d618b7">value_print</a>(stdout, VALUE_FMT, sample-&gt;<a class="code" href="structmatrix.html#2c6d840d8d911ae95c2ae4fc96f4b5ba">p</a>[0][j]);
<a name="l00359"></a>00359         printf(<span class="stringliteral">" "</span>);
<a name="l00360"></a>00360       }
<a name="l00361"></a>00361       printf(<span class="stringliteral">"] \n EP = "</span>);
<a name="l00362"></a>00362       <span class="keywordflow">if</span>(origEP!=NULL) {
<a name="l00363"></a>00363         <a class="code" href="ehrhart_8c.html#99718adf05e065181f35f5ca847f94b0">print_evalue</a>(stdout, &amp;(origEP-&gt;<a class="code" href="struct__enumeration.html#a499b062a10ce16356e9b52d25cae0d9">EP</a>), <a class="code" href="testCompressParms_8c.html#9c1dc820fe3bdbb2b3657bd03338fc91">origNames</a>);
<a name="l00364"></a>00364       }
<a name="l00365"></a>00365       <span class="keywordflow">else</span> {
<a name="l00366"></a>00366         printf(<span class="stringliteral">"NULL"</span>);
<a name="l00367"></a>00367       }
<a name="l00368"></a>00368       printf(<span class="stringliteral">" \n Full-dimensional value = "</span>);
<a name="l00369"></a>00369       <a class="code" href="source_2arith_2arithmetique_8h.html#d34605b56b571830b928b50a74d618b7">value_print</a>(stdout, <a class="code" href="types_8h.html#e6f16bcd4a42ba51cbb003e3d1e1cde6">P_VALUE_FMT</a>, *fullVal);
<a name="l00370"></a>00370       printf(<span class="stringliteral">"\n full-dimensional sample = ["</span>);
<a name="l00371"></a>00371       <span class="keywordflow">for</span> (j=0; j&lt;sample-&gt;<a class="code" href="structmatrix.html#68858fd3b57684ef38bdfce13c65d182">NbColumns</a>; j++) {
<a name="l00372"></a>00372         <a class="code" href="source_2arith_2arithmetique_8h.html#d34605b56b571830b928b50a74d618b7">value_print</a>(stdout, VALUE_FMT, transfSample-&gt;<a class="code" href="structmatrix.html#2c6d840d8d911ae95c2ae4fc96f4b5ba">p</a>[0][j]);
<a name="l00373"></a>00373         printf(<span class="stringliteral">" "</span>);
<a name="l00374"></a>00374       }
<a name="l00375"></a>00375       printf(<span class="stringliteral">"] \n EP = "</span>);
<a name="l00376"></a>00376       <span class="keywordflow">if</span>(origEP!=NULL) {
<a name="l00377"></a>00377         <a class="code" href="ehrhart_8c.html#99718adf05e065181f35f5ca847f94b0">print_evalue</a>(stdout, &amp;(origEP-&gt;<a class="code" href="struct__enumeration.html#a499b062a10ce16356e9b52d25cae0d9">EP</a>), fullNames);
<a name="l00378"></a>00378       }
<a name="l00379"></a>00379       <span class="keywordflow">else</span> {
<a name="l00380"></a>00380         printf(<span class="stringliteral">"NULL"</span>);
<a name="l00381"></a>00381       }
<a name="l00382"></a>00382     }
<a name="l00383"></a>00383     <span class="keywordflow">if</span> (<a class="code" href="testCompressParms_8c.html#5bac03f035357aca807646cff28cdc4e" title="IdtestCompressParms.c,v 1.4 2006/09/18 03:09:03 meister Exp ">dbg</a>) {
<a name="l00384"></a>00384       printf(<span class="stringliteral">"\nOriginal value = "</span>);
<a name="l00385"></a>00385       <a class="code" href="source_2arith_2arithmetique_8h.html#d34605b56b571830b928b50a74d618b7">value_print</a>(stdout, VALUE_FMT, *origVal);
<a name="l00386"></a>00386       printf(<span class="stringliteral">"\nFull-dimensional value = "</span>);
<a name="l00387"></a>00387       <a class="code" href="source_2arith_2arithmetique_8h.html#d34605b56b571830b928b50a74d618b7">value_print</a>(stdout, <a class="code" href="types_8h.html#e6f16bcd4a42ba51cbb003e3d1e1cde6">P_VALUE_FMT</a>, *fullVal);
<a name="l00388"></a>00388       printf(<span class="stringliteral">"\n"</span>);
<a name="l00389"></a>00389     }
<a name="l00390"></a>00390     <a class="code" href="source_2arith_2arithmetique_8h.html#b9b282921e85a0527d462d331533d619">value_clear</a>(*origVal);
<a name="l00391"></a>00391     <a class="code" href="source_2arith_2arithmetique_8h.html#b9b282921e85a0527d462d331533d619">value_clear</a>(*fullVal);
<a name="l00392"></a>00392   }
<a name="l00393"></a>00393   <a class="code" href="source_2arith_2arithmetique_8h.html#b9b282921e85a0527d462d331533d619">value_clear</a>(mod);
<a name="l00394"></a>00394   <a class="code" href="source_2arith_2arithmetique_8h.html#b9b282921e85a0527d462d331533d619">value_clear</a>(div);
<a name="l00395"></a>00395   <a class="code" href="matrix_8c.html#fcb312b7c12a6997cd66964ecc34e1a6">Matrix_Free</a>(sample);
<a name="l00396"></a>00396   <a class="code" href="matrix_8c.html#fcb312b7c12a6997cd66964ecc34e1a6">Matrix_Free</a>(smallerSample);
<a name="l00397"></a>00397   <a class="code" href="matrix_8c.html#fcb312b7c12a6997cd66964ecc34e1a6">Matrix_Free</a>(transfSample);
<a name="l00398"></a>00398   <a class="code" href="ehrhart_8c.html#eaadcf4c2404d688eb1443486ad8becb">Enumeration_Free</a>(origEP);
<a name="l00399"></a>00399   <a class="code" href="ehrhart_8c.html#eaadcf4c2404d688eb1443486ad8becb">Enumeration_Free</a>(fullEP);
<a name="l00400"></a>00400   <span class="keywordflow">return</span> isOk;
<a name="l00401"></a>00401 } <span class="comment">/* test_Constraints_fullDimensionize */</span>
</pre></div></div>
<hr size="1"><address style="text-align: right;"><small>Generated on Tue Sep 15 18:34:00 2009 for polylib by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
</body>
</html>