#include <debug/set>
#include <iterator>
#include <testsuite_hooks.h>
using __gnu_debug::multiset;
using std::advance;
bool test = true;
void test01()
{
multiset<int> v1;
multiset<int> v2;
v1.insert(17);
multiset<int>::iterator start = v1.begin();
multiset<int>::iterator finish = v1.end();
VERIFY(start._M_dereferenceable());
VERIFY(!finish._M_dereferenceable() && !finish._M_singular());
v1 = v2;
VERIFY(start._M_singular());
VERIFY(!finish._M_dereferenceable() && !finish._M_singular());
}
void test02()
{
multiset<int> v;
for (int i = 0; i < 20; ++i)
v.insert(i);
multiset<int>::iterator before = v.begin();
multiset<int>::iterator at = before;
advance(at, 3);
multiset<int>::iterator after = at;
++after;
v.erase(at);
VERIFY(before._M_dereferenceable());
VERIFY(at._M_singular());
VERIFY(after._M_dereferenceable());
before = v.begin();
at = before;
advance(at, 3);
after = at;
advance(after, 4);
v.erase(at, after);
VERIFY(before._M_dereferenceable());
VERIFY(at._M_singular());
before = v.begin();
multiset<int>::iterator finish = v.end();
VERIFY(before._M_dereferenceable());
v.clear();
VERIFY(before._M_singular());
VERIFY(!finish._M_singular() && !finish._M_dereferenceable());
}
int main()
{
test01();
test02();
return !test;
}