michael@0: /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this file, michael@0: * You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: #include "mozilla/Casting.h" michael@0: michael@0: #include michael@0: michael@0: using mozilla::BitwiseCast; michael@0: using mozilla::detail::IsInBounds; michael@0: michael@0: template michael@0: struct UintUlongBitwiseCast; michael@0: michael@0: template michael@0: struct UintUlongBitwiseCast michael@0: { michael@0: static void test() { michael@0: MOZ_RELEASE_ASSERT(BitwiseCast(Uint(8675309)) == Ulong(8675309)); michael@0: } michael@0: }; michael@0: michael@0: template michael@0: struct UintUlongBitwiseCast michael@0: { michael@0: static void test() { } michael@0: }; michael@0: michael@0: static void michael@0: TestBitwiseCast() michael@0: { michael@0: MOZ_RELEASE_ASSERT(BitwiseCast(int(8675309)) == int(8675309)); michael@0: UintUlongBitwiseCast::test(); michael@0: } michael@0: michael@0: static void michael@0: TestSameSize() michael@0: { michael@0: MOZ_RELEASE_ASSERT((IsInBounds(int16_t(0)))); michael@0: MOZ_RELEASE_ASSERT((IsInBounds(int16_t(INT16_MIN)))); michael@0: MOZ_RELEASE_ASSERT((IsInBounds(int16_t(INT16_MAX)))); michael@0: MOZ_RELEASE_ASSERT((IsInBounds(uint16_t(UINT16_MAX)))); michael@0: MOZ_RELEASE_ASSERT((IsInBounds(uint16_t(0)))); michael@0: MOZ_RELEASE_ASSERT((!IsInBounds(uint16_t(-1)))); michael@0: MOZ_RELEASE_ASSERT((!IsInBounds(int16_t(-1)))); michael@0: MOZ_RELEASE_ASSERT((IsInBounds(int16_t(INT16_MAX)))); michael@0: MOZ_RELEASE_ASSERT((!IsInBounds(int16_t(INT16_MIN)))); michael@0: MOZ_RELEASE_ASSERT((IsInBounds(int32_t(INT32_MAX)))); michael@0: MOZ_RELEASE_ASSERT((!IsInBounds(int32_t(INT32_MIN)))); michael@0: } michael@0: michael@0: static void michael@0: TestToBiggerSize() michael@0: { michael@0: MOZ_RELEASE_ASSERT((IsInBounds(int16_t(0)))); michael@0: MOZ_RELEASE_ASSERT((IsInBounds(int16_t(INT16_MIN)))); michael@0: MOZ_RELEASE_ASSERT((IsInBounds(int16_t(INT16_MAX)))); michael@0: MOZ_RELEASE_ASSERT((IsInBounds(uint16_t(UINT16_MAX)))); michael@0: MOZ_RELEASE_ASSERT((IsInBounds(uint16_t(0)))); michael@0: MOZ_RELEASE_ASSERT((IsInBounds(uint16_t(-1)))); michael@0: MOZ_RELEASE_ASSERT((!IsInBounds(int16_t(-1)))); michael@0: MOZ_RELEASE_ASSERT((IsInBounds(int16_t(INT16_MAX)))); michael@0: MOZ_RELEASE_ASSERT((!IsInBounds(int16_t(INT16_MIN)))); michael@0: MOZ_RELEASE_ASSERT((IsInBounds(int32_t(INT32_MAX)))); michael@0: MOZ_RELEASE_ASSERT((!IsInBounds(int32_t(INT32_MIN)))); michael@0: } michael@0: michael@0: static void michael@0: TestToSmallerSize() michael@0: { michael@0: MOZ_RELEASE_ASSERT((IsInBounds(int16_t(0)))); michael@0: MOZ_RELEASE_ASSERT((!IsInBounds(int16_t(INT16_MIN)))); michael@0: MOZ_RELEASE_ASSERT((!IsInBounds(int16_t(INT16_MAX)))); michael@0: MOZ_RELEASE_ASSERT((!IsInBounds(uint16_t(UINT16_MAX)))); michael@0: MOZ_RELEASE_ASSERT((IsInBounds(uint16_t(0)))); michael@0: MOZ_RELEASE_ASSERT((!IsInBounds(uint16_t(-1)))); michael@0: MOZ_RELEASE_ASSERT((!IsInBounds(int16_t(-1)))); michael@0: MOZ_RELEASE_ASSERT((!IsInBounds(int16_t(INT16_MAX)))); michael@0: MOZ_RELEASE_ASSERT((!IsInBounds(int16_t(INT16_MIN)))); michael@0: MOZ_RELEASE_ASSERT((!IsInBounds(int32_t(INT32_MAX)))); michael@0: MOZ_RELEASE_ASSERT((!IsInBounds(int32_t(INT32_MIN)))); michael@0: michael@0: // Boundary cases michael@0: MOZ_RELEASE_ASSERT((!IsInBounds(int64_t(INT32_MIN) - 1))); michael@0: MOZ_RELEASE_ASSERT((IsInBounds(int64_t(INT32_MIN)))); michael@0: MOZ_RELEASE_ASSERT((IsInBounds(int64_t(INT32_MIN) + 1))); michael@0: MOZ_RELEASE_ASSERT((IsInBounds(int64_t(INT32_MAX) - 1))); michael@0: MOZ_RELEASE_ASSERT((IsInBounds(int64_t(INT32_MAX)))); michael@0: MOZ_RELEASE_ASSERT((!IsInBounds(int64_t(INT32_MAX) + 1))); michael@0: michael@0: MOZ_RELEASE_ASSERT((!IsInBounds(int64_t(-1)))); michael@0: MOZ_RELEASE_ASSERT((IsInBounds(int64_t(0)))); michael@0: MOZ_RELEASE_ASSERT((IsInBounds(int64_t(1)))); michael@0: MOZ_RELEASE_ASSERT((IsInBounds(int64_t(UINT32_MAX) - 1))); michael@0: MOZ_RELEASE_ASSERT((IsInBounds(int64_t(UINT32_MAX)))); michael@0: MOZ_RELEASE_ASSERT((!IsInBounds(int64_t(UINT32_MAX) + 1))); michael@0: } michael@0: michael@0: int michael@0: main() michael@0: { michael@0: TestBitwiseCast(); michael@0: michael@0: TestSameSize(); michael@0: TestToBiggerSize(); michael@0: TestToSmallerSize(); michael@0: }