Frobby 0.9.9
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
22TEST_SUITE(RawSquareFreeTerm)
23
24using namespace SquareFreeTermOps;
25namespace Ops = SquareFreeTermOps;
26
27TEST(RawSquareFreeTerm, getWordCount) {
28 ASSERT_EQ(getWordCount(0), 1u);
29 ASSERT_EQ(getWordCount(1), 1u);
30
34
35 ASSERT_EQ(getWordCount(10 * BitsPerWord - 1), 10u);
37 ASSERT_EQ(getWordCount(10 * BitsPerWord + 1), 11u);
38}
39
40TEST(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
57TEST(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
67
68 assign(b, b + wordCount, a);
69
72
73 setExponent(a, 1, false);
74
77
78 deleteTerm(a);
79 deleteTerm(b);
80}
81
82TEST(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
106TEST(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
125TEST(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
146TEST(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
167TEST(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
185TEST(RawSquareFreeTerm, IsRelativelyPrime) {
186 const size_t maxVarCount = 2 * BitsPerWord + 1;
187 for (size_t varCount = 0; varCount <= maxVarCount; ++varCount) {