|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T t
Length: 2817 (0xb01) Types: TextFile Names: »tList.cc«
└─⟦a05ed705a⟧ Bits:30007078 DKUUG GNU 2/12/89 └─⟦cc8755de2⟧ »./libg++-1.36.1.tar.Z« └─⟦23757c458⟧ └─⟦this⟧ »libg++/tests/tList.cc«
/* test/demo of generic lists */ #include <assert.h> #define tassert(ex) {if ((ex)) cerr << #ex << "\n"; \ else _assert(#ex, __FILE__,__LINE__); } #include <stream.h> #include "iList.h" int int_compare(int a, int b) { return a - b; } int inc(int x) { return x + 1; } int plus(int x, int y) { return x + y; } void printint(int x) { cout << x << " "; } void print(intList& l) { l.apply(printint); cout << "\n"; } int is_odd(int x) { return x & 1; } int is_even(int x) { return (x & 1) == 0; } intList sequence(int lo, int hi) { if (lo > hi) return intList(); else return intList(lo, sequence(lo+1, hi)); } #include <MLCG.h> MLCG randgen; intList randseq(int n) { if (n <= 0) return intList(); else return intList(randgen.asLong() % 50, randseq(--n)); } main() { intList a = sequence(1, 20); cout << "\nintList a = sequence(1, 20);\n"; print(a); assert(a.OK()); for (int i = 0; i < 20; ++i) assert(a[i] == i + 1); assert(a.position(2) == 1); intList b = randseq(20); cout << "\nintList b = randseq(20);\n"; print(b); intList c = concat(a, b); cout << "\nintList c = concat(a, b);\n"; print(c); assert(c.contains(a)); assert(c.contains(b)); assert(!(c.find(a).null())); assert(c.find(b) == b); intList d = map(inc, a); for (i = 0; i < 20; ++i) assert(d[i] == a[i] + 1); cout << "\nintList d = map(inc, a);\n"; print(d); intList e = reverse(a); cout << "\nintList e = reverse(a);\n"; print(e); for (i = 0; i < 20; ++i) assert(e[i] == a[19 - i]); intList f = select(is_odd, a); cout << "\nintList f = select(is_odd, a);\n"; print(f); intList ff = select(is_even, f); assert(ff.null()); int red = a.reduce(plus, 0); cout << "\nint red = a.reduce(plus, 0);\n"; cout << red; int second = a[2]; cout << "\nint second = a[2];\n"; cout << second; intList g = combine(plus, a, b); cout << "\nintList g = combine(plus, a, b);\n"; print(g); for (i = 0; i < 20; ++i) assert(g[i] == a[i] + b[i]); g.del((intPredicate)is_odd); cout << "\ng.del(is_odd);\n"; print(g); ff = select(is_odd, g); assert(ff.null()); b.sort(int_compare); for (i = 1; i < 20; ++i) assert(b[i] >= b[i-1]); cout << "\nb.sort(int_compare);\n"; print(b); intList h = merge(a, b, int_compare); cout << "\nintList h = merge(a, b, int_compare);\n"; print(h); for (i = 1; i < 40; ++i) assert(h[i] >= h[i-1]); for (Pix p = a.first(); p; a.next(p)) assert(h.contains(a(p))); for (p = b.first(); p; b.next(p)) assert(h.contains(b(p))); cout << "\nh via Pix:\n"; for (p = h.first(); p; h.next(p)) cout << h(p) << ", "; cout << "\n"; assert(a.OK()); assert(b.OK()); assert(c.OK()); assert(d.OK()); assert(e.OK()); assert(f.OK()); assert(g.OK()); assert(h.OK()); cout << "\ndone\n"; }