]> Creatis software - gdcm.git/blob - Testing/TestAllVM.cxx
* Some classes inherit now from gdcm::RefCounter
[gdcm.git] / Testing / TestAllVM.cxx
1 /*=========================================================================
2                                                                                 
3   Program:   gdcm
4   Module:    $RCSfile: TestAllVM.cxx,v $
5   Language:  C++
6   Date:      $Date: 2005/10/25 14:52:30 $
7   Version:   $Revision: 1.8 $
8                                                                                 
9   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
10   l'Image). All rights reserved. See Doc/License.txt or
11   http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details.
12                                                                                 
13      This software is distributed WITHOUT ANY WARRANTY; without even
14      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15      PURPOSE.  See the above copyright notices for more information.
16                                                                                 
17 =========================================================================*/
18
19 #include "gdcmFile.h"
20 #include "gdcmDataEntry.h"
21
22 //Generated file:
23 #include "gdcmDataImages.h"
24
25 int DoTheVMTest(std::string const &filename)
26 {
27    gdcm::File *file = gdcm::File::New();
28    // - Do not test unknow VM in shadow groups (if element 0x0000 is present)
29    // - Skip Sequences (if they are 'True Length'); loading will be quicker
30    //                  (anyway, Sequences are skipped at processing time ...)
31    file->SetLoadMode( gdcm::LD_NOSHADOW | gdcm::LD_NOSEQ );
32
33    file->SetFileName( filename );
34    if( !file->Load() ) //would be really bad...
35       return 1;
36
37    gdcm::DocEntry *d = file->GetFirstEntry();
38    std::cerr << "Testing file : " << filename << std::endl;
39    while(d)
40    {
41       if ( gdcm::DataEntry *de = dynamic_cast<gdcm::DataEntry *>(d) )
42       {
43          if ( !(de->GetGroup() % 2) ) // Don't check shadow elements. Righ now,
44                                       // Private Dictionnary are not dealt with
45          {    
46             if( !de->IsValueCountValid() )
47             {
48                std::cerr << "Element: " << de->GetKey() <<
49                     " (" << de->GetName() << ") " <<
50                     "Contains a wrong VM: " << de->GetValueCount() 
51                     << " should be: " << de->GetVM() << std::endl;;
52             }
53          }
54       }
55       else
56       {
57           // We skip pb of SQ recursive exploration
58       }
59       d = file->GetNextEntry();
60    }
61    file->Delete();
62
63    return 0;
64 }
65
66 int TestAllVM(int argc, char *argv[])
67 {
68    int i = 0;
69    if( argc >= 2 )
70      {
71      const char *filename = argv[1];
72      if( DoTheVMTest( filename ) )
73        return 1;
74      return 0;
75      }
76    // else
77
78    while( gdcmDataImages[i] != 0 )
79    {
80       std::string filename = GDCM_DATA_ROOT;
81       filename += "/";
82       filename += gdcmDataImages[i];
83
84       if( DoTheVMTest( filename ) )
85         return 1;
86       i++;
87       std::cerr << std::endl; // skip a line after each file
88    }
89
90    return 0;
91 }
92