1 /* Test the fix for PR89841. */ 2 3 /* Contributed by Reinhold Bader <Bader@lrz.de> */ 4 5 #include "../../../libgfortran/ISO_Fortran_binding.h" 6 #include <stdio.h> 7 #include <stdlib.h> 8 #include <math.h> 9 10 typedef struct 11 { 12 int i; 13 float r[2]; 14 } cstruct; 15 16 17 int Psuba(CFI_cdesc_t *this, CFI_cdesc_t *that, int Dcase) { 18 int status = 0; 19 cstruct *cu; 20 float *ct; 21 CFI_dim_t *dim; 22 if (this->elem_len != sizeof(float)) 23 { 24 printf("FAIL: Dcase %i - this->elem_len %i\n",Dcase, (int) this->elem_len); 25 status++; 26 } 27 if (this->type != CFI_type_float) 28 { 29 printf("FAIL: Dcase %i - this->type\n", Dcase); 30 status++; 31 } 32 if (this->rank != 2) 33 { 34 printf("FAIL: Dcase %i - this->rank %i\n",Dcase,this->rank); 35 status++; 36 } 37 if (this->attribute != CFI_attribute_other) 38 { 39 printf("FAIL: Dcase %i - this->attribute\n", Dcase); 40 status++; 41 } 42 43 dim = this->dim; 44 if (dim[0].lower_bound != 0 || dim[0].extent != 3) 45 { 46 printf("FAIL: Dcase %i - dim[0] %i %i %i\n",Dcase, (int) dim[0].lower_bound, 47 (int)dim[0].extent,(int)dim[0].sm); 48 status++; 49 } 50 if (dim[1].lower_bound != 0 || dim[1].extent != 7) 51 { 52 printf("FAIL: Dcase %i - dim[1] %i %i %i\n",Dcase,(int) dim[1].lower_bound, 53 (int) dim[1].extent,(int) dim[1].sm); 54 status++; 55 } 56 57 if (that->elem_len != sizeof(cstruct)) 58 { 59 printf("FAIL: Dcase %i - that->elem_len\n", Dcase); 60 status++; 61 } 62 if (that->type != CFI_type_struct) 63 { 64 printf("FAIL: Dcase %i - that->type\n",Dcase); 65 status++; 66 } 67 if (that->rank != 1) 68 { 69 printf("FAIL: Dcase %i - that->rank\n", Dcase); 70 status++; 71 } 72 if (that->attribute != CFI_attribute_other) 73 { 74 printf("FAIL: Dcase %i - that->attribute %i\n",Dcase,that->attribute); 75 status++; 76 } 77 78 dim = that->dim; 79 if (dim[0].lower_bound != 0 || dim[0].extent != 1) 80 { 81 printf("FAIL: Dcase %i - dim[0] %i %i\n",Dcase,(int)dim[0].lower_bound,dim[0].extent); 82 status++; 83 } 84 85 cu = (cstruct *) ((CFI_cdesc_t *) that)->base_addr; 86 if (cu->i != 4 || fabs(cu->r[1] - 2.2) > 1.0e-6) 87 { 88 printf("FAIL: Dcase %i - value of that %i %f %f\n",Dcase,cu->i,cu->r[0],cu->r[1]); 89 status++; 90 } 91 92 ct = (float *) ((CFI_cdesc_t *) this)->base_addr; 93 if ( fabs(ct[5] + 2.0) > 1.0e-6) 94 { 95 printf("FAIL: Dcase %i - value of this %f\n",Dcase,ct[5]); 96 status++; 97 } 98 99 return status; 100 } 101 102 103