Index: sdch/open_vcdiff/depot/opensource/open-vcdiff/src/testing.h |
=================================================================== |
--- sdch/open_vcdiff/depot/opensource/open-vcdiff/src/testing.h (revision 2678) |
+++ sdch/open_vcdiff/depot/opensource/open-vcdiff/src/testing.h (working copy) |
@@ -1,180 +0,0 @@ |
-// Copyright 2008 Google Inc. |
-// Authors: Craig Silverstein, Lincoln Smith |
-// |
-// Licensed under the Apache License, Version 2.0 (the "License"); |
-// you may not use this file except in compliance with the License. |
-// You may obtain a copy of the License at |
-// |
-// http://www.apache.org/licenses/LICENSE-2.0 |
-// |
-// Unless required by applicable law or agreed to in writing, software |
-// distributed under the License is distributed on an "AS IS" BASIS, |
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
-// See the License for the specific language governing permissions and |
-// limitations under the License. |
- |
-#ifndef OPEN_VCDIFF_TESTING_H_ |
-#define OPEN_VCDIFF_TESTING_H_ |
- |
-#include <config.h> |
-#include <stdint.h> // int64_t, uint64_t |
-#include <time.h> // gettimeofday |
-#include <cassert> |
-#include <cstdlib> // rand |
-#include "gtest/gtest.h" |
- |
-#ifdef HAVE_SYS_TIME_H |
-#include <sys/time.h> // struct timeval |
-#endif // HAVE_SYS_TIME_H |
- |
-#ifdef HAVE_WINDOWS_H |
-#include <windows.h> // QueryPerformanceCounter |
-#endif // HAVE_WINDOWS_H |
- |
-// CHECK is used for assertions that verify the consistency of the test itself, |
-// rather than correctness of the code that is being tested. |
-// |
-// It is better to use a preprocessor macro for CHECK |
-// than an inline function, because assert() may report |
-// the source file and line where the failure occurred. |
-// |
-// Putting parentheses around the macro arguments |
-// (e.g. "assert((X) == (Y))") would be good practice |
-// but would produce error messages that are inconsistent |
-// with those expected in the unit tests. |
- |
-#define CHECK(CONDITION) assert(CONDITION) |
-#define CHECK_EQ(X, Y) assert(X == Y) |
-#define CHECK_NE(X, Y) assert(X != Y) |
-#define CHECK_GE(X, Y) assert(X >= Y) |
-#define CHECK_GT(X, Y) assert(X > Y) |
-#define CHECK_LE(X, Y) assert(X <= Y) |
-#define CHECK_LT(X, Y) assert(X < Y) |
- |
-namespace open_vcdiff { |
- |
-// Support for timing tests |
-#if defined(HAVE_GETTIMEOFDAY) |
-class CycleTimer { |
- public: |
- inline CycleTimer() { |
- Reset(); |
- } |
- |
- inline void Reset() { |
- start_time_.tv_sec = 0; |
- start_time_.tv_usec = 0; |
- cumulative_time_in_usec_ = 0; |
- } |
- |
- inline void Start() { |
- CHECK(!IsStarted()); |
- gettimeofday(&start_time_, NULL); |
- } |
- |
- inline void Restart() { |
- Reset(); |
- Start(); |
- } |
- |
- inline void Stop() { |
- struct timeval end_time; |
- gettimeofday(&end_time, NULL); |
- CHECK(IsStarted()); |
- cumulative_time_in_usec_ += |
- (1000000 * (end_time.tv_sec - start_time_.tv_sec)) |
- + end_time.tv_usec - start_time_.tv_usec; |
- start_time_.tv_sec = 0; |
- start_time_.tv_usec = 0; |
- } |
- |
- inline int64_t GetInUsec() { |
- return cumulative_time_in_usec_; |
- } |
- |
- private: |
- inline bool IsStarted() { |
- return (start_time_.tv_usec > 0) || (start_time_.tv_sec > 0); |
- } |
- |
- struct timeval start_time_; |
- int64_t cumulative_time_in_usec_; |
-}; |
-#elif defined(HAVE_QUERYPERFORMANCECOUNTER) |
-class CycleTimer { |
- public: |
- inline CycleTimer() { |
- LARGE_INTEGER frequency; |
- QueryPerformanceFrequency(&frequency); // counts per second |
- usecs_per_count_ = 1000000.0 / static_cast<double>(frequency.QuadPart); |
- Reset(); |
- } |
- |
- inline void Reset() { |
- start_time_.QuadPart = 0; |
- cumulative_time_in_usec_ = 0; |
- } |
- |
- inline void Start() { |
- CHECK(!IsStarted()); |
- QueryPerformanceCounter(&start_time_); |
- } |
- |
- inline void Restart() { |
- Reset(); |
- Start(); |
- } |
- |
- inline void Stop() { |
- LARGE_INTEGER end_time; |
- QueryPerformanceCounter(&end_time); |
- CHECK(IsStarted()); |
- double count_diff = static_cast<double>( |
- end_time.QuadPart - start_time_.QuadPart); |
- cumulative_time_in_usec_ += |
- static_cast<int64_t>(count_diff * usecs_per_count_); |
- start_time_.QuadPart = 0; |
- } |
- |
- inline int64_t GetInUsec() { |
- return cumulative_time_in_usec_; |
- } |
- |
- private: |
- inline bool IsStarted() { |
- return start_time_.QuadPart > 0; |
- } |
- |
- LARGE_INTEGER start_time_; |
- int64_t cumulative_time_in_usec_; |
- double usecs_per_count_; |
-}; |
-#else |
-#error CycleTimer needs an implementation that does not use gettimeofday or QueryPerformanceCounter |
-#endif // HAVE_GETTIMEOFDAY |
- |
-// This function returns a pseudo-random value of type IntType between 0 and |
-// limit. It uses the standard rand() function to produce the value, and makes |
-// as many calls to rand() as needed to ensure that the values returned can fall |
-// within the full range specified. It is slow, so don't include calls to this |
-// function when calculating the execution time of tests. |
-// |
-template<typename IntType> |
-inline IntType PortableRandomInRange(IntType limit) { |
- uint64_t value = rand(); |
- double rand_limit = RAND_MAX; // The maximum possible value |
- while (rand_limit < limit) { |
- // value is multiplied by (RAND_MAX + 1) each iteration. This factor will be |
- // canceled out when we divide by rand_limit to get scaled_value, below. |
- value = (value * (static_cast<uint64_t>(RAND_MAX) + 1)) + rand(); |
- rand_limit = (rand_limit * (RAND_MAX + 1.0)) + RAND_MAX; |
- } |
- // Translate the random 64-bit integer into a floating-point value between |
- // 0.0 (inclusive) and 1.0 (inclusive). |
- const double scaled_value = value / rand_limit; |
- return static_cast<IntType>(limit * scaled_value); |
-} |
- |
-} // namespace open_vcdiff |
- |
-#endif // OPEN_VCDIFF_TESTING_H_ |