// Copyright 2019 Google LLC
//
// 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
//
//     https://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.

#include "runtime/cpp/emboss_cpp_types.h"

#include "gtest/gtest.h"

namespace emboss {
namespace support {
namespace test {

TEST(FloatTypes, Types) {
  EXPECT_EQ(32U / CHAR_BIT, sizeof(FloatType<32>::Type));
  EXPECT_EQ(64U / CHAR_BIT, sizeof(FloatType<64>::Type));
  EXPECT_EQ(32U / CHAR_BIT, sizeof(FloatType<32>::UIntType));
  EXPECT_EQ(64U / CHAR_BIT, sizeof(FloatType<64>::UIntType));
  EXPECT_TRUE(::std::is_floating_point<FloatType<32>::Type>::value);
  EXPECT_TRUE(::std::is_floating_point<FloatType<64>::Type>::value);
  EXPECT_TRUE(
      (::std::is_same<FloatType<32>::UIntType, ::std::uint32_t>::value));
  EXPECT_TRUE(
      (::std::is_same<FloatType<64>::UIntType, ::std::uint64_t>::value));
}

TEST(LeastWidthInteger, Types) {
  EXPECT_TRUE(
      (::std::is_same<LeastWidthInteger<1>::Unsigned, ::std::uint8_t>::value));
  EXPECT_TRUE(
      (::std::is_same<LeastWidthInteger<1>::Signed, ::std::int8_t>::value));
  EXPECT_TRUE(
      (::std::is_same<LeastWidthInteger<4>::Unsigned, ::std::uint8_t>::value));
  EXPECT_TRUE(
      (::std::is_same<LeastWidthInteger<4>::Signed, ::std::int8_t>::value));
  EXPECT_TRUE(
      (::std::is_same<LeastWidthInteger<7>::Unsigned, ::std::uint8_t>::value));
  EXPECT_TRUE(
      (::std::is_same<LeastWidthInteger<7>::Signed, ::std::int8_t>::value));
  EXPECT_TRUE(
      (::std::is_same<LeastWidthInteger<8>::Unsigned, ::std::uint8_t>::value));
  EXPECT_TRUE(
      (::std::is_same<LeastWidthInteger<8>::Signed, ::std::int8_t>::value));
  EXPECT_TRUE(
      (::std::is_same<LeastWidthInteger<9>::Unsigned, ::std::uint16_t>::value));
  EXPECT_TRUE(
      (::std::is_same<LeastWidthInteger<9>::Signed, ::std::int16_t>::value));
  EXPECT_TRUE((
      ::std::is_same<LeastWidthInteger<12>::Unsigned, ::std::uint16_t>::value));
  EXPECT_TRUE(
      (::std::is_same<LeastWidthInteger<12>::Signed, ::std::int16_t>::value));
  EXPECT_TRUE((
      ::std::is_same<LeastWidthInteger<15>::Unsigned, ::std::uint16_t>::value));
  EXPECT_TRUE(
      (::std::is_same<LeastWidthInteger<15>::Signed, ::std::int16_t>::value));
  EXPECT_TRUE((
      ::std::is_same<LeastWidthInteger<16>::Unsigned, ::std::uint16_t>::value));
  EXPECT_TRUE(
      (::std::is_same<LeastWidthInteger<16>::Signed, ::std::int16_t>::value));
  EXPECT_TRUE((
      ::std::is_same<LeastWidthInteger<17>::Unsigned, ::std::uint32_t>::value));
  EXPECT_TRUE(
      (::std::is_same<LeastWidthInteger<17>::Signed, ::std::int32_t>::value));
  EXPECT_TRUE((
      ::std::is_same<LeastWidthInteger<28>::Unsigned, ::std::uint32_t>::value));
  EXPECT_TRUE(
      (::std::is_same<LeastWidthInteger<28>::Signed, ::std::int32_t>::value));
  EXPECT_TRUE((
      ::std::is_same<LeastWidthInteger<31>::Unsigned, ::std::uint32_t>::value));
  EXPECT_TRUE(
      (::std::is_same<LeastWidthInteger<31>::Signed, ::std::int32_t>::value));
  EXPECT_TRUE((
      ::std::is_same<LeastWidthInteger<32>::Unsigned, ::std::uint32_t>::value));
  EXPECT_TRUE(
      (::std::is_same<LeastWidthInteger<32>::Signed, ::std::int32_t>::value));
  EXPECT_TRUE((
      ::std::is_same<LeastWidthInteger<33>::Unsigned, ::std::uint64_t>::value));
  EXPECT_TRUE(
      (::std::is_same<LeastWidthInteger<33>::Signed, ::std::int64_t>::value));
  EXPECT_TRUE((
      ::std::is_same<LeastWidthInteger<60>::Unsigned, ::std::uint64_t>::value));
  EXPECT_TRUE(
      (::std::is_same<LeastWidthInteger<60>::Signed, ::std::int64_t>::value));
  EXPECT_TRUE((
      ::std::is_same<LeastWidthInteger<63>::Unsigned, ::std::uint64_t>::value));
  EXPECT_TRUE(
      (::std::is_same<LeastWidthInteger<63>::Signed, ::std::int64_t>::value));
  EXPECT_TRUE((
      ::std::is_same<LeastWidthInteger<64>::Unsigned, ::std::uint64_t>::value));
  EXPECT_TRUE(
      (::std::is_same<LeastWidthInteger<64>::Signed, ::std::int64_t>::value));
}

TEST(IsChar, CharTypes) {
  EXPECT_TRUE(IsChar<char>::value);
  EXPECT_TRUE(IsChar<unsigned char>::value);
  EXPECT_TRUE(IsChar<signed char>::value);
  EXPECT_TRUE(IsChar<const char>::value);
  EXPECT_TRUE(IsChar<const unsigned char>::value);
  EXPECT_TRUE(IsChar<const signed char>::value);
  EXPECT_TRUE(IsChar<volatile char>::value);
  EXPECT_TRUE(IsChar<volatile unsigned char>::value);
  EXPECT_TRUE(IsChar<volatile signed char>::value);
  EXPECT_TRUE(IsChar<const volatile char>::value);
  EXPECT_TRUE(IsChar<const volatile unsigned char>::value);
  EXPECT_TRUE(IsChar<const volatile signed char>::value);
}

TEST(IsChar, NonCharTypes) {
  struct OneByte {
    char c;
  };
  EXPECT_EQ(1U, sizeof(OneByte));
  EXPECT_FALSE(IsChar<int>::value);
  EXPECT_FALSE(IsChar<unsigned>::value);
  EXPECT_FALSE(IsChar<const int>::value);
  EXPECT_FALSE(IsChar<OneByte>::value);
}

TEST(AddSourceConst, AddSourceConst) {
  EXPECT_TRUE(
      (::std::is_same<const char,
                      typename AddSourceConst<const int, char>::Type>::value));
  EXPECT_TRUE(
      (::std::is_same<
          const volatile char,
          typename AddSourceConst<const int, volatile char>::Type>::value));
  EXPECT_TRUE(
      (::std::is_same<char, typename AddSourceConst<int, char>::Type>::value));
  EXPECT_TRUE(
      (::std::is_same<
          char, typename AddSourceConst<volatile int, char>::Type>::value));
  EXPECT_TRUE(
      (::std::is_same<const char,
                      typename AddSourceConst<int, const char>::Type>::value));
  EXPECT_TRUE(
      (::std::is_same<const char, typename AddSourceConst<
                                      const int, const char>::Type>::value));
}

TEST(AddSourceVolatile, AddSourceVolatile) {
  EXPECT_TRUE(
      (::std::is_same<volatile char, typename AddSourceVolatile<
                                         volatile int, char>::Type>::value));
  EXPECT_TRUE(
      (::std::is_same<
          const volatile char,
          typename AddSourceVolatile<volatile int, const char>::Type>::value));
  EXPECT_TRUE(
      (::std::is_same<char,
                      typename AddSourceVolatile<int, char>::Type>::value));
  EXPECT_TRUE(
      (::std::is_same<
          char, typename AddSourceVolatile<const int, char>::Type>::value));
  EXPECT_TRUE(
      (::std::is_same<volatile char, typename AddSourceVolatile<
                                         int, volatile char>::Type>::value));
  EXPECT_TRUE(
      (::std::is_same<volatile char,
                      typename AddSourceVolatile<volatile int,
                                                 volatile char>::Type>::value));
}

TEST(AddSourceCV, AddSourceCV) {
  EXPECT_TRUE(
      (::std::is_same<const char,
                      typename AddSourceCV<const int, char>::Type>::value));
  EXPECT_TRUE(
      (::std::is_same<volatile char,
                      typename AddSourceCV<volatile int, char>::Type>::value));
  EXPECT_TRUE((::std::is_same<
               const volatile char,
               typename AddSourceCV<volatile int, const char>::Type>::value));
  EXPECT_TRUE((::std::is_same<
               const volatile char,
               typename AddSourceCV<const int, volatile char>::Type>::value));
  EXPECT_TRUE((::std::is_same<
               const volatile char,
               typename AddSourceCV<const volatile int, char>::Type>::value));
  EXPECT_TRUE(
      (::std::is_same<char, typename AddSourceCV<int, char>::Type>::value));
  EXPECT_TRUE(
      (::std::is_same<volatile char,
                      typename AddSourceCV<int, volatile char>::Type>::value));
  EXPECT_TRUE(
      (::std::is_same<
          volatile char,
          typename AddSourceCV<volatile int, volatile char>::Type>::value));
}
}  // namespace test
}  // namespace support
}  // namespace emboss
