9b5028523f
Snapshotted from 5e7fd50e17b6edf1cadff973d0ec68966cf3265e in the upstream repository: https://github.com/google/googletest Since standalone builds and bots will need this, checking in a copy rather than require everyone use gclient, repo, git submodules or scary CMake scripts is probably simplest. Consumers with their own copies of googletest will likely wish to ignore or even exclude this directory. BUG=129 Change-Id: If9f4cec5ae0d7a3976dcfffd1ead6950ef7b7c4e Reviewed-on: https://boringssl-review.googlesource.com/13229 Reviewed-by: David Benjamin <davidben@google.com>
200 lines
6.4 KiB
C++
200 lines
6.4 KiB
C++
// Copyright 2005, Google Inc.
|
|
// All rights reserved.
|
|
//
|
|
// Redistribution and use in source and binary forms, with or without
|
|
// modification, are permitted provided that the following conditions are
|
|
// met:
|
|
//
|
|
// * Redistributions of source code must retain the above copyright
|
|
// notice, this list of conditions and the following disclaimer.
|
|
// * Redistributions in binary form must reproduce the above
|
|
// copyright notice, this list of conditions and the following disclaimer
|
|
// in the documentation and/or other materials provided with the
|
|
// distribution.
|
|
// * Neither the name of Google Inc. nor the names of its
|
|
// contributors may be used to endorse or promote products derived from
|
|
// this software without specific prior written permission.
|
|
//
|
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
//
|
|
// Author: wan@google.com (Zhanyong Wan)
|
|
|
|
// This sample teaches how to reuse a test fixture in multiple test
|
|
// cases by deriving sub-fixtures from it.
|
|
//
|
|
// When you define a test fixture, you specify the name of the test
|
|
// case that will use this fixture. Therefore, a test fixture can
|
|
// be used by only one test case.
|
|
//
|
|
// Sometimes, more than one test cases may want to use the same or
|
|
// slightly different test fixtures. For example, you may want to
|
|
// make sure that all tests for a GUI library don't leak important
|
|
// system resources like fonts and brushes. In Google Test, you do
|
|
// this by putting the shared logic in a super (as in "super class")
|
|
// test fixture, and then have each test case use a fixture derived
|
|
// from this super fixture.
|
|
|
|
#include <limits.h>
|
|
#include <time.h>
|
|
#include "sample3-inl.h"
|
|
#include "gtest/gtest.h"
|
|
#include "sample1.h"
|
|
|
|
// In this sample, we want to ensure that every test finishes within
|
|
// ~5 seconds. If a test takes longer to run, we consider it a
|
|
// failure.
|
|
//
|
|
// We put the code for timing a test in a test fixture called
|
|
// "QuickTest". QuickTest is intended to be the super fixture that
|
|
// other fixtures derive from, therefore there is no test case with
|
|
// the name "QuickTest". This is OK.
|
|
//
|
|
// Later, we will derive multiple test fixtures from QuickTest.
|
|
class QuickTest : public testing::Test {
|
|
protected:
|
|
// Remember that SetUp() is run immediately before a test starts.
|
|
// This is a good place to record the start time.
|
|
virtual void SetUp() {
|
|
start_time_ = time(NULL);
|
|
}
|
|
|
|
// TearDown() is invoked immediately after a test finishes. Here we
|
|
// check if the test was too slow.
|
|
virtual void TearDown() {
|
|
// Gets the time when the test finishes
|
|
const time_t end_time = time(NULL);
|
|
|
|
// Asserts that the test took no more than ~5 seconds. Did you
|
|
// know that you can use assertions in SetUp() and TearDown() as
|
|
// well?
|
|
EXPECT_TRUE(end_time - start_time_ <= 5) << "The test took too long.";
|
|
}
|
|
|
|
// The UTC time (in seconds) when the test starts
|
|
time_t start_time_;
|
|
};
|
|
|
|
|
|
// We derive a fixture named IntegerFunctionTest from the QuickTest
|
|
// fixture. All tests using this fixture will be automatically
|
|
// required to be quick.
|
|
class IntegerFunctionTest : public QuickTest {
|
|
// We don't need any more logic than already in the QuickTest fixture.
|
|
// Therefore the body is empty.
|
|
};
|
|
|
|
|
|
// Now we can write tests in the IntegerFunctionTest test case.
|
|
|
|
// Tests Factorial()
|
|
TEST_F(IntegerFunctionTest, Factorial) {
|
|
// Tests factorial of negative numbers.
|
|
EXPECT_EQ(1, Factorial(-5));
|
|
EXPECT_EQ(1, Factorial(-1));
|
|
EXPECT_GT(Factorial(-10), 0);
|
|
|
|
// Tests factorial of 0.
|
|
EXPECT_EQ(1, Factorial(0));
|
|
|
|
// Tests factorial of positive numbers.
|
|
EXPECT_EQ(1, Factorial(1));
|
|
EXPECT_EQ(2, Factorial(2));
|
|
EXPECT_EQ(6, Factorial(3));
|
|
EXPECT_EQ(40320, Factorial(8));
|
|
}
|
|
|
|
|
|
// Tests IsPrime()
|
|
TEST_F(IntegerFunctionTest, IsPrime) {
|
|
// Tests negative input.
|
|
EXPECT_FALSE(IsPrime(-1));
|
|
EXPECT_FALSE(IsPrime(-2));
|
|
EXPECT_FALSE(IsPrime(INT_MIN));
|
|
|
|
// Tests some trivial cases.
|
|
EXPECT_FALSE(IsPrime(0));
|
|
EXPECT_FALSE(IsPrime(1));
|
|
EXPECT_TRUE(IsPrime(2));
|
|
EXPECT_TRUE(IsPrime(3));
|
|
|
|
// Tests positive input.
|
|
EXPECT_FALSE(IsPrime(4));
|
|
EXPECT_TRUE(IsPrime(5));
|
|
EXPECT_FALSE(IsPrime(6));
|
|
EXPECT_TRUE(IsPrime(23));
|
|
}
|
|
|
|
|
|
// The next test case (named "QueueTest") also needs to be quick, so
|
|
// we derive another fixture from QuickTest.
|
|
//
|
|
// The QueueTest test fixture has some logic and shared objects in
|
|
// addition to what's in QuickTest already. We define the additional
|
|
// stuff inside the body of the test fixture, as usual.
|
|
class QueueTest : public QuickTest {
|
|
protected:
|
|
virtual void SetUp() {
|
|
// First, we need to set up the super fixture (QuickTest).
|
|
QuickTest::SetUp();
|
|
|
|
// Second, some additional setup for this fixture.
|
|
q1_.Enqueue(1);
|
|
q2_.Enqueue(2);
|
|
q2_.Enqueue(3);
|
|
}
|
|
|
|
// By default, TearDown() inherits the behavior of
|
|
// QuickTest::TearDown(). As we have no additional cleaning work
|
|
// for QueueTest, we omit it here.
|
|
//
|
|
// virtual void TearDown() {
|
|
// QuickTest::TearDown();
|
|
// }
|
|
|
|
Queue<int> q0_;
|
|
Queue<int> q1_;
|
|
Queue<int> q2_;
|
|
};
|
|
|
|
|
|
// Now, let's write tests using the QueueTest fixture.
|
|
|
|
// Tests the default constructor.
|
|
TEST_F(QueueTest, DefaultConstructor) {
|
|
EXPECT_EQ(0u, q0_.Size());
|
|
}
|
|
|
|
// Tests Dequeue().
|
|
TEST_F(QueueTest, Dequeue) {
|
|
int* n = q0_.Dequeue();
|
|
EXPECT_TRUE(n == NULL);
|
|
|
|
n = q1_.Dequeue();
|
|
EXPECT_TRUE(n != NULL);
|
|
EXPECT_EQ(1, *n);
|
|
EXPECT_EQ(0u, q1_.Size());
|
|
delete n;
|
|
|
|
n = q2_.Dequeue();
|
|
EXPECT_TRUE(n != NULL);
|
|
EXPECT_EQ(2, *n);
|
|
EXPECT_EQ(1u, q2_.Size());
|
|
delete n;
|
|
}
|
|
|
|
// If necessary, you can derive further test fixtures from a derived
|
|
// fixture itself. For example, you can derive another fixture from
|
|
// QueueTest. Google Test imposes no limit on how deep the hierarchy
|
|
// can be. In practice, however, you probably don't want it to be too
|
|
// deep as to be confusing.
|