From ceeda2e337077b2edaf1af09cc4df2c30e8205a1 Mon Sep 17 00:00:00 2001 From: Ben Longbons Date: Tue, 15 Apr 2014 20:05:17 -0700 Subject: Wouldn't it be nice to have some integers too? --- src/ints/cmp_test.cpp | 1461 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1461 insertions(+) create mode 100644 src/ints/cmp_test.cpp (limited to 'src/ints/cmp_test.cpp') diff --git a/src/ints/cmp_test.cpp b/src/ints/cmp_test.cpp new file mode 100644 index 0000000..5767579 --- /dev/null +++ b/src/ints/cmp_test.cpp @@ -0,0 +1,1461 @@ +#include "cmp.hpp" +// cmp_test.cpp - Testsuite for comparison related operations +// +// Copyright © 2014 Ben Longbons +// +// This file is part of The Mana World (Athena server) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +#include + +#include "../compat/cast.hpp" + +#include "../poison.hpp" + +// Google Test is *really* slow to compile this file +#undef EXPECT_EQ +#define EXPECT_EQ(a, b) assert(a == b) + +TEST(ints, sati8) +{ + EXPECT_EQ(maybe_cast(-0x80ULL), saturate(maybe_cast( -0x80ULL))); + EXPECT_EQ(maybe_cast(-0x7fULL), saturate(maybe_cast( -0x7fULL))); + EXPECT_EQ(maybe_cast(-0x7eULL), saturate(maybe_cast( -0x7eULL))); + EXPECT_EQ(maybe_cast(-0x01ULL), saturate(maybe_cast( -0x01ULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( +0x00ULL))); + EXPECT_EQ(maybe_cast(+0x01ULL), saturate(maybe_cast( +0x01ULL))); + EXPECT_EQ(maybe_cast(+0x7eULL), saturate(maybe_cast( +0x7eULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x7fULL))); + + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( +0x00ULL))); + EXPECT_EQ(maybe_cast(+0x01ULL), saturate(maybe_cast( +0x01ULL))); + EXPECT_EQ(maybe_cast(+0x7eULL), saturate(maybe_cast( +0x7eULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x7fULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x80ULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0xfeULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0xffULL))); + + + EXPECT_EQ(maybe_cast(-0x80ULL), saturate(maybe_cast( -0x8000ULL))); + EXPECT_EQ(maybe_cast(-0x80ULL), saturate(maybe_cast( -0x7fffULL))); + EXPECT_EQ(maybe_cast(-0x80ULL), saturate(maybe_cast( -0x0100ULL))); + EXPECT_EQ(maybe_cast(-0x80ULL), saturate(maybe_cast( -0x00ffULL))); + EXPECT_EQ(maybe_cast(-0x80ULL), saturate(maybe_cast( -0x00feULL))); + EXPECT_EQ(maybe_cast(-0x80ULL), saturate(maybe_cast( -0x0081ULL))); + EXPECT_EQ(maybe_cast(-0x80ULL), saturate(maybe_cast( -0x0080ULL))); + EXPECT_EQ(maybe_cast(-0x7fULL), saturate(maybe_cast( -0x007fULL))); + EXPECT_EQ(maybe_cast(-0x01ULL), saturate(maybe_cast( -0x0001ULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( +0x0000ULL))); + EXPECT_EQ(maybe_cast(+0x01ULL), saturate(maybe_cast( +0x0001ULL))); + EXPECT_EQ(maybe_cast(+0x7eULL), saturate(maybe_cast( +0x007eULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x007fULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x0080ULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x00feULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x00ffULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x0100ULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x7ffeULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x7fffULL))); + + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast(+0x0000ULL))); + EXPECT_EQ(maybe_cast(+0x01ULL), saturate(maybe_cast(+0x0001ULL))); + EXPECT_EQ(maybe_cast(+0x7eULL), saturate(maybe_cast(+0x007eULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast(+0x007fULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast(+0x0080ULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast(+0x00feULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast(+0x00ffULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast(+0x0100ULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast(+0x7ffeULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast(+0x7fffULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast(+0x8000ULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast(+0xfffeULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast(+0xffffULL))); + + + EXPECT_EQ(maybe_cast(-0x80ULL), saturate(maybe_cast( -0x80000000ULL))); + EXPECT_EQ(maybe_cast(-0x80ULL), saturate(maybe_cast( -0x7fffffffULL))); + EXPECT_EQ(maybe_cast(-0x80ULL), saturate(maybe_cast( -0x00010000ULL))); + EXPECT_EQ(maybe_cast(-0x80ULL), saturate(maybe_cast( -0x0000ffffULL))); + EXPECT_EQ(maybe_cast(-0x80ULL), saturate(maybe_cast( -0x0000fffeULL))); + EXPECT_EQ(maybe_cast(-0x80ULL), saturate(maybe_cast( -0x00008001ULL))); + EXPECT_EQ(maybe_cast(-0x80ULL), saturate(maybe_cast( -0x00008000ULL))); + EXPECT_EQ(maybe_cast(-0x80ULL), saturate(maybe_cast( -0x00007fffULL))); + EXPECT_EQ(maybe_cast(-0x80ULL), saturate(maybe_cast( -0x00000100ULL))); + EXPECT_EQ(maybe_cast(-0x80ULL), saturate(maybe_cast( -0x000000ffULL))); + EXPECT_EQ(maybe_cast(-0x80ULL), saturate(maybe_cast( -0x000000feULL))); + EXPECT_EQ(maybe_cast(-0x80ULL), saturate(maybe_cast( -0x00000081ULL))); + EXPECT_EQ(maybe_cast(-0x80ULL), saturate(maybe_cast( -0x00000080ULL))); + EXPECT_EQ(maybe_cast(-0x7fULL), saturate(maybe_cast( -0x0000007fULL))); + EXPECT_EQ(maybe_cast(-0x01ULL), saturate(maybe_cast( -0x00000001ULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( +0x00000000ULL))); + EXPECT_EQ(maybe_cast(+0x01ULL), saturate(maybe_cast( +0x00000001ULL))); + EXPECT_EQ(maybe_cast(+0x7eULL), saturate(maybe_cast( +0x0000007eULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x0000007fULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x00000080ULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x000000feULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x000000ffULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x00000100ULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x00007ffeULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x00007fffULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x00008000ULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x0000fffeULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x0000ffffULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x00010000ULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x7ffffffeULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x7fffffffULL))); + + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast(+0x00000000ULL))); + EXPECT_EQ(maybe_cast(+0x01ULL), saturate(maybe_cast(+0x00000001ULL))); + EXPECT_EQ(maybe_cast(+0x7eULL), saturate(maybe_cast(+0x0000007eULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast(+0x0000007fULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast(+0x00000080ULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast(+0x000000feULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast(+0x000000ffULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast(+0x00000100ULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast(+0x00007ffeULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast(+0x00007fffULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast(+0x00008000ULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast(+0x0000fffeULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast(+0x0000ffffULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast(+0x00010000ULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast(+0x7ffffffeULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast(+0x7fffffffULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast(+0x80000000ULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast(+0xfffffffeULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast(+0xffffffffULL))); + + + EXPECT_EQ(maybe_cast(-0x80ULL), saturate(maybe_cast( -0x8000000000000000ULL))); + EXPECT_EQ(maybe_cast(-0x80ULL), saturate(maybe_cast( -0x7fffffffffffffffULL))); + EXPECT_EQ(maybe_cast(-0x80ULL), saturate(maybe_cast( -0x0000000100000000ULL))); + EXPECT_EQ(maybe_cast(-0x80ULL), saturate(maybe_cast( -0x00000000ffffffffULL))); + EXPECT_EQ(maybe_cast(-0x80ULL), saturate(maybe_cast( -0x00000000fffffffeULL))); + EXPECT_EQ(maybe_cast(-0x80ULL), saturate(maybe_cast( -0x0000000080000001ULL))); + EXPECT_EQ(maybe_cast(-0x80ULL), saturate(maybe_cast( -0x0000000080000000ULL))); + EXPECT_EQ(maybe_cast(-0x80ULL), saturate(maybe_cast( -0x000000007fffffffULL))); + EXPECT_EQ(maybe_cast(-0x80ULL), saturate(maybe_cast( -0x0000000000010000ULL))); + EXPECT_EQ(maybe_cast(-0x80ULL), saturate(maybe_cast( -0x000000000000ffffULL))); + EXPECT_EQ(maybe_cast(-0x80ULL), saturate(maybe_cast( -0x000000000000fffeULL))); + EXPECT_EQ(maybe_cast(-0x80ULL), saturate(maybe_cast( -0x0000000000008001ULL))); + EXPECT_EQ(maybe_cast(-0x80ULL), saturate(maybe_cast( -0x0000000000008000ULL))); + EXPECT_EQ(maybe_cast(-0x80ULL), saturate(maybe_cast( -0x0000000000007fffULL))); + EXPECT_EQ(maybe_cast(-0x80ULL), saturate(maybe_cast( -0x0000000000000100ULL))); + EXPECT_EQ(maybe_cast(-0x80ULL), saturate(maybe_cast( -0x00000000000000ffULL))); + EXPECT_EQ(maybe_cast(-0x80ULL), saturate(maybe_cast( -0x00000000000000feULL))); + EXPECT_EQ(maybe_cast(-0x80ULL), saturate(maybe_cast( -0x0000000000000081ULL))); + EXPECT_EQ(maybe_cast(-0x80ULL), saturate(maybe_cast( -0x0000000000000080ULL))); + EXPECT_EQ(maybe_cast(-0x7fULL), saturate(maybe_cast( -0x000000000000007fULL))); + EXPECT_EQ(maybe_cast(-0x01ULL), saturate(maybe_cast( -0x0000000000000001ULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( +0x0000000000000000ULL))); + EXPECT_EQ(maybe_cast(+0x01ULL), saturate(maybe_cast( +0x0000000000000001ULL))); + EXPECT_EQ(maybe_cast(+0x7eULL), saturate(maybe_cast( +0x000000000000007eULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x000000000000007fULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x0000000000000080ULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x00000000000000feULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x00000000000000ffULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x0000000000000100ULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x0000000000007ffeULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x0000000000007fffULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x0000000000008000ULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x000000000000fffeULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x000000000000ffffULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x0000000000010000ULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x000000007ffffffeULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x000000007fffffffULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x0000000080000000ULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x00000000fffffffeULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x00000000ffffffffULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x0000000100000000ULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x7ffffffffffffffeULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x7fffffffffffffffULL))); + + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast(+0x0000000000000000ULL))); + EXPECT_EQ(maybe_cast(+0x01ULL), saturate(maybe_cast(+0x0000000000000001ULL))); + EXPECT_EQ(maybe_cast(+0x7eULL), saturate(maybe_cast(+0x000000000000007eULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast(+0x000000000000007fULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast(+0x0000000000000080ULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast(+0x00000000000000feULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast(+0x00000000000000ffULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast(+0x0000000000000100ULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast(+0x0000000000007ffeULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast(+0x0000000000007fffULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast(+0x0000000000008000ULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast(+0x000000000000fffeULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast(+0x000000000000ffffULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast(+0x0000000000010000ULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast(+0x000000007ffffffeULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast(+0x000000007fffffffULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast(+0x0000000080000000ULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast(+0x00000000fffffffeULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast(+0x00000000ffffffffULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast(+0x0000000100000000ULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast(+0x7ffffffffffffffeULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast(+0x7fffffffffffffffULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast(+0x8000000000000000ULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast(+0xfffffffffffffffeULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast(+0xffffffffffffffffULL))); +} + +TEST(ints, satu8) +{ + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x80ULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x7fULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x7eULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x01ULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( +0x00ULL))); + EXPECT_EQ(maybe_cast(+0x01ULL), saturate(maybe_cast( +0x01ULL))); + EXPECT_EQ(maybe_cast(+0x7eULL), saturate(maybe_cast( +0x7eULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x7fULL))); + + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( +0x00ULL))); + EXPECT_EQ(maybe_cast(+0x01ULL), saturate(maybe_cast( +0x01ULL))); + EXPECT_EQ(maybe_cast(+0x7eULL), saturate(maybe_cast( +0x7eULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x7fULL))); + EXPECT_EQ(maybe_cast(+0x80ULL), saturate(maybe_cast( +0x80ULL))); + EXPECT_EQ(maybe_cast(+0xfeULL), saturate(maybe_cast( +0xfeULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast( +0xffULL))); + + + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x8000ULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x7fffULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x0100ULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x00ffULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x00feULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x0081ULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x0080ULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x007fULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x0001ULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( +0x0000ULL))); + EXPECT_EQ(maybe_cast(+0x01ULL), saturate(maybe_cast( +0x0001ULL))); + EXPECT_EQ(maybe_cast(+0x7eULL), saturate(maybe_cast( +0x007eULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x007fULL))); + EXPECT_EQ(maybe_cast(+0x80ULL), saturate(maybe_cast( +0x0080ULL))); + EXPECT_EQ(maybe_cast(+0xfeULL), saturate(maybe_cast( +0x00feULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast( +0x00ffULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast( +0x0100ULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast( +0x7ffeULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast( +0x7fffULL))); + + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast(+0x0000ULL))); + EXPECT_EQ(maybe_cast(+0x01ULL), saturate(maybe_cast(+0x0001ULL))); + EXPECT_EQ(maybe_cast(+0x7eULL), saturate(maybe_cast(+0x007eULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast(+0x007fULL))); + EXPECT_EQ(maybe_cast(+0x80ULL), saturate(maybe_cast(+0x0080ULL))); + EXPECT_EQ(maybe_cast(+0xfeULL), saturate(maybe_cast(+0x00feULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast(+0x00ffULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast(+0x0100ULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast(+0x7ffeULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast(+0x7fffULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast(+0x8000ULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast(+0xfffeULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast(+0xffffULL))); + + + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x80000000ULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x7fffffffULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x00010000ULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x0000ffffULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x0000fffeULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x00008001ULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x00008000ULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x00007fffULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x00000100ULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x000000ffULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x000000feULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x00000081ULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x00000080ULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x0000007fULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x00000001ULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( +0x00000000ULL))); + EXPECT_EQ(maybe_cast(+0x01ULL), saturate(maybe_cast( +0x00000001ULL))); + EXPECT_EQ(maybe_cast(+0x7eULL), saturate(maybe_cast( +0x0000007eULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x0000007fULL))); + EXPECT_EQ(maybe_cast(+0x80ULL), saturate(maybe_cast( +0x00000080ULL))); + EXPECT_EQ(maybe_cast(+0xfeULL), saturate(maybe_cast( +0x000000feULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast( +0x000000ffULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast( +0x00000100ULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast( +0x00007ffeULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast( +0x00007fffULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast( +0x00008000ULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast( +0x0000fffeULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast( +0x0000ffffULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast( +0x00010000ULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast( +0x7ffffffeULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast( +0x7fffffffULL))); + + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast(+0x00000000ULL))); + EXPECT_EQ(maybe_cast(+0x01ULL), saturate(maybe_cast(+0x00000001ULL))); + EXPECT_EQ(maybe_cast(+0x7eULL), saturate(maybe_cast(+0x0000007eULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast(+0x0000007fULL))); + EXPECT_EQ(maybe_cast(+0x80ULL), saturate(maybe_cast(+0x00000080ULL))); + EXPECT_EQ(maybe_cast(+0xfeULL), saturate(maybe_cast(+0x000000feULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast(+0x000000ffULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast(+0x00000100ULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast(+0x00007ffeULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast(+0x00007fffULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast(+0x00008000ULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast(+0x0000fffeULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast(+0x0000ffffULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast(+0x00010000ULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast(+0x7ffffffeULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast(+0x7fffffffULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast(+0x80000000ULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast(+0xfffffffeULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast(+0xffffffffULL))); + + + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x8000000000000000ULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x7fffffffffffffffULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x0000000100000000ULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x00000000ffffffffULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x00000000fffffffeULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x0000000080000001ULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x0000000080000000ULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x000000007fffffffULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x0000000000010000ULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x000000000000ffffULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x000000000000fffeULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x0000000000008001ULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x0000000000008000ULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x0000000000007fffULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x0000000000000100ULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x00000000000000ffULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x00000000000000feULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x0000000000000081ULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x0000000000000080ULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x000000000000007fULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x0000000000000001ULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( +0x0000000000000000ULL))); + EXPECT_EQ(maybe_cast(+0x01ULL), saturate(maybe_cast( +0x0000000000000001ULL))); + EXPECT_EQ(maybe_cast(+0x7eULL), saturate(maybe_cast( +0x000000000000007eULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x000000000000007fULL))); + EXPECT_EQ(maybe_cast(+0x80ULL), saturate(maybe_cast( +0x0000000000000080ULL))); + EXPECT_EQ(maybe_cast(+0xfeULL), saturate(maybe_cast( +0x00000000000000feULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast( +0x00000000000000ffULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast( +0x0000000000000100ULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast( +0x0000000000007ffeULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast( +0x0000000000007fffULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast( +0x0000000000008000ULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast( +0x000000000000fffeULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast( +0x000000000000ffffULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast( +0x0000000000010000ULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast( +0x000000007ffffffeULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast( +0x000000007fffffffULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast( +0x0000000080000000ULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast( +0x00000000fffffffeULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast( +0x00000000ffffffffULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast( +0x0000000100000000ULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast( +0x7ffffffffffffffeULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast( +0x7fffffffffffffffULL))); + + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast(+0x0000000000000000ULL))); + EXPECT_EQ(maybe_cast(+0x01ULL), saturate(maybe_cast(+0x0000000000000001ULL))); + EXPECT_EQ(maybe_cast(+0x7eULL), saturate(maybe_cast(+0x000000000000007eULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast(+0x000000000000007fULL))); + EXPECT_EQ(maybe_cast(+0x80ULL), saturate(maybe_cast(+0x0000000000000080ULL))); + EXPECT_EQ(maybe_cast(+0xfeULL), saturate(maybe_cast(+0x00000000000000feULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast(+0x00000000000000ffULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast(+0x0000000000000100ULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast(+0x0000000000007ffeULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast(+0x0000000000007fffULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast(+0x0000000000008000ULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast(+0x000000000000fffeULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast(+0x000000000000ffffULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast(+0x0000000000010000ULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast(+0x000000007ffffffeULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast(+0x000000007fffffffULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast(+0x0000000080000000ULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast(+0x00000000fffffffeULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast(+0x00000000ffffffffULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast(+0x0000000100000000ULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast(+0x7ffffffffffffffeULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast(+0x7fffffffffffffffULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast(+0x8000000000000000ULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast(+0xfffffffffffffffeULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast(+0xffffffffffffffffULL))); +} + +TEST(ints, sati16) +{ + EXPECT_EQ(maybe_cast(-0x80ULL), saturate(maybe_cast( -0x80ULL))); + EXPECT_EQ(maybe_cast(-0x7fULL), saturate(maybe_cast( -0x7fULL))); + EXPECT_EQ(maybe_cast(-0x7eULL), saturate(maybe_cast( -0x7eULL))); + EXPECT_EQ(maybe_cast(-0x01ULL), saturate(maybe_cast( -0x01ULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( +0x00ULL))); + EXPECT_EQ(maybe_cast(+0x01ULL), saturate(maybe_cast( +0x01ULL))); + EXPECT_EQ(maybe_cast(+0x7eULL), saturate(maybe_cast( +0x7eULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x7fULL))); + + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( +0x00ULL))); + EXPECT_EQ(maybe_cast(+0x01ULL), saturate(maybe_cast( +0x01ULL))); + EXPECT_EQ(maybe_cast(+0x7eULL), saturate(maybe_cast( +0x7eULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x7fULL))); + EXPECT_EQ(maybe_cast(+0x80ULL), saturate(maybe_cast( +0x80ULL))); + EXPECT_EQ(maybe_cast(+0xfeULL), saturate(maybe_cast( +0xfeULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast( +0xffULL))); + + + EXPECT_EQ(maybe_cast(-0x8000ULL), saturate(maybe_cast( -0x8000ULL))); + EXPECT_EQ(maybe_cast(-0x7fffULL), saturate(maybe_cast( -0x7fffULL))); + EXPECT_EQ(maybe_cast(-0x0100ULL), saturate(maybe_cast( -0x0100ULL))); + EXPECT_EQ(maybe_cast(-0x00ffULL), saturate(maybe_cast( -0x00ffULL))); + EXPECT_EQ(maybe_cast(-0x00feULL), saturate(maybe_cast( -0x00feULL))); + EXPECT_EQ(maybe_cast(-0x0081ULL), saturate(maybe_cast( -0x0081ULL))); + EXPECT_EQ(maybe_cast(-0x0080ULL), saturate(maybe_cast( -0x0080ULL))); + EXPECT_EQ(maybe_cast(-0x007fULL), saturate(maybe_cast( -0x007fULL))); + EXPECT_EQ(maybe_cast(-0x0001ULL), saturate(maybe_cast( -0x0001ULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( +0x0000ULL))); + EXPECT_EQ(maybe_cast(+0x0001ULL), saturate(maybe_cast( +0x0001ULL))); + EXPECT_EQ(maybe_cast(+0x007eULL), saturate(maybe_cast( +0x007eULL))); + EXPECT_EQ(maybe_cast(+0x007fULL), saturate(maybe_cast( +0x007fULL))); + EXPECT_EQ(maybe_cast(+0x0080ULL), saturate(maybe_cast( +0x0080ULL))); + EXPECT_EQ(maybe_cast(+0x00feULL), saturate(maybe_cast( +0x00feULL))); + EXPECT_EQ(maybe_cast(+0x00ffULL), saturate(maybe_cast( +0x00ffULL))); + EXPECT_EQ(maybe_cast(+0x0100ULL), saturate(maybe_cast( +0x0100ULL))); + EXPECT_EQ(maybe_cast(+0x7ffeULL), saturate(maybe_cast( +0x7ffeULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast( +0x7fffULL))); + + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast(+0x0000ULL))); + EXPECT_EQ(maybe_cast(+0x0001ULL), saturate(maybe_cast(+0x0001ULL))); + EXPECT_EQ(maybe_cast(+0x007eULL), saturate(maybe_cast(+0x007eULL))); + EXPECT_EQ(maybe_cast(+0x007fULL), saturate(maybe_cast(+0x007fULL))); + EXPECT_EQ(maybe_cast(+0x0080ULL), saturate(maybe_cast(+0x0080ULL))); + EXPECT_EQ(maybe_cast(+0x00feULL), saturate(maybe_cast(+0x00feULL))); + EXPECT_EQ(maybe_cast(+0x00ffULL), saturate(maybe_cast(+0x00ffULL))); + EXPECT_EQ(maybe_cast(+0x0100ULL), saturate(maybe_cast(+0x0100ULL))); + EXPECT_EQ(maybe_cast(+0x7ffeULL), saturate(maybe_cast(+0x7ffeULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast(+0x7fffULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast(+0x8000ULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast(+0xfffeULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast(+0xffffULL))); + + + EXPECT_EQ(maybe_cast(-0x8000ULL), saturate(maybe_cast( -0x80000000ULL))); + EXPECT_EQ(maybe_cast(-0x8000ULL), saturate(maybe_cast( -0x7fffffffULL))); + EXPECT_EQ(maybe_cast(-0x8000ULL), saturate(maybe_cast( -0x00010000ULL))); + EXPECT_EQ(maybe_cast(-0x8000ULL), saturate(maybe_cast( -0x0000ffffULL))); + EXPECT_EQ(maybe_cast(-0x8000ULL), saturate(maybe_cast( -0x0000fffeULL))); + EXPECT_EQ(maybe_cast(-0x8000ULL), saturate(maybe_cast( -0x00008001ULL))); + EXPECT_EQ(maybe_cast(-0x8000ULL), saturate(maybe_cast( -0x00008000ULL))); + EXPECT_EQ(maybe_cast(-0x7fffULL), saturate(maybe_cast( -0x00007fffULL))); + EXPECT_EQ(maybe_cast(-0x0100ULL), saturate(maybe_cast( -0x00000100ULL))); + EXPECT_EQ(maybe_cast(-0x00ffULL), saturate(maybe_cast( -0x000000ffULL))); + EXPECT_EQ(maybe_cast(-0x00feULL), saturate(maybe_cast( -0x000000feULL))); + EXPECT_EQ(maybe_cast(-0x0081ULL), saturate(maybe_cast( -0x00000081ULL))); + EXPECT_EQ(maybe_cast(-0x0080ULL), saturate(maybe_cast( -0x00000080ULL))); + EXPECT_EQ(maybe_cast(-0x007fULL), saturate(maybe_cast( -0x0000007fULL))); + EXPECT_EQ(maybe_cast(-0x0001ULL), saturate(maybe_cast( -0x00000001ULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( +0x00000000ULL))); + EXPECT_EQ(maybe_cast(+0x0001ULL), saturate(maybe_cast( +0x00000001ULL))); + EXPECT_EQ(maybe_cast(+0x007eULL), saturate(maybe_cast( +0x0000007eULL))); + EXPECT_EQ(maybe_cast(+0x007fULL), saturate(maybe_cast( +0x0000007fULL))); + EXPECT_EQ(maybe_cast(+0x0080ULL), saturate(maybe_cast( +0x00000080ULL))); + EXPECT_EQ(maybe_cast(+0x00feULL), saturate(maybe_cast( +0x000000feULL))); + EXPECT_EQ(maybe_cast(+0x00ffULL), saturate(maybe_cast( +0x000000ffULL))); + EXPECT_EQ(maybe_cast(+0x0100ULL), saturate(maybe_cast( +0x00000100ULL))); + EXPECT_EQ(maybe_cast(+0x7ffeULL), saturate(maybe_cast( +0x00007ffeULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast( +0x00007fffULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast( +0x00008000ULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast( +0x0000fffeULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast( +0x0000ffffULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast( +0x00010000ULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast( +0x7ffffffeULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast( +0x7fffffffULL))); + + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast(+0x00000000ULL))); + EXPECT_EQ(maybe_cast(+0x0001ULL), saturate(maybe_cast(+0x00000001ULL))); + EXPECT_EQ(maybe_cast(+0x007eULL), saturate(maybe_cast(+0x0000007eULL))); + EXPECT_EQ(maybe_cast(+0x007fULL), saturate(maybe_cast(+0x0000007fULL))); + EXPECT_EQ(maybe_cast(+0x0080ULL), saturate(maybe_cast(+0x00000080ULL))); + EXPECT_EQ(maybe_cast(+0x00feULL), saturate(maybe_cast(+0x000000feULL))); + EXPECT_EQ(maybe_cast(+0x00ffULL), saturate(maybe_cast(+0x000000ffULL))); + EXPECT_EQ(maybe_cast(+0x0100ULL), saturate(maybe_cast(+0x00000100ULL))); + EXPECT_EQ(maybe_cast(+0x7ffeULL), saturate(maybe_cast(+0x00007ffeULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast(+0x00007fffULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast(+0x00008000ULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast(+0x0000fffeULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast(+0x0000ffffULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast(+0x00010000ULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast(+0x7ffffffeULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast(+0x7fffffffULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast(+0x80000000ULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast(+0xfffffffeULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast(+0xffffffffULL))); + + + EXPECT_EQ(maybe_cast(-0x8000ULL), saturate(maybe_cast( -0x8000000000000000ULL))); + EXPECT_EQ(maybe_cast(-0x8000ULL), saturate(maybe_cast( -0x7fffffffffffffffULL))); + EXPECT_EQ(maybe_cast(-0x8000ULL), saturate(maybe_cast( -0x0000000100000000ULL))); + EXPECT_EQ(maybe_cast(-0x8000ULL), saturate(maybe_cast( -0x00000000ffffffffULL))); + EXPECT_EQ(maybe_cast(-0x8000ULL), saturate(maybe_cast( -0x00000000fffffffeULL))); + EXPECT_EQ(maybe_cast(-0x8000ULL), saturate(maybe_cast( -0x0000000080000001ULL))); + EXPECT_EQ(maybe_cast(-0x8000ULL), saturate(maybe_cast( -0x0000000080000000ULL))); + EXPECT_EQ(maybe_cast(-0x8000ULL), saturate(maybe_cast( -0x000000007fffffffULL))); + EXPECT_EQ(maybe_cast(-0x8000ULL), saturate(maybe_cast( -0x0000000000010000ULL))); + EXPECT_EQ(maybe_cast(-0x8000ULL), saturate(maybe_cast( -0x000000000000ffffULL))); + EXPECT_EQ(maybe_cast(-0x8000ULL), saturate(maybe_cast( -0x000000000000fffeULL))); + EXPECT_EQ(maybe_cast(-0x8000ULL), saturate(maybe_cast( -0x0000000000008001ULL))); + EXPECT_EQ(maybe_cast(-0x8000ULL), saturate(maybe_cast( -0x0000000000008000ULL))); + EXPECT_EQ(maybe_cast(-0x7fffULL), saturate(maybe_cast( -0x0000000000007fffULL))); + EXPECT_EQ(maybe_cast(-0x0100ULL), saturate(maybe_cast( -0x0000000000000100ULL))); + EXPECT_EQ(maybe_cast(-0x00ffULL), saturate(maybe_cast( -0x00000000000000ffULL))); + EXPECT_EQ(maybe_cast(-0x00feULL), saturate(maybe_cast( -0x00000000000000feULL))); + EXPECT_EQ(maybe_cast(-0x0081ULL), saturate(maybe_cast( -0x0000000000000081ULL))); + EXPECT_EQ(maybe_cast(-0x0080ULL), saturate(maybe_cast( -0x0000000000000080ULL))); + EXPECT_EQ(maybe_cast(-0x007fULL), saturate(maybe_cast( -0x000000000000007fULL))); + EXPECT_EQ(maybe_cast(-0x0001ULL), saturate(maybe_cast( -0x0000000000000001ULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( +0x0000000000000000ULL))); + EXPECT_EQ(maybe_cast(+0x0001ULL), saturate(maybe_cast( +0x0000000000000001ULL))); + EXPECT_EQ(maybe_cast(+0x007eULL), saturate(maybe_cast( +0x000000000000007eULL))); + EXPECT_EQ(maybe_cast(+0x007fULL), saturate(maybe_cast( +0x000000000000007fULL))); + EXPECT_EQ(maybe_cast(+0x0080ULL), saturate(maybe_cast( +0x0000000000000080ULL))); + EXPECT_EQ(maybe_cast(+0x00feULL), saturate(maybe_cast( +0x00000000000000feULL))); + EXPECT_EQ(maybe_cast(+0x00ffULL), saturate(maybe_cast( +0x00000000000000ffULL))); + EXPECT_EQ(maybe_cast(+0x0100ULL), saturate(maybe_cast( +0x0000000000000100ULL))); + EXPECT_EQ(maybe_cast(+0x7ffeULL), saturate(maybe_cast( +0x0000000000007ffeULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast( +0x0000000000007fffULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast( +0x0000000000008000ULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast( +0x000000000000fffeULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast( +0x000000000000ffffULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast( +0x0000000000010000ULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast( +0x000000007ffffffeULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast( +0x000000007fffffffULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast( +0x0000000080000000ULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast( +0x00000000fffffffeULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast( +0x00000000ffffffffULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast( +0x0000000100000000ULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast( +0x7ffffffffffffffeULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast( +0x7fffffffffffffffULL))); + + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast(+0x0000000000000000ULL))); + EXPECT_EQ(maybe_cast(+0x0001ULL), saturate(maybe_cast(+0x0000000000000001ULL))); + EXPECT_EQ(maybe_cast(+0x007eULL), saturate(maybe_cast(+0x000000000000007eULL))); + EXPECT_EQ(maybe_cast(+0x007fULL), saturate(maybe_cast(+0x000000000000007fULL))); + EXPECT_EQ(maybe_cast(+0x0080ULL), saturate(maybe_cast(+0x0000000000000080ULL))); + EXPECT_EQ(maybe_cast(+0x00feULL), saturate(maybe_cast(+0x00000000000000feULL))); + EXPECT_EQ(maybe_cast(+0x00ffULL), saturate(maybe_cast(+0x00000000000000ffULL))); + EXPECT_EQ(maybe_cast(+0x0100ULL), saturate(maybe_cast(+0x0000000000000100ULL))); + EXPECT_EQ(maybe_cast(+0x7ffeULL), saturate(maybe_cast(+0x0000000000007ffeULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast(+0x0000000000007fffULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast(+0x0000000000008000ULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast(+0x000000000000fffeULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast(+0x000000000000ffffULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast(+0x0000000000010000ULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast(+0x000000007ffffffeULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast(+0x000000007fffffffULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast(+0x0000000080000000ULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast(+0x00000000fffffffeULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast(+0x00000000ffffffffULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast(+0x0000000100000000ULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast(+0x7ffffffffffffffeULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast(+0x7fffffffffffffffULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast(+0x8000000000000000ULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast(+0xfffffffffffffffeULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast(+0xffffffffffffffffULL))); +} + +TEST(ints, satu16) +{ + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x80ULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x7fULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x7eULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x01ULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( +0x00ULL))); + EXPECT_EQ(maybe_cast(+0x01ULL), saturate(maybe_cast( +0x01ULL))); + EXPECT_EQ(maybe_cast(+0x7eULL), saturate(maybe_cast( +0x7eULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x7fULL))); + + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( +0x00ULL))); + EXPECT_EQ(maybe_cast(+0x01ULL), saturate(maybe_cast( +0x01ULL))); + EXPECT_EQ(maybe_cast(+0x7eULL), saturate(maybe_cast( +0x7eULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x7fULL))); + EXPECT_EQ(maybe_cast(+0x80ULL), saturate(maybe_cast( +0x80ULL))); + EXPECT_EQ(maybe_cast(+0xfeULL), saturate(maybe_cast( +0xfeULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast( +0xffULL))); + + + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x8000ULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x7fffULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x0100ULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x00ffULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x00feULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x0081ULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x0080ULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x007fULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x0001ULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( +0x0000ULL))); + EXPECT_EQ(maybe_cast(+0x0001ULL), saturate(maybe_cast( +0x0001ULL))); + EXPECT_EQ(maybe_cast(+0x007eULL), saturate(maybe_cast( +0x007eULL))); + EXPECT_EQ(maybe_cast(+0x007fULL), saturate(maybe_cast( +0x007fULL))); + EXPECT_EQ(maybe_cast(+0x0080ULL), saturate(maybe_cast( +0x0080ULL))); + EXPECT_EQ(maybe_cast(+0x00feULL), saturate(maybe_cast( +0x00feULL))); + EXPECT_EQ(maybe_cast(+0x00ffULL), saturate(maybe_cast( +0x00ffULL))); + EXPECT_EQ(maybe_cast(+0x0100ULL), saturate(maybe_cast( +0x0100ULL))); + EXPECT_EQ(maybe_cast(+0x7ffeULL), saturate(maybe_cast( +0x7ffeULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast( +0x7fffULL))); + + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast(+0x0000ULL))); + EXPECT_EQ(maybe_cast(+0x0001ULL), saturate(maybe_cast(+0x0001ULL))); + EXPECT_EQ(maybe_cast(+0x007eULL), saturate(maybe_cast(+0x007eULL))); + EXPECT_EQ(maybe_cast(+0x007fULL), saturate(maybe_cast(+0x007fULL))); + EXPECT_EQ(maybe_cast(+0x0080ULL), saturate(maybe_cast(+0x0080ULL))); + EXPECT_EQ(maybe_cast(+0x00feULL), saturate(maybe_cast(+0x00feULL))); + EXPECT_EQ(maybe_cast(+0x00ffULL), saturate(maybe_cast(+0x00ffULL))); + EXPECT_EQ(maybe_cast(+0x0100ULL), saturate(maybe_cast(+0x0100ULL))); + EXPECT_EQ(maybe_cast(+0x7ffeULL), saturate(maybe_cast(+0x7ffeULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast(+0x7fffULL))); + EXPECT_EQ(maybe_cast(+0x8000ULL), saturate(maybe_cast(+0x8000ULL))); + EXPECT_EQ(maybe_cast(+0xfffeULL), saturate(maybe_cast(+0xfffeULL))); + EXPECT_EQ(maybe_cast(+0xffffULL), saturate(maybe_cast(+0xffffULL))); + + + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x80000000ULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x7fffffffULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x00010000ULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x0000ffffULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x0000fffeULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x00008001ULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x00008000ULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x00007fffULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x00000100ULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x000000ffULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x000000feULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x00000081ULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x00000080ULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x0000007fULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x00000001ULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( +0x00000000ULL))); + EXPECT_EQ(maybe_cast(+0x0001ULL), saturate(maybe_cast( +0x00000001ULL))); + EXPECT_EQ(maybe_cast(+0x007eULL), saturate(maybe_cast( +0x0000007eULL))); + EXPECT_EQ(maybe_cast(+0x007fULL), saturate(maybe_cast( +0x0000007fULL))); + EXPECT_EQ(maybe_cast(+0x0080ULL), saturate(maybe_cast( +0x00000080ULL))); + EXPECT_EQ(maybe_cast(+0x00feULL), saturate(maybe_cast( +0x000000feULL))); + EXPECT_EQ(maybe_cast(+0x00ffULL), saturate(maybe_cast( +0x000000ffULL))); + EXPECT_EQ(maybe_cast(+0x0100ULL), saturate(maybe_cast( +0x00000100ULL))); + EXPECT_EQ(maybe_cast(+0x7ffeULL), saturate(maybe_cast( +0x00007ffeULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast( +0x00007fffULL))); + EXPECT_EQ(maybe_cast(+0x8000ULL), saturate(maybe_cast( +0x00008000ULL))); + EXPECT_EQ(maybe_cast(+0xfffeULL), saturate(maybe_cast( +0x0000fffeULL))); + EXPECT_EQ(maybe_cast(+0xffffULL), saturate(maybe_cast( +0x0000ffffULL))); + EXPECT_EQ(maybe_cast(+0xffffULL), saturate(maybe_cast( +0x00010000ULL))); + EXPECT_EQ(maybe_cast(+0xffffULL), saturate(maybe_cast( +0x7ffffffeULL))); + EXPECT_EQ(maybe_cast(+0xffffULL), saturate(maybe_cast( +0x7fffffffULL))); + + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast(+0x00000000ULL))); + EXPECT_EQ(maybe_cast(+0x0001ULL), saturate(maybe_cast(+0x00000001ULL))); + EXPECT_EQ(maybe_cast(+0x007eULL), saturate(maybe_cast(+0x0000007eULL))); + EXPECT_EQ(maybe_cast(+0x007fULL), saturate(maybe_cast(+0x0000007fULL))); + EXPECT_EQ(maybe_cast(+0x0080ULL), saturate(maybe_cast(+0x00000080ULL))); + EXPECT_EQ(maybe_cast(+0x00feULL), saturate(maybe_cast(+0x000000feULL))); + EXPECT_EQ(maybe_cast(+0x00ffULL), saturate(maybe_cast(+0x000000ffULL))); + EXPECT_EQ(maybe_cast(+0x0100ULL), saturate(maybe_cast(+0x00000100ULL))); + EXPECT_EQ(maybe_cast(+0x7ffeULL), saturate(maybe_cast(+0x00007ffeULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast(+0x00007fffULL))); + EXPECT_EQ(maybe_cast(+0x8000ULL), saturate(maybe_cast(+0x00008000ULL))); + EXPECT_EQ(maybe_cast(+0xfffeULL), saturate(maybe_cast(+0x0000fffeULL))); + EXPECT_EQ(maybe_cast(+0xffffULL), saturate(maybe_cast(+0x0000ffffULL))); + EXPECT_EQ(maybe_cast(+0xffffULL), saturate(maybe_cast(+0x00010000ULL))); + EXPECT_EQ(maybe_cast(+0xffffULL), saturate(maybe_cast(+0x7ffffffeULL))); + EXPECT_EQ(maybe_cast(+0xffffULL), saturate(maybe_cast(+0x7fffffffULL))); + EXPECT_EQ(maybe_cast(+0xffffULL), saturate(maybe_cast(+0x80000000ULL))); + EXPECT_EQ(maybe_cast(+0xffffULL), saturate(maybe_cast(+0xfffffffeULL))); + EXPECT_EQ(maybe_cast(+0xffffULL), saturate(maybe_cast(+0xffffffffULL))); + + + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x8000000000000000ULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x7fffffffffffffffULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x0000000100000000ULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x00000000ffffffffULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x00000000fffffffeULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x0000000080000001ULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x0000000080000000ULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x000000007fffffffULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x0000000000010000ULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x000000000000ffffULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x000000000000fffeULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x0000000000008001ULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x0000000000008000ULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x0000000000007fffULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x0000000000000100ULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x00000000000000ffULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x00000000000000feULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x0000000000000081ULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x0000000000000080ULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x000000000000007fULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x0000000000000001ULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( +0x0000000000000000ULL))); + EXPECT_EQ(maybe_cast(+0x0001ULL), saturate(maybe_cast( +0x0000000000000001ULL))); + EXPECT_EQ(maybe_cast(+0x007eULL), saturate(maybe_cast( +0x000000000000007eULL))); + EXPECT_EQ(maybe_cast(+0x007fULL), saturate(maybe_cast( +0x000000000000007fULL))); + EXPECT_EQ(maybe_cast(+0x0080ULL), saturate(maybe_cast( +0x0000000000000080ULL))); + EXPECT_EQ(maybe_cast(+0x00feULL), saturate(maybe_cast( +0x00000000000000feULL))); + EXPECT_EQ(maybe_cast(+0x00ffULL), saturate(maybe_cast( +0x00000000000000ffULL))); + EXPECT_EQ(maybe_cast(+0x0100ULL), saturate(maybe_cast( +0x0000000000000100ULL))); + EXPECT_EQ(maybe_cast(+0x7ffeULL), saturate(maybe_cast( +0x0000000000007ffeULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast( +0x0000000000007fffULL))); + EXPECT_EQ(maybe_cast(+0x8000ULL), saturate(maybe_cast( +0x0000000000008000ULL))); + EXPECT_EQ(maybe_cast(+0xfffeULL), saturate(maybe_cast( +0x000000000000fffeULL))); + EXPECT_EQ(maybe_cast(+0xffffULL), saturate(maybe_cast( +0x000000000000ffffULL))); + EXPECT_EQ(maybe_cast(+0xffffULL), saturate(maybe_cast( +0x0000000000010000ULL))); + EXPECT_EQ(maybe_cast(+0xffffULL), saturate(maybe_cast( +0x000000007ffffffeULL))); + EXPECT_EQ(maybe_cast(+0xffffULL), saturate(maybe_cast( +0x000000007fffffffULL))); + EXPECT_EQ(maybe_cast(+0xffffULL), saturate(maybe_cast( +0x0000000080000000ULL))); + EXPECT_EQ(maybe_cast(+0xffffULL), saturate(maybe_cast( +0x00000000fffffffeULL))); + EXPECT_EQ(maybe_cast(+0xffffULL), saturate(maybe_cast( +0x00000000ffffffffULL))); + EXPECT_EQ(maybe_cast(+0xffffULL), saturate(maybe_cast( +0x0000000100000000ULL))); + EXPECT_EQ(maybe_cast(+0xffffULL), saturate(maybe_cast( +0x7ffffffffffffffeULL))); + EXPECT_EQ(maybe_cast(+0xffffULL), saturate(maybe_cast( +0x7fffffffffffffffULL))); + + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast(+0x0000000000000000ULL))); + EXPECT_EQ(maybe_cast(+0x0001ULL), saturate(maybe_cast(+0x0000000000000001ULL))); + EXPECT_EQ(maybe_cast(+0x007eULL), saturate(maybe_cast(+0x000000000000007eULL))); + EXPECT_EQ(maybe_cast(+0x007fULL), saturate(maybe_cast(+0x000000000000007fULL))); + EXPECT_EQ(maybe_cast(+0x0080ULL), saturate(maybe_cast(+0x0000000000000080ULL))); + EXPECT_EQ(maybe_cast(+0x00feULL), saturate(maybe_cast(+0x00000000000000feULL))); + EXPECT_EQ(maybe_cast(+0x00ffULL), saturate(maybe_cast(+0x00000000000000ffULL))); + EXPECT_EQ(maybe_cast(+0x0100ULL), saturate(maybe_cast(+0x0000000000000100ULL))); + EXPECT_EQ(maybe_cast(+0x7ffeULL), saturate(maybe_cast(+0x0000000000007ffeULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast(+0x0000000000007fffULL))); + EXPECT_EQ(maybe_cast(+0x8000ULL), saturate(maybe_cast(+0x0000000000008000ULL))); + EXPECT_EQ(maybe_cast(+0xfffeULL), saturate(maybe_cast(+0x000000000000fffeULL))); + EXPECT_EQ(maybe_cast(+0xffffULL), saturate(maybe_cast(+0x000000000000ffffULL))); + EXPECT_EQ(maybe_cast(+0xffffULL), saturate(maybe_cast(+0x0000000000010000ULL))); + EXPECT_EQ(maybe_cast(+0xffffULL), saturate(maybe_cast(+0x000000007ffffffeULL))); + EXPECT_EQ(maybe_cast(+0xffffULL), saturate(maybe_cast(+0x000000007fffffffULL))); + EXPECT_EQ(maybe_cast(+0xffffULL), saturate(maybe_cast(+0x0000000080000000ULL))); + EXPECT_EQ(maybe_cast(+0xffffULL), saturate(maybe_cast(+0x00000000fffffffeULL))); + EXPECT_EQ(maybe_cast(+0xffffULL), saturate(maybe_cast(+0x00000000ffffffffULL))); + EXPECT_EQ(maybe_cast(+0xffffULL), saturate(maybe_cast(+0x0000000100000000ULL))); + EXPECT_EQ(maybe_cast(+0xffffULL), saturate(maybe_cast(+0x7ffffffffffffffeULL))); + EXPECT_EQ(maybe_cast(+0xffffULL), saturate(maybe_cast(+0x7fffffffffffffffULL))); + EXPECT_EQ(maybe_cast(+0xffffULL), saturate(maybe_cast(+0x8000000000000000ULL))); + EXPECT_EQ(maybe_cast(+0xffffULL), saturate(maybe_cast(+0xfffffffffffffffeULL))); + EXPECT_EQ(maybe_cast(+0xffffULL), saturate(maybe_cast(+0xffffffffffffffffULL))); +} + +TEST(ints, sati32) +{ + EXPECT_EQ(maybe_cast(-0x80ULL), saturate(maybe_cast( -0x80ULL))); + EXPECT_EQ(maybe_cast(-0x7fULL), saturate(maybe_cast( -0x7fULL))); + EXPECT_EQ(maybe_cast(-0x7eULL), saturate(maybe_cast( -0x7eULL))); + EXPECT_EQ(maybe_cast(-0x01ULL), saturate(maybe_cast( -0x01ULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( +0x00ULL))); + EXPECT_EQ(maybe_cast(+0x01ULL), saturate(maybe_cast( +0x01ULL))); + EXPECT_EQ(maybe_cast(+0x7eULL), saturate(maybe_cast( +0x7eULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x7fULL))); + + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( +0x00ULL))); + EXPECT_EQ(maybe_cast(+0x01ULL), saturate(maybe_cast( +0x01ULL))); + EXPECT_EQ(maybe_cast(+0x7eULL), saturate(maybe_cast( +0x7eULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x7fULL))); + EXPECT_EQ(maybe_cast(+0x80ULL), saturate(maybe_cast( +0x80ULL))); + EXPECT_EQ(maybe_cast(+0xfeULL), saturate(maybe_cast( +0xfeULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast( +0xffULL))); + + + EXPECT_EQ(maybe_cast(-0x8000ULL), saturate(maybe_cast( -0x8000ULL))); + EXPECT_EQ(maybe_cast(-0x7fffULL), saturate(maybe_cast( -0x7fffULL))); + EXPECT_EQ(maybe_cast(-0x0100ULL), saturate(maybe_cast( -0x0100ULL))); + EXPECT_EQ(maybe_cast(-0x00ffULL), saturate(maybe_cast( -0x00ffULL))); + EXPECT_EQ(maybe_cast(-0x00feULL), saturate(maybe_cast( -0x00feULL))); + EXPECT_EQ(maybe_cast(-0x0081ULL), saturate(maybe_cast( -0x0081ULL))); + EXPECT_EQ(maybe_cast(-0x0080ULL), saturate(maybe_cast( -0x0080ULL))); + EXPECT_EQ(maybe_cast(-0x007fULL), saturate(maybe_cast( -0x007fULL))); + EXPECT_EQ(maybe_cast(-0x0001ULL), saturate(maybe_cast( -0x0001ULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( +0x0000ULL))); + EXPECT_EQ(maybe_cast(+0x0001ULL), saturate(maybe_cast( +0x0001ULL))); + EXPECT_EQ(maybe_cast(+0x007eULL), saturate(maybe_cast( +0x007eULL))); + EXPECT_EQ(maybe_cast(+0x007fULL), saturate(maybe_cast( +0x007fULL))); + EXPECT_EQ(maybe_cast(+0x0080ULL), saturate(maybe_cast( +0x0080ULL))); + EXPECT_EQ(maybe_cast(+0x00feULL), saturate(maybe_cast( +0x00feULL))); + EXPECT_EQ(maybe_cast(+0x00ffULL), saturate(maybe_cast( +0x00ffULL))); + EXPECT_EQ(maybe_cast(+0x0100ULL), saturate(maybe_cast( +0x0100ULL))); + EXPECT_EQ(maybe_cast(+0x7ffeULL), saturate(maybe_cast( +0x7ffeULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast( +0x7fffULL))); + + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast(+0x0000ULL))); + EXPECT_EQ(maybe_cast(+0x0001ULL), saturate(maybe_cast(+0x0001ULL))); + EXPECT_EQ(maybe_cast(+0x007eULL), saturate(maybe_cast(+0x007eULL))); + EXPECT_EQ(maybe_cast(+0x007fULL), saturate(maybe_cast(+0x007fULL))); + EXPECT_EQ(maybe_cast(+0x0080ULL), saturate(maybe_cast(+0x0080ULL))); + EXPECT_EQ(maybe_cast(+0x00feULL), saturate(maybe_cast(+0x00feULL))); + EXPECT_EQ(maybe_cast(+0x00ffULL), saturate(maybe_cast(+0x00ffULL))); + EXPECT_EQ(maybe_cast(+0x0100ULL), saturate(maybe_cast(+0x0100ULL))); + EXPECT_EQ(maybe_cast(+0x7ffeULL), saturate(maybe_cast(+0x7ffeULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast(+0x7fffULL))); + EXPECT_EQ(maybe_cast(+0x8000ULL), saturate(maybe_cast(+0x8000ULL))); + EXPECT_EQ(maybe_cast(+0xfffeULL), saturate(maybe_cast(+0xfffeULL))); + EXPECT_EQ(maybe_cast(+0xffffULL), saturate(maybe_cast(+0xffffULL))); + + + EXPECT_EQ(maybe_cast(-0x80000000ULL), saturate(maybe_cast( -0x80000000ULL))); + EXPECT_EQ(maybe_cast(-0x7fffffffULL), saturate(maybe_cast( -0x7fffffffULL))); + EXPECT_EQ(maybe_cast(-0x00010000ULL), saturate(maybe_cast( -0x00010000ULL))); + EXPECT_EQ(maybe_cast(-0x0000ffffULL), saturate(maybe_cast( -0x0000ffffULL))); + EXPECT_EQ(maybe_cast(-0x0000fffeULL), saturate(maybe_cast( -0x0000fffeULL))); + EXPECT_EQ(maybe_cast(-0x00008001ULL), saturate(maybe_cast( -0x00008001ULL))); + EXPECT_EQ(maybe_cast(-0x00008000ULL), saturate(maybe_cast( -0x00008000ULL))); + EXPECT_EQ(maybe_cast(-0x00007fffULL), saturate(maybe_cast( -0x00007fffULL))); + EXPECT_EQ(maybe_cast(-0x00000100ULL), saturate(maybe_cast( -0x00000100ULL))); + EXPECT_EQ(maybe_cast(-0x000000ffULL), saturate(maybe_cast( -0x000000ffULL))); + EXPECT_EQ(maybe_cast(-0x000000feULL), saturate(maybe_cast( -0x000000feULL))); + EXPECT_EQ(maybe_cast(-0x00000081ULL), saturate(maybe_cast( -0x00000081ULL))); + EXPECT_EQ(maybe_cast(-0x00000080ULL), saturate(maybe_cast( -0x00000080ULL))); + EXPECT_EQ(maybe_cast(-0x0000007fULL), saturate(maybe_cast( -0x0000007fULL))); + EXPECT_EQ(maybe_cast(-0x00000001ULL), saturate(maybe_cast( -0x00000001ULL))); + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast( +0x00000000ULL))); + EXPECT_EQ(maybe_cast(+0x00000001ULL), saturate(maybe_cast( +0x00000001ULL))); + EXPECT_EQ(maybe_cast(+0x0000007eULL), saturate(maybe_cast( +0x0000007eULL))); + EXPECT_EQ(maybe_cast(+0x0000007fULL), saturate(maybe_cast( +0x0000007fULL))); + EXPECT_EQ(maybe_cast(+0x00000080ULL), saturate(maybe_cast( +0x00000080ULL))); + EXPECT_EQ(maybe_cast(+0x000000feULL), saturate(maybe_cast( +0x000000feULL))); + EXPECT_EQ(maybe_cast(+0x000000ffULL), saturate(maybe_cast( +0x000000ffULL))); + EXPECT_EQ(maybe_cast(+0x00000100ULL), saturate(maybe_cast( +0x00000100ULL))); + EXPECT_EQ(maybe_cast(+0x00007ffeULL), saturate(maybe_cast( +0x00007ffeULL))); + EXPECT_EQ(maybe_cast(+0x00007fffULL), saturate(maybe_cast( +0x00007fffULL))); + EXPECT_EQ(maybe_cast(+0x00008000ULL), saturate(maybe_cast( +0x00008000ULL))); + EXPECT_EQ(maybe_cast(+0x0000fffeULL), saturate(maybe_cast( +0x0000fffeULL))); + EXPECT_EQ(maybe_cast(+0x0000ffffULL), saturate(maybe_cast( +0x0000ffffULL))); + EXPECT_EQ(maybe_cast(+0x00010000ULL), saturate(maybe_cast( +0x00010000ULL))); + EXPECT_EQ(maybe_cast(+0x7ffffffeULL), saturate(maybe_cast( +0x7ffffffeULL))); + EXPECT_EQ(maybe_cast(+0x7fffffffULL), saturate(maybe_cast( +0x7fffffffULL))); + + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast(+0x00000000ULL))); + EXPECT_EQ(maybe_cast(+0x00000001ULL), saturate(maybe_cast(+0x00000001ULL))); + EXPECT_EQ(maybe_cast(+0x0000007eULL), saturate(maybe_cast(+0x0000007eULL))); + EXPECT_EQ(maybe_cast(+0x0000007fULL), saturate(maybe_cast(+0x0000007fULL))); + EXPECT_EQ(maybe_cast(+0x00000080ULL), saturate(maybe_cast(+0x00000080ULL))); + EXPECT_EQ(maybe_cast(+0x000000feULL), saturate(maybe_cast(+0x000000feULL))); + EXPECT_EQ(maybe_cast(+0x000000ffULL), saturate(maybe_cast(+0x000000ffULL))); + EXPECT_EQ(maybe_cast(+0x00000100ULL), saturate(maybe_cast(+0x00000100ULL))); + EXPECT_EQ(maybe_cast(+0x00007ffeULL), saturate(maybe_cast(+0x00007ffeULL))); + EXPECT_EQ(maybe_cast(+0x00007fffULL), saturate(maybe_cast(+0x00007fffULL))); + EXPECT_EQ(maybe_cast(+0x00008000ULL), saturate(maybe_cast(+0x00008000ULL))); + EXPECT_EQ(maybe_cast(+0x0000fffeULL), saturate(maybe_cast(+0x0000fffeULL))); + EXPECT_EQ(maybe_cast(+0x0000ffffULL), saturate(maybe_cast(+0x0000ffffULL))); + EXPECT_EQ(maybe_cast(+0x00010000ULL), saturate(maybe_cast(+0x00010000ULL))); + EXPECT_EQ(maybe_cast(+0x7ffffffeULL), saturate(maybe_cast(+0x7ffffffeULL))); + EXPECT_EQ(maybe_cast(+0x7fffffffULL), saturate(maybe_cast(+0x7fffffffULL))); + EXPECT_EQ(maybe_cast(+0x7fffffffULL), saturate(maybe_cast(+0x80000000ULL))); + EXPECT_EQ(maybe_cast(+0x7fffffffULL), saturate(maybe_cast(+0xfffffffeULL))); + EXPECT_EQ(maybe_cast(+0x7fffffffULL), saturate(maybe_cast(+0xffffffffULL))); + + + EXPECT_EQ(maybe_cast(-0x80000000ULL), saturate(maybe_cast( -0x8000000000000000ULL))); + EXPECT_EQ(maybe_cast(-0x80000000ULL), saturate(maybe_cast( -0x7fffffffffffffffULL))); + EXPECT_EQ(maybe_cast(-0x80000000ULL), saturate(maybe_cast( -0x0000000100000000ULL))); + EXPECT_EQ(maybe_cast(-0x80000000ULL), saturate(maybe_cast( -0x00000000ffffffffULL))); + EXPECT_EQ(maybe_cast(-0x80000000ULL), saturate(maybe_cast( -0x00000000fffffffeULL))); + EXPECT_EQ(maybe_cast(-0x80000000ULL), saturate(maybe_cast( -0x0000000080000001ULL))); + EXPECT_EQ(maybe_cast(-0x80000000ULL), saturate(maybe_cast( -0x0000000080000000ULL))); + EXPECT_EQ(maybe_cast(-0x7fffffffULL), saturate(maybe_cast( -0x000000007fffffffULL))); + EXPECT_EQ(maybe_cast(-0x00010000ULL), saturate(maybe_cast( -0x0000000000010000ULL))); + EXPECT_EQ(maybe_cast(-0x0000ffffULL), saturate(maybe_cast( -0x000000000000ffffULL))); + EXPECT_EQ(maybe_cast(-0x0000fffeULL), saturate(maybe_cast( -0x000000000000fffeULL))); + EXPECT_EQ(maybe_cast(-0x00008001ULL), saturate(maybe_cast( -0x0000000000008001ULL))); + EXPECT_EQ(maybe_cast(-0x00008000ULL), saturate(maybe_cast( -0x0000000000008000ULL))); + EXPECT_EQ(maybe_cast(-0x00007fffULL), saturate(maybe_cast( -0x0000000000007fffULL))); + EXPECT_EQ(maybe_cast(-0x00000100ULL), saturate(maybe_cast( -0x0000000000000100ULL))); + EXPECT_EQ(maybe_cast(-0x000000ffULL), saturate(maybe_cast( -0x00000000000000ffULL))); + EXPECT_EQ(maybe_cast(-0x000000feULL), saturate(maybe_cast( -0x00000000000000feULL))); + EXPECT_EQ(maybe_cast(-0x00000081ULL), saturate(maybe_cast( -0x0000000000000081ULL))); + EXPECT_EQ(maybe_cast(-0x00000080ULL), saturate(maybe_cast( -0x0000000000000080ULL))); + EXPECT_EQ(maybe_cast(-0x0000007fULL), saturate(maybe_cast( -0x000000000000007fULL))); + EXPECT_EQ(maybe_cast(-0x00000001ULL), saturate(maybe_cast( -0x0000000000000001ULL))); + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast( +0x0000000000000000ULL))); + EXPECT_EQ(maybe_cast(+0x00000001ULL), saturate(maybe_cast( +0x0000000000000001ULL))); + EXPECT_EQ(maybe_cast(+0x0000007eULL), saturate(maybe_cast( +0x000000000000007eULL))); + EXPECT_EQ(maybe_cast(+0x0000007fULL), saturate(maybe_cast( +0x000000000000007fULL))); + EXPECT_EQ(maybe_cast(+0x00000080ULL), saturate(maybe_cast( +0x0000000000000080ULL))); + EXPECT_EQ(maybe_cast(+0x000000feULL), saturate(maybe_cast( +0x00000000000000feULL))); + EXPECT_EQ(maybe_cast(+0x000000ffULL), saturate(maybe_cast( +0x00000000000000ffULL))); + EXPECT_EQ(maybe_cast(+0x00000100ULL), saturate(maybe_cast( +0x0000000000000100ULL))); + EXPECT_EQ(maybe_cast(+0x00007ffeULL), saturate(maybe_cast( +0x0000000000007ffeULL))); + EXPECT_EQ(maybe_cast(+0x00007fffULL), saturate(maybe_cast( +0x0000000000007fffULL))); + EXPECT_EQ(maybe_cast(+0x00008000ULL), saturate(maybe_cast( +0x0000000000008000ULL))); + EXPECT_EQ(maybe_cast(+0x0000fffeULL), saturate(maybe_cast( +0x000000000000fffeULL))); + EXPECT_EQ(maybe_cast(+0x0000ffffULL), saturate(maybe_cast( +0x000000000000ffffULL))); + EXPECT_EQ(maybe_cast(+0x00010000ULL), saturate(maybe_cast( +0x0000000000010000ULL))); + EXPECT_EQ(maybe_cast(+0x7ffffffeULL), saturate(maybe_cast( +0x000000007ffffffeULL))); + EXPECT_EQ(maybe_cast(+0x7fffffffULL), saturate(maybe_cast( +0x000000007fffffffULL))); + EXPECT_EQ(maybe_cast(+0x7fffffffULL), saturate(maybe_cast( +0x0000000080000000ULL))); + EXPECT_EQ(maybe_cast(+0x7fffffffULL), saturate(maybe_cast( +0x00000000fffffffeULL))); + EXPECT_EQ(maybe_cast(+0x7fffffffULL), saturate(maybe_cast( +0x00000000ffffffffULL))); + EXPECT_EQ(maybe_cast(+0x7fffffffULL), saturate(maybe_cast( +0x0000000100000000ULL))); + EXPECT_EQ(maybe_cast(+0x7fffffffULL), saturate(maybe_cast( +0x7ffffffffffffffeULL))); + EXPECT_EQ(maybe_cast(+0x7fffffffULL), saturate(maybe_cast( +0x7fffffffffffffffULL))); + + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast(+0x0000000000000000ULL))); + EXPECT_EQ(maybe_cast(+0x00000001ULL), saturate(maybe_cast(+0x0000000000000001ULL))); + EXPECT_EQ(maybe_cast(+0x0000007eULL), saturate(maybe_cast(+0x000000000000007eULL))); + EXPECT_EQ(maybe_cast(+0x0000007fULL), saturate(maybe_cast(+0x000000000000007fULL))); + EXPECT_EQ(maybe_cast(+0x00000080ULL), saturate(maybe_cast(+0x0000000000000080ULL))); + EXPECT_EQ(maybe_cast(+0x000000feULL), saturate(maybe_cast(+0x00000000000000feULL))); + EXPECT_EQ(maybe_cast(+0x000000ffULL), saturate(maybe_cast(+0x00000000000000ffULL))); + EXPECT_EQ(maybe_cast(+0x00000100ULL), saturate(maybe_cast(+0x0000000000000100ULL))); + EXPECT_EQ(maybe_cast(+0x00007ffeULL), saturate(maybe_cast(+0x0000000000007ffeULL))); + EXPECT_EQ(maybe_cast(+0x00007fffULL), saturate(maybe_cast(+0x0000000000007fffULL))); + EXPECT_EQ(maybe_cast(+0x00008000ULL), saturate(maybe_cast(+0x0000000000008000ULL))); + EXPECT_EQ(maybe_cast(+0x0000fffeULL), saturate(maybe_cast(+0x000000000000fffeULL))); + EXPECT_EQ(maybe_cast(+0x0000ffffULL), saturate(maybe_cast(+0x000000000000ffffULL))); + EXPECT_EQ(maybe_cast(+0x00010000ULL), saturate(maybe_cast(+0x0000000000010000ULL))); + EXPECT_EQ(maybe_cast(+0x7ffffffeULL), saturate(maybe_cast(+0x000000007ffffffeULL))); + EXPECT_EQ(maybe_cast(+0x7fffffffULL), saturate(maybe_cast(+0x000000007fffffffULL))); + EXPECT_EQ(maybe_cast(+0x7fffffffULL), saturate(maybe_cast(+0x0000000080000000ULL))); + EXPECT_EQ(maybe_cast(+0x7fffffffULL), saturate(maybe_cast(+0x00000000fffffffeULL))); + EXPECT_EQ(maybe_cast(+0x7fffffffULL), saturate(maybe_cast(+0x00000000ffffffffULL))); + EXPECT_EQ(maybe_cast(+0x7fffffffULL), saturate(maybe_cast(+0x0000000100000000ULL))); + EXPECT_EQ(maybe_cast(+0x7fffffffULL), saturate(maybe_cast(+0x7ffffffffffffffeULL))); + EXPECT_EQ(maybe_cast(+0x7fffffffULL), saturate(maybe_cast(+0x7fffffffffffffffULL))); + EXPECT_EQ(maybe_cast(+0x7fffffffULL), saturate(maybe_cast(+0x8000000000000000ULL))); + EXPECT_EQ(maybe_cast(+0x7fffffffULL), saturate(maybe_cast(+0xfffffffffffffffeULL))); + EXPECT_EQ(maybe_cast(+0x7fffffffULL), saturate(maybe_cast(+0xffffffffffffffffULL))); +} + +TEST(ints, satu32) +{ + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x80ULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x7fULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x7eULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x01ULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( +0x00ULL))); + EXPECT_EQ(maybe_cast(+0x01ULL), saturate(maybe_cast( +0x01ULL))); + EXPECT_EQ(maybe_cast(+0x7eULL), saturate(maybe_cast( +0x7eULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x7fULL))); + + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( +0x00ULL))); + EXPECT_EQ(maybe_cast(+0x01ULL), saturate(maybe_cast( +0x01ULL))); + EXPECT_EQ(maybe_cast(+0x7eULL), saturate(maybe_cast( +0x7eULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x7fULL))); + EXPECT_EQ(maybe_cast(+0x80ULL), saturate(maybe_cast( +0x80ULL))); + EXPECT_EQ(maybe_cast(+0xfeULL), saturate(maybe_cast( +0xfeULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast( +0xffULL))); + + + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x8000ULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x7fffULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x0100ULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x00ffULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x00feULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x0081ULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x0080ULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x007fULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x0001ULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( +0x0000ULL))); + EXPECT_EQ(maybe_cast(+0x0001ULL), saturate(maybe_cast( +0x0001ULL))); + EXPECT_EQ(maybe_cast(+0x007eULL), saturate(maybe_cast( +0x007eULL))); + EXPECT_EQ(maybe_cast(+0x007fULL), saturate(maybe_cast( +0x007fULL))); + EXPECT_EQ(maybe_cast(+0x0080ULL), saturate(maybe_cast( +0x0080ULL))); + EXPECT_EQ(maybe_cast(+0x00feULL), saturate(maybe_cast( +0x00feULL))); + EXPECT_EQ(maybe_cast(+0x00ffULL), saturate(maybe_cast( +0x00ffULL))); + EXPECT_EQ(maybe_cast(+0x0100ULL), saturate(maybe_cast( +0x0100ULL))); + EXPECT_EQ(maybe_cast(+0x7ffeULL), saturate(maybe_cast( +0x7ffeULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast( +0x7fffULL))); + + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast(+0x0000ULL))); + EXPECT_EQ(maybe_cast(+0x0001ULL), saturate(maybe_cast(+0x0001ULL))); + EXPECT_EQ(maybe_cast(+0x007eULL), saturate(maybe_cast(+0x007eULL))); + EXPECT_EQ(maybe_cast(+0x007fULL), saturate(maybe_cast(+0x007fULL))); + EXPECT_EQ(maybe_cast(+0x0080ULL), saturate(maybe_cast(+0x0080ULL))); + EXPECT_EQ(maybe_cast(+0x00feULL), saturate(maybe_cast(+0x00feULL))); + EXPECT_EQ(maybe_cast(+0x00ffULL), saturate(maybe_cast(+0x00ffULL))); + EXPECT_EQ(maybe_cast(+0x0100ULL), saturate(maybe_cast(+0x0100ULL))); + EXPECT_EQ(maybe_cast(+0x7ffeULL), saturate(maybe_cast(+0x7ffeULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast(+0x7fffULL))); + EXPECT_EQ(maybe_cast(+0x8000ULL), saturate(maybe_cast(+0x8000ULL))); + EXPECT_EQ(maybe_cast(+0xfffeULL), saturate(maybe_cast(+0xfffeULL))); + EXPECT_EQ(maybe_cast(+0xffffULL), saturate(maybe_cast(+0xffffULL))); + + + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast( -0x80000000ULL))); + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast( -0x7fffffffULL))); + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast( -0x00010000ULL))); + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast( -0x0000ffffULL))); + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast( -0x0000fffeULL))); + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast( -0x00008001ULL))); + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast( -0x00008000ULL))); + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast( -0x00007fffULL))); + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast( -0x00000100ULL))); + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast( -0x000000ffULL))); + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast( -0x000000feULL))); + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast( -0x00000081ULL))); + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast( -0x00000080ULL))); + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast( -0x0000007fULL))); + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast( -0x00000001ULL))); + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast( +0x00000000ULL))); + EXPECT_EQ(maybe_cast(+0x00000001ULL), saturate(maybe_cast( +0x00000001ULL))); + EXPECT_EQ(maybe_cast(+0x0000007eULL), saturate(maybe_cast( +0x0000007eULL))); + EXPECT_EQ(maybe_cast(+0x0000007fULL), saturate(maybe_cast( +0x0000007fULL))); + EXPECT_EQ(maybe_cast(+0x00000080ULL), saturate(maybe_cast( +0x00000080ULL))); + EXPECT_EQ(maybe_cast(+0x000000feULL), saturate(maybe_cast( +0x000000feULL))); + EXPECT_EQ(maybe_cast(+0x000000ffULL), saturate(maybe_cast( +0x000000ffULL))); + EXPECT_EQ(maybe_cast(+0x00000100ULL), saturate(maybe_cast( +0x00000100ULL))); + EXPECT_EQ(maybe_cast(+0x00007ffeULL), saturate(maybe_cast( +0x00007ffeULL))); + EXPECT_EQ(maybe_cast(+0x00007fffULL), saturate(maybe_cast( +0x00007fffULL))); + EXPECT_EQ(maybe_cast(+0x00008000ULL), saturate(maybe_cast( +0x00008000ULL))); + EXPECT_EQ(maybe_cast(+0x0000fffeULL), saturate(maybe_cast( +0x0000fffeULL))); + EXPECT_EQ(maybe_cast(+0x0000ffffULL), saturate(maybe_cast( +0x0000ffffULL))); + EXPECT_EQ(maybe_cast(+0x00010000ULL), saturate(maybe_cast( +0x00010000ULL))); + EXPECT_EQ(maybe_cast(+0x7ffffffeULL), saturate(maybe_cast( +0x7ffffffeULL))); + EXPECT_EQ(maybe_cast(+0x7fffffffULL), saturate(maybe_cast( +0x7fffffffULL))); + + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast(+0x00000000ULL))); + EXPECT_EQ(maybe_cast(+0x00000001ULL), saturate(maybe_cast(+0x00000001ULL))); + EXPECT_EQ(maybe_cast(+0x0000007eULL), saturate(maybe_cast(+0x0000007eULL))); + EXPECT_EQ(maybe_cast(+0x0000007fULL), saturate(maybe_cast(+0x0000007fULL))); + EXPECT_EQ(maybe_cast(+0x00000080ULL), saturate(maybe_cast(+0x00000080ULL))); + EXPECT_EQ(maybe_cast(+0x000000feULL), saturate(maybe_cast(+0x000000feULL))); + EXPECT_EQ(maybe_cast(+0x000000ffULL), saturate(maybe_cast(+0x000000ffULL))); + EXPECT_EQ(maybe_cast(+0x00000100ULL), saturate(maybe_cast(+0x00000100ULL))); + EXPECT_EQ(maybe_cast(+0x00007ffeULL), saturate(maybe_cast(+0x00007ffeULL))); + EXPECT_EQ(maybe_cast(+0x00007fffULL), saturate(maybe_cast(+0x00007fffULL))); + EXPECT_EQ(maybe_cast(+0x00008000ULL), saturate(maybe_cast(+0x00008000ULL))); + EXPECT_EQ(maybe_cast(+0x0000fffeULL), saturate(maybe_cast(+0x0000fffeULL))); + EXPECT_EQ(maybe_cast(+0x0000ffffULL), saturate(maybe_cast(+0x0000ffffULL))); + EXPECT_EQ(maybe_cast(+0x00010000ULL), saturate(maybe_cast(+0x00010000ULL))); + EXPECT_EQ(maybe_cast(+0x7ffffffeULL), saturate(maybe_cast(+0x7ffffffeULL))); + EXPECT_EQ(maybe_cast(+0x7fffffffULL), saturate(maybe_cast(+0x7fffffffULL))); + EXPECT_EQ(maybe_cast(+0x80000000ULL), saturate(maybe_cast(+0x80000000ULL))); + EXPECT_EQ(maybe_cast(+0xfffffffeULL), saturate(maybe_cast(+0xfffffffeULL))); + EXPECT_EQ(maybe_cast(+0xffffffffULL), saturate(maybe_cast(+0xffffffffULL))); + + + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast( -0x8000000000000000ULL))); + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast( -0x7fffffffffffffffULL))); + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast( -0x0000000100000000ULL))); + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast( -0x00000000ffffffffULL))); + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast( -0x00000000fffffffeULL))); + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast( -0x0000000080000001ULL))); + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast( -0x0000000080000000ULL))); + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast( -0x000000007fffffffULL))); + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast( -0x0000000000010000ULL))); + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast( -0x000000000000ffffULL))); + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast( -0x000000000000fffeULL))); + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast( -0x0000000000008001ULL))); + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast( -0x0000000000008000ULL))); + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast( -0x0000000000007fffULL))); + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast( -0x0000000000000100ULL))); + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast( -0x00000000000000ffULL))); + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast( -0x00000000000000feULL))); + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast( -0x0000000000000081ULL))); + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast( -0x0000000000000080ULL))); + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast( -0x000000000000007fULL))); + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast( -0x0000000000000001ULL))); + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast( +0x0000000000000000ULL))); + EXPECT_EQ(maybe_cast(+0x00000001ULL), saturate(maybe_cast( +0x0000000000000001ULL))); + EXPECT_EQ(maybe_cast(+0x0000007eULL), saturate(maybe_cast( +0x000000000000007eULL))); + EXPECT_EQ(maybe_cast(+0x0000007fULL), saturate(maybe_cast( +0x000000000000007fULL))); + EXPECT_EQ(maybe_cast(+0x00000080ULL), saturate(maybe_cast( +0x0000000000000080ULL))); + EXPECT_EQ(maybe_cast(+0x000000feULL), saturate(maybe_cast( +0x00000000000000feULL))); + EXPECT_EQ(maybe_cast(+0x000000ffULL), saturate(maybe_cast( +0x00000000000000ffULL))); + EXPECT_EQ(maybe_cast(+0x00000100ULL), saturate(maybe_cast( +0x0000000000000100ULL))); + EXPECT_EQ(maybe_cast(+0x00007ffeULL), saturate(maybe_cast( +0x0000000000007ffeULL))); + EXPECT_EQ(maybe_cast(+0x00007fffULL), saturate(maybe_cast( +0x0000000000007fffULL))); + EXPECT_EQ(maybe_cast(+0x00008000ULL), saturate(maybe_cast( +0x0000000000008000ULL))); + EXPECT_EQ(maybe_cast(+0x0000fffeULL), saturate(maybe_cast( +0x000000000000fffeULL))); + EXPECT_EQ(maybe_cast(+0x0000ffffULL), saturate(maybe_cast( +0x000000000000ffffULL))); + EXPECT_EQ(maybe_cast(+0x00010000ULL), saturate(maybe_cast( +0x0000000000010000ULL))); + EXPECT_EQ(maybe_cast(+0x7ffffffeULL), saturate(maybe_cast( +0x000000007ffffffeULL))); + EXPECT_EQ(maybe_cast(+0x7fffffffULL), saturate(maybe_cast( +0x000000007fffffffULL))); + EXPECT_EQ(maybe_cast(+0x80000000ULL), saturate(maybe_cast( +0x0000000080000000ULL))); + EXPECT_EQ(maybe_cast(+0xfffffffeULL), saturate(maybe_cast( +0x00000000fffffffeULL))); + EXPECT_EQ(maybe_cast(+0xffffffffULL), saturate(maybe_cast( +0x00000000ffffffffULL))); + EXPECT_EQ(maybe_cast(+0xffffffffULL), saturate(maybe_cast( +0x0000000100000000ULL))); + EXPECT_EQ(maybe_cast(+0xffffffffULL), saturate(maybe_cast( +0x7ffffffffffffffeULL))); + EXPECT_EQ(maybe_cast(+0xffffffffULL), saturate(maybe_cast( +0x7fffffffffffffffULL))); + + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast(+0x0000000000000000ULL))); + EXPECT_EQ(maybe_cast(+0x00000001ULL), saturate(maybe_cast(+0x0000000000000001ULL))); + EXPECT_EQ(maybe_cast(+0x0000007eULL), saturate(maybe_cast(+0x000000000000007eULL))); + EXPECT_EQ(maybe_cast(+0x0000007fULL), saturate(maybe_cast(+0x000000000000007fULL))); + EXPECT_EQ(maybe_cast(+0x00000080ULL), saturate(maybe_cast(+0x0000000000000080ULL))); + EXPECT_EQ(maybe_cast(+0x000000feULL), saturate(maybe_cast(+0x00000000000000feULL))); + EXPECT_EQ(maybe_cast(+0x000000ffULL), saturate(maybe_cast(+0x00000000000000ffULL))); + EXPECT_EQ(maybe_cast(+0x00000100ULL), saturate(maybe_cast(+0x0000000000000100ULL))); + EXPECT_EQ(maybe_cast(+0x00007ffeULL), saturate(maybe_cast(+0x0000000000007ffeULL))); + EXPECT_EQ(maybe_cast(+0x00007fffULL), saturate(maybe_cast(+0x0000000000007fffULL))); + EXPECT_EQ(maybe_cast(+0x00008000ULL), saturate(maybe_cast(+0x0000000000008000ULL))); + EXPECT_EQ(maybe_cast(+0x0000fffeULL), saturate(maybe_cast(+0x000000000000fffeULL))); + EXPECT_EQ(maybe_cast(+0x0000ffffULL), saturate(maybe_cast(+0x000000000000ffffULL))); + EXPECT_EQ(maybe_cast(+0x00010000ULL), saturate(maybe_cast(+0x0000000000010000ULL))); + EXPECT_EQ(maybe_cast(+0x7ffffffeULL), saturate(maybe_cast(+0x000000007ffffffeULL))); + EXPECT_EQ(maybe_cast(+0x7fffffffULL), saturate(maybe_cast(+0x000000007fffffffULL))); + EXPECT_EQ(maybe_cast(+0x80000000ULL), saturate(maybe_cast(+0x0000000080000000ULL))); + EXPECT_EQ(maybe_cast(+0xfffffffeULL), saturate(maybe_cast(+0x00000000fffffffeULL))); + EXPECT_EQ(maybe_cast(+0xffffffffULL), saturate(maybe_cast(+0x00000000ffffffffULL))); + EXPECT_EQ(maybe_cast(+0xffffffffULL), saturate(maybe_cast(+0x0000000100000000ULL))); + EXPECT_EQ(maybe_cast(+0xffffffffULL), saturate(maybe_cast(+0x7ffffffffffffffeULL))); + EXPECT_EQ(maybe_cast(+0xffffffffULL), saturate(maybe_cast(+0x7fffffffffffffffULL))); + EXPECT_EQ(maybe_cast(+0xffffffffULL), saturate(maybe_cast(+0x8000000000000000ULL))); + EXPECT_EQ(maybe_cast(+0xffffffffULL), saturate(maybe_cast(+0xfffffffffffffffeULL))); + EXPECT_EQ(maybe_cast(+0xffffffffULL), saturate(maybe_cast(+0xffffffffffffffffULL))); +} + +TEST(ints, sati64) +{ + EXPECT_EQ(maybe_cast(-0x80ULL), saturate(maybe_cast( -0x80ULL))); + EXPECT_EQ(maybe_cast(-0x7fULL), saturate(maybe_cast( -0x7fULL))); + EXPECT_EQ(maybe_cast(-0x7eULL), saturate(maybe_cast( -0x7eULL))); + EXPECT_EQ(maybe_cast(-0x01ULL), saturate(maybe_cast( -0x01ULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( +0x00ULL))); + EXPECT_EQ(maybe_cast(+0x01ULL), saturate(maybe_cast( +0x01ULL))); + EXPECT_EQ(maybe_cast(+0x7eULL), saturate(maybe_cast( +0x7eULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x7fULL))); + + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( +0x00ULL))); + EXPECT_EQ(maybe_cast(+0x01ULL), saturate(maybe_cast( +0x01ULL))); + EXPECT_EQ(maybe_cast(+0x7eULL), saturate(maybe_cast( +0x7eULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x7fULL))); + EXPECT_EQ(maybe_cast(+0x80ULL), saturate(maybe_cast( +0x80ULL))); + EXPECT_EQ(maybe_cast(+0xfeULL), saturate(maybe_cast( +0xfeULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast( +0xffULL))); + + + EXPECT_EQ(maybe_cast(-0x8000ULL), saturate(maybe_cast( -0x8000ULL))); + EXPECT_EQ(maybe_cast(-0x7fffULL), saturate(maybe_cast( -0x7fffULL))); + EXPECT_EQ(maybe_cast(-0x0100ULL), saturate(maybe_cast( -0x0100ULL))); + EXPECT_EQ(maybe_cast(-0x00ffULL), saturate(maybe_cast( -0x00ffULL))); + EXPECT_EQ(maybe_cast(-0x00feULL), saturate(maybe_cast( -0x00feULL))); + EXPECT_EQ(maybe_cast(-0x0081ULL), saturate(maybe_cast( -0x0081ULL))); + EXPECT_EQ(maybe_cast(-0x0080ULL), saturate(maybe_cast( -0x0080ULL))); + EXPECT_EQ(maybe_cast(-0x007fULL), saturate(maybe_cast( -0x007fULL))); + EXPECT_EQ(maybe_cast(-0x0001ULL), saturate(maybe_cast( -0x0001ULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( +0x0000ULL))); + EXPECT_EQ(maybe_cast(+0x0001ULL), saturate(maybe_cast( +0x0001ULL))); + EXPECT_EQ(maybe_cast(+0x007eULL), saturate(maybe_cast( +0x007eULL))); + EXPECT_EQ(maybe_cast(+0x007fULL), saturate(maybe_cast( +0x007fULL))); + EXPECT_EQ(maybe_cast(+0x0080ULL), saturate(maybe_cast( +0x0080ULL))); + EXPECT_EQ(maybe_cast(+0x00feULL), saturate(maybe_cast( +0x00feULL))); + EXPECT_EQ(maybe_cast(+0x00ffULL), saturate(maybe_cast( +0x00ffULL))); + EXPECT_EQ(maybe_cast(+0x0100ULL), saturate(maybe_cast( +0x0100ULL))); + EXPECT_EQ(maybe_cast(+0x7ffeULL), saturate(maybe_cast( +0x7ffeULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast( +0x7fffULL))); + + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast(+0x0000ULL))); + EXPECT_EQ(maybe_cast(+0x0001ULL), saturate(maybe_cast(+0x0001ULL))); + EXPECT_EQ(maybe_cast(+0x007eULL), saturate(maybe_cast(+0x007eULL))); + EXPECT_EQ(maybe_cast(+0x007fULL), saturate(maybe_cast(+0x007fULL))); + EXPECT_EQ(maybe_cast(+0x0080ULL), saturate(maybe_cast(+0x0080ULL))); + EXPECT_EQ(maybe_cast(+0x00feULL), saturate(maybe_cast(+0x00feULL))); + EXPECT_EQ(maybe_cast(+0x00ffULL), saturate(maybe_cast(+0x00ffULL))); + EXPECT_EQ(maybe_cast(+0x0100ULL), saturate(maybe_cast(+0x0100ULL))); + EXPECT_EQ(maybe_cast(+0x7ffeULL), saturate(maybe_cast(+0x7ffeULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast(+0x7fffULL))); + EXPECT_EQ(maybe_cast(+0x8000ULL), saturate(maybe_cast(+0x8000ULL))); + EXPECT_EQ(maybe_cast(+0xfffeULL), saturate(maybe_cast(+0xfffeULL))); + EXPECT_EQ(maybe_cast(+0xffffULL), saturate(maybe_cast(+0xffffULL))); + + + EXPECT_EQ(maybe_cast(-0x80000000ULL), saturate(maybe_cast( -0x80000000ULL))); + EXPECT_EQ(maybe_cast(-0x7fffffffULL), saturate(maybe_cast( -0x7fffffffULL))); + EXPECT_EQ(maybe_cast(-0x00010000ULL), saturate(maybe_cast( -0x00010000ULL))); + EXPECT_EQ(maybe_cast(-0x0000ffffULL), saturate(maybe_cast( -0x0000ffffULL))); + EXPECT_EQ(maybe_cast(-0x0000fffeULL), saturate(maybe_cast( -0x0000fffeULL))); + EXPECT_EQ(maybe_cast(-0x00008001ULL), saturate(maybe_cast( -0x00008001ULL))); + EXPECT_EQ(maybe_cast(-0x00008000ULL), saturate(maybe_cast( -0x00008000ULL))); + EXPECT_EQ(maybe_cast(-0x00007fffULL), saturate(maybe_cast( -0x00007fffULL))); + EXPECT_EQ(maybe_cast(-0x00000100ULL), saturate(maybe_cast( -0x00000100ULL))); + EXPECT_EQ(maybe_cast(-0x000000ffULL), saturate(maybe_cast( -0x000000ffULL))); + EXPECT_EQ(maybe_cast(-0x000000feULL), saturate(maybe_cast( -0x000000feULL))); + EXPECT_EQ(maybe_cast(-0x00000081ULL), saturate(maybe_cast( -0x00000081ULL))); + EXPECT_EQ(maybe_cast(-0x00000080ULL), saturate(maybe_cast( -0x00000080ULL))); + EXPECT_EQ(maybe_cast(-0x0000007fULL), saturate(maybe_cast( -0x0000007fULL))); + EXPECT_EQ(maybe_cast(-0x00000001ULL), saturate(maybe_cast( -0x00000001ULL))); + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast( +0x00000000ULL))); + EXPECT_EQ(maybe_cast(+0x00000001ULL), saturate(maybe_cast( +0x00000001ULL))); + EXPECT_EQ(maybe_cast(+0x0000007eULL), saturate(maybe_cast( +0x0000007eULL))); + EXPECT_EQ(maybe_cast(+0x0000007fULL), saturate(maybe_cast( +0x0000007fULL))); + EXPECT_EQ(maybe_cast(+0x00000080ULL), saturate(maybe_cast( +0x00000080ULL))); + EXPECT_EQ(maybe_cast(+0x000000feULL), saturate(maybe_cast( +0x000000feULL))); + EXPECT_EQ(maybe_cast(+0x000000ffULL), saturate(maybe_cast( +0x000000ffULL))); + EXPECT_EQ(maybe_cast(+0x00000100ULL), saturate(maybe_cast( +0x00000100ULL))); + EXPECT_EQ(maybe_cast(+0x00007ffeULL), saturate(maybe_cast( +0x00007ffeULL))); + EXPECT_EQ(maybe_cast(+0x00007fffULL), saturate(maybe_cast( +0x00007fffULL))); + EXPECT_EQ(maybe_cast(+0x00008000ULL), saturate(maybe_cast( +0x00008000ULL))); + EXPECT_EQ(maybe_cast(+0x0000fffeULL), saturate(maybe_cast( +0x0000fffeULL))); + EXPECT_EQ(maybe_cast(+0x0000ffffULL), saturate(maybe_cast( +0x0000ffffULL))); + EXPECT_EQ(maybe_cast(+0x00010000ULL), saturate(maybe_cast( +0x00010000ULL))); + EXPECT_EQ(maybe_cast(+0x7ffffffeULL), saturate(maybe_cast( +0x7ffffffeULL))); + EXPECT_EQ(maybe_cast(+0x7fffffffULL), saturate(maybe_cast( +0x7fffffffULL))); + + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast(+0x00000000ULL))); + EXPECT_EQ(maybe_cast(+0x00000001ULL), saturate(maybe_cast(+0x00000001ULL))); + EXPECT_EQ(maybe_cast(+0x0000007eULL), saturate(maybe_cast(+0x0000007eULL))); + EXPECT_EQ(maybe_cast(+0x0000007fULL), saturate(maybe_cast(+0x0000007fULL))); + EXPECT_EQ(maybe_cast(+0x00000080ULL), saturate(maybe_cast(+0x00000080ULL))); + EXPECT_EQ(maybe_cast(+0x000000feULL), saturate(maybe_cast(+0x000000feULL))); + EXPECT_EQ(maybe_cast(+0x000000ffULL), saturate(maybe_cast(+0x000000ffULL))); + EXPECT_EQ(maybe_cast(+0x00000100ULL), saturate(maybe_cast(+0x00000100ULL))); + EXPECT_EQ(maybe_cast(+0x00007ffeULL), saturate(maybe_cast(+0x00007ffeULL))); + EXPECT_EQ(maybe_cast(+0x00007fffULL), saturate(maybe_cast(+0x00007fffULL))); + EXPECT_EQ(maybe_cast(+0x00008000ULL), saturate(maybe_cast(+0x00008000ULL))); + EXPECT_EQ(maybe_cast(+0x0000fffeULL), saturate(maybe_cast(+0x0000fffeULL))); + EXPECT_EQ(maybe_cast(+0x0000ffffULL), saturate(maybe_cast(+0x0000ffffULL))); + EXPECT_EQ(maybe_cast(+0x00010000ULL), saturate(maybe_cast(+0x00010000ULL))); + EXPECT_EQ(maybe_cast(+0x7ffffffeULL), saturate(maybe_cast(+0x7ffffffeULL))); + EXPECT_EQ(maybe_cast(+0x7fffffffULL), saturate(maybe_cast(+0x7fffffffULL))); + EXPECT_EQ(maybe_cast(+0x80000000ULL), saturate(maybe_cast(+0x80000000ULL))); + EXPECT_EQ(maybe_cast(+0xfffffffeULL), saturate(maybe_cast(+0xfffffffeULL))); + EXPECT_EQ(maybe_cast(+0xffffffffULL), saturate(maybe_cast(+0xffffffffULL))); + + + EXPECT_EQ(maybe_cast(-0x8000000000000000ULL), saturate(maybe_cast( -0x8000000000000000ULL))); + EXPECT_EQ(maybe_cast(-0x7fffffffffffffffULL), saturate(maybe_cast( -0x7fffffffffffffffULL))); + EXPECT_EQ(maybe_cast(-0x0000000100000000ULL), saturate(maybe_cast( -0x0000000100000000ULL))); + EXPECT_EQ(maybe_cast(-0x00000000ffffffffULL), saturate(maybe_cast( -0x00000000ffffffffULL))); + EXPECT_EQ(maybe_cast(-0x00000000fffffffeULL), saturate(maybe_cast( -0x00000000fffffffeULL))); + EXPECT_EQ(maybe_cast(-0x0000000080000001ULL), saturate(maybe_cast( -0x0000000080000001ULL))); + EXPECT_EQ(maybe_cast(-0x0000000080000000ULL), saturate(maybe_cast( -0x0000000080000000ULL))); + EXPECT_EQ(maybe_cast(-0x000000007fffffffULL), saturate(maybe_cast( -0x000000007fffffffULL))); + EXPECT_EQ(maybe_cast(-0x0000000000010000ULL), saturate(maybe_cast( -0x0000000000010000ULL))); + EXPECT_EQ(maybe_cast(-0x000000000000ffffULL), saturate(maybe_cast( -0x000000000000ffffULL))); + EXPECT_EQ(maybe_cast(-0x000000000000fffeULL), saturate(maybe_cast( -0x000000000000fffeULL))); + EXPECT_EQ(maybe_cast(-0x0000000000008001ULL), saturate(maybe_cast( -0x0000000000008001ULL))); + EXPECT_EQ(maybe_cast(-0x0000000000008000ULL), saturate(maybe_cast( -0x0000000000008000ULL))); + EXPECT_EQ(maybe_cast(-0x0000000000007fffULL), saturate(maybe_cast( -0x0000000000007fffULL))); + EXPECT_EQ(maybe_cast(-0x0000000000000100ULL), saturate(maybe_cast( -0x0000000000000100ULL))); + EXPECT_EQ(maybe_cast(-0x00000000000000ffULL), saturate(maybe_cast( -0x00000000000000ffULL))); + EXPECT_EQ(maybe_cast(-0x00000000000000feULL), saturate(maybe_cast( -0x00000000000000feULL))); + EXPECT_EQ(maybe_cast(-0x0000000000000081ULL), saturate(maybe_cast( -0x0000000000000081ULL))); + EXPECT_EQ(maybe_cast(-0x0000000000000080ULL), saturate(maybe_cast( -0x0000000000000080ULL))); + EXPECT_EQ(maybe_cast(-0x000000000000007fULL), saturate(maybe_cast( -0x000000000000007fULL))); + EXPECT_EQ(maybe_cast(-0x0000000000000001ULL), saturate(maybe_cast( -0x0000000000000001ULL))); + EXPECT_EQ(maybe_cast(+0x0000000000000000ULL), saturate(maybe_cast( +0x0000000000000000ULL))); + EXPECT_EQ(maybe_cast(+0x0000000000000001ULL), saturate(maybe_cast( +0x0000000000000001ULL))); + EXPECT_EQ(maybe_cast(+0x000000000000007eULL), saturate(maybe_cast( +0x000000000000007eULL))); + EXPECT_EQ(maybe_cast(+0x000000000000007fULL), saturate(maybe_cast( +0x000000000000007fULL))); + EXPECT_EQ(maybe_cast(+0x0000000000000080ULL), saturate(maybe_cast( +0x0000000000000080ULL))); + EXPECT_EQ(maybe_cast(+0x00000000000000feULL), saturate(maybe_cast( +0x00000000000000feULL))); + EXPECT_EQ(maybe_cast(+0x00000000000000ffULL), saturate(maybe_cast( +0x00000000000000ffULL))); + EXPECT_EQ(maybe_cast(+0x0000000000000100ULL), saturate(maybe_cast( +0x0000000000000100ULL))); + EXPECT_EQ(maybe_cast(+0x0000000000007ffeULL), saturate(maybe_cast( +0x0000000000007ffeULL))); + EXPECT_EQ(maybe_cast(+0x0000000000007fffULL), saturate(maybe_cast( +0x0000000000007fffULL))); + EXPECT_EQ(maybe_cast(+0x0000000000008000ULL), saturate(maybe_cast( +0x0000000000008000ULL))); + EXPECT_EQ(maybe_cast(+0x000000000000fffeULL), saturate(maybe_cast( +0x000000000000fffeULL))); + EXPECT_EQ(maybe_cast(+0x000000000000ffffULL), saturate(maybe_cast( +0x000000000000ffffULL))); + EXPECT_EQ(maybe_cast(+0x0000000000010000ULL), saturate(maybe_cast( +0x0000000000010000ULL))); + EXPECT_EQ(maybe_cast(+0x000000007ffffffeULL), saturate(maybe_cast( +0x000000007ffffffeULL))); + EXPECT_EQ(maybe_cast(+0x000000007fffffffULL), saturate(maybe_cast( +0x000000007fffffffULL))); + EXPECT_EQ(maybe_cast(+0x0000000080000000ULL), saturate(maybe_cast( +0x0000000080000000ULL))); + EXPECT_EQ(maybe_cast(+0x00000000fffffffeULL), saturate(maybe_cast( +0x00000000fffffffeULL))); + EXPECT_EQ(maybe_cast(+0x00000000ffffffffULL), saturate(maybe_cast( +0x00000000ffffffffULL))); + EXPECT_EQ(maybe_cast(+0x0000000100000000ULL), saturate(maybe_cast( +0x0000000100000000ULL))); + EXPECT_EQ(maybe_cast(+0x7ffffffffffffffeULL), saturate(maybe_cast( +0x7ffffffffffffffeULL))); + EXPECT_EQ(maybe_cast(+0x7fffffffffffffffULL), saturate(maybe_cast( +0x7fffffffffffffffULL))); + + EXPECT_EQ(maybe_cast(+0x0000000000000000ULL), saturate(maybe_cast(+0x0000000000000000ULL))); + EXPECT_EQ(maybe_cast(+0x0000000000000001ULL), saturate(maybe_cast(+0x0000000000000001ULL))); + EXPECT_EQ(maybe_cast(+0x000000000000007eULL), saturate(maybe_cast(+0x000000000000007eULL))); + EXPECT_EQ(maybe_cast(+0x000000000000007fULL), saturate(maybe_cast(+0x000000000000007fULL))); + EXPECT_EQ(maybe_cast(+0x0000000000000080ULL), saturate(maybe_cast(+0x0000000000000080ULL))); + EXPECT_EQ(maybe_cast(+0x00000000000000feULL), saturate(maybe_cast(+0x00000000000000feULL))); + EXPECT_EQ(maybe_cast(+0x00000000000000ffULL), saturate(maybe_cast(+0x00000000000000ffULL))); + EXPECT_EQ(maybe_cast(+0x0000000000000100ULL), saturate(maybe_cast(+0x0000000000000100ULL))); + EXPECT_EQ(maybe_cast(+0x0000000000007ffeULL), saturate(maybe_cast(+0x0000000000007ffeULL))); + EXPECT_EQ(maybe_cast(+0x0000000000007fffULL), saturate(maybe_cast(+0x0000000000007fffULL))); + EXPECT_EQ(maybe_cast(+0x0000000000008000ULL), saturate(maybe_cast(+0x0000000000008000ULL))); + EXPECT_EQ(maybe_cast(+0x000000000000fffeULL), saturate(maybe_cast(+0x000000000000fffeULL))); + EXPECT_EQ(maybe_cast(+0x000000000000ffffULL), saturate(maybe_cast(+0x000000000000ffffULL))); + EXPECT_EQ(maybe_cast(+0x0000000000010000ULL), saturate(maybe_cast(+0x0000000000010000ULL))); + EXPECT_EQ(maybe_cast(+0x000000007ffffffeULL), saturate(maybe_cast(+0x000000007ffffffeULL))); + EXPECT_EQ(maybe_cast(+0x000000007fffffffULL), saturate(maybe_cast(+0x000000007fffffffULL))); + EXPECT_EQ(maybe_cast(+0x0000000080000000ULL), saturate(maybe_cast(+0x0000000080000000ULL))); + EXPECT_EQ(maybe_cast(+0x00000000fffffffeULL), saturate(maybe_cast(+0x00000000fffffffeULL))); + EXPECT_EQ(maybe_cast(+0x00000000ffffffffULL), saturate(maybe_cast(+0x00000000ffffffffULL))); + EXPECT_EQ(maybe_cast(+0x0000000100000000ULL), saturate(maybe_cast(+0x0000000100000000ULL))); + EXPECT_EQ(maybe_cast(+0x7ffffffffffffffeULL), saturate(maybe_cast(+0x7ffffffffffffffeULL))); + EXPECT_EQ(maybe_cast(+0x7fffffffffffffffULL), saturate(maybe_cast(+0x7fffffffffffffffULL))); + EXPECT_EQ(maybe_cast(+0x7fffffffffffffffULL), saturate(maybe_cast(+0x8000000000000000ULL))); + EXPECT_EQ(maybe_cast(+0x7fffffffffffffffULL), saturate(maybe_cast(+0xfffffffffffffffeULL))); + EXPECT_EQ(maybe_cast(+0x7fffffffffffffffULL), saturate(maybe_cast(+0xffffffffffffffffULL))); +} + +TEST(ints, satu64) +{ + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x80ULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x7fULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x7eULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( -0x01ULL))); + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( +0x00ULL))); + EXPECT_EQ(maybe_cast(+0x01ULL), saturate(maybe_cast( +0x01ULL))); + EXPECT_EQ(maybe_cast(+0x7eULL), saturate(maybe_cast( +0x7eULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x7fULL))); + + EXPECT_EQ(maybe_cast(+0x00ULL), saturate(maybe_cast( +0x00ULL))); + EXPECT_EQ(maybe_cast(+0x01ULL), saturate(maybe_cast( +0x01ULL))); + EXPECT_EQ(maybe_cast(+0x7eULL), saturate(maybe_cast( +0x7eULL))); + EXPECT_EQ(maybe_cast(+0x7fULL), saturate(maybe_cast( +0x7fULL))); + EXPECT_EQ(maybe_cast(+0x80ULL), saturate(maybe_cast( +0x80ULL))); + EXPECT_EQ(maybe_cast(+0xfeULL), saturate(maybe_cast( +0xfeULL))); + EXPECT_EQ(maybe_cast(+0xffULL), saturate(maybe_cast( +0xffULL))); + + + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x8000ULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x7fffULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x0100ULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x00ffULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x00feULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x0081ULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x0080ULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x007fULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( -0x0001ULL))); + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast( +0x0000ULL))); + EXPECT_EQ(maybe_cast(+0x0001ULL), saturate(maybe_cast( +0x0001ULL))); + EXPECT_EQ(maybe_cast(+0x007eULL), saturate(maybe_cast( +0x007eULL))); + EXPECT_EQ(maybe_cast(+0x007fULL), saturate(maybe_cast( +0x007fULL))); + EXPECT_EQ(maybe_cast(+0x0080ULL), saturate(maybe_cast( +0x0080ULL))); + EXPECT_EQ(maybe_cast(+0x00feULL), saturate(maybe_cast( +0x00feULL))); + EXPECT_EQ(maybe_cast(+0x00ffULL), saturate(maybe_cast( +0x00ffULL))); + EXPECT_EQ(maybe_cast(+0x0100ULL), saturate(maybe_cast( +0x0100ULL))); + EXPECT_EQ(maybe_cast(+0x7ffeULL), saturate(maybe_cast( +0x7ffeULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast( +0x7fffULL))); + + EXPECT_EQ(maybe_cast(+0x0000ULL), saturate(maybe_cast(+0x0000ULL))); + EXPECT_EQ(maybe_cast(+0x0001ULL), saturate(maybe_cast(+0x0001ULL))); + EXPECT_EQ(maybe_cast(+0x007eULL), saturate(maybe_cast(+0x007eULL))); + EXPECT_EQ(maybe_cast(+0x007fULL), saturate(maybe_cast(+0x007fULL))); + EXPECT_EQ(maybe_cast(+0x0080ULL), saturate(maybe_cast(+0x0080ULL))); + EXPECT_EQ(maybe_cast(+0x00feULL), saturate(maybe_cast(+0x00feULL))); + EXPECT_EQ(maybe_cast(+0x00ffULL), saturate(maybe_cast(+0x00ffULL))); + EXPECT_EQ(maybe_cast(+0x0100ULL), saturate(maybe_cast(+0x0100ULL))); + EXPECT_EQ(maybe_cast(+0x7ffeULL), saturate(maybe_cast(+0x7ffeULL))); + EXPECT_EQ(maybe_cast(+0x7fffULL), saturate(maybe_cast(+0x7fffULL))); + EXPECT_EQ(maybe_cast(+0x8000ULL), saturate(maybe_cast(+0x8000ULL))); + EXPECT_EQ(maybe_cast(+0xfffeULL), saturate(maybe_cast(+0xfffeULL))); + EXPECT_EQ(maybe_cast(+0xffffULL), saturate(maybe_cast(+0xffffULL))); + + + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast( -0x80000000ULL))); + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast( -0x7fffffffULL))); + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast( -0x00010000ULL))); + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast( -0x0000ffffULL))); + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast( -0x0000fffeULL))); + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast( -0x00008001ULL))); + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast( -0x00008000ULL))); + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast( -0x00007fffULL))); + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast( -0x00000100ULL))); + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast( -0x000000ffULL))); + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast( -0x000000feULL))); + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast( -0x00000081ULL))); + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast( -0x00000080ULL))); + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast( -0x0000007fULL))); + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast( -0x00000001ULL))); + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast( +0x00000000ULL))); + EXPECT_EQ(maybe_cast(+0x00000001ULL), saturate(maybe_cast( +0x00000001ULL))); + EXPECT_EQ(maybe_cast(+0x0000007eULL), saturate(maybe_cast( +0x0000007eULL))); + EXPECT_EQ(maybe_cast(+0x0000007fULL), saturate(maybe_cast( +0x0000007fULL))); + EXPECT_EQ(maybe_cast(+0x00000080ULL), saturate(maybe_cast( +0x00000080ULL))); + EXPECT_EQ(maybe_cast(+0x000000feULL), saturate(maybe_cast( +0x000000feULL))); + EXPECT_EQ(maybe_cast(+0x000000ffULL), saturate(maybe_cast( +0x000000ffULL))); + EXPECT_EQ(maybe_cast(+0x00000100ULL), saturate(maybe_cast( +0x00000100ULL))); + EXPECT_EQ(maybe_cast(+0x00007ffeULL), saturate(maybe_cast( +0x00007ffeULL))); + EXPECT_EQ(maybe_cast(+0x00007fffULL), saturate(maybe_cast( +0x00007fffULL))); + EXPECT_EQ(maybe_cast(+0x00008000ULL), saturate(maybe_cast( +0x00008000ULL))); + EXPECT_EQ(maybe_cast(+0x0000fffeULL), saturate(maybe_cast( +0x0000fffeULL))); + EXPECT_EQ(maybe_cast(+0x0000ffffULL), saturate(maybe_cast( +0x0000ffffULL))); + EXPECT_EQ(maybe_cast(+0x00010000ULL), saturate(maybe_cast( +0x00010000ULL))); + EXPECT_EQ(maybe_cast(+0x7ffffffeULL), saturate(maybe_cast( +0x7ffffffeULL))); + EXPECT_EQ(maybe_cast(+0x7fffffffULL), saturate(maybe_cast( +0x7fffffffULL))); + + EXPECT_EQ(maybe_cast(+0x00000000ULL), saturate(maybe_cast(+0x00000000ULL))); + EXPECT_EQ(maybe_cast(+0x00000001ULL), saturate(maybe_cast(+0x00000001ULL))); + EXPECT_EQ(maybe_cast(+0x0000007eULL), saturate(maybe_cast(+0x0000007eULL))); + EXPECT_EQ(maybe_cast(+0x0000007fULL), saturate(maybe_cast(+0x0000007fULL))); + EXPECT_EQ(maybe_cast(+0x00000080ULL), saturate(maybe_cast(+0x00000080ULL))); + EXPECT_EQ(maybe_cast(+0x000000feULL), saturate(maybe_cast(+0x000000feULL))); + EXPECT_EQ(maybe_cast(+0x000000ffULL), saturate(maybe_cast(+0x000000ffULL))); + EXPECT_EQ(maybe_cast(+0x00000100ULL), saturate(maybe_cast(+0x00000100ULL))); + EXPECT_EQ(maybe_cast(+0x00007ffeULL), saturate(maybe_cast(+0x00007ffeULL))); + EXPECT_EQ(maybe_cast(+0x00007fffULL), saturate(maybe_cast(+0x00007fffULL))); + EXPECT_EQ(maybe_cast(+0x00008000ULL), saturate(maybe_cast(+0x00008000ULL))); + EXPECT_EQ(maybe_cast(+0x0000fffeULL), saturate(maybe_cast(+0x0000fffeULL))); + EXPECT_EQ(maybe_cast(+0x0000ffffULL), saturate(maybe_cast(+0x0000ffffULL))); + EXPECT_EQ(maybe_cast(+0x00010000ULL), saturate(maybe_cast(+0x00010000ULL))); + EXPECT_EQ(maybe_cast(+0x7ffffffeULL), saturate(maybe_cast(+0x7ffffffeULL))); + EXPECT_EQ(maybe_cast(+0x7fffffffULL), saturate(maybe_cast(+0x7fffffffULL))); + EXPECT_EQ(maybe_cast(+0x80000000ULL), saturate(maybe_cast(+0x80000000ULL))); + EXPECT_EQ(maybe_cast(+0xfffffffeULL), saturate(maybe_cast(+0xfffffffeULL))); + EXPECT_EQ(maybe_cast(+0xffffffffULL), saturate(maybe_cast(+0xffffffffULL))); + + + EXPECT_EQ(maybe_cast(+0x0000000000000000ULL), saturate(maybe_cast( -0x8000000000000000ULL))); + EXPECT_EQ(maybe_cast(+0x0000000000000000ULL), saturate(maybe_cast( -0x7fffffffffffffffULL))); + EXPECT_EQ(maybe_cast(+0x0000000000000000ULL), saturate(maybe_cast( -0x0000000100000000ULL))); + EXPECT_EQ(maybe_cast(+0x0000000000000000ULL), saturate(maybe_cast( -0x00000000ffffffffULL))); + EXPECT_EQ(maybe_cast(+0x0000000000000000ULL), saturate(maybe_cast( -0x00000000fffffffeULL))); + EXPECT_EQ(maybe_cast(+0x0000000000000000ULL), saturate(maybe_cast( -0x0000000080000001ULL))); + EXPECT_EQ(maybe_cast(+0x0000000000000000ULL), saturate(maybe_cast( -0x0000000080000000ULL))); + EXPECT_EQ(maybe_cast(+0x0000000000000000ULL), saturate(maybe_cast( -0x000000007fffffffULL))); + EXPECT_EQ(maybe_cast(+0x0000000000000000ULL), saturate(maybe_cast( -0x0000000000010000ULL))); + EXPECT_EQ(maybe_cast(+0x0000000000000000ULL), saturate(maybe_cast( -0x000000000000ffffULL))); + EXPECT_EQ(maybe_cast(+0x0000000000000000ULL), saturate(maybe_cast( -0x000000000000fffeULL))); + EXPECT_EQ(maybe_cast(+0x0000000000000000ULL), saturate(maybe_cast( -0x0000000000008001ULL))); + EXPECT_EQ(maybe_cast(+0x0000000000000000ULL), saturate(maybe_cast( -0x0000000000008000ULL))); + EXPECT_EQ(maybe_cast(+0x0000000000000000ULL), saturate(maybe_cast( -0x0000000000007fffULL))); + EXPECT_EQ(maybe_cast(+0x0000000000000000ULL), saturate(maybe_cast( -0x0000000000000100ULL))); + EXPECT_EQ(maybe_cast(+0x0000000000000000ULL), saturate(maybe_cast( -0x00000000000000ffULL))); + EXPECT_EQ(maybe_cast(+0x0000000000000000ULL), saturate(maybe_cast( -0x00000000000000feULL))); + EXPECT_EQ(maybe_cast(+0x0000000000000000ULL), saturate(maybe_cast( -0x0000000000000081ULL))); + EXPECT_EQ(maybe_cast(+0x0000000000000000ULL), saturate(maybe_cast( -0x0000000000000080ULL))); + EXPECT_EQ(maybe_cast(+0x0000000000000000ULL), saturate(maybe_cast( -0x000000000000007fULL))); + EXPECT_EQ(maybe_cast(+0x0000000000000000ULL), saturate(maybe_cast( -0x0000000000000001ULL))); + EXPECT_EQ(maybe_cast(+0x0000000000000000ULL), saturate(maybe_cast( +0x0000000000000000ULL))); + EXPECT_EQ(maybe_cast(+0x0000000000000001ULL), saturate(maybe_cast( +0x0000000000000001ULL))); + EXPECT_EQ(maybe_cast(+0x000000000000007eULL), saturate(maybe_cast( +0x000000000000007eULL))); + EXPECT_EQ(maybe_cast(+0x000000000000007fULL), saturate(maybe_cast( +0x000000000000007fULL))); + EXPECT_EQ(maybe_cast(+0x0000000000000080ULL), saturate(maybe_cast( +0x0000000000000080ULL))); + EXPECT_EQ(maybe_cast(+0x00000000000000feULL), saturate(maybe_cast( +0x00000000000000feULL))); + EXPECT_EQ(maybe_cast(+0x00000000000000ffULL), saturate(maybe_cast( +0x00000000000000ffULL))); + EXPECT_EQ(maybe_cast(+0x0000000000000100ULL), saturate(maybe_cast( +0x0000000000000100ULL))); + EXPECT_EQ(maybe_cast(+0x0000000000007ffeULL), saturate(maybe_cast( +0x0000000000007ffeULL))); + EXPECT_EQ(maybe_cast(+0x0000000000007fffULL), saturate(maybe_cast( +0x0000000000007fffULL))); + EXPECT_EQ(maybe_cast(+0x0000000000008000ULL), saturate(maybe_cast( +0x0000000000008000ULL))); + EXPECT_EQ(maybe_cast(+0x000000000000fffeULL), saturate(maybe_cast( +0x000000000000fffeULL))); + EXPECT_EQ(maybe_cast(+0x000000000000ffffULL), saturate(maybe_cast( +0x000000000000ffffULL))); + EXPECT_EQ(maybe_cast(+0x0000000000010000ULL), saturate(maybe_cast( +0x0000000000010000ULL))); + EXPECT_EQ(maybe_cast(+0x000000007ffffffeULL), saturate(maybe_cast( +0x000000007ffffffeULL))); + EXPECT_EQ(maybe_cast(+0x000000007fffffffULL), saturate(maybe_cast( +0x000000007fffffffULL))); + EXPECT_EQ(maybe_cast(+0x0000000080000000ULL), saturate(maybe_cast( +0x0000000080000000ULL))); + EXPECT_EQ(maybe_cast(+0x00000000fffffffeULL), saturate(maybe_cast( +0x00000000fffffffeULL))); + EXPECT_EQ(maybe_cast(+0x00000000ffffffffULL), saturate(maybe_cast( +0x00000000ffffffffULL))); + EXPECT_EQ(maybe_cast(+0x0000000100000000ULL), saturate(maybe_cast( +0x0000000100000000ULL))); + EXPECT_EQ(maybe_cast(+0x7ffffffffffffffeULL), saturate(maybe_cast( +0x7ffffffffffffffeULL))); + EXPECT_EQ(maybe_cast(+0x7fffffffffffffffULL), saturate(maybe_cast( +0x7fffffffffffffffULL))); + + EXPECT_EQ(maybe_cast(+0x0000000000000000ULL), saturate(maybe_cast(+0x0000000000000000ULL))); + EXPECT_EQ(maybe_cast(+0x0000000000000001ULL), saturate(maybe_cast(+0x0000000000000001ULL))); + EXPECT_EQ(maybe_cast(+0x000000000000007eULL), saturate(maybe_cast(+0x000000000000007eULL))); + EXPECT_EQ(maybe_cast(+0x000000000000007fULL), saturate(maybe_cast(+0x000000000000007fULL))); + EXPECT_EQ(maybe_cast(+0x0000000000000080ULL), saturate(maybe_cast(+0x0000000000000080ULL))); + EXPECT_EQ(maybe_cast(+0x00000000000000feULL), saturate(maybe_cast(+0x00000000000000feULL))); + EXPECT_EQ(maybe_cast(+0x00000000000000ffULL), saturate(maybe_cast(+0x00000000000000ffULL))); + EXPECT_EQ(maybe_cast(+0x0000000000000100ULL), saturate(maybe_cast(+0x0000000000000100ULL))); + EXPECT_EQ(maybe_cast(+0x0000000000007ffeULL), saturate(maybe_cast(+0x0000000000007ffeULL))); + EXPECT_EQ(maybe_cast(+0x0000000000007fffULL), saturate(maybe_cast(+0x0000000000007fffULL))); + EXPECT_EQ(maybe_cast(+0x0000000000008000ULL), saturate(maybe_cast(+0x0000000000008000ULL))); + EXPECT_EQ(maybe_cast(+0x000000000000fffeULL), saturate(maybe_cast(+0x000000000000fffeULL))); + EXPECT_EQ(maybe_cast(+0x000000000000ffffULL), saturate(maybe_cast(+0x000000000000ffffULL))); + EXPECT_EQ(maybe_cast(+0x0000000000010000ULL), saturate(maybe_cast(+0x0000000000010000ULL))); + EXPECT_EQ(maybe_cast(+0x000000007ffffffeULL), saturate(maybe_cast(+0x000000007ffffffeULL))); + EXPECT_EQ(maybe_cast(+0x000000007fffffffULL), saturate(maybe_cast(+0x000000007fffffffULL))); + EXPECT_EQ(maybe_cast(+0x0000000080000000ULL), saturate(maybe_cast(+0x0000000080000000ULL))); + EXPECT_EQ(maybe_cast(+0x00000000fffffffeULL), saturate(maybe_cast(+0x00000000fffffffeULL))); + EXPECT_EQ(maybe_cast(+0x00000000ffffffffULL), saturate(maybe_cast(+0x00000000ffffffffULL))); + EXPECT_EQ(maybe_cast(+0x0000000100000000ULL), saturate(maybe_cast(+0x0000000100000000ULL))); + EXPECT_EQ(maybe_cast(+0x7ffffffffffffffeULL), saturate(maybe_cast(+0x7ffffffffffffffeULL))); + EXPECT_EQ(maybe_cast(+0x7fffffffffffffffULL), saturate(maybe_cast(+0x7fffffffffffffffULL))); + EXPECT_EQ(maybe_cast(+0x8000000000000000ULL), saturate(maybe_cast(+0x8000000000000000ULL))); + EXPECT_EQ(maybe_cast(+0xfffffffffffffffeULL), saturate(maybe_cast(+0xfffffffffffffffeULL))); + EXPECT_EQ(maybe_cast(+0xffffffffffffffffULL), saturate(maybe_cast(+0xffffffffffffffffULL))); +} -- cgit v1.2.3-60-g2f50