comparison UnitTestsSources/SortedFramesTests.cpp @ 1645:bc7bd8ee13f8

making private two potentially dangerous methods in SortedFrames
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 10 Nov 2020 21:07:05 +0100
parents 4796fb60999e
children 9ac2a65d4172
comparison
equal deleted inserted replaced
1644:4796fb60999e 1645:bc7bd8ee13f8
17 * You should have received a copy of the GNU Affero General Public License 17 * You should have received a copy of the GNU Affero General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>. 18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 **/ 19 **/
20 20
21 21
22 // Make sure to define FRIEND_TEST before including "SortedFrames.h"
22 #include <gtest/gtest.h> 23 #include <gtest/gtest.h>
23 24
24 #include "../OrthancStone/Sources/Toolbox/SortedFrames.h" 25 #include "../OrthancStone/Sources/Toolbox/SortedFrames.h"
25 26
26 #include <OrthancException.h> 27 #include <OrthancException.h>
27 28
28 29
29 TEST(SortedFrames, Basic) 30 // Namespace is necessary for FRIEND_TEST() to work in "SortedFrames.h"
31 namespace OrthancStone
30 { 32 {
31 OrthancStone::SortedFrames f; 33 TEST(SortedFrames, Basic)
32 ASSERT_TRUE(f.GetStudyInstanceUid().empty()); 34 {
33 ASSERT_TRUE(f.GetSeriesInstanceUid().empty()); 35 SortedFrames f;
34 ASSERT_EQ(0u, f.GetInstancesCount()); 36 ASSERT_TRUE(f.GetStudyInstanceUid().empty());
35 ASSERT_THROW(f.GetInstance(0).GetTags(), Orthanc::OrthancException); 37 ASSERT_TRUE(f.GetSeriesInstanceUid().empty());
36 ASSERT_THROW(f.GetInstance(0).GetSopInstanceUid(), Orthanc::OrthancException); 38 ASSERT_EQ(0u, f.GetInstancesCount());
37 ASSERT_TRUE(f.IsSorted()); 39 ASSERT_THROW(f.GetInstance(0).GetTags(), Orthanc::OrthancException);
38 ASSERT_EQ(0u, f.GetFramesCount()); 40 ASSERT_THROW(f.GetInstance(0).GetSopInstanceUid(), Orthanc::OrthancException);
39 ASSERT_THROW(f.GetInstanceOfFrame(0).GetTags(), Orthanc::OrthancException); 41 ASSERT_TRUE(f.IsSorted());
40 ASSERT_THROW(f.GetInstanceOfFrame(0).GetSopInstanceUid(), Orthanc::OrthancException); 42 ASSERT_EQ(0u, f.GetFramesCount());
41 ASSERT_THROW(f.GetInstanceOfFrame(0).GetNumberOfFrames(), Orthanc::OrthancException); 43 ASSERT_THROW(f.GetInstanceOfFrame(0).GetTags(), Orthanc::OrthancException);
42 ASSERT_THROW(f.GetFrameNumberInInstance(0), Orthanc::OrthancException); 44 ASSERT_THROW(f.GetInstanceOfFrame(0).GetSopInstanceUid(), Orthanc::OrthancException);
43 45 ASSERT_THROW(f.GetInstanceOfFrame(0).GetNumberOfFrames(), Orthanc::OrthancException);
44 Orthanc::DicomMap tags; 46 ASSERT_THROW(f.GetFrameNumberInInstance(0), Orthanc::OrthancException);
45 ASSERT_THROW(f.AddInstance(tags), Orthanc::OrthancException); 47
46 tags.SetValue(Orthanc::DICOM_TAG_STUDY_INSTANCE_UID, "study", false); 48 Orthanc::DicomMap tags;
47 ASSERT_THROW(f.AddInstance(tags), Orthanc::OrthancException); 49 ASSERT_THROW(f.AddInstance(tags), Orthanc::OrthancException);
48 tags.SetValue(Orthanc::DICOM_TAG_SERIES_INSTANCE_UID, "series", false); 50 tags.SetValue(Orthanc::DICOM_TAG_STUDY_INSTANCE_UID, "study", false);
49 ASSERT_THROW(f.AddInstance(tags), Orthanc::OrthancException); 51 ASSERT_THROW(f.AddInstance(tags), Orthanc::OrthancException);
50 tags.SetValue(Orthanc::DICOM_TAG_SOP_INSTANCE_UID, "sop", false); 52 tags.SetValue(Orthanc::DICOM_TAG_SERIES_INSTANCE_UID, "series", false);
51 f.AddInstance(tags); 53 ASSERT_THROW(f.AddInstance(tags), Orthanc::OrthancException);
52 54 tags.SetValue(Orthanc::DICOM_TAG_SOP_INSTANCE_UID, "sop", false);
53 ASSERT_EQ("study", f.GetStudyInstanceUid()); 55 f.AddInstance(tags);
54 ASSERT_EQ("series", f.GetSeriesInstanceUid()); 56
55 ASSERT_EQ(1u, f.GetInstancesCount()); 57 ASSERT_EQ("study", f.GetStudyInstanceUid());
56 std::string s; 58 ASSERT_EQ("series", f.GetSeriesInstanceUid());
57 ASSERT_TRUE(f.GetInstance(0).GetTags().LookupStringValue(s, Orthanc::DICOM_TAG_SOP_INSTANCE_UID, false)); 59 ASSERT_EQ(1u, f.GetInstancesCount());
58 ASSERT_EQ("sop", s); 60 std::string s;
59 ASSERT_EQ("sop", f.GetInstance(0).GetSopInstanceUid()); 61 ASSERT_TRUE(f.GetInstance(0).GetTags().LookupStringValue(s, Orthanc::DICOM_TAG_SOP_INSTANCE_UID, false));
60 ASSERT_FALSE(f.IsSorted()); 62 ASSERT_EQ("sop", s);
61 ASSERT_THROW(f.GetFramesCount(), Orthanc::OrthancException); 63 ASSERT_EQ("sop", f.GetInstance(0).GetSopInstanceUid());
62 ASSERT_THROW(f.GetInstanceOfFrame(0).GetTags(), Orthanc::OrthancException); 64 ASSERT_FALSE(f.IsSorted());
63 ASSERT_THROW(f.GetInstanceOfFrame(0).GetSopInstanceUid(), Orthanc::OrthancException); 65 ASSERT_THROW(f.GetFramesCount(), Orthanc::OrthancException);
64 ASSERT_THROW(f.GetInstanceOfFrame(0).GetNumberOfFrames(), Orthanc::OrthancException); 66 ASSERT_THROW(f.GetInstanceOfFrame(0).GetTags(), Orthanc::OrthancException);
65 ASSERT_THROW(f.GetFrameNumberInInstance(0), Orthanc::OrthancException); 67 ASSERT_THROW(f.GetInstanceOfFrame(0).GetSopInstanceUid(), Orthanc::OrthancException);
66 68 ASSERT_THROW(f.GetInstanceOfFrame(0).GetNumberOfFrames(), Orthanc::OrthancException);
67 f.Sort(); 69 ASSERT_THROW(f.GetFrameNumberInInstance(0), Orthanc::OrthancException);
68 ASSERT_TRUE(f.IsSorted()); 70
69 ASSERT_EQ(1u, f.GetFramesCount()); 71 f.Sort();
70 ASSERT_TRUE(f.GetInstanceOfFrame(0).GetTags().LookupStringValue(s, Orthanc::DICOM_TAG_SOP_INSTANCE_UID, false)); 72 ASSERT_TRUE(f.IsSorted());
71 ASSERT_EQ("sop", s); 73 ASSERT_EQ(1u, f.GetFramesCount());
72 ASSERT_EQ("sop", f.GetInstanceOfFrame(0).GetSopInstanceUid()); 74 ASSERT_TRUE(f.GetInstanceOfFrame(0).GetTags().LookupStringValue(s, Orthanc::DICOM_TAG_SOP_INSTANCE_UID, false));
73 ASSERT_EQ(1u, f.GetInstanceOfFrame(0).GetNumberOfFrames()); 75 ASSERT_EQ("sop", s);
74 ASSERT_EQ(0u, f.GetFrameNumberInInstance(0)); 76 ASSERT_EQ("sop", f.GetInstanceOfFrame(0).GetSopInstanceUid());
75 ASSERT_THROW(f.GetInstanceOfFrame(1).GetTags(), Orthanc::OrthancException); 77 ASSERT_EQ(1u, f.GetInstanceOfFrame(0).GetNumberOfFrames());
76 } 78 ASSERT_EQ(0u, f.GetFrameNumberInInstance(0));
77 79 ASSERT_THROW(f.GetInstanceOfFrame(1).GetTags(), Orthanc::OrthancException);
78 80 }
79 TEST(SortedFrames, SortSopInstanceUid) 81
80 { 82
81 Orthanc::DicomMap tags; 83 TEST(SortedFrames, SortSopInstanceUid)
82 tags.SetValue(Orthanc::DICOM_TAG_STUDY_INSTANCE_UID, "study", false); 84 {
83 tags.SetValue(Orthanc::DICOM_TAG_SERIES_INSTANCE_UID, "series", false); 85 Orthanc::DicomMap tags;
86 tags.SetValue(Orthanc::DICOM_TAG_STUDY_INSTANCE_UID, "study", false);
87 tags.SetValue(Orthanc::DICOM_TAG_SERIES_INSTANCE_UID, "series", false);
84 88
85 OrthancStone::SortedFrames f; 89 SortedFrames f;
86 tags.SetValue(Orthanc::DICOM_TAG_SOP_INSTANCE_UID, "sop3", false); 90 tags.SetValue(Orthanc::DICOM_TAG_SOP_INSTANCE_UID, "sop3", false);
87 tags.SetValue(Orthanc::DICOM_TAG_NUMBER_OF_FRAMES, "1", false); 91 tags.SetValue(Orthanc::DICOM_TAG_NUMBER_OF_FRAMES, "1", false);
88 f.AddInstance(tags); 92 f.AddInstance(tags);
89 tags.SetValue(Orthanc::DICOM_TAG_SOP_INSTANCE_UID, "sop1", false); 93 tags.SetValue(Orthanc::DICOM_TAG_SOP_INSTANCE_UID, "sop1", false);
90 tags.SetValue(Orthanc::DICOM_TAG_NUMBER_OF_FRAMES, "3", false); 94 tags.SetValue(Orthanc::DICOM_TAG_NUMBER_OF_FRAMES, "3", false);
91 f.AddInstance(tags); 95 f.AddInstance(tags);
92 tags.SetValue(Orthanc::DICOM_TAG_SOP_INSTANCE_UID, "sop2", false); 96 tags.SetValue(Orthanc::DICOM_TAG_SOP_INSTANCE_UID, "sop2", false);
93 tags.SetValue(Orthanc::DICOM_TAG_NUMBER_OF_FRAMES, "2", false); 97 tags.SetValue(Orthanc::DICOM_TAG_NUMBER_OF_FRAMES, "2", false);
94 f.AddInstance(tags); 98 f.AddInstance(tags);
95 99
96 size_t i; 100 size_t i;
97 ASSERT_TRUE(f.LookupSopInstanceUid(i, "sop3")); ASSERT_EQ(0u, i); 101 ASSERT_TRUE(f.LookupSopInstanceUid(i, "sop3")); ASSERT_EQ(0u, i);
98 ASSERT_TRUE(f.LookupSopInstanceUid(i, "sop1")); ASSERT_EQ(1u, i); 102 ASSERT_TRUE(f.LookupSopInstanceUid(i, "sop1")); ASSERT_EQ(1u, i);
99 ASSERT_TRUE(f.LookupSopInstanceUid(i, "sop2")); ASSERT_EQ(2u, i); 103 ASSERT_TRUE(f.LookupSopInstanceUid(i, "sop2")); ASSERT_EQ(2u, i);
100 ASSERT_FALSE(f.LookupSopInstanceUid(i, "nope")); 104 ASSERT_FALSE(f.LookupSopInstanceUid(i, "nope"));
101 105
102 ASSERT_THROW(f.LookupFrame(i, "sop3", 0), Orthanc::OrthancException); // Not sorted yet 106 ASSERT_THROW(f.LookupFrame(i, "sop3", 0), Orthanc::OrthancException); // Not sorted yet
103 107
104 f.Sort(); 108 f.Sort();
105 ASSERT_EQ(3u, f.GetInstancesCount()); 109 ASSERT_EQ(3u, f.GetInstancesCount());
106 ASSERT_EQ("sop3", f.GetInstance(0).GetSopInstanceUid()); 110 ASSERT_EQ("sop3", f.GetInstance(0).GetSopInstanceUid());
107 ASSERT_EQ("sop1", f.GetInstance(1).GetSopInstanceUid()); 111 ASSERT_EQ("sop1", f.GetInstance(1).GetSopInstanceUid());
108 ASSERT_EQ("sop2", f.GetInstance(2).GetSopInstanceUid()); 112 ASSERT_EQ("sop2", f.GetInstance(2).GetSopInstanceUid());
109 ASSERT_EQ(6u, f.GetFramesCount()); 113 ASSERT_EQ(6u, f.GetFramesCount());
110 ASSERT_EQ("sop1", f.GetInstanceOfFrame(0).GetSopInstanceUid()); ASSERT_EQ(0u, f.GetFrameNumberInInstance(0)); 114 ASSERT_EQ("sop1", f.GetInstanceOfFrame(0).GetSopInstanceUid()); ASSERT_EQ(0u, f.GetFrameNumberInInstance(0));
111 ASSERT_EQ("sop1", f.GetInstanceOfFrame(1).GetSopInstanceUid()); ASSERT_EQ(1u, f.GetFrameNumberInInstance(1)); 115 ASSERT_EQ("sop1", f.GetInstanceOfFrame(1).GetSopInstanceUid()); ASSERT_EQ(1u, f.GetFrameNumberInInstance(1));
112 ASSERT_EQ("sop1", f.GetInstanceOfFrame(2).GetSopInstanceUid()); ASSERT_EQ(2u, f.GetFrameNumberInInstance(2)); 116 ASSERT_EQ("sop1", f.GetInstanceOfFrame(2).GetSopInstanceUid()); ASSERT_EQ(2u, f.GetFrameNumberInInstance(2));
113 ASSERT_EQ("sop2", f.GetInstanceOfFrame(3).GetSopInstanceUid()); ASSERT_EQ(0u, f.GetFrameNumberInInstance(3)); 117 ASSERT_EQ("sop2", f.GetInstanceOfFrame(3).GetSopInstanceUid()); ASSERT_EQ(0u, f.GetFrameNumberInInstance(3));
114 ASSERT_EQ("sop2", f.GetInstanceOfFrame(4).GetSopInstanceUid()); ASSERT_EQ(1u, f.GetFrameNumberInInstance(4)); 118 ASSERT_EQ("sop2", f.GetInstanceOfFrame(4).GetSopInstanceUid()); ASSERT_EQ(1u, f.GetFrameNumberInInstance(4));
115 ASSERT_EQ("sop3", f.GetInstanceOfFrame(5).GetSopInstanceUid()); ASSERT_EQ(0u, f.GetFrameNumberInInstance(5)); 119 ASSERT_EQ("sop3", f.GetInstanceOfFrame(5).GetSopInstanceUid()); ASSERT_EQ(0u, f.GetFrameNumberInInstance(5));
116 120
117 // The instances must not have been reordered, only the frames 121 // The instances must not have been reordered, only the frames
118 ASSERT_TRUE(f.LookupSopInstanceUid(i, "sop1")); ASSERT_EQ(1u, i); 122 ASSERT_TRUE(f.LookupSopInstanceUid(i, "sop1")); ASSERT_EQ(1u, i);
119 ASSERT_TRUE(f.LookupSopInstanceUid(i, "sop2")); ASSERT_EQ(2u, i); 123 ASSERT_TRUE(f.LookupSopInstanceUid(i, "sop2")); ASSERT_EQ(2u, i);
120 ASSERT_TRUE(f.LookupSopInstanceUid(i, "sop3")); ASSERT_EQ(0u, i); 124 ASSERT_TRUE(f.LookupSopInstanceUid(i, "sop3")); ASSERT_EQ(0u, i);
121 ASSERT_FALSE(f.LookupSopInstanceUid(i, "nope")); 125 ASSERT_FALSE(f.LookupSopInstanceUid(i, "nope"));
122 126
123 ASSERT_TRUE(f.LookupFrame(i, "sop1", 0)); ASSERT_EQ(0u, i); 127 ASSERT_TRUE(f.LookupFrame(i, "sop1", 0)); ASSERT_EQ(0u, i);
124 ASSERT_TRUE(f.LookupFrame(i, "sop1", 1)); ASSERT_EQ(1u, i); 128 ASSERT_TRUE(f.LookupFrame(i, "sop1", 1)); ASSERT_EQ(1u, i);
125 ASSERT_TRUE(f.LookupFrame(i, "sop1", 2)); ASSERT_EQ(2u, i); 129 ASSERT_TRUE(f.LookupFrame(i, "sop1", 2)); ASSERT_EQ(2u, i);
126 ASSERT_TRUE(f.LookupFrame(i, "sop2", 0)); ASSERT_EQ(3u, i); 130 ASSERT_TRUE(f.LookupFrame(i, "sop2", 0)); ASSERT_EQ(3u, i);
127 ASSERT_TRUE(f.LookupFrame(i, "sop2", 1)); ASSERT_EQ(4u, i); 131 ASSERT_TRUE(f.LookupFrame(i, "sop2", 1)); ASSERT_EQ(4u, i);
128 ASSERT_TRUE(f.LookupFrame(i, "sop3", 0)); ASSERT_EQ(5u, i); 132 ASSERT_TRUE(f.LookupFrame(i, "sop3", 0)); ASSERT_EQ(5u, i);
129 133
130 ASSERT_FALSE(f.LookupFrame(i, "nope", 0)); 134 ASSERT_FALSE(f.LookupFrame(i, "nope", 0));
131 ASSERT_FALSE(f.LookupFrame(i, "sop1", 3)); 135 ASSERT_FALSE(f.LookupFrame(i, "sop1", 3));
132 ASSERT_FALSE(f.LookupFrame(i, "sop2", 2)); 136 ASSERT_FALSE(f.LookupFrame(i, "sop2", 2));
133 ASSERT_FALSE(f.LookupFrame(i, "sop3", 1)); 137 ASSERT_FALSE(f.LookupFrame(i, "sop3", 1));
134 } 138 }
135 139
136 140
137 TEST(SortedFrames, SortInstanceNumber) 141 TEST(SortedFrames, SortInstanceNumber)
138 { 142 {
139 Orthanc::DicomMap tags; 143 Orthanc::DicomMap tags;
140 tags.SetValue(Orthanc::DICOM_TAG_STUDY_INSTANCE_UID, "study", false); 144 tags.SetValue(Orthanc::DICOM_TAG_STUDY_INSTANCE_UID, "study", false);
141 tags.SetValue(Orthanc::DICOM_TAG_SERIES_INSTANCE_UID, "series", false); 145 tags.SetValue(Orthanc::DICOM_TAG_SERIES_INSTANCE_UID, "series", false);
142 146
143 OrthancStone::SortedFrames f; 147 SortedFrames f;
144 tags.SetValue(Orthanc::DICOM_TAG_SOP_INSTANCE_UID, "sop1", false); 148 tags.SetValue(Orthanc::DICOM_TAG_SOP_INSTANCE_UID, "sop1", false);
145 tags.SetValue(Orthanc::DICOM_TAG_INSTANCE_NUMBER, "20", false); 149 tags.SetValue(Orthanc::DICOM_TAG_INSTANCE_NUMBER, "20", false);
146 f.AddInstance(tags); 150 f.AddInstance(tags);
147 tags.SetValue(Orthanc::DICOM_TAG_SOP_INSTANCE_UID, "sop2", false); 151 tags.SetValue(Orthanc::DICOM_TAG_SOP_INSTANCE_UID, "sop2", false);
148 tags.SetValue(Orthanc::DICOM_TAG_INSTANCE_NUMBER, "-20", false); 152 tags.SetValue(Orthanc::DICOM_TAG_INSTANCE_NUMBER, "-20", false);
149 f.AddInstance(tags); 153 f.AddInstance(tags);
150 tags.SetValue(Orthanc::DICOM_TAG_SOP_INSTANCE_UID, "sop2a", false); 154 tags.SetValue(Orthanc::DICOM_TAG_SOP_INSTANCE_UID, "sop2a", false);
151 tags.Remove(Orthanc::DICOM_TAG_INSTANCE_NUMBER); 155 tags.Remove(Orthanc::DICOM_TAG_INSTANCE_NUMBER);
152 f.AddInstance(tags); 156 f.AddInstance(tags);
153 tags.SetValue(Orthanc::DICOM_TAG_SOP_INSTANCE_UID, "sop4", false); 157 tags.SetValue(Orthanc::DICOM_TAG_SOP_INSTANCE_UID, "sop4", false);
154 tags.SetValue(Orthanc::DICOM_TAG_INSTANCE_NUMBER, "10", false); 158 tags.SetValue(Orthanc::DICOM_TAG_INSTANCE_NUMBER, "10", false);
155 f.AddInstance(tags); 159 f.AddInstance(tags);
156 tags.SetValue(Orthanc::DICOM_TAG_SOP_INSTANCE_UID, "sop3", false); 160 tags.SetValue(Orthanc::DICOM_TAG_SOP_INSTANCE_UID, "sop3", false);
157 tags.SetValue(Orthanc::DICOM_TAG_INSTANCE_NUMBER, "10", false); 161 tags.SetValue(Orthanc::DICOM_TAG_INSTANCE_NUMBER, "10", false);
158 f.AddInstance(tags); 162 f.AddInstance(tags);
159 tags.SetValue(Orthanc::DICOM_TAG_SOP_INSTANCE_UID, "sop5", false); 163 tags.SetValue(Orthanc::DICOM_TAG_SOP_INSTANCE_UID, "sop5", false);
160 tags.SetValue(Orthanc::DICOM_TAG_INSTANCE_NUMBER, "10", false); 164 tags.SetValue(Orthanc::DICOM_TAG_INSTANCE_NUMBER, "10", false);
161 f.AddInstance(tags); 165 f.AddInstance(tags);
162 166
163 size_t i; 167 size_t i;
164 ASSERT_TRUE(f.LookupSopInstanceUid(i, "sop1")); ASSERT_EQ(0u, i); 168 ASSERT_TRUE(f.LookupSopInstanceUid(i, "sop1")); ASSERT_EQ(0u, i);
165 ASSERT_TRUE(f.LookupSopInstanceUid(i, "sop2")); ASSERT_EQ(1u, i); 169 ASSERT_TRUE(f.LookupSopInstanceUid(i, "sop2")); ASSERT_EQ(1u, i);
166 ASSERT_TRUE(f.LookupSopInstanceUid(i, "sop2a")); ASSERT_EQ(2u, i); 170 ASSERT_TRUE(f.LookupSopInstanceUid(i, "sop2a")); ASSERT_EQ(2u, i);
167 ASSERT_TRUE(f.LookupSopInstanceUid(i, "sop4")); ASSERT_EQ(3u, i); 171 ASSERT_TRUE(f.LookupSopInstanceUid(i, "sop4")); ASSERT_EQ(3u, i);
168 ASSERT_TRUE(f.LookupSopInstanceUid(i, "sop3")); ASSERT_EQ(4u, i); 172 ASSERT_TRUE(f.LookupSopInstanceUid(i, "sop3")); ASSERT_EQ(4u, i);
169 ASSERT_TRUE(f.LookupSopInstanceUid(i, "sop5")); ASSERT_EQ(5u, i); 173 ASSERT_TRUE(f.LookupSopInstanceUid(i, "sop5")); ASSERT_EQ(5u, i);
170 ASSERT_FALSE(f.LookupSopInstanceUid(i, "nope")); 174 ASSERT_FALSE(f.LookupSopInstanceUid(i, "nope"));
171 175
172 ASSERT_THROW(f.LookupFrame(i, "sop1", 0), Orthanc::OrthancException); // Not sorted yet 176 ASSERT_THROW(f.LookupFrame(i, "sop1", 0), Orthanc::OrthancException); // Not sorted yet
173 177
174 f.Sort(); 178 f.Sort();
175 ASSERT_EQ(6u, f.GetInstancesCount()); 179 ASSERT_EQ(6u, f.GetInstancesCount());
176 ASSERT_EQ("sop1", f.GetInstance(0).GetSopInstanceUid()); 180 ASSERT_EQ("sop1", f.GetInstance(0).GetSopInstanceUid());
177 ASSERT_EQ("sop2", f.GetInstance(1).GetSopInstanceUid()); 181 ASSERT_EQ("sop2", f.GetInstance(1).GetSopInstanceUid());
178 ASSERT_EQ("sop2a", f.GetInstance(2).GetSopInstanceUid()); 182 ASSERT_EQ("sop2a", f.GetInstance(2).GetSopInstanceUid());
179 ASSERT_EQ("sop4", f.GetInstance(3).GetSopInstanceUid()); 183 ASSERT_EQ("sop4", f.GetInstance(3).GetSopInstanceUid());
180 ASSERT_EQ("sop3", f.GetInstance(4).GetSopInstanceUid()); 184 ASSERT_EQ("sop3", f.GetInstance(4).GetSopInstanceUid());
181 ASSERT_EQ("sop5", f.GetInstance(5).GetSopInstanceUid()); 185 ASSERT_EQ("sop5", f.GetInstance(5).GetSopInstanceUid());
182 ASSERT_EQ(6u, f.GetFramesCount()); 186 ASSERT_EQ(6u, f.GetFramesCount());
183 ASSERT_EQ("sop2", f.GetInstanceOfFrame(0).GetSopInstanceUid()); ASSERT_EQ(0u, f.GetFrameNumberInInstance(0)); 187 ASSERT_EQ("sop2", f.GetInstanceOfFrame(0).GetSopInstanceUid()); ASSERT_EQ(0u, f.GetFrameNumberInInstance(0));
184 ASSERT_EQ("sop3", f.GetInstanceOfFrame(1).GetSopInstanceUid()); ASSERT_EQ(0u, f.GetFrameNumberInInstance(1)); 188 ASSERT_EQ("sop3", f.GetInstanceOfFrame(1).GetSopInstanceUid()); ASSERT_EQ(0u, f.GetFrameNumberInInstance(1));
185 ASSERT_EQ("sop4", f.GetInstanceOfFrame(2).GetSopInstanceUid()); ASSERT_EQ(0u, f.GetFrameNumberInInstance(2)); 189 ASSERT_EQ("sop4", f.GetInstanceOfFrame(2).GetSopInstanceUid()); ASSERT_EQ(0u, f.GetFrameNumberInInstance(2));
186 ASSERT_EQ("sop5", f.GetInstanceOfFrame(3).GetSopInstanceUid()); ASSERT_EQ(0u, f.GetFrameNumberInInstance(3)); 190 ASSERT_EQ("sop5", f.GetInstanceOfFrame(3).GetSopInstanceUid()); ASSERT_EQ(0u, f.GetFrameNumberInInstance(3));
187 ASSERT_EQ("sop1", f.GetInstanceOfFrame(4).GetSopInstanceUid()); ASSERT_EQ(0u, f.GetFrameNumberInInstance(4)); 191 ASSERT_EQ("sop1", f.GetInstanceOfFrame(4).GetSopInstanceUid()); ASSERT_EQ(0u, f.GetFrameNumberInInstance(4));
188 ASSERT_EQ("sop2a", f.GetInstanceOfFrame(5).GetSopInstanceUid()); ASSERT_EQ(0u, f.GetFrameNumberInInstance(5)); 192 ASSERT_EQ("sop2a", f.GetInstanceOfFrame(5).GetSopInstanceUid()); ASSERT_EQ(0u, f.GetFrameNumberInInstance(5));
189 193
190 // The instances must not have been reordered, only the frames 194 // The instances must not have been reordered, only the frames
191 ASSERT_TRUE(f.LookupSopInstanceUid(i, "sop1")); ASSERT_EQ(0u, i); 195 ASSERT_TRUE(f.LookupSopInstanceUid(i, "sop1")); ASSERT_EQ(0u, i);
192 ASSERT_TRUE(f.LookupSopInstanceUid(i, "sop2")); ASSERT_EQ(1u, i); 196 ASSERT_TRUE(f.LookupSopInstanceUid(i, "sop2")); ASSERT_EQ(1u, i);
193 ASSERT_TRUE(f.LookupSopInstanceUid(i, "sop2a")); ASSERT_EQ(2u, i); 197 ASSERT_TRUE(f.LookupSopInstanceUid(i, "sop2a")); ASSERT_EQ(2u, i);
194 ASSERT_TRUE(f.LookupSopInstanceUid(i, "sop4")); ASSERT_EQ(3u, i); 198 ASSERT_TRUE(f.LookupSopInstanceUid(i, "sop4")); ASSERT_EQ(3u, i);
195 ASSERT_TRUE(f.LookupSopInstanceUid(i, "sop3")); ASSERT_EQ(4u, i); 199 ASSERT_TRUE(f.LookupSopInstanceUid(i, "sop3")); ASSERT_EQ(4u, i);
196 ASSERT_TRUE(f.LookupSopInstanceUid(i, "sop5")); ASSERT_EQ(5u, i); 200 ASSERT_TRUE(f.LookupSopInstanceUid(i, "sop5")); ASSERT_EQ(5u, i);
197 ASSERT_FALSE(f.LookupSopInstanceUid(i, "nope")); 201 ASSERT_FALSE(f.LookupSopInstanceUid(i, "nope"));
198 202
199 ASSERT_TRUE(f.LookupFrame(i, "sop2", 0)); ASSERT_EQ(0u, i); 203 ASSERT_TRUE(f.LookupFrame(i, "sop2", 0)); ASSERT_EQ(0u, i);
200 ASSERT_TRUE(f.LookupFrame(i, "sop3", 0)); ASSERT_EQ(1u, i); 204 ASSERT_TRUE(f.LookupFrame(i, "sop3", 0)); ASSERT_EQ(1u, i);
201 ASSERT_TRUE(f.LookupFrame(i, "sop4", 0)); ASSERT_EQ(2u, i); 205 ASSERT_TRUE(f.LookupFrame(i, "sop4", 0)); ASSERT_EQ(2u, i);
202 ASSERT_TRUE(f.LookupFrame(i, "sop5", 0)); ASSERT_EQ(3u, i); 206 ASSERT_TRUE(f.LookupFrame(i, "sop5", 0)); ASSERT_EQ(3u, i);
203 ASSERT_TRUE(f.LookupFrame(i, "sop1", 0)); ASSERT_EQ(4u, i); 207 ASSERT_TRUE(f.LookupFrame(i, "sop1", 0)); ASSERT_EQ(4u, i);
204 ASSERT_TRUE(f.LookupFrame(i, "sop2a", 0)); ASSERT_EQ(5u, i); 208 ASSERT_TRUE(f.LookupFrame(i, "sop2a", 0)); ASSERT_EQ(5u, i);
205 209
206 ASSERT_FALSE(f.LookupFrame(i, "nope", 0)); 210 ASSERT_FALSE(f.LookupFrame(i, "nope", 0));
207 ASSERT_FALSE(f.LookupFrame(i, "sop1", 1)); 211 ASSERT_FALSE(f.LookupFrame(i, "sop1", 1));
208 } 212 }
209 213
210 214
211 TEST(SortedFrames, SortInstanceNumberAndImageIndex) 215 TEST(SortedFrames, SortInstanceNumberAndImageIndex)
212 { 216 {
213 Orthanc::DicomMap tags; 217 Orthanc::DicomMap tags;
214 tags.SetValue(Orthanc::DICOM_TAG_STUDY_INSTANCE_UID, "study", false); 218 tags.SetValue(Orthanc::DICOM_TAG_STUDY_INSTANCE_UID, "study", false);
215 tags.SetValue(Orthanc::DICOM_TAG_SERIES_INSTANCE_UID, "series", false); 219 tags.SetValue(Orthanc::DICOM_TAG_SERIES_INSTANCE_UID, "series", false);
216 220
217 OrthancStone::SortedFrames f; 221 SortedFrames f;
218 tags.SetValue(Orthanc::DICOM_TAG_SOP_INSTANCE_UID, "sop1", false); 222 tags.SetValue(Orthanc::DICOM_TAG_SOP_INSTANCE_UID, "sop1", false);
219 tags.SetValue(Orthanc::DICOM_TAG_INSTANCE_NUMBER, "20", false); 223 tags.SetValue(Orthanc::DICOM_TAG_INSTANCE_NUMBER, "20", false);
220 f.AddInstance(tags); 224 f.AddInstance(tags);
221 tags.SetValue(Orthanc::DICOM_TAG_SOP_INSTANCE_UID, "sop2", false); 225 tags.SetValue(Orthanc::DICOM_TAG_SOP_INSTANCE_UID, "sop2", false);
222 tags.Remove(Orthanc::DICOM_TAG_INSTANCE_NUMBER); 226 tags.Remove(Orthanc::DICOM_TAG_INSTANCE_NUMBER);
223 tags.SetValue(Orthanc::DICOM_TAG_IMAGE_INDEX, "20", false); 227 tags.SetValue(Orthanc::DICOM_TAG_IMAGE_INDEX, "20", false);
224 f.AddInstance(tags); 228 f.AddInstance(tags);
225 tags.SetValue(Orthanc::DICOM_TAG_SOP_INSTANCE_UID, "sop3", false); 229 tags.SetValue(Orthanc::DICOM_TAG_SOP_INSTANCE_UID, "sop3", false);
226 tags.SetValue(Orthanc::DICOM_TAG_IMAGE_INDEX, "30", false); 230 tags.SetValue(Orthanc::DICOM_TAG_IMAGE_INDEX, "30", false);
227 f.AddInstance(tags); 231 f.AddInstance(tags);
228 tags.SetValue(Orthanc::DICOM_TAG_SOP_INSTANCE_UID, "sop4", false); 232 tags.SetValue(Orthanc::DICOM_TAG_SOP_INSTANCE_UID, "sop4", false);
229 tags.Remove(Orthanc::DICOM_TAG_IMAGE_INDEX); 233 tags.Remove(Orthanc::DICOM_TAG_IMAGE_INDEX);
230 tags.SetValue(Orthanc::DICOM_TAG_INSTANCE_NUMBER, "30", false); 234 tags.SetValue(Orthanc::DICOM_TAG_INSTANCE_NUMBER, "30", false);
231 f.AddInstance(tags); 235 f.AddInstance(tags);
232 236
233 f.Sort(); 237 f.Sort();
234 ASSERT_EQ(4u, f.GetInstancesCount()); 238 ASSERT_EQ(4u, f.GetInstancesCount());
235 ASSERT_EQ("sop1", f.GetInstance(0).GetSopInstanceUid()); 239 ASSERT_EQ("sop1", f.GetInstance(0).GetSopInstanceUid());
236 ASSERT_EQ("sop2", f.GetInstance(1).GetSopInstanceUid()); 240 ASSERT_EQ("sop2", f.GetInstance(1).GetSopInstanceUid());
237 ASSERT_EQ("sop3", f.GetInstance(2).GetSopInstanceUid()); 241 ASSERT_EQ("sop3", f.GetInstance(2).GetSopInstanceUid());
238 ASSERT_EQ("sop4", f.GetInstance(3).GetSopInstanceUid()); 242 ASSERT_EQ("sop4", f.GetInstance(3).GetSopInstanceUid());
239 ASSERT_EQ(4u, f.GetFramesCount()); 243 ASSERT_EQ(4u, f.GetFramesCount());
240 // First instance number, then image index 244 // First instance number, then image index
241 ASSERT_EQ("sop1", f.GetInstanceOfFrame(0).GetSopInstanceUid()); ASSERT_EQ(0u, f.GetFrameNumberInInstance(0)); 245 ASSERT_EQ("sop1", f.GetInstanceOfFrame(0).GetSopInstanceUid()); ASSERT_EQ(0u, f.GetFrameNumberInInstance(0));
242 ASSERT_EQ("sop4", f.GetInstanceOfFrame(1).GetSopInstanceUid()); ASSERT_EQ(0u, f.GetFrameNumberInInstance(1)); 246 ASSERT_EQ("sop4", f.GetInstanceOfFrame(1).GetSopInstanceUid()); ASSERT_EQ(0u, f.GetFrameNumberInInstance(1));
243 ASSERT_EQ("sop2", f.GetInstanceOfFrame(2).GetSopInstanceUid()); ASSERT_EQ(0u, f.GetFrameNumberInInstance(2)); 247 ASSERT_EQ("sop2", f.GetInstanceOfFrame(2).GetSopInstanceUid()); ASSERT_EQ(0u, f.GetFrameNumberInInstance(2));
244 ASSERT_EQ("sop3", f.GetInstanceOfFrame(3).GetSopInstanceUid()); ASSERT_EQ(0u, f.GetFrameNumberInInstance(3)); 248 ASSERT_EQ("sop3", f.GetInstanceOfFrame(3).GetSopInstanceUid()); ASSERT_EQ(0u, f.GetFrameNumberInInstance(3));
249 }
245 } 250 }
246 251
247 252
248 TEST(SortedFrames, FrameOffset) 253 TEST(SortedFrames, FrameOffset)
249 { 254 {