DAPPLE Example: tester

Source code:

// @TITLE "tester.cc -- test program" // // tester -- test driver for DAPPLE // // David Kotz 1994 // $Id: tester.cc,v 2.12 94/08/29 23:16:33 dfk SCOTT Locker: dfk $ #include #include #include "dapple.h" const int N = 5; // Vectors are size N const int rows = N; // Matrices are size N by M const int cols = 4; // Matrices are size N by M // which VP am I? useful for VP-specific math const intVector VP(N, Identity); // which row or column am I? useful for VP-specific math const intMatrix VProw(rows, cols, IdentityR); const intMatrix VPcol(rows, cols, IdentityC); static int square(const int x) { return (x*x); } int array[N] = {3, 4, 0, -3, 2}; int P_array[N] = {4, 2, 0, 1, 3}; // a permutation int main(int argc, char **argv) { intVector A(N, array), B(N, 4), C(N); const intVector P(N, P_array); intMatrix M(rows, cols); int x; boolean b; cout << "Vector size is " << N << endl; cout << "A: " << A << endl; cout << "B: " << B << endl; B = 3; cout << "B = 3: " << B << endl; C = apply(square, A); cout << "C = apply(square, A): " << C << endl; C = plus_scan(A); cout << "C = plus_scan(A): " << C << endl; C = max_scan(A); cout << "C = max_scan(A): " << C << endl; C = min_scan(A); cout << "C = min_scan(A): " << C << endl; cout << "booleanVector(A): " << booleanVector(A) << endl; C = or_scan(booleanVector(A)); cout << "C = or_scan(booleanVector(A)): " << C << endl; C = and_scan(booleanVector(A)); cout << "C = and_scan(booleanVector(A)): " << C << endl; x = sum(A); cout << "x = sum(A): "; cout << x; cout << endl; b = any(A); cout << "b = any(A): "; cout << b; cout << endl; b = all(A); cout << "b = all(A): "; cout << b; cout << endl; x = n_nonzeros(A); cout << "x = n_nonzeros(A): "; cout << x; cout << endl; x = max_value(A); cout << "x = max_value(A): "; cout << x; cout << endl; x = min_value(A); cout << "x = min_value(A): "; cout << x; cout << endl; x = max_index(A); cout << "x = max_index(A): "; cout << x; cout << endl; x = min_index(A); cout << "x = min_index(A): "; cout << x; cout << endl; cout << "A: " << A << endl; cout << "P: " << P << endl; C = permute(A, P); cout << "C = permute(A, P): " << C << endl; C = shift(A, 1); cout << "C = shift(A, 1): " << C << endl; C = shift(A, -3); cout << "C = shift(A, -3): " << C << endl; C = shift(A, 10); cout << "C = shift(A, 10): " << C << endl; C = rotate(A, 1); cout << "C = rotate(A, 1): " << C << endl; C = rotate(A, -3); cout << "C = rotate(A, -3): " << C << endl; C = rotate(A, 5); cout << "C = rotate(A, 5): " << C << endl; C = rotate(A, -8); cout << "C = rotate(A, -8): " << C << endl; cout << "VP: " << VP << endl; ifp (VP % 2 == 1) C = VP * 2; cout << "ifp(VP % 2) C = VP * 2: " << C << endl; ifp (VP % 2 == 1) { C = VP * 2; ifp (C % 3 == 1) C = 66; else C = 77; } cout << "ifp(VP % 2) ...: " << C << endl; ifp (VP % 2 == 1) C = rotate(VP, 2); cout << "ifp(VP % 2) C = rotate(VP, 2): " << C << endl; ifp (VP % 2 == 0) C = rotate(VP, -1); cout << "ifp(VP % 2 == 0) C = rotate(VP, -1): " << C << endl; ifp (VP % 2 == 0) C = shift(VP, -2); cout << "ifp(VP % 2 == 0) C = shift(VP, -2): " << C << endl; ifp (VP % 2 == 1) C = shift(VP, 1); cout << "ifp(VP % 2) C = shift(VP, 1): " << C << endl; C = pack(A); cout << "C = pack(A): " << C << endl; C = A + B; cout << "C = A + B: " << C << endl; C = A + 4; cout << "C = A + 4: " << C << endl; C = 4 + A; cout << "C = 4 + A: " << C << endl; C = A - B; cout << "C = A - B: " << C << endl; C = A - 4; cout << "C = A - 4: " << C << endl; C = 4 - A; cout << "C = 4 - A: " << C << endl; C = A * B; cout << "C = A * B: " << C << endl; C = A * 4; cout << "C = A * 4: " << C << endl; C = 4 * A; cout << "C = 4 * A: " << C << endl; C = -A / B; cout << "C = -A / B: " << C << endl; C = +A / 4; cout << "C = +A / 4: " << C << endl; C = A + B - 45 / B; cout << "C = A + B - 45 / B: " << C << endl; C.store(array); cout << "C.store(array): "; cout << array[0]; for (int i = 1; i < N; i++) cout << "\t" << array[i]; cout << endl; B.load(array); cout << "B.load(array): " << B << endl; cout << "before ifp " << endl; cout << "A: " << A << endl; ifp (A % 2 == 0) { A = B * VP / 3; } else A = 100; cout << "after ifp " << endl; cout << "A: " << A << endl; cout << "B: " << B << endl; cout << "C: " << C << endl; C = B == C; cout << "B == C: " << C << endl; C = A < -B; cout << "C = A < -B: " << C << endl; B += 10; cout << "B += 10: " << B << endl; A /= 10; A *= -3; cout << "A /= 10; A *= -3: " << A << endl; C = A++; cout << "C = A++: " << C << endl; cout << "A: " << A << endl; C = --A; cout << "C = --A: " << C << endl; cout << "A: " << A << endl; A += B; cout << "A += B: " << A << endl; C = A >= B; cout << "C = A >= B: " << C << endl; C = !(A >= B && -B != 9); cout << "C = !(A >= B && -B != 9): " << C << endl; C = (A >= B || 14); cout << "C = (A >= B || 14): " << C << endl; cout << "A: " << A << endl; cout << "B: " << B << endl; cout << "C: " << C << endl; C = A += B; cout << "C = A += B:" << endl; cout << " A: " << A << endl; cout << " B: " << B << endl; cout << " C: " << C << endl; cout << endl; cout << "VProw:" << endl; cout << VProw << endl; cout << "VPcol:" << endl; cout << VPcol << endl; M = VProw * VPcol; cout << "M = VProw * VPcol:" << endl; cout << M << endl; M = shift(VProw, -1, 0); cout << "M = shift(VProw, -1, 0):" << endl; cout << M << endl; M = rotate(VPcol, 0, 2); cout << "M = rotate(VPcol, 0, 2):" << endl; cout << M << endl; M = rotate(VProw, 2, 0); cout << "M = rotate(VProw, 2, 0):" << endl; cout << M << endl; M = rotate(VPcol * VProw, 3, 2); cout << "M = rotate(VPcol * VProw, 3, 2):" << endl; cout << M << endl; M = shift(VPcol * VProw, 3, -2); cout << "M = shift(VPcol * VProw, 3, -2):" << endl; cout << M << endl; M = VProw * VPcol; cout << "M = VProw * VPcol:" << endl; cout << M << endl; cout << "M[3]: " << M[3] << endl; cout << "M[3][_]: " << M[3][_] << endl; cout << "M[_][2]: " << M[_][2] << endl; M[_][1] = A; cout << "M[_][1] = A; M:" << endl; cout << M << endl; cout << "min_scan_rows(M):" << endl; cout << min_scan_rows(M) << endl; cout << "max_scan_cols(M):" << endl; cout << max_scan_cols(M) << endl; cout << "plus_scan_cols(M):" << endl; cout << plus_scan_cols(M) << endl; cout << "or_scan_cols(VProw % 2 == 1):" << endl; cout << or_scan_cols(VProw % 2 == 1) << endl; cout << "M[_][1] / 4: " << M[_][1] / 4 << endl; cout << "4 / M[_][1]: " << 4 / M[_][1] << endl; cout << "A / M[_][1]: " << A / M[_][1] << endl; cout << "M[_][1] / A: " << M[_][1] / A << endl; cout << "M[_][2] / M[_][1]: " << M[_][2] / M[_][1] << endl; return(0); }

