]> Creatis software - gdcm.git/blob - Testing/TestAllVM.cxx
1dce8206204ea1a16d8749ad6ea56ba45a726ab6
[gdcm.git] / Testing / TestAllVM.cxx
1 /*=========================================================================
2                                                                                 
3   Program:   gdcm
4   Module:    $RCSfile: TestAllVM.cxx,v $
5   Language:  C++
6   Date:      $Date: 2005/10/23 14:53:51 $
7   Version:   $Revision: 1.7 $
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;
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       return 0;
62 }
63
64 int TestAllVM(int argc, char *argv[])
65 {
66    int i = 0;
67    if( argc >= 2 )
68      {
69      const char *filename = argv[1];
70      if( DoTheVMTest( filename ) )
71        return 1;
72      return 0;
73      }
74    // else
75
76    while( gdcmDataImages[i] != 0 )
77    {
78       std::string filename = GDCM_DATA_ROOT;
79       filename += "/";
80       filename += gdcmDataImages[i];
81
82       if( DoTheVMTest( filename ) )
83         return 1;
84       i++;
85       std::cerr << std::endl; // skip a line after each file
86    }
87
88    return 0;
89 }
90