source: CIVL/examples/omp/m4ri/tests/test_smallops.c@ bb03188

main test-branch
Last change on this file since bb03188 was ea777aa, checked in by Alex Wilton <awilton@…>, 3 years ago

Moved examples, include, build_default.properties, common.xml, and README out from dev.civl.com into the root of the repo.

git-svn-id: svn://vsl.cis.udel.edu/civl/trunk@5704 fb995dde-84ed-4084-dfe6-e5aef3e2452c

  • Property mode set to 100644
File size: 3.1 KB
Line 
1#include <m4ri/config.h>
2#include <stdlib.h>
3#include <inttypes.h>
4#include "testing.h"
5#include <m4ri/m4ri.h>
6
7//#define ABORT_ON_FAIL 1
8
9int smallops_test_add(rci_t M, rci_t N, rci_t m, rci_t n, word pattern) {
10 int ret = 0;
11
12 printf(" mzd_add: M: %4d, N: %4d, m: %4d, n: %4d, pattern: 0x%" PRIx64 " ", M, N, m, n, pattern);
13
14 mzd_t *AA;
15 mzd_t *A = mzd_init_test_matrix_random(M, N, m, n, pattern, &AA);
16
17 mzd_t *BB;
18 mzd_t *B = mzd_init_test_matrix_random(M, N, m, n, pattern, &BB);
19
20 mzd_t *CC;
21 mzd_t *C = mzd_init_test_matrix_random(M, N, m, n, pattern, &CC);
22
23 mzd_t *DD;
24 mzd_t *D = mzd_init_test_matrix_random(M, N, m, n, pattern, &DD);
25
26 /* Creation went okay? */
27
28 ret += mzd_check_pattern(AA, m, n, pattern);
29 ret += mzd_check_pattern(BB, m, n, pattern);
30 ret += mzd_check_pattern(CC, m, n, pattern);
31 ret += mzd_check_pattern(DD, m, n, pattern);
32
33
34 /* Testing equality A+A == 0 */
35
36 mzd_add(C, A, A);
37
38 if(!mzd_is_zero(C)) {
39 ret +=1;
40 }
41
42 ret += mzd_check_pattern(AA, m, n, pattern);
43 ret += mzd_check_pattern(BB, m, n, pattern);
44 ret += mzd_check_pattern(CC, m, n, pattern);
45
46 /* Testing equality A+A == 0 but this time C is already zero */
47
48 mzd_add(C, B, B);
49
50 if(!mzd_is_zero(C)) {
51 ret +=1;
52 }
53
54 ret += mzd_check_pattern(AA, m, n, pattern);
55 ret += mzd_check_pattern(BB, m, n, pattern);
56 ret += mzd_check_pattern(CC, m, n, pattern);
57
58 /* Testing in place add. C is zero, so afterwards C == A */
59
60 mzd_add(C, C, A);
61
62 if(!mzd_equal(C,A)) {
63 ret +=1;
64 }
65
66 ret += mzd_check_pattern(AA, m, n, pattern);
67 ret += mzd_check_pattern(BB, m, n, pattern);
68 ret += mzd_check_pattern(CC, m, n, pattern);
69
70 /* Testing equality C (== A) + A == 0 */
71
72 mzd_add(B, C, A);
73
74 if(!mzd_is_zero(B)) {
75 ret +=1;
76 }
77
78
79 if(m == n) {
80 /* Testing equality (A + B)^2 == A^2 + BA + AB + B^2 */
81
82 mzd_randomize(A);
83 mzd_randomize(B);
84
85 mzd_add(C,A,B);
86
87 mzd_mul(D,C,C, 0); // (A+B)^2
88
89 mzd_mul(C,A,A, 0);
90 mzd_addmul(C, B, A, 0);
91 mzd_addmul(C, A, B, 0);
92 mzd_addmul(C, B, B, 0);
93
94 if(!mzd_equal(C,D)) {
95 ret += 1;
96 }
97
98 ret += mzd_check_pattern(AA, m, n, pattern);
99 ret += mzd_check_pattern(BB, m, n, pattern);
100 ret += mzd_check_pattern(CC, m, n, pattern);
101 ret += mzd_check_pattern(DD, m, n, pattern);
102 }
103
104 mzd_free_test_matrix_random(AA, A);
105 mzd_free_test_matrix_random(BB, B);
106 mzd_free_test_matrix_random(CC, C);
107 mzd_free_test_matrix_random(DD, D);
108
109 if(ret == 0) {
110 printf(" ... passed\n");
111 } else {
112 printf(" ... FAILED\n");
113 }
114#ifdef ABORT_ON_FAIL
115 if (ret) abort();
116#endif
117
118 return ret;
119}
120
121
122int main() {
123 int status = 0;
124
125 srandom(17);
126
127 status += smallops_test_add( 64, 64, 10, 10, 0x03030303030303llu);
128 status += smallops_test_add(100, 100, 64, 64, 0x03030303030303llu);
129
130 status += smallops_test_add(1024, 1024, 513, 511, 0x03030303030303llu);
131 status += smallops_test_add(1024, 1024, 512, 768+30, 0x03030303030303llu);
132
133 status += smallops_test_add(2048, 2048, 1024, 1024, 0x03030303030303llu);
134
135 if (status == 0) {
136 printf("All tests passed.\n");
137 return 0;
138 } else {
139 return -1;
140 }
141}
Note: See TracBrowser for help on using the repository browser.