00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049 #include <stdio.h>
00050 #include "lapacke.h"
00051 #include "lapacke_utils.h"
00052 #include "test_utils.h"
00053
00054 static void init_scalars_ctptri( char *uplo, char *diag, lapack_int *n );
00055 static void init_ap( lapack_int size, lapack_complex_float *ap );
00056 static int compare_ctptri( lapack_complex_float *ap, lapack_complex_float *ap_i,
00057 lapack_int info, lapack_int info_i, lapack_int n );
00058
00059 int main(void)
00060 {
00061
00062 char uplo, uplo_i;
00063 char diag, diag_i;
00064 lapack_int n, n_i;
00065 lapack_int info, info_i;
00066 lapack_int i;
00067 int failed;
00068
00069
00070 lapack_complex_float *ap = NULL, *ap_i = NULL;
00071 lapack_complex_float *ap_save = NULL;
00072 lapack_complex_float *ap_r = NULL;
00073
00074
00075 init_scalars_ctptri( &uplo, &diag, &n );
00076 uplo_i = uplo;
00077 diag_i = diag;
00078 n_i = n;
00079
00080
00081 ap = (lapack_complex_float *)
00082 LAPACKE_malloc( ((n*(n+1)/2)) * sizeof(lapack_complex_float) );
00083
00084
00085 ap_i = (lapack_complex_float *)
00086 LAPACKE_malloc( ((n*(n+1)/2)) * sizeof(lapack_complex_float) );
00087
00088
00089 ap_save = (lapack_complex_float *)
00090 LAPACKE_malloc( ((n*(n+1)/2)) * sizeof(lapack_complex_float) );
00091
00092
00093 ap_r = (lapack_complex_float *)
00094 LAPACKE_malloc( n*(n+1)/2 * sizeof(lapack_complex_float) );
00095
00096
00097 init_ap( (n*(n+1)/2), ap );
00098
00099
00100 for( i = 0; i < (n*(n+1)/2); i++ ) {
00101 ap_save[i] = ap[i];
00102 }
00103
00104
00105 ctptri_( &uplo, &diag, &n, ap, &info );
00106
00107
00108
00109 for( i = 0; i < (n*(n+1)/2); i++ ) {
00110 ap_i[i] = ap_save[i];
00111 }
00112 info_i = LAPACKE_ctptri_work( LAPACK_COL_MAJOR, uplo_i, diag_i, n_i, ap_i );
00113
00114 failed = compare_ctptri( ap, ap_i, info, info_i, n );
00115 if( failed == 0 ) {
00116 printf( "PASSED: column-major middle-level interface to ctptri\n" );
00117 } else {
00118 printf( "FAILED: column-major middle-level interface to ctptri\n" );
00119 }
00120
00121
00122
00123 for( i = 0; i < (n*(n+1)/2); i++ ) {
00124 ap_i[i] = ap_save[i];
00125 }
00126 info_i = LAPACKE_ctptri( LAPACK_COL_MAJOR, uplo_i, diag_i, n_i, ap_i );
00127
00128 failed = compare_ctptri( ap, ap_i, info, info_i, n );
00129 if( failed == 0 ) {
00130 printf( "PASSED: column-major high-level interface to ctptri\n" );
00131 } else {
00132 printf( "FAILED: column-major high-level interface to ctptri\n" );
00133 }
00134
00135
00136
00137 for( i = 0; i < (n*(n+1)/2); i++ ) {
00138 ap_i[i] = ap_save[i];
00139 }
00140
00141 LAPACKE_cpp_trans( LAPACK_COL_MAJOR, uplo, n, ap_i, ap_r );
00142 info_i = LAPACKE_ctptri_work( LAPACK_ROW_MAJOR, uplo_i, diag_i, n_i, ap_r );
00143
00144 LAPACKE_cpp_trans( LAPACK_ROW_MAJOR, uplo, n, ap_r, ap_i );
00145
00146 failed = compare_ctptri( ap, ap_i, info, info_i, n );
00147 if( failed == 0 ) {
00148 printf( "PASSED: row-major middle-level interface to ctptri\n" );
00149 } else {
00150 printf( "FAILED: row-major middle-level interface to ctptri\n" );
00151 }
00152
00153
00154
00155 for( i = 0; i < (n*(n+1)/2); i++ ) {
00156 ap_i[i] = ap_save[i];
00157 }
00158
00159
00160 LAPACKE_cpp_trans( LAPACK_COL_MAJOR, uplo, n, ap_i, ap_r );
00161 info_i = LAPACKE_ctptri( LAPACK_ROW_MAJOR, uplo_i, diag_i, n_i, ap_r );
00162
00163 LAPACKE_cpp_trans( LAPACK_ROW_MAJOR, uplo, n, ap_r, ap_i );
00164
00165 failed = compare_ctptri( ap, ap_i, info, info_i, n );
00166 if( failed == 0 ) {
00167 printf( "PASSED: row-major high-level interface to ctptri\n" );
00168 } else {
00169 printf( "FAILED: row-major high-level interface to ctptri\n" );
00170 }
00171
00172
00173 if( ap != NULL ) {
00174 LAPACKE_free( ap );
00175 }
00176 if( ap_i != NULL ) {
00177 LAPACKE_free( ap_i );
00178 }
00179 if( ap_r != NULL ) {
00180 LAPACKE_free( ap_r );
00181 }
00182 if( ap_save != NULL ) {
00183 LAPACKE_free( ap_save );
00184 }
00185
00186 return 0;
00187 }
00188
00189
00190 static void init_scalars_ctptri( char *uplo, char *diag, lapack_int *n )
00191 {
00192 *uplo = 'L';
00193 *diag = 'N';
00194 *n = 4;
00195
00196 return;
00197 }
00198
00199
00200 static void init_ap( lapack_int size, lapack_complex_float *ap ) {
00201 lapack_int i;
00202 for( i = 0; i < size; i++ ) {
00203 ap[i] = lapack_make_complex_float( 0.0f, 0.0f );
00204 }
00205 ap[0] = lapack_make_complex_float( 4.780000210e+000, 4.559999943e+000 );
00206 ap[1] = lapack_make_complex_float( 2.000000000e+000, -3.000000119e-001 );
00207 ap[2] = lapack_make_complex_float( 2.890000105e+000, -1.340000033e+000 );
00208 ap[3] = lapack_make_complex_float( -1.889999986e+000, 1.149999976e+000 );
00209 ap[4] = lapack_make_complex_float( -4.110000134e+000, 1.250000000e+000 );
00210 ap[5] = lapack_make_complex_float( 2.359999895e+000, -4.250000000e+000 );
00211 ap[6] = lapack_make_complex_float( 3.999999911e-002, -3.690000057e+000 );
00212 ap[7] = lapack_make_complex_float( 4.150000095e+000, 8.000000119e-001 );
00213 ap[8] = lapack_make_complex_float( -1.999999955e-002, 4.600000083e-001 );
00214 ap[9] = lapack_make_complex_float( 3.300000131e-001, -2.599999905e-001 );
00215 }
00216
00217
00218
00219 static int compare_ctptri( lapack_complex_float *ap, lapack_complex_float *ap_i,
00220 lapack_int info, lapack_int info_i, lapack_int n )
00221 {
00222 lapack_int i;
00223 int failed = 0;
00224 for( i = 0; i < (n*(n+1)/2); i++ ) {
00225 failed += compare_complex_floats(ap[i],ap_i[i]);
00226 }
00227 failed += (info == info_i) ? 0 : 1;
00228 if( info != 0 || info_i != 0 ) {
00229 printf( "info=%d, info_i=%d\n",(int)info,(int)info_i );
00230 }
00231
00232 return failed;
00233 }