423 lines
7.5 KiB
C++
423 lines
7.5 KiB
C++
|
|
||
|
#include <knotkit.h>
|
||
|
|
||
|
void
|
||
|
test_vector ()
|
||
|
{
|
||
|
basedvector<int, 1> v;
|
||
|
assert (v.size () == 0);
|
||
|
assert (v.capacity () == 0);
|
||
|
|
||
|
v.append (69);
|
||
|
assert (v.size () == 1);
|
||
|
assert (v[1] == 69);
|
||
|
|
||
|
v.append (8);
|
||
|
v.append (13);
|
||
|
assert (v.pop () == 13);
|
||
|
assert (v.pop () == 8);
|
||
|
v.append (14);
|
||
|
v.append (17);
|
||
|
v.append (36);
|
||
|
v.append (101);
|
||
|
assert (v.size () == 5);
|
||
|
assert (v.pop () == 101);
|
||
|
assert (v.pop () == 36);
|
||
|
assert (v.pop () == 17);
|
||
|
assert (v.pop () == 14);
|
||
|
assert (v.pop () == 69);
|
||
|
assert (v.size () == 0);
|
||
|
|
||
|
v = basedvector<int, 1> ();
|
||
|
assert (v.size () == 0);
|
||
|
assert (v.capacity () == 0);
|
||
|
|
||
|
v.append (69);
|
||
|
v.append (14);
|
||
|
v.append (17);
|
||
|
v.append (36);
|
||
|
v.append (101);
|
||
|
assert (v.size () == 5);
|
||
|
|
||
|
v.resize (10);
|
||
|
assert (v.size () == 10);
|
||
|
assert (v.capacity () >= v.size ());
|
||
|
|
||
|
assert (v[1] == 69);
|
||
|
assert (v[2] == 14);
|
||
|
assert (v[3] == 17);
|
||
|
assert (v[4] == 36);
|
||
|
assert (v[5] == 101);
|
||
|
|
||
|
v[1] = 52;
|
||
|
v[2] = 666;
|
||
|
v[3] = 55559;
|
||
|
v[4] = 1721;
|
||
|
v[5] = -24;
|
||
|
v[6] = 8893;
|
||
|
v[7] = 42;
|
||
|
v[8] = 173;
|
||
|
v[9] = 115;
|
||
|
v[10] = 382;
|
||
|
|
||
|
/* shared */
|
||
|
basedvector<int, 1> v2 (v);
|
||
|
assert (v2.size () == 10);
|
||
|
for (int i = 1; i <= 10; i ++)
|
||
|
assert (v2[i] == v[i]);
|
||
|
|
||
|
assert (v2[8] == 173);
|
||
|
v[8] = 174;
|
||
|
assert (v2[8] == 174);
|
||
|
|
||
|
basedvector<int, 1> u (COPY, v);
|
||
|
assert (u.size () == 10);
|
||
|
for (int i = 1; i <= 10; i ++)
|
||
|
assert (u[i] == v[i]);
|
||
|
|
||
|
int x[6] = { 7, 4, 2, 3, 9, 1 };
|
||
|
basedvector<int, 1> w (4, x);
|
||
|
assert (w.size () == 4);
|
||
|
for (int i = 0; i < 4; i ++)
|
||
|
assert (w[i + 1] == x[i]);
|
||
|
|
||
|
basedvector<int, 1> y (6, v);
|
||
|
assert (y.size () == 6);
|
||
|
for (int i = 1; i <= 6; i ++)
|
||
|
assert (y[i] == v[i]);
|
||
|
|
||
|
y = w;
|
||
|
assert (y.size () == 4);
|
||
|
for (int i = 1; i <= 4; i ++)
|
||
|
assert (y[i] == w[i]);
|
||
|
}
|
||
|
|
||
|
void
|
||
|
test_bitset ()
|
||
|
{
|
||
|
bitset s;
|
||
|
assert (s.size () == 0);
|
||
|
assert (s.card () == 0);
|
||
|
|
||
|
bitset t (100);
|
||
|
assert (t.size () == 100);
|
||
|
assert (t.card () == 0);
|
||
|
t.push (52);
|
||
|
t.push (1);
|
||
|
t.push (31);
|
||
|
t.push (32);
|
||
|
t.push (100);
|
||
|
t.push (63);
|
||
|
t.push (7);
|
||
|
|
||
|
int c = 0;
|
||
|
for (bitset_const_iter i = t; i; i ++)
|
||
|
{
|
||
|
assert (t(i.val ()));
|
||
|
c ++;
|
||
|
}
|
||
|
assert (c == 7);
|
||
|
|
||
|
assert (t.card () == 7);
|
||
|
|
||
|
assert (t(52));
|
||
|
assert (t(1));
|
||
|
assert (t(31));
|
||
|
assert (t(32));
|
||
|
assert (t(100));
|
||
|
assert (t(63));
|
||
|
assert (t(7));
|
||
|
|
||
|
assert (!t(2));
|
||
|
assert (!t(15));
|
||
|
assert (!t(47));
|
||
|
assert (!t(99));
|
||
|
|
||
|
t -= 52;
|
||
|
t -= 63;
|
||
|
t -= 7;
|
||
|
t += 100;
|
||
|
t += 82;
|
||
|
t -= 47;
|
||
|
assert (t.card () == 5);
|
||
|
assert (!t(52));
|
||
|
assert (!t(63));
|
||
|
assert (!t(7));
|
||
|
assert (!t(47));
|
||
|
assert (t(100));
|
||
|
assert (t(82));
|
||
|
|
||
|
bitset u (t);
|
||
|
assert (u.size () == 100);
|
||
|
assert (u.card () == 5);
|
||
|
}
|
||
|
|
||
|
template<class unsignedset1> void
|
||
|
test_unsignedset1 ()
|
||
|
{
|
||
|
unsignedset1 s (94);
|
||
|
assert (s.card () == 0);
|
||
|
|
||
|
unsignedset1 t (300);
|
||
|
assert (t.card () == 0);
|
||
|
t.push (52);
|
||
|
t.push (1);
|
||
|
t.push (31);
|
||
|
t.push (32);
|
||
|
t.push (33);
|
||
|
t.push (63);
|
||
|
t.push (64);
|
||
|
t.push (65);
|
||
|
t.push (300);
|
||
|
t.push (299);
|
||
|
t.push (243);
|
||
|
t.push (172);
|
||
|
t.push (122);
|
||
|
t.push (70);
|
||
|
|
||
|
int c = 0;
|
||
|
for (typename unsignedset1::const_iter i = t; i; i ++)
|
||
|
{
|
||
|
assert (t(i.val ()));
|
||
|
c ++;
|
||
|
}
|
||
|
assert (c == 14);
|
||
|
|
||
|
assert (t.card () == 14);
|
||
|
|
||
|
assert (t(52));
|
||
|
assert (t(1));
|
||
|
assert (t(31));
|
||
|
assert (t(32));
|
||
|
assert (t(33));
|
||
|
assert (t(63));
|
||
|
assert (t(64));
|
||
|
assert (t(65));
|
||
|
assert (t(300));
|
||
|
assert (t(299));
|
||
|
assert (t(243));
|
||
|
assert (t(172));
|
||
|
assert (t(122));
|
||
|
assert (t(70));
|
||
|
|
||
|
assert (!t(2));
|
||
|
assert (!t(15));
|
||
|
assert (!t(47));
|
||
|
assert (!t(99));
|
||
|
assert (!t(127));
|
||
|
assert (!t(128));
|
||
|
assert (!t(129));
|
||
|
|
||
|
t -= 52;
|
||
|
t -= 63;
|
||
|
t -= 64;
|
||
|
t -= 65;
|
||
|
t -= 7;
|
||
|
t += 100;
|
||
|
t += 82;
|
||
|
t -= 47;
|
||
|
assert (t.card () == 12);
|
||
|
assert (!t(52));
|
||
|
assert (!t(63));
|
||
|
assert (!t(64));
|
||
|
assert (!t(65));
|
||
|
assert (!t(7));
|
||
|
assert (!t(47));
|
||
|
assert (t(100));
|
||
|
assert (t(82));
|
||
|
|
||
|
unsignedset1 u (COPY, t);
|
||
|
assert (u.card () == 12);
|
||
|
}
|
||
|
|
||
|
void
|
||
|
test_map ()
|
||
|
{
|
||
|
map<int, int> m;
|
||
|
assert (m.card () == 0);
|
||
|
m.push (1, 7);
|
||
|
m.set (2, 9);
|
||
|
m[3] = 14;
|
||
|
m[4] = 23;
|
||
|
assert (m.card () == 4);
|
||
|
|
||
|
assert (m % 1);
|
||
|
assert (m % 2);
|
||
|
assert (m % 3);
|
||
|
assert (m % 4);
|
||
|
assert (! (m % 5));
|
||
|
|
||
|
assert (m(1) == 7);
|
||
|
assert (m(2) == 9);
|
||
|
assert (m(3) == 14);
|
||
|
assert (m(4) == 23);
|
||
|
|
||
|
m[2] = 17;
|
||
|
assert (m(2) == 17);
|
||
|
|
||
|
int c = 0;
|
||
|
for (map<int, int>::iter i = m; i; i ++)
|
||
|
{
|
||
|
int k = i.key ();
|
||
|
assert (k >= 1);
|
||
|
assert (k <= 4);
|
||
|
switch (k)
|
||
|
{
|
||
|
case 1: assert (i.val () == 7); break;
|
||
|
case 2: assert (i.val () == 17); break;
|
||
|
case 3: assert (i.val () == 14); break;
|
||
|
case 4: assert (i.val () == 23); break;
|
||
|
default: abort ();
|
||
|
}
|
||
|
c ++;
|
||
|
}
|
||
|
assert (c == 4);
|
||
|
|
||
|
map<int, int> n (COPY, m);
|
||
|
assert (n.card () == 4);
|
||
|
m[2] = 111;
|
||
|
assert (n(2) == 17);
|
||
|
}
|
||
|
|
||
|
void
|
||
|
test_polynomial ()
|
||
|
{
|
||
|
vector<int> coeffs (3);
|
||
|
coeffs[0] = 7;
|
||
|
coeffs[1] = 0;
|
||
|
coeffs[2] = 2;
|
||
|
polynomial<int> p (coeffs);
|
||
|
p.show_self ();
|
||
|
printf ("\n");
|
||
|
|
||
|
polynomial<int> q (coeffs);
|
||
|
q += p;
|
||
|
show (q);
|
||
|
printf ("\n");
|
||
|
|
||
|
q *= p;
|
||
|
show (q);
|
||
|
printf ("\n");
|
||
|
}
|
||
|
|
||
|
void
|
||
|
test_laurentpoly ()
|
||
|
{
|
||
|
vector<int> c (3);
|
||
|
c[0] = 1;
|
||
|
c[1] = 0;
|
||
|
c[2] = 1;
|
||
|
laurentpoly<int> p (-1, c);
|
||
|
|
||
|
show (p);
|
||
|
printf ("\n");
|
||
|
|
||
|
p *= p;
|
||
|
show (p);
|
||
|
printf ("\n");
|
||
|
}
|
||
|
|
||
|
#if 0
|
||
|
void
|
||
|
test_vs ()
|
||
|
{
|
||
|
grading gr;
|
||
|
gr.h = -1;
|
||
|
gr.q = 1;
|
||
|
|
||
|
basedvector<grading, 1> g5_gr (5);
|
||
|
g5_gr[1] = g5_gr[2] = g5_gr[3] = g5_gr[4] = g5_gr[5] = gr;
|
||
|
|
||
|
basedvector<ptr<vsgenerator>, 1> gs5;
|
||
|
gs5.append (new euclideangenerator (1));
|
||
|
gs5.append (new euclideangenerator (2));
|
||
|
gs5.append (new euclideangenerator (3));
|
||
|
gs5.append (new euclideangenerator (4));
|
||
|
gs5.append (new euclideangenerator (5));
|
||
|
ptr<const vectorspace<F2> > e5 = new vectorspace<F2> (gs5, g5_gr);
|
||
|
printf ("e5: ");
|
||
|
e5->show_self ();
|
||
|
printf ("\n");
|
||
|
|
||
|
vselt<F2> x1 = e5->singleton (1);
|
||
|
x1 += e5->singleton (3);
|
||
|
|
||
|
vselt<F2> x2 = e5->singleton (2);
|
||
|
x2 += e5->singleton (3);
|
||
|
x2 += e5->singleton (5);
|
||
|
|
||
|
vselt<F2> x3 = e5->singleton (4);
|
||
|
x3 += e5->singleton (5);
|
||
|
|
||
|
vselt<F2> x4 = e5->singleton (1);
|
||
|
x4 += e5->singleton (2);
|
||
|
x4 += e5->singleton (5);
|
||
|
|
||
|
basedvector<vselt<F2>, 1> xs (4);
|
||
|
xs[1] = x1;
|
||
|
xs[2] = x2;
|
||
|
xs[3] = x3;
|
||
|
xs[4] = x4;
|
||
|
|
||
|
ptr<const vectorspace<F2> > vs3 = e5->subspace (xs);
|
||
|
assert (vs3->dim () == 3);
|
||
|
printf ("vs3: ");
|
||
|
vs3->show_self ();
|
||
|
printf ("\n");
|
||
|
|
||
|
basedvector<grading, 1> g2_gr (2);
|
||
|
g2_gr[1] = g2_gr[2] = gr;
|
||
|
|
||
|
basedvector<ptr<vsgenerator>, 1> gs2;
|
||
|
gs2.append (new euclideangenerator (1));
|
||
|
gs2.append (new euclideangenerator (2));
|
||
|
ptr<const vectorspace<F2> > e2 = new vectorspace<F2> (gs2, g2_gr);
|
||
|
|
||
|
basedvector<grading, 1> g3_gr (3);
|
||
|
g3_gr[1] = g3_gr[2] = g3_gr[3] = gr;
|
||
|
|
||
|
basedvector<ptr<vsgenerator>, 1> gs3;
|
||
|
gs3.append (new euclideangenerator (1));
|
||
|
gs3.append (new euclideangenerator (2));
|
||
|
gs3.append (new euclideangenerator (3));
|
||
|
ptr<const vectorspace<F2> > e3 = new vectorspace<F2> (gs3, g3_gr);
|
||
|
|
||
|
basedvector<vselt<F2>, 1> cols (3);
|
||
|
cols[1] = e2->singleton (1);
|
||
|
cols[2] = e2->singleton (2);
|
||
|
vselt<F2> x5 = e2->singleton (1);
|
||
|
x5 += e2->singleton (2);
|
||
|
cols[3] = x5;
|
||
|
vsmap<F2> m (e3, e2, cols);
|
||
|
|
||
|
ptr<const vectorspace<F2> > mker = m.kernel ();
|
||
|
printf ("mker: ");
|
||
|
mker->show_self ();
|
||
|
printf ("\n");
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
void
|
||
|
test_fields ()
|
||
|
{
|
||
|
Q a (2, 1);
|
||
|
Q b (-2, 1);
|
||
|
a /= b;
|
||
|
assert (a == -1);
|
||
|
}
|
||
|
|
||
|
int
|
||
|
main ()
|
||
|
{
|
||
|
test_vector ();
|
||
|
test_bitset ();
|
||
|
test_unsignedset1<unsignedset> ();
|
||
|
test_unsignedset1<bitset> ();
|
||
|
test_unsignedset1<ullmanset<1> > ();
|
||
|
test_map ();
|
||
|
test_polynomial ();
|
||
|
test_laurentpoly ();
|
||
|
// test_vs ();
|
||
|
test_fields ();
|
||
|
}
|