15e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org// Copyright 2014 the V8 project authors. All rights reserved. 25e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org// Use of this source code is governed by a BSD-style license that can be 35e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org// found in the LICENSE file. 45e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org 55e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org#ifndef V8_TESTING_GTEST_SUPPORT_H_ 65e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org#define V8_TESTING_GTEST_SUPPORT_H_ 75e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org 85e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org#include "include/v8stdint.h" 95e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org#include "testing/gtest/include/gtest/gtest.h" 105e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org 115e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.orgnamespace testing { 125e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.orgnamespace internal { 135e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org 145e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org#define GET_TYPE_NAME(type) \ 155e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org template <> \ 165e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org inline std::string GetTypeName<type>() { \ 175e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org return #type; \ 185e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org } 195e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.orgGET_TYPE_NAME(int8_t) 205e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.orgGET_TYPE_NAME(uint8_t) 215e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.orgGET_TYPE_NAME(int16_t) 225e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.orgGET_TYPE_NAME(uint16_t) 235e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.orgGET_TYPE_NAME(int32_t) 245e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.orgGET_TYPE_NAME(uint32_t) 255e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.orgGET_TYPE_NAME(int64_t) 265e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.orgGET_TYPE_NAME(uint64_t) 275e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.orgGET_TYPE_NAME(float) 285e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.orgGET_TYPE_NAME(double) 295e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org#undef GET_TYPE_NAME 305e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org 315e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org 325e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org// TRACED_FOREACH(type, var, array) expands to a loop that assigns |var| every 335e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org// item in the |array| and adds a SCOPED_TRACE() message for the |var| while 345e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org// inside the loop body. 355e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org// TODO(bmeurer): Migrate to C++11 once we're ready. 365e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org#define TRACED_FOREACH(_type, _var, _array) \ 37fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org for (size_t _i = 0; _i < arraysize(_array); ++_i) \ 385e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org for (bool _done = false; !_done;) \ 3906b2696801712948b665372a38f96b1f10be6997machenbach@chromium.org for (_type const _var = _array[_i]; !_done;) \ 405e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org for (SCOPED_TRACE(::testing::Message() << #_var << " = " << _var); \ 415e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org !_done; _done = true) 425e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org 435e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org 445e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org// TRACED_FORRANGE(type, var, low, high) expands to a loop that assigns |var| 455e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org// every value in the range |low| to (including) |high| and adds a 465e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org// SCOPED_TRACE() message for the |var| while inside the loop body. 475e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org// TODO(bmeurer): Migrate to C++11 once we're ready. 485e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org#define TRACED_FORRANGE(_type, _var, _low, _high) \ 495e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org for (_type _i = _low; _i <= _high; ++_i) \ 505e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org for (bool _done = false; !_done;) \ 5106b2696801712948b665372a38f96b1f10be6997machenbach@chromium.org for (_type const _var = _i; !_done;) \ 525e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org for (SCOPED_TRACE(::testing::Message() << #_var << " = " << _var); \ 535e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org !_done; _done = true) 545e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org 555e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org} // namespace internal 565e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org} // namespace testing 575e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org 585e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org#endif // V8_TESTING_GTEST_SUPPORT_H_ 59