// Copyright (c) 2012 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 "cobalt/math/safe_integer_conversions.h"

#include <limits>

#include "testing/gtest/include/gtest/gtest.h"

namespace cobalt {
namespace math {

TEST(SafeIntegerConversions, ClampToInt) {
  EXPECT_EQ(0, ClampToInt(std::numeric_limits<float>::quiet_NaN()));

  float max = std::numeric_limits<int>::max();
  float min = std::numeric_limits<int>::min();
  float infinity = std::numeric_limits<float>::infinity();

  int int_max = std::numeric_limits<int>::max();
  int int_min = std::numeric_limits<int>::min();

  EXPECT_EQ(int_max, ClampToInt(infinity));
  EXPECT_EQ(int_max, ClampToInt(max));
  EXPECT_EQ(int_max, ClampToInt(max + 100));

  EXPECT_EQ(-100, ClampToInt(-100.5f));
  EXPECT_EQ(0, ClampToInt(0));
  EXPECT_EQ(100, ClampToInt(100.5f));

  EXPECT_EQ(int_min, ClampToInt(-infinity));
  EXPECT_EQ(int_min, ClampToInt(min));
  EXPECT_EQ(int_min, ClampToInt(min - 100));
}

TEST(SafeIntegerConversions, ToFlooredInt) {
  EXPECT_EQ(0, ToFlooredInt(std::numeric_limits<float>::quiet_NaN()));

  float max = std::numeric_limits<int>::max();
  float min = std::numeric_limits<int>::min();
  float infinity = std::numeric_limits<float>::infinity();

  int int_max = std::numeric_limits<int>::max();
  int int_min = std::numeric_limits<int>::min();

  EXPECT_EQ(int_max, ToFlooredInt(infinity));
  EXPECT_EQ(int_max, ToFlooredInt(max));
  EXPECT_EQ(int_max, ToFlooredInt(max + 100));

  EXPECT_EQ(-101, ToFlooredInt(-100.5f));
  EXPECT_EQ(0, ToFlooredInt(0));
  EXPECT_EQ(100, ToFlooredInt(100.5f));

  EXPECT_EQ(int_min, ToFlooredInt(-infinity));
  EXPECT_EQ(int_min, ToFlooredInt(min));
  EXPECT_EQ(int_min, ToFlooredInt(min - 100));
}

TEST(SafeIntegerConversions, ToCeiledInt) {
  EXPECT_EQ(0, ToCeiledInt(std::numeric_limits<float>::quiet_NaN()));

  float max = std::numeric_limits<int>::max();
  float min = std::numeric_limits<int>::min();
  float infinity = std::numeric_limits<float>::infinity();

  int int_max = std::numeric_limits<int>::max();
  int int_min = std::numeric_limits<int>::min();

  EXPECT_EQ(int_max, ToCeiledInt(infinity));
  EXPECT_EQ(int_max, ToCeiledInt(max));
  EXPECT_EQ(int_max, ToCeiledInt(max + 100));

  EXPECT_EQ(-100, ToCeiledInt(-100.5f));
  EXPECT_EQ(0, ToCeiledInt(0));
  EXPECT_EQ(101, ToCeiledInt(100.5f));

  EXPECT_EQ(int_min, ToCeiledInt(-infinity));
  EXPECT_EQ(int_min, ToCeiledInt(min));
  EXPECT_EQ(int_min, ToCeiledInt(min - 100));
}

TEST(SafeIntegerConversions, ToRoundedInt) {
  EXPECT_EQ(0, ToRoundedInt(std::numeric_limits<float>::quiet_NaN()));

  float max = std::numeric_limits<int>::max();
  float min = std::numeric_limits<int>::min();
  float infinity = std::numeric_limits<float>::infinity();

  int int_max = std::numeric_limits<int>::max();
  int int_min = std::numeric_limits<int>::min();

  EXPECT_EQ(int_max, ToRoundedInt(infinity));
  EXPECT_EQ(int_max, ToRoundedInt(max));
  EXPECT_EQ(int_max, ToRoundedInt(max + 100));

  EXPECT_EQ(-100, ToRoundedInt(-100.1f));
  EXPECT_EQ(-101, ToRoundedInt(-100.5f));
  EXPECT_EQ(-101, ToRoundedInt(-100.9f));
  EXPECT_EQ(0, ToRoundedInt(0));
  EXPECT_EQ(100, ToRoundedInt(100.1f));
  EXPECT_EQ(101, ToRoundedInt(100.5f));
  EXPECT_EQ(101, ToRoundedInt(100.9f));

  EXPECT_EQ(int_min, ToRoundedInt(-infinity));
  EXPECT_EQ(int_min, ToRoundedInt(min));
  EXPECT_EQ(int_min, ToRoundedInt(min - 100));
}

}  // namespace math
}  // namespace cobalt
