001 /*
002 * To change this template, choose Tools | Templates
003 * and open the template in the editor.
004 */
005 package org.jblas.util;
006
007 import org.jblas.NativeBlas;
008 import org.jblas.DoubleMatrix;
009
010 /**
011 *
012 */
013 public class SanityChecks {
014
015 public static int checksFailed;
016
017 public static void check(String message, boolean condition) {
018 System.out.print(message + "... ");
019 if (condition) {
020 System.out.println("ok");
021 } else {
022 System.out.println("failed");
023 checksFailed++;
024 }
025 }
026
027 public static void checkVectorAddition() {
028 DoubleMatrix x = new DoubleMatrix(3, 1, 1.0, 2.0, 3.0);
029 DoubleMatrix y = new DoubleMatrix(3, 1, 4.0, 5.0, 6.0);
030 DoubleMatrix z = new DoubleMatrix(3, 1, 5.0, 7.0, 9.0);
031
032 check("checking vector addition", x.add(y).equals(z));
033 }
034
035 public static void checkMatrixMultiplication() {
036
037 DoubleMatrix A = new DoubleMatrix(new double[][] {
038 { 1.0, 2.0, 3.0 },
039 { 4.0, 5.0, 6.0 },
040 { 7.0, 8.0, 9.0 }
041 });
042 DoubleMatrix E = new DoubleMatrix(new double[][] {
043 { 0.0, 0.0, 1.0 },
044 { 0.0, 1.0, 0.0 },
045 { 1.0, 0.0, 0.0 }
046 });
047 DoubleMatrix B = new DoubleMatrix(new double[][] {
048 { 3.0, 2.0, 1.0 },
049 { 6.0, 5.0, 4.0 },
050 { 9.0, 8.0, 7.0 }
051 });
052
053 check("checking matrix multiplication", A.mmul(E).equals(B));
054 }
055
056 public static void checkXerbla() {
057 double[] x = new double[9];
058 try {
059 NativeBlas.dgemm('N', 'N', 3, -1, 3, 1.0, x, 0, 3, x, 0, 3, 0.0, x, 0, 3);
060 }
061 catch(IllegalArgumentException e) {
062 check("checking XERBLA", e.getMessage().contains("XERBLA"));
063 return;
064 }
065 assert(false); // shouldn't happen
066 }
067
068 public static void main(String[] args) {
069 checkVectorAddition();
070 checkMatrixMultiplication();
071 checkXerbla();
072 printSummary();
073 }
074
075 private static void printSummary() {
076 if (checksFailed == 0) {
077 System.out.println("Sanity checks passed.");
078 }
079 else {
080 System.out.println("Sainty checks FAILED!");
081 }
082 }
083 }