finish writing and prepare to fix bugs
This commit is contained in:
@ -1,6 +1,7 @@
|
||||
#include <gtest/gtest.h>
|
||||
#include <iostream>
|
||||
#include <random>
|
||||
#include <vector>
|
||||
#include "map.hpp"
|
||||
|
||||
TEST(BasicTests, GTestItSelf) {
|
||||
@ -61,4 +62,66 @@ TEST(BasicTests, MassiveOperatorInsert) {
|
||||
EXPECT_EQ(mp_it->first, st_it->first);
|
||||
EXPECT_EQ(mp_it->second, st_it->second);
|
||||
}
|
||||
}
|
||||
|
||||
TEST(BasicTests, BasicOperationErase) {
|
||||
sjtu::map<int, int> mp;
|
||||
mp[1] = 2;
|
||||
mp[3] = 4;
|
||||
mp[5] = 7;
|
||||
mp[9] = 11;
|
||||
auto it = mp.find(3);
|
||||
mp.erase(it);
|
||||
EXPECT_EQ(mp.size(), 3);
|
||||
it = mp.begin();
|
||||
EXPECT_EQ(it->first, 1);
|
||||
EXPECT_EQ(it->second, 2);
|
||||
it++;
|
||||
EXPECT_EQ(it->first, 5);
|
||||
EXPECT_EQ(it->second, 7);
|
||||
it++;
|
||||
EXPECT_EQ(it->first, 9);
|
||||
EXPECT_EQ(it->second, 11);
|
||||
}
|
||||
|
||||
TEST(BasicTests, MassiveOperationErase) {
|
||||
std::mt19937 rnd(2333333);
|
||||
sjtu::map<int, int> map;
|
||||
std::map<int, int> standard_map;
|
||||
int nodes = 7, range = 7;
|
||||
for (int i = 0; i < nodes; ++i) {
|
||||
int key = rnd() % range;
|
||||
int value = rnd() % range;
|
||||
map[key] = value;
|
||||
standard_map[key] = value;
|
||||
std::cerr << "inserting " << key << " " << value << "\n";
|
||||
}
|
||||
std::vector<int> keys;
|
||||
for (auto items : standard_map) keys.push_back(items.first);
|
||||
for (int i = 0; i < nodes / 2; ++i) {
|
||||
int kid = rnd() % keys.size();
|
||||
int key = keys[kid];
|
||||
std::cerr << "erasing " << key << "\n";
|
||||
map.erase(map.find(key));
|
||||
standard_map.erase(key);
|
||||
keys.erase(keys.begin() + kid);
|
||||
#ifndef NDEBUG
|
||||
EXPECT_TRUE(map.RedBlackTreeStructureCheck());
|
||||
#endif
|
||||
}
|
||||
auto mp_it = map.begin();
|
||||
auto st_it = standard_map.begin();
|
||||
EXPECT_EQ(map.size(), standard_map.size());
|
||||
for (; mp_it != map.end(); mp_it++, st_it++) {
|
||||
EXPECT_EQ(mp_it->first, st_it->first);
|
||||
EXPECT_EQ(mp_it->second, st_it->second);
|
||||
}
|
||||
mp_it = map.end();
|
||||
st_it = standard_map.end();
|
||||
for (int i = 0; i < map.size(); ++i) {
|
||||
mp_it--;
|
||||
st_it--;
|
||||
EXPECT_EQ(mp_it->first, st_it->first);
|
||||
EXPECT_EQ(mp_it->second, st_it->second);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user