// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "sky/engine/config.h"
#include "sky/engine/wtf/DoubleBufferedDeque.h"

#include <gtest/gtest.h>

namespace {

typedef testing::Test DoubleBufferedDequeTest;

TEST(DoubleBufferedDequeTest, TestIsEmpty)
{
    DoubleBufferedDeque<int> queue;

    EXPECT_TRUE(queue.isEmpty());
    queue.append(1);
    EXPECT_FALSE(queue.isEmpty());
}

TEST(DoubleBufferedDequeTest, TestIsEmptyAfterSwapBuffers)
{
    DoubleBufferedDeque<int> queue;
    queue.append(1);

    queue.swapBuffers();
    EXPECT_TRUE(queue.isEmpty());
}

TEST(DoubleBufferedDequeTest, TestDoubleBuffering)
{
    DoubleBufferedDeque<int> queue;
    queue.append(1);
    queue.append(10);
    queue.append(100);

    {
        Deque<int>& deque = queue.swapBuffers();
        EXPECT_EQ(1, deque.takeFirst());
        EXPECT_EQ(10, deque.takeFirst());
        EXPECT_EQ(100, deque.takeFirst());
    }
    queue.append(2);

    EXPECT_EQ(2, queue.swapBuffers().takeFirst());
    queue.append(3);

    EXPECT_EQ(3, queue.swapBuffers().takeFirst());
}

} // namespace
