/* This file is part of MED. * * COPYRIGHT (C) 1999 - 2019 EDF R&D, CEA/DEN * MED is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * MED is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with MED. If not, see . */ /* * Unitary tests to create, open, close MED files */ #include #define MESGERR 1 #include #include int main (int argc, char **argv) { med_idt fid; char filename[] = "Unittest_MEDfile_1.med"; char comment[] = "My first comment"; char comment2[] = "My second comment"; char commentToRead[MED_COMMENT_SIZE+1]; med_bool hdfok, medok; med_int major,minor,release; char medversion[10]; med_int majorFromStr, minorFromStr, releaseFromStr; char filenameFromId[MED_PATHNAME_SIZE+1] = ""; char* filenameFromIdPtr = NULL; med_int filenamesize = 0; /* file creation */ fid = MEDfileOpen(filename,MED_ACC_CREAT); if (fid < 0) { MESSAGE("ERROR : file creation"); return -1; } /* write a comment */ if (MEDfileCommentWr(fid,comment) < 0) { MESSAGE("ERROR : file comment writing"); return -1; } /* Get filename */ if ( (MEDfileName(fid,filenameFromId,MED_PATHNAME_SIZE+1) < 0 ) || ( strncmp(filenameFromId,filename,MED_PATHNAME_SIZE) )) { MESSAGE("ERROR : file getting filename"); return -1; } /* file closing */ if (MEDfileClose(fid) < 0) { MESSAGE("ERROR : file closing"); return -1; } /* file opening in READ ONLY access mode */ fid = MEDfileOpen(filename,MED_ACC_RDONLY); if (fid < 0) { MESSAGE("ERROR : file opening in READ ONLY ACCESS mode"); return -1; } /* med library version is read in the file */ if (MEDfileNumVersionRd(fid,&major,&minor,&release) < 0) { MESSAGE("ERROR : MED version reading"); ISCRUTE(major); ISCRUTE(minor); ISCRUTE(release); return -1; } if ((major != MED_MAJOR_NUM) || (minor != MED_MINOR_NUM) || (release != MED_RELEASE_NUM)) { MESSAGE("ERROR : The MED num version is not the good one"); ISCRUTE(major); ISCRUTE(minor); ISCRUTE(release); return -1; } if (MEDfileStrVersionRd(fid,medversion) < 0) { MESSAGE("ERROR : MED str version reading"); SSCRUTE(medversion); return -1; } sscanf(medversion,"MED-"IFORMAT"."IFORMAT"."IFORMAT, &majorFromStr,&minorFromStr,&releaseFromStr); if ((major != majorFromStr) || (minor != minorFromStr) || (release != releaseFromStr)) { ISCRUTE(majorFromStr); ISCRUTE(minorFromStr); ISCRUTE(releaseFromStr); MESSAGE("ERROR : The MED num version is not the good one"); SSCRUTE(medversion); return -1; } /* file comment reading */ if (MEDfileCommentRd(fid,commentToRead) < 0) { MESSAGE("ERROR : file comment reading"); return -1; } if (strcmp(comment,commentToRead)) { MESSAGE("ERROR : file comment is not the good one"); SSCRUTE(comment); SSCRUTE(commentToRead); return -1; } /* Get filename */ if ( (filenamesize=MEDfileName(fid,NULL,0)) < 0 ) { MESSAGE("ERROR : file getting filename"); return -1; } else filenameFromIdPtr = (char * ) malloc((filenamesize+1)*sizeof(char)); if ( (MEDfileName(fid,filenameFromIdPtr,filenamesize) < 0) || ( strncmp(filenameFromIdPtr,filename,filenamesize) )) { MESSAGE("ERROR : file getting filename"); free(filenameFromIdPtr); return -1; } free(filenameFromIdPtr); /* file closing */ if (MEDfileClose(fid) < 0) { MESSAGE("ERROR : file closing"); return -1; } /* file opening in READ and WRITE access mode */ fid = MEDfileOpen(filename,MED_ACC_RDWR); if (fid < 0) { MESSAGE("ERROR : file opening in read and write access mode"); return -1; } /* comment writing */ if (MEDfileCommentWr(fid,comment2) < 0) { MESSAGE("ERROR : file comment writing"); return -1; } /* file closing */ if (MEDfileClose(fid) < 0) { MESSAGE("ERROR : file closing"); return -1; } /* file opening in READ and EXTENSION access mode */ fid = MEDfileOpen(filename,MED_ACC_RDEXT); if (fid < 0) { MESSAGE("ERROR : file opening in READ and EXTENSION access mode"); return -1; } /* write a comment has to be impossible */ printf("Un message d'erreur est attendu :\n"); if (MEDfileCommentWr(fid,comment) == 0) { MESSAGE("ERROR : write comment has to be impossible"); return -1; } printf("Fin du message d'erreur attendu.\n"); /* file closing */ if (MEDfileClose(fid) < 0) { MESSAGE("ERROR : file closing"); return -1; } /* file compatibility test with hdf5 and med library version */ if (MEDfileCompatibility(filename,&hdfok,&medok) < 0) { MESSAGE("ERROR : file compatibility test"); return -1; } if (! hdfok) { MESSAGE("ERROR : the file must be in hdf5 format"); ISCRUTE(hdfok); return -1; } if (! medok) { MESSAGE("ERROR : the file must be compatible"); ISCRUTE(medok); return -1; } return 0; }