| // Copyright (c) 2013 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 "base/basictypes.h" |
| #include "net/quic/congestion_control/cube_root.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| namespace net { |
| namespace test { |
| |
| class CubeRootTest : public ::testing::Test { |
| protected: |
| CubeRootTest() { |
| } |
| }; |
| |
| TEST_F(CubeRootTest, LowRoot) { |
| for (uint32 i = 1; i < 256; ++i) { |
| uint64 cube = i * i * i; |
| uint8 cube_root = CubeRoot::Root(cube); |
| EXPECT_EQ(i, cube_root); |
| } |
| } |
| |
| TEST_F(CubeRootTest, HighRoot) { |
| // Test the range we will opperate in, 1300 to 130 000. |
| // We expect some loss in accuracy, accepting +-0.2%. |
| for (uint64 i = 1300; i < 20000; i += 100) { |
| uint64 cube = i * i * i; |
| uint32 cube_root = CubeRoot::Root(cube); |
| uint32 margin = cube_root >> 9; // Calculate 0.2% roughly by |
| // dividing by 512. |
| EXPECT_LE(i - margin, cube_root); |
| EXPECT_GE(i + margin, cube_root); |
| } |
| for (uint64 i = 20000; i < 130000; i *= 2) { |
| uint64 cube = i * i * i; |
| uint32 cube_root = CubeRoot::Root(cube); |
| uint32 margin = cube_root >> 9; |
| EXPECT_LE(i - margin, cube_root); |
| EXPECT_GE(i + margin, cube_root); |
| } |
| } |
| |
| } // namespace test |
| } // namespace net |