File: testCompressParms_8c_source.html

package info (click to toggle)
polylib 5.22.5-3%2Bdfsg
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd, stretch, wheezy
  • size: 14,444 kB
  • ctags: 52,958
  • sloc: ansic: 16,342; sh: 10,134; makefile: 560
file content (448 lines) | stat: -rw-r--r-- 56,731 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
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>polylib: testCompressParms.c Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.6.1 -->
<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>
  <div class="tabs">
    <ul>
      <li><a href="files.html"><span>File&nbsp;List</span></a></li>
      <li><a href="globals.html"><span>File&nbsp;Members</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 <span class="comment">/*</span>
<a name="l00009"></a>00009 <span class="comment">    This file is part of PolyLib.</span>
<a name="l00010"></a>00010 <span class="comment"></span>
<a name="l00011"></a>00011 <span class="comment">    PolyLib is free software: you can redistribute it and/or modify</span>
<a name="l00012"></a>00012 <span class="comment">    it under the terms of the GNU General Public License as published by</span>
<a name="l00013"></a>00013 <span class="comment">    the Free Software Foundation, either version 3 of the License, or</span>
<a name="l00014"></a>00014 <span class="comment">    (at your option) any later version.</span>
<a name="l00015"></a>00015 <span class="comment"></span>
<a name="l00016"></a>00016 <span class="comment">    PolyLib is distributed in the hope that it will be useful,</span>
<a name="l00017"></a>00017 <span class="comment">    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<a name="l00018"></a>00018 <span class="comment">    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
<a name="l00019"></a>00019 <span class="comment">    GNU General Public License for more details.</span>
<a name="l00020"></a>00020 <span class="comment"></span>
<a name="l00021"></a>00021 <span class="comment">    You should have received a copy of the GNU General Public License</span>
<a name="l00022"></a>00022 <span class="comment">    along with PolyLib.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
<a name="l00023"></a>00023 <span class="comment">*/</span>
<a name="l00024"></a>00024 
<a name="l00025"></a>00025 
<a name="l00026"></a>00026 <span class="preprocessor">#include &lt;<a class="code" href="polylib_8h.html">polylib/polylib.h</a>&gt;</span>
<a name="l00027"></a>00027 <span class="preprocessor">#include &lt;stdio.h&gt;</span>
<a name="l00028"></a>00028 <span class="preprocessor">#include &lt;stdlib.h&gt;</span>
<a name="l00029"></a>00029 <span class="preprocessor">#include &lt;string.h&gt;</span>
<a name="l00030"></a>00030 
<a name="l00031"></a>00031 <span class="preprocessor">#ifdef dbg</span>
<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="preprocessor">#undef dbg</span>
<a name="l00033"></a>00033 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00034"></a><a class="code" href="testCompressParms_8c.html#a5bac03f035357aca807646cff28cdc4e">00034</a> <span class="preprocessor"></span><span class="preprocessor">#define dbg 1</span>
<a name="l00035"></a>00035 <span class="preprocessor"></span>
<a name="l00036"></a><a class="code" href="testCompressParms_8c.html#a8c3f19654117e3b2c6ff5304d86f660d">00036</a> <span class="preprocessor">#define TEST(a) if (isOk = a) { \</span>
<a name="l00037"></a>00037 <span class="preprocessor">                  printf(#a&quot; tested ok.\n&quot;); \</span>
<a name="l00038"></a>00038 <span class="preprocessor">                } \</span>
<a name="l00039"></a>00039 <span class="preprocessor">                else { \</span>
<a name="l00040"></a>00040 <span class="preprocessor">                  printf(#a&quot; NOT OK\n&quot;); \</span>
<a name="l00041"></a>00041 <span class="preprocessor">                } </span>
<a name="l00042"></a>00042 <span class="preprocessor"></span>
<a name="l00043"></a><a class="code" href="testCompressParms_8c.html#a508eb31b6faa4939e1c32adaef41b8c8">00043</a> <span class="preprocessor">#define maxRays 200</span>
<a name="l00044"></a>00044 <span class="preprocessor"></span>
<a name="l00045"></a><a class="code" href="testCompressParms_8c.html#a9c1dc820fe3bdbb2b3657bd03338fc91">00045</a> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="testCompressParms_8c.html#a9c1dc820fe3bdbb2b3657bd03338fc91">origNames</a>[] =
<a name="l00046"></a>00046         {<span class="stringliteral">&quot;n&quot;</span>, <span class="stringliteral">&quot;o&quot;</span>, <span class="stringliteral">&quot;p&quot;</span>, <span class="stringliteral">&quot;q&quot;</span>, <span class="stringliteral">&quot;r&quot;</span>, <span class="stringliteral">&quot;s&quot;</span>, <span class="stringliteral">&quot;t&quot;</span>, <span class="stringliteral">&quot;u&quot;</span>, <span class="stringliteral">&quot;v&quot;</span>, <span class="stringliteral">&quot;w&quot;</span>, <span class="stringliteral">&quot;x&quot;</span>, <span class="stringliteral">&quot;y&quot;</span>, <span class="stringliteral">&quot;z&quot;</span>};
<a name="l00047"></a>00047 
<a name="l00048"></a><a class="code" href="testCompressParms_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">00048</a> <span class="keywordtype">int</span> <a class="code" href="c2p_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a>(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> ** argv) {
<a name="l00049"></a>00049   <span class="keywordtype">int</span> isOk = 0;
<a name="l00050"></a>00050   <a class="code" href="structmatrix.html">Matrix</a> * A, * B;
<a name="l00051"></a>00051   <span class="keywordflow">if</span> (argc&gt;1) {
<a name="l00052"></a>00052     printf(<span class="stringliteral">&quot;Warning: No arguments taken into account: testing&quot;</span>
<a name="l00053"></a>00053            <span class="stringliteral">&quot;remove_parm_eqs().\n&quot;</span>);
<a name="l00054"></a>00054   }
<a name="l00055"></a>00055 
<a name="l00056"></a>00056   A = <a class="code" href="matrix_8c.html#a3a087ae9a03d5baf0b81831177931143">Matrix_Read</a>();
<a name="l00057"></a>00057   B = <a class="code" href="matrix_8c.html#a3a087ae9a03d5baf0b81831177931143">Matrix_Read</a>();
<a name="l00058"></a>00058   <a class="code" href="testCompressParms_8c.html#a8c3f19654117e3b2c6ff5304d86f660d">TEST</a>( <a class="code" href="testCompressParms_8c.html#a22b21b8ecf472b992a0ab44a58c9a231" title="extracts the equalities involving the parameters only, try to introduce them back...">test_Constraints_Remove_parm_eqs</a>(A, B) )
<a name="l00059"></a>00059   <a class="code" href="testCompressParms_8c.html#a8c3f19654117e3b2c6ff5304d86f660d">TEST</a>( <a class="code" href="testCompressParms_8c.html#a9f6efefce285d8dcb806a7baabba1d5d" title="extracts the equalities holding on the parameters only, try to introduce them back...">test_Polyhedron_Remove_parm_eqs</a>(A, B) )
<a name="l00060"></a>00060   <a class="code" href="testCompressParms_8c.html#a8c3f19654117e3b2c6ff5304d86f660d">TEST</a>( <a class="code" href="testCompressParms_8c.html#a0ff3dbf2dc32c224644d0fb139dbcbb8" title="Tests Constraints_fullDimensionize by comparing the Ehrhart polynomials.">test_Constraints_fullDimensionize</a>(A, B, 4) )
<a name="l00061"></a>00061   <a class="code" href="matrix_8c.html#afcb312b7c12a6997cd66964ecc34e1a6">Matrix_Free</a>(A);
<a name="l00062"></a>00062   <a class="code" href="matrix_8c.html#afcb312b7c12a6997cd66964ecc34e1a6">Matrix_Free</a>(B);
<a name="l00063"></a>00063   <span class="keywordflow">return</span> (1-isOk);
<a name="l00064"></a>00064 }
<a name="l00065"></a>00065 
<a name="l00066"></a>00066 <span class="comment"></span>
<a name="l00067"></a>00067 <span class="comment">/** extracts the equalities involving the parameters only, try to introduce</span>
<a name="l00068"></a>00068 <span class="comment">    them back and compare the two polyhedra.</span>
<a name="l00069"></a>00069 <span class="comment">    Reads a polyhedron and a context.</span>
<a name="l00070"></a>00070 <span class="comment"> */</span>
<a name="l00071"></a><a class="code" href="testCompressParms_8c.html#a22b21b8ecf472b992a0ab44a58c9a231">00071</a> <span class="keywordtype">int</span> <a class="code" href="testCompressParms_8c.html#a22b21b8ecf472b992a0ab44a58c9a231" 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="l00072"></a>00072   <span class="keywordtype">int</span> isOk = 1;
<a name="l00073"></a>00073   <a class="code" href="structmatrix.html">Matrix</a> * M, *C, *Cp, * Eqs, *M1, *C1;
<a name="l00074"></a>00074   <a class="code" href="structpolyhedron.html">Polyhedron</a> *Pm, *Pc, *Pcp, *Peqs, *Pint;
<a name="l00075"></a>00075   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> * elimParms;
<a name="l00076"></a>00076   printf(<span class="stringliteral">&quot;----- test_Constraints_Remove_parm_eqs() -----\n&quot;</span>);
<a name="l00077"></a>00077   M1 = <a class="code" href="Matop_8c.html#a9d027e9fc6b85e6fa37fc284bf1b5e06">Matrix_Copy</a>(A);
<a name="l00078"></a>00078   C1 = <a class="code" href="Matop_8c.html#a9d027e9fc6b85e6fa37fc284bf1b5e06">Matrix_Copy</a>(B);
<a name="l00079"></a>00079 
<a name="l00080"></a>00080   M = <a class="code" href="Matop_8c.html#a9d027e9fc6b85e6fa37fc284bf1b5e06">Matrix_Copy</a>(M1);
<a name="l00081"></a>00081   C = <a class="code" href="Matop_8c.html#a9d027e9fc6b85e6fa37fc284bf1b5e06">Matrix_Copy</a>(C1);
<a name="l00082"></a>00082 
<a name="l00083"></a>00083    <span class="comment">/* compute the combined polyhedron */</span>
<a name="l00084"></a>00084   Pm = <a class="code" href="polyhedron_8c.html#aefb77665a187d751bdd44f106b12465e" 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#a508eb31b6faa4939e1c32adaef41b8c8">maxRays</a>);
<a name="l00085"></a>00085   Pc = <a class="code" href="polyhedron_8c.html#aefb77665a187d751bdd44f106b12465e" 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#a508eb31b6faa4939e1c32adaef41b8c8">maxRays</a>);
<a name="l00086"></a>00086   Pcp = <a class="code" href="polyhedron_8c.html#affd77db2a2f748d557ab6be0fcede209">align_context</a>(Pc, Pm-&gt;<a class="code" href="structpolyhedron.html#a2a02cea8b7ba3dde415041b8b2373bc8">Dimension</a>, <a class="code" href="testCompressParms_8c.html#a508eb31b6faa4939e1c32adaef41b8c8">maxRays</a>);
<a name="l00087"></a>00087   <a class="code" href="polyhedron_8c.html#a4ae97b9794e3a616f1d38c68e6515cc3">Polyhedron_Free</a>(Pc);
<a name="l00088"></a>00088   Pc = <a class="code" href="polyhedron_8c.html#ac5a1a2751f0b833183560af25b18033b">DomainIntersection</a>(Pm, Pcp, <a class="code" href="testCompressParms_8c.html#a508eb31b6faa4939e1c32adaef41b8c8">maxRays</a>);
<a name="l00089"></a>00089   <a class="code" href="polyhedron_8c.html#a4ae97b9794e3a616f1d38c68e6515cc3">Polyhedron_Free</a>(Pm);
<a name="l00090"></a>00090   <a class="code" href="polyhedron_8c.html#a4ae97b9794e3a616f1d38c68e6515cc3">Polyhedron_Free</a>(Pcp);
<a name="l00091"></a>00091   <a class="code" href="matrix_8c.html#afcb312b7c12a6997cd66964ecc34e1a6">Matrix_Free</a>(M);
<a name="l00092"></a>00092   <a class="code" href="matrix_8c.html#afcb312b7c12a6997cd66964ecc34e1a6">Matrix_Free</a>(C);
<a name="l00093"></a>00093 
<a name="l00094"></a>00094   <span class="comment">/* extract the parm-equalities, expressed in the combined space */</span>
<a name="l00095"></a>00095   Eqs = <a class="code" href="compress__parms_8c.html#aca0035f9313236fd8046ab042180f544" 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="l00096"></a>00096 
<a name="l00097"></a>00097   printf(<span class="stringliteral">&quot;Removed equalities: \n&quot;</span>);
<a name="l00098"></a>00098   <a class="code" href="matrix__addon_8h.html#a11468159c7fa7d75fadfa10e2e929fee" title="Polylib matrix addons Mainly, deals with polyhedra represented in implicit form (set...">show_matrix</a>(Eqs); 
<a name="l00099"></a>00099   printf(<span class="stringliteral">&quot;Polyhedron without equalities involving only parameters: \n&quot;</span>);
<a name="l00100"></a>00100   <a class="code" href="matrix__addon_8h.html#a11468159c7fa7d75fadfa10e2e929fee" title="Polylib matrix addons Mainly, deals with polyhedra represented in implicit form (set...">show_matrix</a>(M1);  
<a name="l00101"></a>00101   printf(<span class="stringliteral">&quot;Context without equalities: \n&quot;</span>);
<a name="l00102"></a>00102   <a class="code" href="matrix__addon_8h.html#a11468159c7fa7d75fadfa10e2e929fee" title="Polylib matrix addons Mainly, deals with polyhedra represented in implicit form (set...">show_matrix</a>(C1);  
<a name="l00103"></a>00103   
<a name="l00104"></a>00104   <span class="comment">/* compute the supposedly-same polyhedron, using the extracted equalities */</span>
<a name="l00105"></a>00105   Pm = <a class="code" href="polyhedron_8c.html#aefb77665a187d751bdd44f106b12465e" 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#a508eb31b6faa4939e1c32adaef41b8c8">maxRays</a>);
<a name="l00106"></a>00106   Pcp = <a class="code" href="polyhedron_8c.html#aefb77665a187d751bdd44f106b12465e" 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#a508eb31b6faa4939e1c32adaef41b8c8">maxRays</a>);
<a name="l00107"></a>00107   Peqs = <a class="code" href="polyhedron_8c.html#affd77db2a2f748d557ab6be0fcede209">align_context</a>(Pcp, Pm-&gt;<a class="code" href="structpolyhedron.html#a2a02cea8b7ba3dde415041b8b2373bc8">Dimension</a>, <a class="code" href="testCompressParms_8c.html#a508eb31b6faa4939e1c32adaef41b8c8">maxRays</a>);
<a name="l00108"></a>00108   <a class="code" href="polyhedron_8c.html#a4ae97b9794e3a616f1d38c68e6515cc3">Polyhedron_Free</a>(Pcp);
<a name="l00109"></a>00109   Pcp = <a class="code" href="polyhedron_8c.html#ac5a1a2751f0b833183560af25b18033b">DomainIntersection</a>(Pm, Peqs, <a class="code" href="testCompressParms_8c.html#a508eb31b6faa4939e1c32adaef41b8c8">maxRays</a>);
<a name="l00110"></a>00110   <a class="code" href="polyhedron_8c.html#a4ae97b9794e3a616f1d38c68e6515cc3">Polyhedron_Free</a>(Peqs);
<a name="l00111"></a>00111   <a class="code" href="polyhedron_8c.html#a4ae97b9794e3a616f1d38c68e6515cc3">Polyhedron_Free</a>(Pm);
<a name="l00112"></a>00112   Peqs = <a class="code" href="polyhedron_8c.html#aefb77665a187d751bdd44f106b12465e" 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#a508eb31b6faa4939e1c32adaef41b8c8">maxRays</a>);
<a name="l00113"></a>00113   <a class="code" href="matrix_8c.html#afcb312b7c12a6997cd66964ecc34e1a6">Matrix_Free</a>(Eqs);
<a name="l00114"></a>00114   <a class="code" href="matrix_8c.html#afcb312b7c12a6997cd66964ecc34e1a6">Matrix_Free</a>(M1);
<a name="l00115"></a>00115   <a class="code" href="matrix_8c.html#afcb312b7c12a6997cd66964ecc34e1a6">Matrix_Free</a>(C1);
<a name="l00116"></a>00116   Pint = <a class="code" href="polyhedron_8c.html#ac5a1a2751f0b833183560af25b18033b">DomainIntersection</a>(Pcp, Peqs, <a class="code" href="testCompressParms_8c.html#a508eb31b6faa4939e1c32adaef41b8c8">maxRays</a>);
<a name="l00117"></a>00117   <a class="code" href="polyhedron_8c.html#a4ae97b9794e3a616f1d38c68e6515cc3">Polyhedron_Free</a>(Pcp);
<a name="l00118"></a>00118   <a class="code" href="polyhedron_8c.html#a4ae97b9794e3a616f1d38c68e6515cc3">Polyhedron_Free</a>(Peqs);
<a name="l00119"></a>00119 
<a name="l00120"></a>00120   <span class="comment">/* test their equality */</span>
<a name="l00121"></a>00121   <span class="keywordflow">if</span> (!<a class="code" href="polyhedron_8c.html#a107a96d44465428ffcd25f1ab3d67b43">PolyhedronIncludes</a>(Pint, Pc)) {
<a name="l00122"></a>00122     isOk = 0;
<a name="l00123"></a>00123   }
<a name="l00124"></a>00124   <span class="keywordflow">else</span> {
<a name="l00125"></a>00125     <span class="keywordflow">if</span> (!<a class="code" href="polyhedron_8c.html#a107a96d44465428ffcd25f1ab3d67b43">PolyhedronIncludes</a>(Pc, Pint)) {
<a name="l00126"></a>00126       isOk = 0;
<a name="l00127"></a>00127     }
<a name="l00128"></a>00128   }
<a name="l00129"></a>00129   <a class="code" href="polyhedron_8c.html#a4ae97b9794e3a616f1d38c68e6515cc3">Polyhedron_Free</a>(Pc);
<a name="l00130"></a>00130   <a class="code" href="polyhedron_8c.html#a4ae97b9794e3a616f1d38c68e6515cc3">Polyhedron_Free</a>(Pint);
<a name="l00131"></a>00131   <span class="keywordflow">return</span> isOk;
<a name="l00132"></a>00132 } <span class="comment">/* test_Constraints_Remove_parm_eqs() */</span>
<a name="l00133"></a>00133 
<a name="l00134"></a>00134 <span class="comment"></span>
<a name="l00135"></a>00135 <span class="comment">/** extracts the equalities holding on the parameters only, try to introduce</span>
<a name="l00136"></a>00136 <span class="comment">    them back and compare the two polyhedra.</span>
<a name="l00137"></a>00137 <span class="comment">    Reads a polyhedron and a context.</span>
<a name="l00138"></a>00138 <span class="comment"> */</span>
<a name="l00139"></a><a class="code" href="testCompressParms_8c.html#a9f6efefce285d8dcb806a7baabba1d5d">00139</a> <span class="keywordtype">int</span> <a class="code" href="testCompressParms_8c.html#a9f6efefce285d8dcb806a7baabba1d5d" 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="l00140"></a>00140   <span class="keywordtype">int</span> isOk = 1;
<a name="l00141"></a>00141   <a class="code" href="structmatrix.html">Matrix</a> * M, *C;
<a name="l00142"></a>00142   <a class="code" href="structpolyhedron.html">Polyhedron</a> *Pm, *Pc, *Pcp, *Peqs, *Pint, *Pint1;
<a name="l00143"></a>00143   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> * elimParms;
<a name="l00144"></a>00144   printf(<span class="stringliteral">&quot;----- test_Polyhedron_Remove_parm_eqs() -----\n&quot;</span>);
<a name="l00145"></a>00145 
<a name="l00146"></a>00146   M = <a class="code" href="Matop_8c.html#a9d027e9fc6b85e6fa37fc284bf1b5e06">Matrix_Copy</a>(A);
<a name="l00147"></a>00147   C = <a class="code" href="Matop_8c.html#a9d027e9fc6b85e6fa37fc284bf1b5e06">Matrix_Copy</a>(B);
<a name="l00148"></a>00148 
<a name="l00149"></a>00149    <span class="comment">/* compute the combined polyhedron */</span>
<a name="l00150"></a>00150   Pm = <a class="code" href="polyhedron_8c.html#aefb77665a187d751bdd44f106b12465e" 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#a508eb31b6faa4939e1c32adaef41b8c8">maxRays</a>);
<a name="l00151"></a>00151   Pc = <a class="code" href="polyhedron_8c.html#aefb77665a187d751bdd44f106b12465e" 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#a508eb31b6faa4939e1c32adaef41b8c8">maxRays</a>);
<a name="l00152"></a>00152   Pcp = <a class="code" href="polyhedron_8c.html#affd77db2a2f748d557ab6be0fcede209">align_context</a>(Pc, Pm-&gt;<a class="code" href="structpolyhedron.html#a2a02cea8b7ba3dde415041b8b2373bc8">Dimension</a>, <a class="code" href="testCompressParms_8c.html#a508eb31b6faa4939e1c32adaef41b8c8">maxRays</a>);
<a name="l00153"></a>00153   <a class="code" href="polyhedron_8c.html#a4ae97b9794e3a616f1d38c68e6515cc3">Polyhedron_Free</a>(Pc);
<a name="l00154"></a>00154   Pint1 = <a class="code" href="polyhedron_8c.html#ac5a1a2751f0b833183560af25b18033b">DomainIntersection</a>(Pm, Pcp, <a class="code" href="testCompressParms_8c.html#a508eb31b6faa4939e1c32adaef41b8c8">maxRays</a>);
<a name="l00155"></a>00155   <a class="code" href="polyhedron_8c.html#a4ae97b9794e3a616f1d38c68e6515cc3">Polyhedron_Free</a>(Pm);
<a name="l00156"></a>00156   <a class="code" href="polyhedron_8c.html#a4ae97b9794e3a616f1d38c68e6515cc3">Polyhedron_Free</a>(Pcp);
<a name="l00157"></a>00157   <a class="code" href="matrix_8c.html#afcb312b7c12a6997cd66964ecc34e1a6">Matrix_Free</a>(M);
<a name="l00158"></a>00158   <a class="code" href="matrix_8c.html#afcb312b7c12a6997cd66964ecc34e1a6">Matrix_Free</a>(C);
<a name="l00159"></a>00159 
<a name="l00160"></a>00160   M = <a class="code" href="Matop_8c.html#a9d027e9fc6b85e6fa37fc284bf1b5e06">Matrix_Copy</a>(A);
<a name="l00161"></a>00161   C = <a class="code" href="Matop_8c.html#a9d027e9fc6b85e6fa37fc284bf1b5e06">Matrix_Copy</a>(B);
<a name="l00162"></a>00162   <span class="comment">/* extract the parm-equalities, expressed in the combined space */</span>
<a name="l00163"></a>00163   Pm = <a class="code" href="polyhedron_8c.html#aefb77665a187d751bdd44f106b12465e" 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#a508eb31b6faa4939e1c32adaef41b8c8">maxRays</a>);
<a name="l00164"></a>00164   Pc = <a class="code" href="polyhedron_8c.html#aefb77665a187d751bdd44f106b12465e" 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#a508eb31b6faa4939e1c32adaef41b8c8">maxRays</a>);
<a name="l00165"></a>00165   <a class="code" href="matrix_8c.html#afcb312b7c12a6997cd66964ecc34e1a6">Matrix_Free</a>(M);
<a name="l00166"></a>00166   <a class="code" href="matrix_8c.html#afcb312b7c12a6997cd66964ecc34e1a6">Matrix_Free</a>(C);
<a name="l00167"></a>00167   Peqs = <a class="code" href="compress__parms_8c.html#a86df15994f14c73d49980bbf61f6f7e5" 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="l00168"></a>00168   
<a name="l00169"></a>00169   <span class="comment">/* compute the supposedly-same polyhedron, using the extracted equalities */</span>
<a name="l00170"></a>00170   Pcp = <a class="code" href="polyhedron_8c.html#affd77db2a2f748d557ab6be0fcede209">align_context</a>(Pc, Pm-&gt;<a class="code" href="structpolyhedron.html#a2a02cea8b7ba3dde415041b8b2373bc8">Dimension</a>, <a class="code" href="testCompressParms_8c.html#a508eb31b6faa4939e1c32adaef41b8c8">maxRays</a>);
<a name="l00171"></a>00171   <a class="code" href="polyhedron_8c.html#a4ae97b9794e3a616f1d38c68e6515cc3">Polyhedron_Free</a>(Pc);
<a name="l00172"></a>00172   Pc = <a class="code" href="polyhedron_8c.html#ac5a1a2751f0b833183560af25b18033b">DomainIntersection</a>(Pm, Pcp, <a class="code" href="testCompressParms_8c.html#a508eb31b6faa4939e1c32adaef41b8c8">maxRays</a>);
<a name="l00173"></a>00173   <a class="code" href="polyhedron_8c.html#a4ae97b9794e3a616f1d38c68e6515cc3">Polyhedron_Free</a>(Pm);
<a name="l00174"></a>00174   <a class="code" href="polyhedron_8c.html#a4ae97b9794e3a616f1d38c68e6515cc3">Polyhedron_Free</a>(Pcp);
<a name="l00175"></a>00175  
<a name="l00176"></a>00176   Pint = <a class="code" href="polyhedron_8c.html#ac5a1a2751f0b833183560af25b18033b">DomainIntersection</a>(Pc, Peqs, <a class="code" href="testCompressParms_8c.html#a508eb31b6faa4939e1c32adaef41b8c8">maxRays</a>);
<a name="l00177"></a>00177   <a class="code" href="polyhedron_8c.html#a4ae97b9794e3a616f1d38c68e6515cc3">Polyhedron_Free</a>(Pc);
<a name="l00178"></a>00178   <a class="code" href="polyhedron_8c.html#a4ae97b9794e3a616f1d38c68e6515cc3">Polyhedron_Free</a>(Peqs);
<a name="l00179"></a>00179 
<a name="l00180"></a>00180   <span class="comment">/* test their equality */</span>
<a name="l00181"></a>00181   <span class="keywordflow">if</span> (!<a class="code" href="polyhedron_8c.html#a107a96d44465428ffcd25f1ab3d67b43">PolyhedronIncludes</a>(Pint, Pint1)) {
<a name="l00182"></a>00182     isOk = 0;
<a name="l00183"></a>00183   }
<a name="l00184"></a>00184   <span class="keywordflow">else</span> {
<a name="l00185"></a>00185     <span class="keywordflow">if</span> (!<a class="code" href="polyhedron_8c.html#a107a96d44465428ffcd25f1ab3d67b43">PolyhedronIncludes</a>(Pint1, Pint)) {
<a name="l00186"></a>00186       isOk = 0;
<a name="l00187"></a>00187     }
<a name="l00188"></a>00188   }
<a name="l00189"></a>00189   <a class="code" href="polyhedron_8c.html#a4ae97b9794e3a616f1d38c68e6515cc3">Polyhedron_Free</a>(Pint1);
<a name="l00190"></a>00190   <a class="code" href="polyhedron_8c.html#a4ae97b9794e3a616f1d38c68e6515cc3">Polyhedron_Free</a>(Pint);
<a name="l00191"></a>00191   <span class="keywordflow">return</span> isOk;
<a name="l00192"></a>00192 } <span class="comment">/* test_Polyhedron_remove_parm_eqs() */</span>
<a name="l00193"></a>00193 
<a name="l00194"></a>00194 <span class="comment"></span>
<a name="l00195"></a>00195 <span class="comment">/** </span>
<a name="l00196"></a>00196 <span class="comment"> * Eliminates certain parameters from a vector of values for parameters</span>
<a name="l00197"></a>00197 <span class="comment"> * @param origParms the initial vector of values of parameters</span>
<a name="l00198"></a>00198 <span class="comment"> * @param elimParms the list of parameters to be eliminated in the vector</span>
<a name="l00199"></a>00199 <span class="comment"> * @param newParms the vector of values without the eliminated ones.</span>
<a name="l00200"></a>00200 <span class="comment"> */</span>
<a name="l00201"></a><a class="code" href="testCompressParms_8c.html#afb08ff56d9ba869c706006d6b5c941ee">00201</a> <span class="keywordtype">void</span> <a class="code" href="testCompressParms_8c.html#afb08ff56d9ba869c706006d6b5c941ee" 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="l00202"></a>00202                        <a class="code" href="structmatrix.html">Matrix</a> ** newParms) {
<a name="l00203"></a>00203   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i, j=0;
<a name="l00204"></a>00204   <span class="keywordflow">if</span> (*newParms==NULL) {
<a name="l00205"></a>00205     *newParms = <a class="code" href="matrix_8c.html#ac0b29e1d99a2823ad00b5f2157879d80">Matrix_Alloc</a>(1, origParms-&gt;<a class="code" href="structmatrix.html#a68858fd3b57684ef38bdfce13c65d182">NbColumns</a>-elimParms[0]);
<a name="l00206"></a>00206   } <span class="comment">/* else assume enough space is allocated */</span>
<a name="l00207"></a>00207   <span class="keywordflow">if</span> (elimParms[0] ==0) {
<a name="l00208"></a>00208     <span class="keywordflow">for</span> (i=0; i&lt; origParms-&gt;<a class="code" href="structmatrix.html#a68858fd3b57684ef38bdfce13c65d182">NbColumns</a>; i++) {
<a name="l00209"></a>00209       <a class="code" href="source_2arith_2arithmetique_8h.html#a864613888dc46f15679aa4f63e468f89">value_assign</a>((*newParms)-&gt;p[0][i], origParms-&gt;<a class="code" href="structmatrix.html#a2c6d840d8d911ae95c2ae4fc96f4b5ba">p</a>[0][i]);
<a name="l00210"></a>00210     }
<a name="l00211"></a>00211   }
<a name="l00212"></a>00212   <span class="keywordflow">for</span> (i=0; i&lt; origParms-&gt;<a class="code" href="structmatrix.html#a68858fd3b57684ef38bdfce13c65d182">NbColumns</a>; i++) {
<a name="l00213"></a>00213     <span class="keywordflow">if</span> (i!=elimParms[j+1]) {
<a name="l00214"></a>00214       <a class="code" href="source_2arith_2arithmetique_8h.html#a864613888dc46f15679aa4f63e468f89">value_assign</a>((*newParms)-&gt;p[0][i-j], origParms-&gt;<a class="code" href="structmatrix.html#a2c6d840d8d911ae95c2ae4fc96f4b5ba">p</a>[0][i]);
<a name="l00215"></a>00215     }
<a name="l00216"></a>00216     <span class="keywordflow">else</span> {
<a name="l00217"></a>00217       j++;
<a name="l00218"></a>00218     }
<a name="l00219"></a>00219   }
<a name="l00220"></a>00220 }<span class="comment">/* valuesWithoutElim */</span>
<a name="l00221"></a>00221 
<a name="l00222"></a>00222 <span class="comment"></span>
<a name="l00223"></a>00223 <span class="comment">/**</span>
<a name="l00224"></a>00224 <span class="comment"> * takes a list of parameter names, a list ofparameters to eliminate, and</span>
<a name="l00225"></a>00225 <span class="comment"> * returns the list of parameters without the eliminated ones.</span>
<a name="l00226"></a>00226 <span class="comment"> * @param parms the original parameter names</span>
<a name="l00227"></a>00227 <span class="comment"> * @param nbParms the number of original parmaeters</span>
<a name="l00228"></a>00228 <span class="comment"> * @param elimParms the array-list of indices of parameters to eliminate (first</span>
<a name="l00229"></a>00229 <span class="comment"> * element set to the number of its elements)</span>
<a name="l00230"></a>00230 <span class="comment"> * @param newParms the returned list of parm names. Allocated if set to NULL,</span>
<a name="l00231"></a>00231 <span class="comment"> * reused if not.</span>
<a name="l00232"></a>00232 <span class="comment"> * @return the number of names in the returned list.</span>
<a name="l00233"></a>00233 <span class="comment"> */</span>
<a name="l00234"></a><a class="code" href="testCompressParms_8c.html#a79ed5185c3a1604ee7b0c7e7e6071992">00234</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="testCompressParms_8c.html#a79ed5185c3a1604ee7b0c7e7e6071992" 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="l00235"></a>00235                               <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> * elimParms,
<a name="l00236"></a>00236                               <span class="keyword">const</span> <span class="keywordtype">char</span> ***newParms)
<a name="l00237"></a>00237 {
<a name="l00238"></a>00238   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i, j=0;
<a name="l00239"></a>00239   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> newSize = nbParms -elimParms[0];
<a name="l00240"></a>00240   <span class="keywordflow">if</span> (<a class="code" href="testCompressParms_8c.html#a5bac03f035357aca807646cff28cdc4e" title="IdtestCompressParms.c,v 1.4 2006/09/18 03:09:03 meister Exp ">dbg</a>) {
<a name="l00241"></a>00241     printf(<span class="stringliteral">&quot;Size of the new parm vector: %d\n&quot;</span>, newSize);
<a name="l00242"></a>00242   }
<a name="l00243"></a>00243   <span class="keywordflow">if</span> (*newParms==NULL) {
<a name="l00244"></a>00244     *newParms = malloc(newSize*<span class="keyword">sizeof</span>(<span class="keywordtype">char</span> *));
<a name="l00245"></a>00245   }
<a name="l00246"></a>00246   <span class="keywordflow">if</span> (elimParms[0]==0) {
<a name="l00247"></a>00247     <span class="keywordflow">for</span> (i=0; i&lt; nbParms; i++) {
<a name="l00248"></a>00248       (*newParms)[i] = strdup(parms[i]);
<a name="l00249"></a>00249     }
<a name="l00250"></a>00250     <span class="keywordflow">return</span> newSize;
<a name="l00251"></a>00251   }
<a name="l00252"></a>00252   <span class="keywordflow">for</span> (i=0; i&lt; nbParms; i++) {
<a name="l00253"></a>00253     <span class="keywordflow">if</span> (i!=elimParms[j+1]) {
<a name="l00254"></a>00254       (*newParms)[i-j] = strdup(parms[i]);
<a name="l00255"></a>00255     }
<a name="l00256"></a>00256     <span class="keywordflow">else</span> {
<a name="l00257"></a>00257       j++;
<a name="l00258"></a>00258     }
<a name="l00259"></a>00259   }
<a name="l00260"></a>00260   <span class="keywordflow">return</span> newSize;
<a name="l00261"></a>00261 }
<a name="l00262"></a>00262 
<a name="l00263"></a>00263 <span class="comment"></span>
<a name="l00264"></a>00264 <span class="comment">/**</span>
<a name="l00265"></a>00265 <span class="comment"> * Tests Constraints_fullDimensionize by comparing the Ehrhart polynomials </span>
<a name="l00266"></a>00266 <span class="comment"> * @param A the input set of constraints</span>
<a name="l00267"></a>00267 <span class="comment"> * @param B the corresponding context</span>
<a name="l00268"></a>00268 <span class="comment"> * @param the number of samples to generate for the test</span>
<a name="l00269"></a>00269 <span class="comment"> * @return 1 if the Ehrhart polynomial had the same value for the</span>
<a name="l00270"></a>00270 <span class="comment"> * full-dimensional and non-full-dimensional sets of constraints, for their</span>
<a name="l00271"></a>00271 <span class="comment"> * corresponding sample parameters values.</span>
<a name="l00272"></a>00272 <span class="comment"> */</span>
<a name="l00273"></a><a class="code" href="testCompressParms_8c.html#a0ff3dbf2dc32c224644d0fb139dbcbb8">00273</a> <span class="keywordtype">int</span> <a class="code" href="testCompressParms_8c.html#a0ff3dbf2dc32c224644d0fb139dbcbb8" 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="l00274"></a>00274                                       <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nbSamples) {
<a name="l00275"></a>00275   <a class="code" href="structmatrix.html">Matrix</a> * Eqs= NULL, *ParmEqs=NULL, *VL=NULL;
<a name="l00276"></a>00276   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> * elimVars=NULL, * elimParms=NULL;
<a name="l00277"></a>00277   <a class="code" href="structmatrix.html">Matrix</a> * sample, * smallerSample=NULL;
<a name="l00278"></a>00278   <a class="code" href="structmatrix.html">Matrix</a> * transfSample=NULL;
<a name="l00279"></a>00279   <a class="code" href="structmatrix.html">Matrix</a> * parmVL=NULL;
<a name="l00280"></a>00280   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i, j, r, nbOrigParms, nbParms;
<a name="l00281"></a>00281   Value div, mod, *origVal=NULL, *fullVal=NULL;
<a name="l00282"></a>00282   <a class="code" href="structmatrix.html">Matrix</a> * VLInv;
<a name="l00283"></a>00283   <a class="code" href="structpolyhedron.html">Polyhedron</a> * P, *PC;
<a name="l00284"></a>00284   <a class="code" href="structmatrix.html">Matrix</a> * M, *C;
<a name="l00285"></a>00285   <a class="code" href="struct__enumeration.html">Enumeration</a> * origEP, * fullEP=NULL;
<a name="l00286"></a>00286   <span class="keyword">const</span> <span class="keywordtype">char</span> **fullNames = NULL;
<a name="l00287"></a>00287   <span class="keywordtype">int</span> isOk = 1; <span class="comment">/* holds the result */</span>
<a name="l00288"></a>00288 
<a name="l00289"></a>00289   <span class="comment">/* compute the origial Ehrhart polynomial */</span>
<a name="l00290"></a>00290   M = <a class="code" href="Matop_8c.html#a9d027e9fc6b85e6fa37fc284bf1b5e06">Matrix_Copy</a>(A);
<a name="l00291"></a>00291   C = <a class="code" href="Matop_8c.html#a9d027e9fc6b85e6fa37fc284bf1b5e06">Matrix_Copy</a>(B);
<a name="l00292"></a>00292   P = <a class="code" href="polyhedron_8c.html#aefb77665a187d751bdd44f106b12465e" 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#a508eb31b6faa4939e1c32adaef41b8c8">maxRays</a>);
<a name="l00293"></a>00293   PC = <a class="code" href="polyhedron_8c.html#aefb77665a187d751bdd44f106b12465e" 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#a508eb31b6faa4939e1c32adaef41b8c8">maxRays</a>);
<a name="l00294"></a>00294   origEP = <a class="code" href="ehrhart_8c.html#a3c3e442b1d2c924f03f02f9e9283141a" title="Procedure to count points in a parameterized polytope.">Polyhedron_Enumerate</a>(P, PC, <a class="code" href="testCompressParms_8c.html#a508eb31b6faa4939e1c32adaef41b8c8">maxRays</a>, <a class="code" href="testCompressParms_8c.html#a9c1dc820fe3bdbb2b3657bd03338fc91">origNames</a>);
<a name="l00295"></a>00295   <a class="code" href="matrix_8c.html#afcb312b7c12a6997cd66964ecc34e1a6">Matrix_Free</a>(M);
<a name="l00296"></a>00296   <a class="code" href="matrix_8c.html#afcb312b7c12a6997cd66964ecc34e1a6">Matrix_Free</a>(C);
<a name="l00297"></a>00297   <a class="code" href="polyhedron_8c.html#a4ae97b9794e3a616f1d38c68e6515cc3">Polyhedron_Free</a>(P);
<a name="l00298"></a>00298   <a class="code" href="polyhedron_8c.html#a4ae97b9794e3a616f1d38c68e6515cc3">Polyhedron_Free</a>(PC);
<a name="l00299"></a>00299 
<a name="l00300"></a>00300   <span class="comment">/* compute the full-dimensional polyhedron corresponding to A and its Ehrhart</span>
<a name="l00301"></a>00301 <span class="comment">     polynomial */</span>
<a name="l00302"></a>00302   M = <a class="code" href="Matop_8c.html#a9d027e9fc6b85e6fa37fc284bf1b5e06">Matrix_Copy</a>(A);
<a name="l00303"></a>00303   C = <a class="code" href="Matop_8c.html#a9d027e9fc6b85e6fa37fc284bf1b5e06">Matrix_Copy</a>(B);
<a name="l00304"></a>00304   nbOrigParms = B-&gt;<a class="code" href="structmatrix.html#a68858fd3b57684ef38bdfce13c65d182">NbColumns</a>-2;
<a name="l00305"></a>00305   <a class="code" href="compress__parms_8c.html#a1a9cd66aec30116cfd3b07c2e38c73c8" 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="l00306"></a>00306                                &amp;elimVars, &amp;elimParms, <a class="code" href="testCompressParms_8c.html#a508eb31b6faa4939e1c32adaef41b8c8">maxRays</a>);
<a name="l00307"></a>00307   <span class="keywordflow">if</span> ((Eqs-&gt;<a class="code" href="structmatrix.html#a16ad614d15c6e81c0041e877b623c72d">NbRows</a>==0) &amp;&amp; (ParmEqs-&gt;NbRows==0)) {
<a name="l00308"></a>00308     <a class="code" href="matrix_8c.html#afcb312b7c12a6997cd66964ecc34e1a6">Matrix_Free</a>(M);
<a name="l00309"></a>00309     <a class="code" href="matrix_8c.html#afcb312b7c12a6997cd66964ecc34e1a6">Matrix_Free</a>(C);
<a name="l00310"></a>00310     <a class="code" href="matrix_8c.html#afcb312b7c12a6997cd66964ecc34e1a6">Matrix_Free</a>(Eqs);
<a name="l00311"></a>00311     <a class="code" href="matrix_8c.html#afcb312b7c12a6997cd66964ecc34e1a6">Matrix_Free</a>(ParmEqs);
<a name="l00312"></a>00312     free(elimVars);
<a name="l00313"></a>00313     free(elimParms);
<a name="l00314"></a>00314     <span class="keywordflow">return</span> 1;
<a name="l00315"></a>00315   }
<a name="l00316"></a>00316   nbParms = C-&gt;<a class="code" href="structmatrix.html#a68858fd3b57684ef38bdfce13c65d182">NbColumns</a>-2;
<a name="l00317"></a>00317   P = <a class="code" href="polyhedron_8c.html#aefb77665a187d751bdd44f106b12465e" 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#a508eb31b6faa4939e1c32adaef41b8c8">maxRays</a>);
<a name="l00318"></a>00318   PC = <a class="code" href="polyhedron_8c.html#aefb77665a187d751bdd44f106b12465e" 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#a508eb31b6faa4939e1c32adaef41b8c8">maxRays</a>);
<a name="l00319"></a>00319   <a class="code" href="testCompressParms_8c.html#a79ed5185c3a1604ee7b0c7e7e6071992" title="takes a list of parameter names, a list ofparameters to eliminate, and returns the...">namesWithoutElim</a>(<a class="code" href="testCompressParms_8c.html#a9c1dc820fe3bdbb2b3657bd03338fc91">origNames</a>, nbOrigParms, elimParms, &amp;fullNames);
<a name="l00320"></a>00320   fullEP = <a class="code" href="ehrhart_8c.html#a3c3e442b1d2c924f03f02f9e9283141a" title="Procedure to count points in a parameterized polytope.">Polyhedron_Enumerate</a>(P, PC, <a class="code" href="testCompressParms_8c.html#a508eb31b6faa4939e1c32adaef41b8c8">maxRays</a>, fullNames);
<a name="l00321"></a>00321   <a class="code" href="matrix_8c.html#afcb312b7c12a6997cd66964ecc34e1a6">Matrix_Free</a>(M);
<a name="l00322"></a>00322   <a class="code" href="matrix_8c.html#afcb312b7c12a6997cd66964ecc34e1a6">Matrix_Free</a>(C);
<a name="l00323"></a>00323   <a class="code" href="polyhedron_8c.html#a4ae97b9794e3a616f1d38c68e6515cc3">Polyhedron_Free</a>(P);
<a name="l00324"></a>00324   <a class="code" href="polyhedron_8c.html#a4ae97b9794e3a616f1d38c68e6515cc3">Polyhedron_Free</a>(PC);
<a name="l00325"></a>00325   
<a name="l00326"></a>00326   <span class="comment">/* make a set of sample parameter values and compare the corresponding</span>
<a name="l00327"></a>00327 <span class="comment">     Ehrhart polnomials */</span>
<a name="l00328"></a>00328   sample = <a class="code" href="matrix_8c.html#ac0b29e1d99a2823ad00b5f2157879d80">Matrix_Alloc</a>(1,nbOrigParms);
<a name="l00329"></a>00329   transfSample = <a class="code" href="matrix_8c.html#ac0b29e1d99a2823ad00b5f2157879d80">Matrix_Alloc</a>(1, nbParms);
<a name="l00330"></a>00330   <a class="code" href="compress__parms_8c.html#a9a39676ea22cef575c08911c95badba2" title="Given a matrix that defines a full-dimensional affine lattice, returns the affine...">Lattice_extractSubLattice</a>(VL, nbParms, &amp;parmVL);
<a name="l00331"></a>00331   VLInv = <a class="code" href="matrix_8c.html#ac0b29e1d99a2823ad00b5f2157879d80">Matrix_Alloc</a>(parmVL-&gt;<a class="code" href="structmatrix.html#a16ad614d15c6e81c0041e877b623c72d">NbRows</a>, parmVL-&gt;<a class="code" href="structmatrix.html#a16ad614d15c6e81c0041e877b623c72d">NbRows</a>+1);
<a name="l00332"></a>00332   <a class="code" href="matrix_8c.html#ae2b2f031eb75c5011091536d7ef4befc">MatInverse</a>(parmVL, VLInv);
<a name="l00333"></a>00333   <span class="keywordflow">if</span> (<a class="code" href="testCompressParms_8c.html#a5bac03f035357aca807646cff28cdc4e" title="IdtestCompressParms.c,v 1.4 2006/09/18 03:09:03 meister Exp ">dbg</a>) {
<a name="l00334"></a>00334     <a class="code" href="matrix__addon_8h.html#a11468159c7fa7d75fadfa10e2e929fee" title="Polylib matrix addons Mainly, deals with polyhedra represented in implicit form (set...">show_matrix</a>(parmVL);
<a name="l00335"></a>00335     <a class="code" href="matrix__addon_8h.html#a11468159c7fa7d75fadfa10e2e929fee" title="Polylib matrix addons Mainly, deals with polyhedra represented in implicit form (set...">show_matrix</a>(VLInv);
<a name="l00336"></a>00336   }
<a name="l00337"></a>00337   srand(nbSamples);
<a name="l00338"></a>00338   <a class="code" href="source_2arith_2arithmetique_8h.html#af71a2ca0294a19cff0cdcbdcc052ee27">value_init</a>(mod);
<a name="l00339"></a>00339   <a class="code" href="source_2arith_2arithmetique_8h.html#af71a2ca0294a19cff0cdcbdcc052ee27">value_init</a>(div);
<a name="l00340"></a>00340   <span class="keywordflow">for</span> (i = 0; i&lt; nbSamples; i++) {
<a name="l00341"></a>00341     <span class="comment">/* create a random sample */</span>
<a name="l00342"></a>00342     <span class="keywordflow">for</span> (j=0; j&lt; nbOrigParms; j++) {
<a name="l00343"></a>00343       <a class="code" href="source_2arith_2arithmetique_8h.html#a8cc56567a4a29271559ac0fd5f6c5bfa">value_set_si</a>(sample-&gt;<a class="code" href="structmatrix.html#a2c6d840d8d911ae95c2ae4fc96f4b5ba">p</a>[0][j], rand()%100);
<a name="l00344"></a>00344     }
<a name="l00345"></a>00345     <span class="comment">/* compute the corresponding value for the full-dimensional</span>
<a name="l00346"></a>00346 <span class="comment">       constraints */</span>
<a name="l00347"></a>00347     <a class="code" href="testCompressParms_8c.html#afb08ff56d9ba869c706006d6b5c941ee" title="Eliminates certain parameters from a vector of values for parameters.">valuesWithoutElim</a>(sample, elimParms, &amp;smallerSample); 
<a name="l00348"></a>00348     <span class="comment">/* (N&apos; i&apos; 1)^T = VLinv.(N i 1)^T*/</span>
<a name="l00349"></a>00349     <span class="keywordflow">for</span> (r = 0; r &lt; nbParms; r++) {
<a name="l00350"></a>00350       <a class="code" href="vector_8c.html#a29ab9dcdb0a2666d54c5698d5e3a802f">Inner_Product</a>(&amp;(VLInv-&gt;<a class="code" href="structmatrix.html#a2c6d840d8d911ae95c2ae4fc96f4b5ba">p</a>[r][0]), smallerSample-&gt;<a class="code" href="structmatrix.html#a2c6d840d8d911ae95c2ae4fc96f4b5ba">p</a>[0], nbParms,
<a name="l00351"></a>00351                     &amp;(transfSample-&gt;<a class="code" href="structmatrix.html#a2c6d840d8d911ae95c2ae4fc96f4b5ba">p</a>[0][r]));
<a name="l00352"></a>00352       <span class="comment">/* add the constant part */</span>
<a name="l00353"></a>00353       <a class="code" href="source_2arith_2arithmetique_8h.html#aea216a0e750144f0e6eb9b0a82583739">value_addto</a>(transfSample-&gt;<a class="code" href="structmatrix.html#a2c6d840d8d911ae95c2ae4fc96f4b5ba">p</a>[0][r], transfSample-&gt;<a class="code" href="structmatrix.html#a2c6d840d8d911ae95c2ae4fc96f4b5ba">p</a>[0][r], 
<a name="l00354"></a>00354                                          VLInv-&gt;<a class="code" href="structmatrix.html#a2c6d840d8d911ae95c2ae4fc96f4b5ba">p</a>[r][VLInv-&gt;<a class="code" href="structmatrix.html#a68858fd3b57684ef38bdfce13c65d182">NbColumns</a>-2]);
<a name="l00355"></a>00355       <a class="code" href="source_2arith_2arithmetique_8h.html#a1d5fd16549d53f259c2e7699a22045cb">value_pdivision</a>(div, transfSample-&gt;<a class="code" href="structmatrix.html#a2c6d840d8d911ae95c2ae4fc96f4b5ba">p</a>[0][r], 
<a name="l00356"></a>00356                          VLInv-&gt;<a class="code" href="structmatrix.html#a2c6d840d8d911ae95c2ae4fc96f4b5ba">p</a>[r][VLInv-&gt;<a class="code" href="structmatrix.html#a68858fd3b57684ef38bdfce13c65d182">NbColumns</a>-1]);
<a name="l00357"></a>00357       <a class="code" href="source_2arith_2arithmetique_8h.html#ae92a58eee3b6f5c6a99e6837e68407e1">value_subtract</a>(mod, transfSample-&gt;<a class="code" href="structmatrix.html#a2c6d840d8d911ae95c2ae4fc96f4b5ba">p</a>[0][r], div);
<a name="l00358"></a>00358       <span class="comment">/* if the parameters value does not belong to the validity lattice, the</span>
<a name="l00359"></a>00359 <span class="comment">         Ehrhart polynomial is zero. */</span>
<a name="l00360"></a>00360       <span class="keywordflow">if</span> (!<a class="code" href="source_2arith_2arithmetique_8h.html#a827532f2140ae2aa96e46baebae09723">value_zero_p</a>(mod)) {
<a name="l00361"></a>00361         fullEP = <a class="code" href="ehrhart_8c.html#ab9d946f486657c1fde2ff63537f004fb" 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#a508eb31b6faa4939e1c32adaef41b8c8">maxRays</a>);
<a name="l00362"></a>00362         <span class="keywordflow">break</span>;
<a name="l00363"></a>00363       }
<a name="l00364"></a>00364     }
<a name="l00365"></a>00365     <span class="comment">/* compare the two forms of the Ehrhart polynomial.*/</span>
<a name="l00366"></a>00366     <span class="keywordflow">if</span> (origEP ==NULL) <span class="keywordflow">break</span>; <span class="comment">/* NULL has loose semantics for EPs */</span>
<a name="l00367"></a>00367     origVal = <a class="code" href="eval__ehrhart_8c.html#af970e7f69cbf548188a8f3754001a150">compute_poly</a>(origEP, sample-&gt;<a class="code" href="structmatrix.html#a2c6d840d8d911ae95c2ae4fc96f4b5ba">p</a>[0]);
<a name="l00368"></a>00368     fullVal = <a class="code" href="eval__ehrhart_8c.html#af970e7f69cbf548188a8f3754001a150">compute_poly</a>(fullEP, transfSample-&gt;<a class="code" href="structmatrix.html#a2c6d840d8d911ae95c2ae4fc96f4b5ba">p</a>[0]);
<a name="l00369"></a>00369     <span class="keywordflow">if</span> (!<a class="code" href="source_2arith_2arithmetique_8h.html#aaac63aa93e7c9fa23ebcde2dc80a12b9">value_eq</a>(*origVal, *fullVal)) {
<a name="l00370"></a>00370       isOk = 0;
<a name="l00371"></a>00371       printf(<span class="stringliteral">&quot;EPs don&apos;t match. \n Original value = &quot;</span>);
<a name="l00372"></a>00372       <a class="code" href="source_2arith_2arithmetique_8h.html#ad34605b56b571830b928b50a74d618b7">value_print</a>(stdout, VALUE_FMT, *origVal);
<a name="l00373"></a>00373       printf(<span class="stringliteral">&quot;\n Original sample = [&quot;</span>);
<a name="l00374"></a>00374       <span class="keywordflow">for</span> (j=0; j&lt;sample-&gt;<a class="code" href="structmatrix.html#a68858fd3b57684ef38bdfce13c65d182">NbColumns</a>; j++) {
<a name="l00375"></a>00375         <a class="code" href="source_2arith_2arithmetique_8h.html#ad34605b56b571830b928b50a74d618b7">value_print</a>(stdout, VALUE_FMT, sample-&gt;<a class="code" href="structmatrix.html#a2c6d840d8d911ae95c2ae4fc96f4b5ba">p</a>[0][j]);
<a name="l00376"></a>00376         printf(<span class="stringliteral">&quot; &quot;</span>);
<a name="l00377"></a>00377       }
<a name="l00378"></a>00378       printf(<span class="stringliteral">&quot;] \n EP = &quot;</span>);
<a name="l00379"></a>00379       <span class="keywordflow">if</span>(origEP!=NULL) {
<a name="l00380"></a>00380         <a class="code" href="ehrhart_8c.html#a99718adf05e065181f35f5ca847f94b0">print_evalue</a>(stdout, &amp;(origEP-&gt;<a class="code" href="struct__enumeration.html#aa499b062a10ce16356e9b52d25cae0d9">EP</a>), <a class="code" href="testCompressParms_8c.html#a9c1dc820fe3bdbb2b3657bd03338fc91">origNames</a>);
<a name="l00381"></a>00381       }
<a name="l00382"></a>00382       <span class="keywordflow">else</span> {
<a name="l00383"></a>00383         printf(<span class="stringliteral">&quot;NULL&quot;</span>);
<a name="l00384"></a>00384       }
<a name="l00385"></a>00385       printf(<span class="stringliteral">&quot; \n Full-dimensional value = &quot;</span>);
<a name="l00386"></a>00386       <a class="code" href="source_2arith_2arithmetique_8h.html#ad34605b56b571830b928b50a74d618b7">value_print</a>(stdout, <a class="code" href="types_8h.html#ae6f16bcd4a42ba51cbb003e3d1e1cde6">P_VALUE_FMT</a>, *fullVal);
<a name="l00387"></a>00387       printf(<span class="stringliteral">&quot;\n full-dimensional sample = [&quot;</span>);
<a name="l00388"></a>00388       <span class="keywordflow">for</span> (j=0; j&lt;sample-&gt;<a class="code" href="structmatrix.html#a68858fd3b57684ef38bdfce13c65d182">NbColumns</a>; j++) {
<a name="l00389"></a>00389         <a class="code" href="source_2arith_2arithmetique_8h.html#ad34605b56b571830b928b50a74d618b7">value_print</a>(stdout, VALUE_FMT, transfSample-&gt;<a class="code" href="structmatrix.html#a2c6d840d8d911ae95c2ae4fc96f4b5ba">p</a>[0][j]);
<a name="l00390"></a>00390         printf(<span class="stringliteral">&quot; &quot;</span>);
<a name="l00391"></a>00391       }
<a name="l00392"></a>00392       printf(<span class="stringliteral">&quot;] \n EP = &quot;</span>);
<a name="l00393"></a>00393       <span class="keywordflow">if</span>(origEP!=NULL) {
<a name="l00394"></a>00394         <a class="code" href="ehrhart_8c.html#a99718adf05e065181f35f5ca847f94b0">print_evalue</a>(stdout, &amp;(origEP-&gt;<a class="code" href="struct__enumeration.html#aa499b062a10ce16356e9b52d25cae0d9">EP</a>), fullNames);
<a name="l00395"></a>00395       }
<a name="l00396"></a>00396       <span class="keywordflow">else</span> {
<a name="l00397"></a>00397         printf(<span class="stringliteral">&quot;NULL&quot;</span>);
<a name="l00398"></a>00398       }
<a name="l00399"></a>00399     }
<a name="l00400"></a>00400     <span class="keywordflow">if</span> (<a class="code" href="testCompressParms_8c.html#a5bac03f035357aca807646cff28cdc4e" title="IdtestCompressParms.c,v 1.4 2006/09/18 03:09:03 meister Exp ">dbg</a>) {
<a name="l00401"></a>00401       printf(<span class="stringliteral">&quot;\nOriginal value = &quot;</span>);
<a name="l00402"></a>00402       <a class="code" href="source_2arith_2arithmetique_8h.html#ad34605b56b571830b928b50a74d618b7">value_print</a>(stdout, VALUE_FMT, *origVal);
<a name="l00403"></a>00403       printf(<span class="stringliteral">&quot;\nFull-dimensional value = &quot;</span>);
<a name="l00404"></a>00404       <a class="code" href="source_2arith_2arithmetique_8h.html#ad34605b56b571830b928b50a74d618b7">value_print</a>(stdout, <a class="code" href="types_8h.html#ae6f16bcd4a42ba51cbb003e3d1e1cde6">P_VALUE_FMT</a>, *fullVal);
<a name="l00405"></a>00405       printf(<span class="stringliteral">&quot;\n&quot;</span>);
<a name="l00406"></a>00406     }
<a name="l00407"></a>00407     <a class="code" href="source_2arith_2arithmetique_8h.html#ab9b282921e85a0527d462d331533d619">value_clear</a>(*origVal);
<a name="l00408"></a>00408     <a class="code" href="source_2arith_2arithmetique_8h.html#ab9b282921e85a0527d462d331533d619">value_clear</a>(*fullVal);
<a name="l00409"></a>00409   }
<a name="l00410"></a>00410   <a class="code" href="source_2arith_2arithmetique_8h.html#ab9b282921e85a0527d462d331533d619">value_clear</a>(mod);
<a name="l00411"></a>00411   <a class="code" href="source_2arith_2arithmetique_8h.html#ab9b282921e85a0527d462d331533d619">value_clear</a>(div);
<a name="l00412"></a>00412   <a class="code" href="matrix_8c.html#afcb312b7c12a6997cd66964ecc34e1a6">Matrix_Free</a>(sample);
<a name="l00413"></a>00413   <a class="code" href="matrix_8c.html#afcb312b7c12a6997cd66964ecc34e1a6">Matrix_Free</a>(smallerSample);
<a name="l00414"></a>00414   <a class="code" href="matrix_8c.html#afcb312b7c12a6997cd66964ecc34e1a6">Matrix_Free</a>(transfSample);
<a name="l00415"></a>00415   <a class="code" href="ehrhart_8c.html#aeaadcf4c2404d688eb1443486ad8becb">Enumeration_Free</a>(origEP);
<a name="l00416"></a>00416   <a class="code" href="ehrhart_8c.html#aeaadcf4c2404d688eb1443486ad8becb">Enumeration_Free</a>(fullEP);
<a name="l00417"></a>00417   <span class="keywordflow">return</span> isOk;
<a name="l00418"></a>00418 } <span class="comment">/* test_Constraints_fullDimensionize */</span>
</pre></div></div>
<hr size="1"/><address style="text-align: right;"><small>Generated on Wed Nov 25 17:45:26 2009 for polylib by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
</body>
</html>