//===----------------------------------------------------------------------===//
//
// 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;
}
