[tint] Add i8/u8 definitions and tests to number.h
Change-Id: Ia571840bbc14fdcedce5c46b191810e982ea5f78
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/200857
Reviewed-by: dan sinclair <dsinclair@chromium.org>
Commit-Queue: James Price <jrprice@google.com>
diff --git a/src/tint/lang/core/number.h b/src/tint/lang/core/number.h
index 597d3e2..7b94dca 100644
--- a/src/tint/lang/core/number.h
+++ b/src/tint/lang/core/number.h
@@ -278,8 +278,12 @@
/// `AFloat` is a type alias to `Number<double>`.
using AFloat = Number<double>;
+/// `i8` is a type alias to `Number<int8_t>`.
+using i8 = Number<int8_t>;
/// `i32` is a type alias to `Number<int32_t>`.
using i32 = Number<int32_t>;
+/// `u8` is a type alias to `Number<uint8_t>`.
+using u8 = Number<uint8_t>;
/// `u32` is a type alias to `Number<uint32_t>`.
using u32 = Number<uint32_t>;
/// `f32` is a type alias to `Number<float>`
diff --git a/src/tint/lang/core/number_test.cc b/src/tint/lang/core/number_test.cc
index 0ff4a76..7662c29 100644
--- a/src/tint/lang/core/number_test.cc
+++ b/src/tint/lang/core/number_test.cc
@@ -154,36 +154,46 @@
EXPECT_EQ(CheckedConvert<AInt>(0_a), 0_a);
EXPECT_EQ(CheckedConvert<AFloat>(0_a), 0.0_a);
EXPECT_EQ(CheckedConvert<i32>(0_i), 0_i);
+ EXPECT_EQ(CheckedConvert<i8>(i8(0)), i8(0));
EXPECT_EQ(CheckedConvert<u32>(0_u), 0_u);
+ EXPECT_EQ(CheckedConvert<u8>(u8(0)), u8(0));
EXPECT_EQ(CheckedConvert<f32>(0_f), 0_f);
EXPECT_EQ(CheckedConvert<f16>(0_h), 0_h);
EXPECT_EQ(CheckedConvert<AInt>(1_a), 1_a);
EXPECT_EQ(CheckedConvert<AFloat>(1_a), 1.0_a);
EXPECT_EQ(CheckedConvert<i32>(1_i), 1_i);
+ EXPECT_EQ(CheckedConvert<i8>(i8(1)), i8(1));
EXPECT_EQ(CheckedConvert<u32>(1_u), 1_u);
+ EXPECT_EQ(CheckedConvert<u8>(u8(1)), u8(1));
EXPECT_EQ(CheckedConvert<f32>(1_f), 1_f);
EXPECT_EQ(CheckedConvert<f16>(1_h), 1_h);
}
TEST(NumberTest, CheckedConvertLargestValue) {
EXPECT_EQ(CheckedConvert<i32>(AInt(i32::Highest())), i32::Highest());
+ EXPECT_EQ(CheckedConvert<i8>(AInt(i8::Highest())), i8::Highest());
EXPECT_EQ(CheckedConvert<u32>(AInt(u32::Highest())), u32::Highest());
EXPECT_EQ(CheckedConvert<u32>(i32::Highest()), u32(i32::Highest()));
+ EXPECT_EQ(CheckedConvert<u8>(AInt(u8::Highest())), u8::Highest());
EXPECT_EQ(CheckedConvert<f32>(AFloat(f32::Highest())), f32::Highest());
EXPECT_EQ(CheckedConvert<f16>(AFloat(f16::Highest())), f16::Highest());
}
TEST(NumberTest, CheckedConvertLowestValue) {
EXPECT_EQ(CheckedConvert<i32>(AInt(i32::Lowest())), i32::Lowest());
+ EXPECT_EQ(CheckedConvert<i8>(AInt(i8::Lowest())), i8::Lowest());
EXPECT_EQ(CheckedConvert<u32>(AInt(u32::Lowest())), u32::Lowest());
+ EXPECT_EQ(CheckedConvert<u8>(AInt(u8::Lowest())), u8::Lowest());
EXPECT_EQ(CheckedConvert<f32>(AFloat(f32::Lowest())), f32::Lowest());
EXPECT_EQ(CheckedConvert<f16>(AFloat(f16::Lowest())), f16::Lowest());
}
TEST(NumberTest, CheckedConvertSmallestValue) {
EXPECT_EQ(CheckedConvert<i32>(AInt(0)), i32(0));
+ EXPECT_EQ(CheckedConvert<i8>(AInt(0)), i8(0));
EXPECT_EQ(CheckedConvert<u32>(AInt(0)), u32(0));
+ EXPECT_EQ(CheckedConvert<u8>(AInt(0)), u8(0));
EXPECT_EQ(CheckedConvert<f32>(AFloat(f32::Smallest())), f32::Smallest());
EXPECT_EQ(CheckedConvert<f16>(AFloat(f16::Smallest())), f16::Smallest());
}
@@ -191,14 +201,24 @@
TEST(NumberTest, CheckedConvertExceedsPositiveLimit) {
EXPECT_EQ(CheckedConvert<i32>(AInt(static_cast<int64_t>(i32::Highest()) + 1)),
ConversionFailure::kExceedsPositiveLimit);
+ EXPECT_EQ(CheckedConvert<i8>(AInt(static_cast<int64_t>(i8::Highest()) + 1)),
+ ConversionFailure::kExceedsPositiveLimit);
EXPECT_EQ(CheckedConvert<u32>(AInt(static_cast<uint64_t>(u32::Highest()) + 1)),
ConversionFailure::kExceedsPositiveLimit);
+ EXPECT_EQ(CheckedConvert<u8>(AInt(static_cast<uint64_t>(u8::Highest()) + 1)),
+ ConversionFailure::kExceedsPositiveLimit);
EXPECT_EQ(CheckedConvert<i32>(u32::Highest()), ConversionFailure::kExceedsPositiveLimit);
EXPECT_EQ(CheckedConvert<i32>(u32(0x80000000)), ConversionFailure::kExceedsPositiveLimit);
+ EXPECT_EQ(CheckedConvert<i8>(u8::Highest()), ConversionFailure::kExceedsPositiveLimit);
+ EXPECT_EQ(CheckedConvert<i8>(u8(0x80)), ConversionFailure::kExceedsPositiveLimit);
EXPECT_EQ(CheckedConvert<u32>(f32::Highest()), u32::Highest());
+ EXPECT_EQ(CheckedConvert<u8>(f32::Highest()), u8::Highest());
EXPECT_EQ(CheckedConvert<i32>(f32::Highest()), i32::Highest());
+ EXPECT_EQ(CheckedConvert<i8>(f32::Highest()), i8::Highest());
EXPECT_EQ(CheckedConvert<u32>(AFloat::Highest()), u32::Highest());
+ EXPECT_EQ(CheckedConvert<u8>(AFloat::Highest()), u8::Highest());
EXPECT_EQ(CheckedConvert<i32>(AFloat::Highest()), i32::Highest());
+ EXPECT_EQ(CheckedConvert<i8>(AFloat::Highest()), i8::Highest());
EXPECT_EQ(CheckedConvert<f32>(AFloat(kHighestF32NextULP)),
ConversionFailure::kExceedsPositiveLimit);
EXPECT_EQ(CheckedConvert<f16>(AFloat(kHighestF16NextULP)),
@@ -208,14 +228,24 @@
TEST(NumberTest, CheckedConvertExceedsNegativeLimit) {
EXPECT_EQ(CheckedConvert<i32>(AInt(static_cast<int64_t>(i32::Lowest()) - 1)),
ConversionFailure::kExceedsNegativeLimit);
+ EXPECT_EQ(CheckedConvert<i8>(AInt(static_cast<int64_t>(i8::Lowest()) - 1)),
+ ConversionFailure::kExceedsNegativeLimit);
EXPECT_EQ(CheckedConvert<u32>(AInt(static_cast<uint64_t>(u32::Lowest()) - 1)),
ConversionFailure::kExceedsNegativeLimit);
+ EXPECT_EQ(CheckedConvert<u8>(AInt(static_cast<uint64_t>(u8::Lowest()) - 1)),
+ ConversionFailure::kExceedsNegativeLimit);
EXPECT_EQ(CheckedConvert<u32>(i32(-1)), ConversionFailure::kExceedsNegativeLimit);
EXPECT_EQ(CheckedConvert<u32>(i32::Lowest()), ConversionFailure::kExceedsNegativeLimit);
EXPECT_EQ(CheckedConvert<u32>(f32::Lowest()), u32::Lowest());
+ EXPECT_EQ(CheckedConvert<u8>(i8(-1)), ConversionFailure::kExceedsNegativeLimit);
+ EXPECT_EQ(CheckedConvert<u8>(i8::Lowest()), ConversionFailure::kExceedsNegativeLimit);
+ EXPECT_EQ(CheckedConvert<u8>(f32::Lowest()), u8::Lowest());
EXPECT_EQ(CheckedConvert<i32>(f32::Lowest()), i32::Lowest());
+ EXPECT_EQ(CheckedConvert<i8>(f32::Lowest()), i8::Lowest());
EXPECT_EQ(CheckedConvert<u32>(AFloat::Lowest()), u32::Lowest());
+ EXPECT_EQ(CheckedConvert<u8>(AFloat::Lowest()), u8::Lowest());
EXPECT_EQ(CheckedConvert<i32>(AFloat::Lowest()), i32::Lowest());
+ EXPECT_EQ(CheckedConvert<i8>(AFloat::Lowest()), i8::Lowest());
EXPECT_EQ(CheckedConvert<f32>(AFloat(kLowestF32NextULP)),
ConversionFailure::kExceedsNegativeLimit);
EXPECT_EQ(CheckedConvert<f16>(AFloat(kLowestF16NextULP)),