Frobby
0.9.9
src
RawSquareFreeTermTest.cpp
Go to the documentation of this file.
1
/* Frobby: Software for monomial ideal computations.
2
Copyright (C) 2010 University of Aarhus
3
Contact Bjarke Hammersholt Roune for license information (www.broune.com)
4
5
This program is free software; you can redistribute it and/or modify
6
it under the terms of the GNU General Public License as published by
7
the Free Software Foundation; either version 2 of the License, or
8
(at your option) any later version.
9
10
This program is distributed in the hope that it will be useful,
11
but WITHOUT ANY WARRANTY; without even the implied warranty of
12
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
GNU General Public License for more details.
14
15
You should have received a copy of the GNU General Public License
16
along with this program. If not, see http://www.gnu.org/licenses/.
17
*/
18
#include "
stdinc.h
"
19
#include "
RawSquareFreeTerm.h
"
20
#include "
tests.h
"
21
22
TEST_SUITE
(RawSquareFreeTerm)
23
24
using namespace
SquareFreeTermOps
;
25
namespace
Ops
=
SquareFreeTermOps
;
26
27
TEST
(RawSquareFreeTerm,
getWordCount
) {
28
ASSERT_EQ
(
getWordCount
(0), 1u);
29
ASSERT_EQ
(
getWordCount
(1), 1u);
30
31
ASSERT_EQ
(
getWordCount
(
BitsPerWord
- 1), 1u);
32
ASSERT_EQ
(
getWordCount
(
BitsPerWord
), 1u);
33
ASSERT_EQ
(
getWordCount
(
BitsPerWord
+ 1), 2u);
34
35
ASSERT_EQ
(
getWordCount
(10 *
BitsPerWord
- 1), 10u);
36
ASSERT_EQ
(
getWordCount
(10 *
BitsPerWord
), 10u);
37
ASSERT_EQ
(
getWordCount
(10 *
BitsPerWord
+ 1), 11u);
38
}
39
40
TEST
(RawSquareFreeTerm, SetAndGetExponent) {
41
const
size_t
varCount =
BitsPerWord
* 2;
42
Word
* term =
newTerm
(varCount);
43
44
for
(
size_t
var = 0; var < varCount; ++var) {
45
ASSERT_FALSE
(
getExponent
(term, var));
46
setExponent
(term, var,
true
);
47
ASSERT_TRUE
(
getExponent
(term, var));
48
}
49
50
for
(
size_t
var = 0; var < varCount; ++var) {
51
ASSERT_TRUE
(
getExponent
(term, var));
52
setExponent
(term, var,
false
);
53
ASSERT_FALSE
(
getExponent
(term, var));
54
}
55
}
56
57
TEST
(RawSquareFreeTerm, Assign) {
58
const
size_t
varCount =
BitsPerWord
* 2;
59
const
size_t
wordCount =
getWordCount
(varCount);
60
Word
* a =
newTerm
(varCount);
61
Word
* b =
newTerm
(varCount);
62
63
setExponent
(a, 1,
true
);
64
65
ASSERT_TRUE
(
getExponent
(a, 1));
66
ASSERT_FALSE
(
getExponent
(b, 1));
67
68
assign
(b, b + wordCount, a);
69
70
ASSERT_TRUE
(
getExponent
(a, 1));
71
ASSERT_TRUE
(
getExponent
(b, 1));
72
73
setExponent
(a, 1,
false
);
74
75
ASSERT_FALSE
(
getExponent
(a, 1));
76
ASSERT_TRUE
(
getExponent
(b, 1));
77
78
deleteTerm
(a);
79
deleteTerm
(b);
80
}
81
82
TEST
(RawSquareFreeTerm, HasFullSupport) {
83
const
size_t
maxVarCount = 2 *
BitsPerWord
+ 1;
84
85
for
(
size_t
varCount = 0; varCount <= maxVarCount; ++varCount) {
86
Word
* term =
newTerm
(varCount);
87
88
for
(
size_t
var = 0; var < varCount; ++var) {
89
ASSERT_FALSE_SILENT
(
hasFullSupport
(term, varCount));
90
setExponent
(term, var,
true
);
91
}
92
ASSERT_TRUE_SILENT
(
hasFullSupport
(term, varCount));
93
94
for
(
size_t
var = 0; var < varCount; ++var) {
95
ASSERT_TRUE_SILENT
(
hasFullSupport
(term, varCount));
96
setExponent
(term, var,
false
);
97
ASSERT_FALSE_SILENT
(
hasFullSupport
(term, varCount));
98
setExponent
(term, var,
true
);
99
}
100
ASSERT_TRUE
(
hasFullSupport
(term, varCount));
101
102
deleteTerm
(term);
103
}
104
}
105
106
TEST
(RawSquareFreeTerm, IsIdentity) {
107
const
size_t
maxVarCount = 2 *
BitsPerWord
+ 1;
108
for
(
size_t
varCount = 0; varCount <= maxVarCount; ++varCount) {
109
Word
* term =
newTerm
(varCount);
110
Word
* termEnd = term +
getWordCount
(varCount);
111
112
ASSERT_TRUE
(
isIdentity
(term, termEnd));
113
for
(
size_t
var = 0; var < varCount; ++var) {
114
ASSERT_TRUE_SILENT
(
isIdentity
(term, termEnd));
115
setExponent
(term, var,
true
);
116
ASSERT_FALSE_SILENT
(
isIdentity
(term, termEnd));
117
setExponent
(term, var,
false
);
118
}
119
ASSERT_TRUE
(
isIdentity
(term, termEnd));
120
121
deleteTerm
(term);
122
}
123
}
124
125
TEST
(RawSquareFreeTerm, GetSizeOfSupport) {
126
const
size_t
maxVarCount = 2 *
BitsPerWord
+ 1;
127
for
(
size_t
varCount = 0; varCount <= maxVarCount; ++varCount) {
128
Word
* term =
newTerm
(varCount);
129
130
ASSERT_EQ
(
getSizeOfSupport
(term, varCount), 0u);
131
for
(
size_t
var = 0; var < varCount; ++var) {
132
setExponent
(term, var, 1);
133
ASSERT_EQ_SILENT
(
getSizeOfSupport
(term, varCount), 1u);
134
setExponent
(term, var, 0);
135
}
136
137
for
(
size_t
var = 0; var < varCount; ++var) {
138
setExponent
(term, var, 1);
139
ASSERT_EQ_SILENT
(
getSizeOfSupport
(term, varCount), var + 1);
140
}
141
142
deleteTerm
(term);
143
}
144
}
145
146
TEST
(RawSquareFreeTerm, SetToIdentity) {
147
const
size_t
maxVarCount = 2 *
BitsPerWord
+ 1;
148
for
(
size_t
varCount = 0; varCount <= maxVarCount; ++varCount) {
149
Word
* term =
newTerm
(varCount);
150
Word
* termEnd = term +
getWordCount
(varCount);
151
152
ASSERT_TRUE
(
isIdentity
(term, termEnd));
153
for
(
size_t
var = 0; var < varCount; ++var) {
154
setExponent
(term, var,
true
);
155
setToIdentity
(term, termEnd);
156
ASSERT_TRUE_SILENT
(
isIdentity
(term, termEnd));
157
158
setExponent
(term, var,
true
);
159
setToIdentity
(term, varCount);
160
ASSERT_TRUE_SILENT
(
isIdentity
(term, termEnd));
161
}
162
163
deleteTerm
(term);
164
}
165
}
166
167
TEST
(RawSquareFreeTerm, SetToAllVarProd) {
168
const
size_t
maxVarCount = 2 *
BitsPerWord
+ 1;
169
for
(
size_t
varCount = 0; varCount <= maxVarCount; ++varCount) {
170
Word
* term =
newTerm
(varCount);
171
172
setToAllVarProd
(term, varCount);
173
ASSERT_TRUE
(
hasFullSupport
(term, varCount));
174
for
(
size_t
var = 0; var < varCount; ++var) {
175
setExponent
(term, var,
false
);
176
setToAllVarProd
(term, varCount);
177
ASSERT_TRUE_SILENT
(
isValid
(term, varCount));
178
ASSERT_TRUE_SILENT
(
hasFullSupport
(term, varCount));
179
}
180
181
deleteTerm
(term);
182
}
183
}
184
185
TEST
(RawSquareFreeTerm, IsRelativelyPrime) {
186
const
size_t
maxVarCount = 2 *
BitsPerWord
+ 1;
187
for
(
size_t
varCount = 0; varCount <= maxVarCount; ++varCount) {