Demonstration:

tester Vector size is 5 A: 3 4 0 -3 2 B: 4 4 4 4 4 B = 3: 3 3 3 3 3 C = apply(square, A): 9 16 0 9 4 C = plus_scan(A): 0 3 7 7 4 C = max_scan(A): -2147483647 3 4 4 4 C = min_scan(A): 2147483647 3 3 0 -3 booleanVector(A): 1 1 0 1 1 C = or_scan(booleanVector(A)): 0 1 1 1 1 C = and_scan(booleanVector(A)): 1 1 1 0 0 x = sum(A): 6 b = any(A): 1 b = all(A): 0 x = n_nonzeros(A): 4 x = max_value(A): 4 x = min_value(A): -3 x = max_index(A): 1 x = min_index(A): 3 A: 3 4 0 -3 2 P: 4 2 0 1 3 C = permute(A, P): 0 -3 4 2 3 C = shift(A, 1): 0 3 4 0 -3 C = shift(A, -3): -3 2 0 0 0 C = shift(A, 10): 0 0 0 0 0 C = rotate(A, 1): 2 3 4 0 -3 C = rotate(A, -3): -3 2 3 4 0 C = rotate(A, 5): 3 4 0 -3 2 C = rotate(A, -8): -3 2 3 4 0 VP: 0 1 2 3 4 ifp(VP % 2) C = VP * 2: -3 2 3 6 0 ifp(VP % 2) ...: -3 77 3 77 0 ifp(VP % 2) C = rotate(VP, 2): -3 4 3 1 0 ifp(VP % 2 == 0) C = rotate(VP, -1): 1 4 3 1 0 ifp(VP % 2 == 0) C = shift(VP, -2): 2 4 4 1 0 ifp(VP % 2) C = shift(VP, 1): 2 0 4 2 0 C = pack(A): 3 4 -3 2 0 C = A + B: 6 7 3 0 5 C = A + 4: 7 8 4 1 6 C = 4 + A: 7 8 4 1 6 C = A - B: 0 1 -3 -6 -1 C = A - 4: -1 0 -4 -7 -2 C = 4 - A: 1 0 4 7 2 C = A * B: 9 12 0 -9 6 C = A * 4: 12 16 0 -12 8 C = 4 * A: 12 16 0 -12 8 C = -A / B: -1 -1 0 1 0 C = +A / 4: 0 1 0 0 0 C = A + B - 45 / B: -9 -8 -12 -15 -10 C.store(array): -9 -8 -12 -15 -10 B.load(array): -9 -8 -12 -15 -10 before ifp A: 3 4 0 -3 2 after ifp A: 100 -2 -8 100 -13 B: -9 -8 -12 -15 -10 C: -9 -8 -12 -15 -10 B == C: 1 1 1 1 1 C = A < -B: 0 1 1 0 1 B += 10: 1 2 -2 -5 0 A /= 10; A *= -3: -30 0 0 -30 3 C = A++: -30 0 0 -30 3 A: -29 1 1 -29 4 C = --A: -30 0 0 -30 3 A: -30 0 0 -30 3 A += B: -29 2 -2 -35 3 C = A >= B: 0 1 1 0 1 C = !(A >= B && -B != 9): 1 0 0 1 0 C = (A >= B || 14): 1 1 1 1 1 A: -29 2 -2 -35 3 B: 1 2 -2 -5 0 C: 1 1 1 1 1 C = A += B: A: -28 4 -4 -40 3 B: 1 2 -2 -5 0 C: -28 4 -4 -40 3 VProw: 0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 VPcol: 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 M = VProw * VPcol: 0 0 0 0 0 1 2 3 0 2 4 6 0 3 6 9 0 4 8 12 M = shift(VProw, -1, 0): 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 0 0 0 0 M = rotate(VPcol, 0, 2): 2 3 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 0 1 M = rotate(VProw, 2, 0): 3 3 3 3 4 4 4 4 0 0 0 0 1 1 1 1 2 2 2 2 M = rotate(VPcol * VProw, 3, 2): 4 6 0 2 6 9 0 3 8 12 0 4 0 0 0 0 2 3 0 1 M = shift(VPcol * VProw, 3, -2): 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 3 0 0 M = VProw * VPcol: 0 0 0 0 0 1 2 3 0 2 4 6 0 3 6 9 0 4 8 12 M[3]: 0 3 6 9 M[3][_]: 0 3 6 9 M[_][2]: 0 2 4 6 8 M[_][1] = A; M: 0 -28 0 0 0 4 2 3 0 -4 4 6 0 -40 6 9 0 3 8 12 min_scan_rows(M): 2147483647 0 -28 -28 2147483647 0 0 0 2147483647 0 -4 -4 2147483647 0 -40 -40 2147483647 0 0 0 max_scan_cols(M): -2147483647 -2147483647 -2147483647 -2147483647 0 -28 0 0 0 4 2 3 0 4 4 6 0 4 6 9 plus_scan_cols(M): 0 0 0 0 0 -28 0 0 0 -24 2 3 0 -28 6 9 0 -68 12 18 or_scan_cols(VProw % 2 == 1): 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 M[_][1] / 4: -7 1 -1 -10 0 4 / M[_][1]: 0 1 -1 0 1 A / M[_][1]: 1 1 1 1 1 M[_][1] / A: 1 1 1 1 1 M[_][2] / M[_][1]: 0 0 -1 0 2