You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
105 lines
2.2 KiB
C++
105 lines
2.2 KiB
C++
//===----------------------------------------------------------------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
// Not a portable test
|
|
|
|
// Precondition: __x->__right_ != nullptr
|
|
// template <class _NodePtr>
|
|
// void
|
|
// __tree_left_rotate(_NodePtr __x);
|
|
|
|
#include <__tree>
|
|
#include <cassert>
|
|
|
|
#include "test_macros.h"
|
|
|
|
struct Node
|
|
{
|
|
Node* __left_;
|
|
Node* __right_;
|
|
Node* __parent_;
|
|
|
|
Node* __parent_unsafe() const { return __parent_; }
|
|
void __set_parent(Node* x) { __parent_ = x;}
|
|
|
|
Node() : __left_(), __right_(), __parent_() {}
|
|
};
|
|
|
|
void
|
|
test1()
|
|
{
|
|
Node root;
|
|
Node x;
|
|
Node y;
|
|
root.__left_ = &x;
|
|
x.__left_ = 0;
|
|
x.__right_ = &y;
|
|
x.__parent_ = &root;
|
|
y.__left_ = 0;
|
|
y.__right_ = 0;
|
|
y.__parent_ = &x;
|
|
std::__tree_left_rotate(&x);
|
|
assert(root.__parent_ == 0);
|
|
assert(root.__left_ == &y);
|
|
assert(root.__right_ == 0);
|
|
assert(y.__parent_ == &root);
|
|
assert(y.__left_ == &x);
|
|
assert(y.__right_ == 0);
|
|
assert(x.__parent_ == &y);
|
|
assert(x.__left_ == 0);
|
|
assert(x.__right_ == 0);
|
|
}
|
|
|
|
void
|
|
test2()
|
|
{
|
|
Node root;
|
|
Node x;
|
|
Node y;
|
|
Node a;
|
|
Node b;
|
|
Node c;
|
|
root.__left_ = &x;
|
|
x.__left_ = &a;
|
|
x.__right_ = &y;
|
|
x.__parent_ = &root;
|
|
y.__left_ = &b;
|
|
y.__right_ = &c;
|
|
y.__parent_ = &x;
|
|
a.__parent_ = &x;
|
|
b.__parent_ = &y;
|
|
c.__parent_ = &y;
|
|
std::__tree_left_rotate(&x);
|
|
assert(root.__parent_ == 0);
|
|
assert(root.__left_ == &y);
|
|
assert(root.__right_ == 0);
|
|
assert(y.__parent_ == &root);
|
|
assert(y.__left_ == &x);
|
|
assert(y.__right_ == &c);
|
|
assert(x.__parent_ == &y);
|
|
assert(x.__left_ == &a);
|
|
assert(x.__right_ == &b);
|
|
assert(a.__parent_ == &x);
|
|
assert(a.__left_ == 0);
|
|
assert(a.__right_ == 0);
|
|
assert(b.__parent_ == &x);
|
|
assert(b.__left_ == 0);
|
|
assert(b.__right_ == 0);
|
|
assert(c.__parent_ == &y);
|
|
assert(c.__left_ == 0);
|
|
assert(c.__right_ == 0);
|
|
}
|
|
|
|
int main(int, char**)
|
|
{
|
|
test1();
|
|
test2();
|
|
|
|
return 0;
|
|
}
|