1194 |
1197 |
1195 TEST_F(OopStorageBlockListTest, empty_list) { |
1198 TEST_F(OopStorageBlockListTest, empty_list) { |
1196 TestAccess::BlockList list(&OopBlock::get_active_entry); |
1199 TestAccess::BlockList list(&OopBlock::get_active_entry); |
1197 |
1200 |
1198 EXPECT_TRUE(is_list_empty(list)); |
1201 EXPECT_TRUE(is_list_empty(list)); |
1199 EXPECT_EQ(NULL, list.head()); |
1202 EXPECT_EQ(NULL_BLOCK, list.head()); |
1200 EXPECT_EQ(NULL, list.chead()); |
1203 EXPECT_EQ(NULL_BLOCK, list.chead()); |
1201 EXPECT_EQ(NULL, list.ctail()); |
1204 EXPECT_EQ(NULL_BLOCK, list.ctail()); |
1202 } |
1205 } |
1203 |
1206 |
1204 TEST_F(OopStorageBlockListTest, push_back) { |
1207 TEST_F(OopStorageBlockListTest, push_back) { |
1205 TestAccess::BlockList list(&OopBlock::get_active_entry); |
1208 TestAccess::BlockList list(&OopBlock::get_active_entry); |
1206 |
1209 |
1217 const OopBlock* block = list.chead(); |
1220 const OopBlock* block = list.chead(); |
1218 for (size_t i = 0; i < nvalues; ++i) { |
1221 for (size_t i = 0; i < nvalues; ++i) { |
1219 EXPECT_EQ(block, values[i]); |
1222 EXPECT_EQ(block, values[i]); |
1220 block = list.next(*block); |
1223 block = list.next(*block); |
1221 } |
1224 } |
1222 EXPECT_EQ(NULL, block); |
1225 EXPECT_EQ(NULL_BLOCK, block); |
1223 |
1226 |
1224 block = list.ctail(); |
1227 block = list.ctail(); |
1225 for (size_t i = 0; i < nvalues; ++i) { |
1228 for (size_t i = 0; i < nvalues; ++i) { |
1226 EXPECT_EQ(block, values[nvalues - i - 1]); |
1229 EXPECT_EQ(block, values[nvalues - i - 1]); |
1227 block = list.prev(*block); |
1230 block = list.prev(*block); |
1228 } |
1231 } |
1229 EXPECT_EQ(NULL, block); |
1232 EXPECT_EQ(NULL_BLOCK, block); |
1230 |
1233 |
1231 clear_list(list); |
1234 clear_list(list); |
1232 } |
1235 } |
1233 |
1236 |
1234 TEST_F(OopStorageBlockListTest, push_front) { |
1237 TEST_F(OopStorageBlockListTest, push_front) { |
1247 const OopBlock* block = list.chead(); |
1250 const OopBlock* block = list.chead(); |
1248 for (size_t i = 0; i < nvalues; ++i) { |
1251 for (size_t i = 0; i < nvalues; ++i) { |
1249 EXPECT_EQ(block, values[nvalues - i - 1]); |
1252 EXPECT_EQ(block, values[nvalues - i - 1]); |
1250 block = list.next(*block); |
1253 block = list.next(*block); |
1251 } |
1254 } |
1252 EXPECT_EQ(NULL, block); |
1255 EXPECT_EQ(NULL_BLOCK, block); |
1253 |
1256 |
1254 block = list.ctail(); |
1257 block = list.ctail(); |
1255 for (size_t i = 0; i < nvalues; ++i) { |
1258 for (size_t i = 0; i < nvalues; ++i) { |
1256 EXPECT_EQ(block, values[i]); |
1259 EXPECT_EQ(block, values[i]); |
1257 block = list.prev(*block); |
1260 block = list.prev(*block); |
1258 } |
1261 } |
1259 EXPECT_EQ(NULL, block); |
1262 EXPECT_EQ(NULL_BLOCK, block); |
1260 |
1263 |
1261 clear_list(list); |
1264 clear_list(list); |
1262 } |
1265 } |
1263 |
1266 |
1264 class OopStorageBlockListTestWithList : public OopStorageBlockListTest { |
1267 class OopStorageBlockListTestWithList : public OopStorageBlockListTest { |
1279 TEST_F(OopStorageBlockListTestWithList, unlink_front) { |
1282 TEST_F(OopStorageBlockListTestWithList, unlink_front) { |
1280 EXPECT_EQ(list.chead(), values[0]); |
1283 EXPECT_EQ(list.chead(), values[0]); |
1281 EXPECT_EQ(list.ctail(), values[nvalues - 1]); |
1284 EXPECT_EQ(list.ctail(), values[nvalues - 1]); |
1282 |
1285 |
1283 list.unlink(*values[0]); |
1286 list.unlink(*values[0]); |
1284 EXPECT_EQ(NULL, list.next(*values[0])); |
1287 EXPECT_EQ(NULL_BLOCK, list.next(*values[0])); |
1285 EXPECT_EQ(NULL, list.prev(*values[0])); |
1288 EXPECT_EQ(NULL_BLOCK, list.prev(*values[0])); |
1286 EXPECT_EQ(list.chead(), values[1]); |
1289 EXPECT_EQ(list.chead(), values[1]); |
1287 EXPECT_EQ(list.ctail(), values[nvalues - 1]); |
1290 EXPECT_EQ(list.ctail(), values[nvalues - 1]); |
1288 |
1291 |
1289 const OopBlock* block = list.chead(); |
1292 const OopBlock* block = list.chead(); |
1290 for (size_t i = 1; i < nvalues; ++i) { |
1293 for (size_t i = 1; i < nvalues; ++i) { |
1291 EXPECT_EQ(block, values[i]); |
1294 EXPECT_EQ(block, values[i]); |
1292 block = list.next(*block); |
1295 block = list.next(*block); |
1293 } |
1296 } |
1294 EXPECT_EQ(NULL, block); |
1297 EXPECT_EQ(NULL_BLOCK, block); |
1295 } |
1298 } |
1296 |
1299 |
1297 TEST_F(OopStorageBlockListTestWithList, unlink_back) { |
1300 TEST_F(OopStorageBlockListTestWithList, unlink_back) { |
1298 EXPECT_EQ(list.chead(), values[0]); |
1301 EXPECT_EQ(list.chead(), values[0]); |
1299 |
1302 |
1300 list.unlink(*values[nvalues - 1]); |
1303 list.unlink(*values[nvalues - 1]); |
1301 EXPECT_EQ(NULL, list.next(*values[nvalues - 1])); |
1304 EXPECT_EQ(NULL_BLOCK, list.next(*values[nvalues - 1])); |
1302 EXPECT_EQ(NULL, list.prev(*values[nvalues - 1])); |
1305 EXPECT_EQ(NULL_BLOCK, list.prev(*values[nvalues - 1])); |
1303 EXPECT_EQ(list.chead(), values[0]); |
1306 EXPECT_EQ(list.chead(), values[0]); |
1304 EXPECT_EQ(list.ctail(), values[nvalues - 2]); |
1307 EXPECT_EQ(list.ctail(), values[nvalues - 2]); |
1305 |
1308 |
1306 const OopBlock* block = list.chead(); |
1309 const OopBlock* block = list.chead(); |
1307 for (size_t i = 0; i < nvalues - 1; ++i) { |
1310 for (size_t i = 0; i < nvalues - 1; ++i) { |
1308 EXPECT_EQ(block, values[i]); |
1311 EXPECT_EQ(block, values[i]); |
1309 block = list.next(*block); |
1312 block = list.next(*block); |
1310 } |
1313 } |
1311 EXPECT_EQ(NULL, block); |
1314 EXPECT_EQ(NULL_BLOCK, block); |
1312 } |
1315 } |
1313 |
1316 |
1314 TEST_F(OopStorageBlockListTestWithList, unlink_middle) { |
1317 TEST_F(OopStorageBlockListTestWithList, unlink_middle) { |
1315 EXPECT_EQ(list.chead(), values[0]); |
1318 EXPECT_EQ(list.chead(), values[0]); |
1316 |
1319 |
1317 size_t index = nvalues / 2; |
1320 size_t index = nvalues / 2; |
1318 |
1321 |
1319 list.unlink(*values[index]); |
1322 list.unlink(*values[index]); |
1320 EXPECT_EQ(NULL, list.next(*values[index])); |
1323 EXPECT_EQ(NULL_BLOCK, list.next(*values[index])); |
1321 EXPECT_EQ(NULL, list.prev(*values[index])); |
1324 EXPECT_EQ(NULL_BLOCK, list.prev(*values[index])); |
1322 EXPECT_EQ(list.chead(), values[0]); |
1325 EXPECT_EQ(list.chead(), values[0]); |
1323 EXPECT_EQ(list.ctail(), values[nvalues - 1]); |
1326 EXPECT_EQ(list.ctail(), values[nvalues - 1]); |
1324 |
1327 |
1325 const OopBlock* block = list.chead(); |
1328 const OopBlock* block = list.chead(); |
1326 for (size_t i = 0; i < index; ++i) { |
1329 for (size_t i = 0; i < index; ++i) { |
1329 } |
1332 } |
1330 for (size_t i = index + 1; i < nvalues; ++i) { |
1333 for (size_t i = index + 1; i < nvalues; ++i) { |
1331 EXPECT_EQ(block, values[i]); |
1334 EXPECT_EQ(block, values[i]); |
1332 block = list.next(*block); |
1335 block = list.next(*block); |
1333 } |
1336 } |
1334 EXPECT_EQ(NULL, block); |
1337 EXPECT_EQ(NULL_BLOCK, block); |
1335 } |
1338 } |
1336 |
1339 |
1337 TEST_F(OopStorageBlockListTest, single) { |
1340 TEST_F(OopStorageBlockListTest, single) { |
1338 TestAccess::BlockList list(&OopBlock::get_active_entry); |
1341 TestAccess::BlockList list(&OopBlock::get_active_entry); |
1339 |
1342 |
1340 list.push_back(*values[0]); |
1343 list.push_back(*values[0]); |
1341 EXPECT_EQ(NULL, list.next(*values[0])); |
1344 EXPECT_EQ(NULL_BLOCK, list.next(*values[0])); |
1342 EXPECT_EQ(NULL, list.prev(*values[0])); |
1345 EXPECT_EQ(NULL_BLOCK, list.prev(*values[0])); |
1343 EXPECT_EQ(list.chead(), values[0]); |
1346 EXPECT_EQ(list.chead(), values[0]); |
1344 EXPECT_EQ(list.ctail(), values[0]); |
1347 EXPECT_EQ(list.ctail(), values[0]); |
1345 |
1348 |
1346 list.unlink(*values[0]); |
1349 list.unlink(*values[0]); |
1347 EXPECT_EQ(NULL, list.next(*values[0])); |
1350 EXPECT_EQ(NULL_BLOCK, list.next(*values[0])); |
1348 EXPECT_EQ(NULL, list.prev(*values[0])); |
1351 EXPECT_EQ(NULL_BLOCK, list.prev(*values[0])); |
1349 EXPECT_EQ(NULL, list.chead()); |
1352 EXPECT_EQ(NULL_BLOCK, list.chead()); |
1350 EXPECT_EQ(NULL, list.ctail()); |
1353 EXPECT_EQ(NULL_BLOCK, list.ctail()); |
1351 } |
1354 } |
1352 |
1355 |
1353 TEST_F(OopStorageBlockListTestWithList, two_lists) { |
1356 TEST_F(OopStorageBlockListTestWithList, two_lists) { |
1354 TestAccess::BlockList list2(&OopBlock::get_allocate_entry); |
1357 TestAccess::BlockList list2(&OopBlock::get_allocate_entry); |
1355 for (size_t i = 0; i < nvalues; ++i) { |
1358 for (size_t i = 0; i < nvalues; ++i) { |
1361 for (size_t i = 0; i < nvalues; ++i) { |
1364 for (size_t i = 0; i < nvalues; ++i) { |
1362 EXPECT_EQ(active_block, allocate_block); |
1365 EXPECT_EQ(active_block, allocate_block); |
1363 active_block = list.next(*active_block); |
1366 active_block = list.next(*active_block); |
1364 allocate_block = list2.prev(*allocate_block); |
1367 allocate_block = list2.prev(*allocate_block); |
1365 } |
1368 } |
1366 EXPECT_EQ(NULL, active_block); |
1369 EXPECT_EQ(NULL_BLOCK, active_block); |
1367 EXPECT_EQ(NULL, allocate_block); |
1370 EXPECT_EQ(NULL_BLOCK, allocate_block); |
1368 |
1371 |
1369 for (size_t i = 0; i < nvalues; ++i) { |
1372 for (size_t i = 0; i < nvalues; ++i) { |
1370 list2.unlink(*values[i]); |
1373 list2.unlink(*values[i]); |
1371 } |
1374 } |
1372 EXPECT_TRUE(is_list_empty(list2)); |
1375 EXPECT_TRUE(is_list_empty(list2)); |