comparison OrthancFramework/UnitTestsSources/DicomMapTests.cpp @ 5175:48005e522bd6

start fixing thread safety issues with DicomMap
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 24 Mar 2023 19:00:33 +0100
parents a9ca92ecbbc2
children 6d8647122ef3
comparison
equal deleted inserted replaced
5174:d75af1cde602 5175:48005e522bd6
88 ASSERT_TRUE(s.end() != s.find(DICOM_TAG_SERIES_INSTANCE_UID)); 88 ASSERT_TRUE(s.end() != s.find(DICOM_TAG_SERIES_INSTANCE_UID));
89 ASSERT_TRUE(s.end() != s.find(DICOM_TAG_SOP_INSTANCE_UID)); 89 ASSERT_TRUE(s.end() != s.find(DICOM_TAG_SOP_INSTANCE_UID));
90 } 90 }
91 91
92 { 92 {
93 const std::set<DicomTag>& s = DicomMap::GetMainDicomTags(ResourceType_Patient); 93 std::set<DicomTag> s;
94 DicomMap::GetMainDicomTags(s, ResourceType_Patient);
94 ASSERT_TRUE(s.end() != s.find(DICOM_TAG_PATIENT_ID)); 95 ASSERT_TRUE(s.end() != s.find(DICOM_TAG_PATIENT_ID));
95 ASSERT_TRUE(s.end() == s.find(DICOM_TAG_STUDY_INSTANCE_UID)); 96 ASSERT_TRUE(s.end() == s.find(DICOM_TAG_STUDY_INSTANCE_UID));
96 } 97 }
97 98
98 { 99 {
99 const std::set<DicomTag>& s = DicomMap::GetMainDicomTags(ResourceType_Study); 100 std::set<DicomTag> s;
101 DicomMap::GetMainDicomTags(s, ResourceType_Study);
100 ASSERT_TRUE(s.end() != s.find(DICOM_TAG_STUDY_INSTANCE_UID)); 102 ASSERT_TRUE(s.end() != s.find(DICOM_TAG_STUDY_INSTANCE_UID));
101 ASSERT_TRUE(s.end() != s.find(DICOM_TAG_ACCESSION_NUMBER)); 103 ASSERT_TRUE(s.end() != s.find(DICOM_TAG_ACCESSION_NUMBER));
102 ASSERT_TRUE(s.end() == s.find(DICOM_TAG_PATIENT_ID)); 104 ASSERT_TRUE(s.end() == s.find(DICOM_TAG_PATIENT_ID));
103 } 105 }
104 106
105 { 107 {
106 const std::set<DicomTag>& s = DicomMap::GetMainDicomTags(ResourceType_Series); 108 std::set<DicomTag> s;
109 DicomMap::GetMainDicomTags(s, ResourceType_Series);
107 ASSERT_TRUE(s.end() != s.find(DICOM_TAG_SERIES_INSTANCE_UID)); 110 ASSERT_TRUE(s.end() != s.find(DICOM_TAG_SERIES_INSTANCE_UID));
108 ASSERT_TRUE(s.end() == s.find(DICOM_TAG_PATIENT_ID)); 111 ASSERT_TRUE(s.end() == s.find(DICOM_TAG_PATIENT_ID));
109 } 112 }
110 113
111 { 114 {
112 const std::set<DicomTag>& s = DicomMap::GetMainDicomTags(ResourceType_Instance); 115 std::set<DicomTag> s;
116 DicomMap::GetMainDicomTags(s, ResourceType_Instance);
113 ASSERT_TRUE(s.end() != s.find(DICOM_TAG_SOP_INSTANCE_UID)); 117 ASSERT_TRUE(s.end() != s.find(DICOM_TAG_SOP_INSTANCE_UID));
114 ASSERT_TRUE(s.end() == s.find(DICOM_TAG_PATIENT_ID)); 118 ASSERT_TRUE(s.end() == s.find(DICOM_TAG_PATIENT_ID));
115 } 119 }
116 } 120 }
117 121
118 TEST_F(DicomMapMainTagsTests, AddMainTags) 122 TEST_F(DicomMapMainTagsTests, AddMainTags)
119 { 123 {
120 DicomMap::AddMainDicomTag(DICOM_TAG_BITS_ALLOCATED, ResourceType_Instance); 124 DicomMap::AddMainDicomTag(DICOM_TAG_BITS_ALLOCATED, ResourceType_Instance);
121 125
122 { 126 {
123 const std::set<DicomTag>& s = DicomMap::GetMainDicomTags(ResourceType_Instance); 127 std::set<DicomTag> s;
128 DicomMap::GetMainDicomTags(s, ResourceType_Instance);
124 ASSERT_TRUE(s.end() != s.find(DICOM_TAG_BITS_ALLOCATED)); 129 ASSERT_TRUE(s.end() != s.find(DICOM_TAG_BITS_ALLOCATED));
125 ASSERT_TRUE(s.end() != s.find(DICOM_TAG_SOP_INSTANCE_UID)); 130 ASSERT_TRUE(s.end() != s.find(DICOM_TAG_SOP_INSTANCE_UID));
126 } 131 }
127 { 132 {
128 const std::set<DicomTag>& s = DicomMap::GetMainDicomTags(ResourceType_Series); 133 std::set<DicomTag> s;
134 DicomMap::GetMainDicomTags(s, ResourceType_Series);
129 ASSERT_TRUE(s.end() == s.find(DICOM_TAG_BITS_ALLOCATED)); 135 ASSERT_TRUE(s.end() == s.find(DICOM_TAG_BITS_ALLOCATED));
130 } 136 }
131 137
132 ASSERT_TRUE(DicomMap::IsMainDicomTag(DICOM_TAG_BITS_ALLOCATED)); 138 ASSERT_TRUE(DicomMap::IsMainDicomTag(DICOM_TAG_BITS_ALLOCATED));
133 ASSERT_TRUE(DicomMap::IsMainDicomTag(DICOM_TAG_BITS_ALLOCATED, ResourceType_Instance)); 139 ASSERT_TRUE(DicomMap::IsMainDicomTag(DICOM_TAG_BITS_ALLOCATED, ResourceType_Instance));
240 DicomModule module) 246 DicomModule module)
241 { 247 {
242 // REFERENCE: DICOM PS3.3 2015c - Information Object Definitions 248 // REFERENCE: DICOM PS3.3 2015c - Information Object Definitions
243 // http://dicom.nema.org/medical/dicom/current/output/html/part03.html 249 // http://dicom.nema.org/medical/dicom/current/output/html/part03.html
244 250
251 std::set<DicomTag> main;
252 DicomMap::GetMainDicomTags(main, level);
253
245 std::set<DicomTag> moduleTags; 254 std::set<DicomTag> moduleTags;
246 const std::set<DicomTag>& main = DicomMap::GetMainDicomTags(level);
247 DicomTag::AddTagsForModule(moduleTags, module); 255 DicomTag::AddTagsForModule(moduleTags, module);
248 256
249 // The main dicom tags are a subset of the module 257 // The main dicom tags are a subset of the module
250 for (std::set<DicomTag>::const_iterator it = main.begin(); it != main.end(); ++it) 258 for (std::set<DicomTag>::const_iterator it = main.begin(); it != main.end(); ++it)
251 { 259 {
916 924
917 for (int i = ResourceType_Patient; i <= ResourceType_Instance; i++) 925 for (int i = ResourceType_Patient; i <= ResourceType_Instance; i++)
918 { 926 {
919 ResourceType level = static_cast<ResourceType>(i); 927 ResourceType level = static_cast<ResourceType>(i);
920 928
921 const std::set<DicomTag>& tags = DicomMap::GetMainDicomTags(level); 929 std::set<DicomTag> tags;
930 DicomMap::GetMainDicomTags(tags, level);
922 931
923 for (std::set<DicomTag>::const_iterator it = tags.begin(); it != tags.end(); ++it) 932 for (std::set<DicomTag>::const_iterator it = tags.begin(); it != tags.end(); ++it)
924 { 933 {
925 DicomMap a; 934 DicomMap a;
926 a.SetValue(*it, "TEST", false); 935 a.SetValue(*it, "TEST", false);