source: CIVL/examples/omp/m4ri/tests/test_solve.c

main
Last change on this file 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: 2.0 KB
Line 
1#ifndef _GNU_SOURCE
2#define _GNU_SOURCE
3#endif
4#include <m4ri/config.h>
5#include <stdlib.h>
6#include <m4ri/m4ri.h>
7
8int test_pluq_solve_left(rci_t m, rci_t n, int offsetA, int offsetB){
9 mzd_t* Abase = mzd_init(2048, 2048);
10 mzd_t* Bbase = mzd_init(2048, 2048);
11 mzd_randomize(Abase);
12 mzd_randomize(Bbase);
13
14 mzd_t* A = mzd_init_window(Abase, 0, offsetA, m, m + offsetA);
15 mzd_t* B = mzd_init_window(Bbase, 0, offsetB, m, n + offsetB);
16
17 // copy B
18 mzd_t* Bcopy = mzd_init(B->nrows, B->ncols);
19 for (rci_t i = 0; i < B->nrows; ++i)
20 for (rci_t j = 0; j < B->ncols; ++j)
21 mzd_write_bit(Bcopy,i,j, mzd_read_bit (B,i,j));
22
23 for (rci_t i = 0; i < m; ++i) {
24 mzd_write_bit(A,i,i, 1);
25 }
26
27 mzd_t *Acopy = mzd_copy(NULL, A);
28 rci_t r = mzd_echelonize(Acopy,1);
29 printf("solve_left m: %4d, n: %4d, r: %4d da: %4d db: %4d ", m, n, r, offsetA, offsetB);
30 mzd_free(Acopy);
31 Acopy = mzd_copy(NULL, A);
32
33 int consistency = mzd_solve_left(A, B, 0, 1);
34
35 //copy B
36 mzd_t *X = mzd_init(B->nrows,B->ncols);
37 for (rci_t i = 0; i < B->nrows; ++i)
38 for (rci_t j = 0; j < B->ncols; ++j)
39 mzd_write_bit(X,i,j, mzd_read_bit (B,i,j));
40
41 mzd_t *B1 = mzd_mul(NULL, Acopy, X, 0);
42 mzd_t *Z = mzd_add(NULL, Bcopy, B1);
43
44 int status = 0;
45
46 if(consistency == 0) {
47 status = 1 - mzd_is_zero(Z);
48 if (status == 0) {
49 printf("passed\n");
50 } else {
51 printf("FAILED\n");
52 }
53 } else {
54 printf("skipped (no solution)\n");
55 }
56 mzd_free(Bcopy);
57 mzd_free(B1);
58 mzd_free(Z);
59
60 mzd_free_window(A);
61 mzd_free_window(B);
62 mzd_free(Acopy);
63 mzd_free(Abase);
64 mzd_free(Bbase);
65 mzd_free(X);
66 return status;
67}
68
69int main() {
70 int status = 0;
71
72 srandom(17);
73
74 for(size_t i=0; i<100; i++) {
75 size_t m = random() & 511;
76 size_t n = random() & 1023;
77 m = m ? (m) : 1;
78 n = n ? (n) : 1;
79
80 status += test_pluq_solve_left( m, n, 0, 0);
81 }
82
83 if (!status) {
84 printf("All tests passed.\n");
85 } else {
86 return 1;
87 }
88
89 return 0;
90}
Note: See TracBrowser for help on using the repository browser.