@@ -123,6 +123,13 @@ namespace {
123
123
}
124
124
}
125
125
126
+ void VerifyKey (const NTest::TMass& mass, TSerializedCellVec& actual, TRowId rowId) {
127
+ auto tool = NTest::TRowTool (*mass.Model ->Scheme );
128
+ auto expected = tool.KeyCells (mass.Saved [rowId]);
129
+ UNIT_ASSERT_VALUES_EQUAL_C (TSerializedCellVec::Serialize (expected), TSerializedCellVec::Serialize (actual.GetCells ()),
130
+ " row " << rowId << " mismatch" );
131
+ }
132
+
126
133
TCheckResult RunLoaderTest (TIntrusiveConstPtr<NTest::TPartStore> part, TIntrusiveConstPtr<TScreen> screen)
127
134
{
128
135
TCheckResult result;
@@ -155,6 +162,19 @@ namespace {
155
162
UNIT_ASSERT_C (result.Run ->size () == scrSize,
156
163
" Restored slice bounds have " << result.Run ->size () <<
157
164
" slices, expected to have " << scrSize);
165
+
166
+ auto & mass = Mass0 ();
167
+ for (size_t i = 0 ; i < scrSize; i++) {
168
+ auto &sliceItem = *(result.Run ->begin () + i);
169
+ auto screenItem = screen ? *(screen->begin () + i) : TScreen::THole (0 , mass.Saved .Size ());
170
+ UNIT_ASSERT_VALUES_EQUAL (sliceItem.FirstRowId , screenItem.Begin );
171
+ UNIT_ASSERT_VALUES_EQUAL (sliceItem.LastRowId , Min (screenItem.End , mass.Saved .Size () - 1 ));
172
+ UNIT_ASSERT_VALUES_EQUAL (sliceItem.FirstInclusive , true );
173
+ UNIT_ASSERT_VALUES_EQUAL (sliceItem.LastInclusive , screenItem.End >= mass.Saved .Size ());
174
+ VerifyKey (mass, sliceItem.FirstKey , sliceItem.FirstRowId );
175
+ VerifyKey (mass, sliceItem.LastKey , sliceItem.LastRowId );
176
+ }
177
+
158
178
VerifyRunOrder (result.Run , *Eggs0 ().Scheme ->Keys );
159
179
160
180
return result;
@@ -166,7 +186,7 @@ Y_UNIT_TEST_SUITE(TPartSliceLoader) {
166
186
167
187
Y_UNIT_TEST (RestoreMissingSlice) {
168
188
auto result = RunLoaderTest (Part0 (), nullptr );
169
- UNIT_ASSERT_C (result.Pages == 1 , // index page
189
+ UNIT_ASSERT_C (result.Pages == 3 , // index + first + last
170
190
" Restoring slice bounds needed " << result.Pages << " extra pages" );
171
191
}
172
192
@@ -178,12 +198,9 @@ Y_UNIT_TEST_SUITE(TPartSliceLoader) {
178
198
TIntrusiveConstPtr<TScreen> screen = new TScreen (std::move (holes));
179
199
auto result = RunLoaderTest (Part0 (), screen);
180
200
181
- size_t expected = 1 ; // index page
182
- if (startOff != 0 ) expected++;
183
- if (endOff < -1 ) expected++;
184
- UNIT_ASSERT_C (result.Pages == expected, // index page
185
- " Restoring slice [" << startOff << " , " << Part0 ()->Index .GetEndRowId () + endOff << " ] bounds needed " <<
186
- result.Pages << " extra pages but expected " << expected);
201
+ UNIT_ASSERT_VALUES_EQUAL_C (result.Pages , 3 , // index + first + last
202
+ " Restoring slice [" << startOff << " , " << Part0 ()->Index .GetEndRowId () + endOff << " ] bounds needed "
203
+ << result.Pages << " extra pages" );
187
204
}
188
205
}
189
206
}
@@ -208,7 +225,7 @@ Y_UNIT_TEST_SUITE(TPartSliceLoader) {
208
225
screen = new TScreen (std::move (holes));
209
226
}
210
227
auto result = RunLoaderTest (Part0 (), screen);
211
- UNIT_ASSERT_C (result.Pages == 1 , // index page
228
+ UNIT_ASSERT_VALUES_EQUAL_C (result.Pages , 1 + Part0 ()-> Index -> End (). End () , // index + all data pages
212
229
" Restoring slice bounds needed " << result.Pages << " extra pages" );
213
230
}
214
231
@@ -233,7 +250,7 @@ Y_UNIT_TEST_SUITE(TPartSliceLoader) {
233
250
screen = new TScreen (std::move (holes));
234
251
}
235
252
auto result = RunLoaderTest (Part0 (), screen);
236
- UNIT_ASSERT_C (result.Pages == 1 , // index page
253
+ UNIT_ASSERT_VALUES_EQUAL_C (result.Pages , 1 + Part0 ()-> Index -> End (). End () , // index + all data pages
237
254
" Restoring slice bounds needed " << result.Pages << " extra pages" );
238
255
}
239
256
@@ -261,7 +278,7 @@ Y_UNIT_TEST_SUITE(TPartSliceLoader) {
261
278
screen = new TScreen (std::move (holes));
262
279
}
263
280
auto result = RunLoaderTest (Part0 (), screen);
264
- UNIT_ASSERT_C (result.Pages == screen->Size () + 1 , // with index page
281
+ UNIT_ASSERT_VALUES_EQUAL_C (result.Pages , screen->Size () + 1 , // index + data pages
265
282
" Restoring slice bounds needed " << result.Pages <<
266
283
" extra pages, expected " << screen->Size ());
267
284
}
0 commit comments