/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* vim: set ts=8 sts=2 et sw=2 tw=80: */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. */ #include "mozilla/MathAlgorithms.h" using mozilla::Clamp; using mozilla::IsPowerOfTwo; static void TestClamp() { MOZ_RELEASE_ASSERT(Clamp(0, 0, 0) == 0); MOZ_RELEASE_ASSERT(Clamp(1, 0, 0) == 0); MOZ_RELEASE_ASSERT(Clamp(-1, 0, 0) == 0); MOZ_RELEASE_ASSERT(Clamp(0, 1, 1) == 1); MOZ_RELEASE_ASSERT(Clamp(0, 1, 2) == 1); MOZ_RELEASE_ASSERT(Clamp(0, -1, -1) == -1); MOZ_RELEASE_ASSERT(Clamp(0, -2, -1) == -1); MOZ_RELEASE_ASSERT(Clamp(0, 1, 3) == 1); MOZ_RELEASE_ASSERT(Clamp(1, 1, 3) == 1); MOZ_RELEASE_ASSERT(Clamp(2, 1, 3) == 2); MOZ_RELEASE_ASSERT(Clamp(3, 1, 3) == 3); MOZ_RELEASE_ASSERT(Clamp(4, 1, 3) == 3); MOZ_RELEASE_ASSERT(Clamp(5, 1, 3) == 3); MOZ_RELEASE_ASSERT(Clamp(UINT8_MAX, 0, UINT8_MAX) == UINT8_MAX); MOZ_RELEASE_ASSERT(Clamp(0, 0, UINT8_MAX) == 0); MOZ_RELEASE_ASSERT(Clamp(INT8_MIN, INT8_MIN, INT8_MAX) == INT8_MIN); MOZ_RELEASE_ASSERT(Clamp(INT8_MIN, 0, INT8_MAX) == 0); MOZ_RELEASE_ASSERT(Clamp(INT8_MAX, INT8_MIN, INT8_MAX) == INT8_MAX); MOZ_RELEASE_ASSERT(Clamp(INT8_MAX, INT8_MIN, 0) == 0); } static void TestIsPowerOfTwo() { MOZ_RELEASE_ASSERT(!IsPowerOfTwo(0u)); MOZ_RELEASE_ASSERT( IsPowerOfTwo(1u)); MOZ_RELEASE_ASSERT( IsPowerOfTwo(2u)); MOZ_RELEASE_ASSERT(!IsPowerOfTwo(3u)); MOZ_RELEASE_ASSERT( IsPowerOfTwo(4u)); MOZ_RELEASE_ASSERT(!IsPowerOfTwo(5u)); MOZ_RELEASE_ASSERT(!IsPowerOfTwo(6u)); MOZ_RELEASE_ASSERT(!IsPowerOfTwo(7u)); MOZ_RELEASE_ASSERT( IsPowerOfTwo(8u)); MOZ_RELEASE_ASSERT(!IsPowerOfTwo(9u)); MOZ_RELEASE_ASSERT(!IsPowerOfTwo(uint8_t(UINT8_MAX/2))); // 127, 0x7f MOZ_RELEASE_ASSERT( IsPowerOfTwo(uint8_t(UINT8_MAX/2 + 1))); // 128, 0x80 MOZ_RELEASE_ASSERT(!IsPowerOfTwo(uint8_t(UINT8_MAX/2 + 2))); // 129, 0x81 MOZ_RELEASE_ASSERT(!IsPowerOfTwo(uint8_t(UINT8_MAX - 1))); // 254, 0xfe MOZ_RELEASE_ASSERT(!IsPowerOfTwo(uint8_t(UINT8_MAX))); // 255, 0xff MOZ_RELEASE_ASSERT(!IsPowerOfTwo(uint16_t(UINT16_MAX/2))); // 0x7fff MOZ_RELEASE_ASSERT( IsPowerOfTwo(uint16_t(UINT16_MAX/2 + 1))); // 0x8000 MOZ_RELEASE_ASSERT(!IsPowerOfTwo(uint16_t(UINT16_MAX/2 + 2))); // 0x8001 MOZ_RELEASE_ASSERT(!IsPowerOfTwo(uint16_t(UINT16_MAX - 1))); // 0xfffe MOZ_RELEASE_ASSERT(!IsPowerOfTwo(uint16_t(UINT16_MAX))); // 0xffff MOZ_RELEASE_ASSERT(!IsPowerOfTwo(uint32_t(UINT32_MAX/2))); MOZ_RELEASE_ASSERT( IsPowerOfTwo(uint32_t(UINT32_MAX/2 + 1))); MOZ_RELEASE_ASSERT(!IsPowerOfTwo(uint32_t(UINT32_MAX/2 + 2))); MOZ_RELEASE_ASSERT(!IsPowerOfTwo(uint32_t(UINT32_MAX - 1))); MOZ_RELEASE_ASSERT(!IsPowerOfTwo(uint32_t(UINT32_MAX))); MOZ_RELEASE_ASSERT(!IsPowerOfTwo(uint64_t(UINT64_MAX/2))); MOZ_RELEASE_ASSERT( IsPowerOfTwo(uint64_t(UINT64_MAX/2 + 1))); MOZ_RELEASE_ASSERT(!IsPowerOfTwo(uint64_t(UINT64_MAX/2 + 2))); MOZ_RELEASE_ASSERT(!IsPowerOfTwo(uint64_t(UINT64_MAX - 1))); MOZ_RELEASE_ASSERT(!IsPowerOfTwo(uint64_t(UINT64_MAX))); } int main() { TestIsPowerOfTwo(); TestClamp(); return 0; }