source: git/coeffs/test.cc @ 1112b76

spielwiese
Last change on this file since 1112b76 was 1112b76, checked in by Oleksandr Motsak <motsak@…>, 14 years ago
Bug in rmodulon.cc: nrnSetExp expects some previous initialization but ignores the given parameter
  • Property mode set to 100644
File size: 4.0 KB
Line 
1#include "config.h"
2
3#include <auxiliary.h>
4
5#include <coeffs.h>
6#include <numbers.h>
7#include <reporter.h>
8#include <omalloc.h>
9
10#include <longrat.h>
11#include <gnumpfl.h>
12#include <gnumpc.h>
13#include <shortfl.h>
14
15
16#include <rmodulon.h>
17#include <rmodulo2m.h>
18
19#include <iostream>
20using namespace std;
21
22
23bool Test(const coeffs r)
24{
25  number a = n_Init(666, r); 
26  n_Test(a,r);
27 
28  number b = n_Add(a, a, r);
29  n_Test(b,r);
30
31  StringSetS("a: "); n_Write(a, r);PrintS(StringAppend("\n"));
32  StringSetS("b: "); n_Write(b, r);PrintS(StringAppend("\n"));
33
34  n_Delete(&a, r);
35  n_Delete(&b, r);
36
37  return false;
38}
39
40
41
42bool Test(const n_coeffType type, void* p = NULL)
43{
44
45  cout  << endl << "----------------------- Testing coeffs: [" << type <<
46                "]: -----------------------" << endl;
47
48  const coeffs r = nInitChar( type, p );
49
50  assume( r != NULL );
51
52  nSetChar( r );
53
54  assume( getCoeffType(r) == type );
55
56  assume( r->cfInit != NULL );
57  assume( r->cfWrite != NULL );
58  assume( r->cfAdd != NULL );
59  assume( r->cfDelete != NULL );
60
61
62  if( type == n_Q )
63  {
64    assume( r->cfInit == nlInit );
65    assume( r->cfWrite == nlWrite );
66    assume( r->cfAdd == nlAdd );
67    assume( r->cfDelete == nlDelete );   
68  }
69  else if( type == n_long_R )
70  {
71    assume( r->cfInit == ngfInit );
72    assume( r->cfWrite == ngfWrite );
73    assume( r->cfAdd == ngfAdd );
74    assume( r->cfDelete == ngfDelete );
75  }
76  else if( type == n_long_C )
77  {
78    assume( r->cfInit == ngcInit );
79    assume( r->cfWrite == ngcWrite );
80    assume( r->cfAdd == ngcAdd );
81    assume( r->cfDelete == ngcDelete );   
82  }
83  else if( type == n_R )
84  {
85    assume( r->cfInit == nrInit );
86    assume( r->cfWrite == nrWrite );
87    assume( r->cfAdd == nrAdd );
88//    assume( r->cfDelete == nrDelete ); // No?
89  }
90#ifdef HAVE_RINGS
91  else if( type == n_Z2m )
92  {
93    assume( r->cfInit == nr2mInit );
94    assume( r->cfWrite == nr2mWrite );
95    assume( r->cfAdd == nr2mAdd );
96    assume( r->cfDelete == ndDelete );
97  }
98  else if( type == n_Zn )
99  {
100    assume( r->cfInit == nrnInit );
101    assume( r->cfWrite == nrnWrite );
102    assume( r->cfAdd == nrnAdd );
103    assume( r->cfDelete == nrnDelete );
104  }
105#endif 
106  else
107  {
108    // ...
109  }
110
111  bool ret = Test( r );
112
113  nKillChar( r );
114
115  return ret;
116}
117
118
119
120
121int main()
122{
123  int c = 0;
124 
125  n_coeffType type;
126 
127  type = nRegister( n_Q, nlInitChar); assume( type == n_Q );
128  if( Test(type) )
129    c ++;
130
131  type = nRegister( n_long_R, ngfInitChar); assume( type == n_long_R );
132  if( Test(type) )
133    c ++;
134
135  type = nRegister( n_long_C, ngcInitChar); assume( type == n_long_C );
136  if( Test(type) )
137    c ++;
138 
139  type = nRegister( n_R, nrInitChar); assume( type == n_R );
140  if( Test(type) )
141    c ++;
142
143
144#ifdef HAVE_RINGS
145  type = nRegister( n_Z2m, nr2mInitChar); assume( type == n_Z2m );
146  if( Test(type, (void*) 2) )
147    c ++;
148#endif
149
150
151#ifdef HAVE_RINGS
152  type = nRegister( n_Zn, nrnInitChar); assume( type == n_Zn );
153  if( Test(type, (void*) 3) )
154    c ++;
155/* BUG:
156Program received signal SIGSEGV, Segmentation fault.
1570x00007ffff7b91f1b in __gmpz_set () from /usr/lib/libgmp.so.10
158(gdb) bt
159#0  0x00007ffff7b91f1b in __gmpz_set () from /usr/lib/libgmp.so.10
160#1  0x00000000004177a5 in nrnSetExp (m=0, r=0x7ffff7f44ae8) at rmodulon.cc:549
161
162#2  0x0000000000417814 in nrnInitExp (m=0, r=0x7ffff7f44ae8) at rmodulon.cc:556
163
164#3  0x0000000000416122 in nrnInitChar (r=0x7ffff7f44ae8) at rmodulon.cc:34
165#4  0x0000000000413278 in nInitChar (t=n_Zn, parameter=0x0) at numbers.cc:146
166#5  0x0000000000402f10 in Test (type=n_Zn) at test.cc:47
167rmodulon.cc:549       mpz_set(r->nrnModul, r->ringflaga);
168(gdb) l
169544         r->nrnModul = (int_number) omAllocBin(gmp_nrz_bin);
170545         mpz_init(r->nrnModul);
171546         nrnMinusOne = (int_number) omAllocBin(gmp_nrz_bin);
172547         mpz_init(nrnMinusOne);
173548       }
174rmodulon.cc:549       mpz_set(r->nrnModul, r->ringflaga);
175550       mpz_pow_ui(r->nrnModul, r->nrnModul, nrnExponent);
176551       mpz_sub_ui(nrnMinusOne, r->nrnModul, 1);
177552     }
178553
179(gdb) p r->nrnModul
180$1 = (int_number) 0x7ffff7f461a8
181(gdb) p r->ringflaga
182$2 = (int_number) 0x0
183*/ 
184
185#endif
186
187 
188 
189  return c;
190
191}
Note: See TracBrowser for help on using the repository browser.