1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file.
4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "cc/base/util.h"
6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace cc {
10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace {
11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST(UtilTest, RoundUp) {
13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  for (int multiplier = 1; multiplier <= 10; ++multiplier) {
14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    // Try attempts in descending order, so that we can
15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    // determine the correct value before it's needed.
16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    int correct;
17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    for (int attempt = 5 * multiplier; attempt >= -5 * multiplier; --attempt) {
18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      if ((attempt % multiplier) == 0)
19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        correct = attempt;
20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      EXPECT_EQ(correct, RoundUp(attempt, multiplier))
21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          << "attempt=" << attempt << " multiplier=" << multiplier;
22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  for (unsigned multiplier = 1; multiplier <= 10; ++multiplier) {
26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    // Try attempts in descending order, so that we can
27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    // determine the correct value before it's needed.
28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    unsigned correct;
29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    for (unsigned attempt = 5 * multiplier; attempt > 0; --attempt) {
30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      if ((attempt % multiplier) == 0)
31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        correct = attempt;
32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      EXPECT_EQ(correct, RoundUp(attempt, multiplier))
33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          << "attempt=" << attempt << " multiplier=" << multiplier;
34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    EXPECT_EQ(0u, RoundUp(0u, multiplier))
36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        << "attempt=0 multiplier=" << multiplier;
37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST(UtilTest, RoundDown) {
41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  for (int multiplier = 1; multiplier <= 10; ++multiplier) {
42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    // Try attempts in ascending order, so that we can
43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    // determine the correct value before it's needed.
44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    int correct;
45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    for (int attempt = -5 * multiplier; attempt <= 5 * multiplier; ++attempt) {
46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      if ((attempt % multiplier) == 0)
47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        correct = attempt;
48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      EXPECT_EQ(correct, RoundDown(attempt, multiplier))
49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          << "attempt=" << attempt << " multiplier=" << multiplier;
50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  for (unsigned multiplier = 1; multiplier <= 10; ++multiplier) {
54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    // Try attempts in ascending order, so that we can
55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    // determine the correct value before it's needed.
56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    unsigned correct;
57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    for (unsigned attempt = 0; attempt <= 5 * multiplier; ++attempt) {
58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      if ((attempt % multiplier) == 0)
59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        correct = attempt;
60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      EXPECT_EQ(correct, RoundDown(attempt, multiplier))
61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          << "attempt=" << attempt << " multiplier=" << multiplier;
62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}  // namespace
67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}  // namespace cc
68