15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2011 Apple Inc. All rights reserved. 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * are met: 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1. Redistributions of source code must retain the above copyright 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2. Redistributions in binary form must reproduce the above copyright 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer in the 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * documentation and/or other materials provided with the distribution. 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THE POSSIBILITY OF SUCH DAMAGE. 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "config.h" 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "wtf/CheckedArithmetic.h" 2953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include <gtest/gtest.h> 3053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 3153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)namespace { 325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define CheckedArithmeticTest(type, coerceLiteral, MixedSignednessTest) \ 345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) TEST(WTF, Checked_##type) \ 355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { \ 365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Checked<type, RecordOverflow> value; \ 375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(coerceLiteral(0), value.unsafeGet()); \ 385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(std::numeric_limits<type>::max(), (value + std::numeric_limits<type>::max()).unsafeGet()); \ 395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(std::numeric_limits<type>::max(), (std::numeric_limits<type>::max() + value).unsafeGet()); \ 405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(std::numeric_limits<type>::min(), (value + std::numeric_limits<type>::min()).unsafeGet()); \ 415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(std::numeric_limits<type>::min(), (std::numeric_limits<type>::min() + value).unsafeGet()); \ 425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(coerceLiteral(0), (value * coerceLiteral(0)).unsafeGet()); \ 435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(coerceLiteral(0), (coerceLiteral(0) * value).unsafeGet()); \ 445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(coerceLiteral(0), (value * value).unsafeGet()); \ 455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(coerceLiteral(0), (value - coerceLiteral(0)).unsafeGet()); \ 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(coerceLiteral(0), (coerceLiteral(0) - value).unsafeGet()); \ 475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(coerceLiteral(0), (value - value).unsafeGet()); \ 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(coerceLiteral(0), (value++).unsafeGet()); \ 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(coerceLiteral(1), (value--).unsafeGet()); \ 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(coerceLiteral(1), (++value).unsafeGet()); \ 515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(coerceLiteral(0), (--value).unsafeGet()); \ 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(coerceLiteral(10), (value += coerceLiteral(10)).unsafeGet()); \ 535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(coerceLiteral(10), value.unsafeGet()); \ 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(coerceLiteral(100), (value *= coerceLiteral(10)).unsafeGet()); \ 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(coerceLiteral(100), value.unsafeGet()); \ 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(coerceLiteral(0), (value -= coerceLiteral(100)).unsafeGet()); \ 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(coerceLiteral(0), value.unsafeGet()); \ 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) value = 10; \ 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(coerceLiteral(10), value.unsafeGet()); \ 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(coerceLiteral(0), (value - coerceLiteral(10)).unsafeGet()); \ 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(coerceLiteral(10), value.unsafeGet()); \ 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) value = std::numeric_limits<type>::min(); \ 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(true, (Checked<type, RecordOverflow>(value - coerceLiteral(1))).hasOverflowed()); \ 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(true, !((value--).hasOverflowed())); \ 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(true, value.hasOverflowed()); \ 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) value = std::numeric_limits<type>::max(); \ 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(true, !value.hasOverflowed()); \ 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(true, (Checked<type, RecordOverflow>(value + coerceLiteral(1))).hasOverflowed()); \ 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(true, !(value++).hasOverflowed()); \ 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(true, value.hasOverflowed()); \ 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) value = std::numeric_limits<type>::max(); \ 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(true, (value += coerceLiteral(1)).hasOverflowed()); \ 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(true, value.hasOverflowed()); \ 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) value = 10; \ 75926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) type _value = 0; \ 76926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) EXPECT_EQ(true, CheckedState::DidNotOverflow == (value * Checked<type, RecordOverflow>(0)).safeGet(_value)); \ 77926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) _value = 0; \ 78926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) EXPECT_EQ(true, CheckedState::DidNotOverflow == (Checked<type, RecordOverflow>(0) * value).safeGet(_value)); \ 79926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) _value = 0; \ 80926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) EXPECT_EQ(true, CheckedState::DidOverflow == (value * Checked<type, RecordOverflow>(std::numeric_limits<type>::max())).safeGet(_value)); \ 81926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) _value = 0; \ 82926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) EXPECT_EQ(true, CheckedState::DidOverflow == (Checked<type, RecordOverflow>(std::numeric_limits<type>::max()) * value).safeGet(_value)); \ 83926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) value = 0; \ 84926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) _value = 0; \ 85926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) EXPECT_EQ(true, CheckedState::DidNotOverflow == (value * Checked<type, RecordOverflow>(std::numeric_limits<type>::max())).safeGet(_value)); \ 86926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) _value = 0; \ 87926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) EXPECT_EQ(true, CheckedState::DidNotOverflow == (Checked<type, RecordOverflow>(std::numeric_limits<type>::max()) * value).safeGet(_value)); \ 88926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) value = 1; \ 89926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) _value = 0; \ 90926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) EXPECT_EQ(true, CheckedState::DidNotOverflow == (value * Checked<type, RecordOverflow>(std::numeric_limits<type>::max())).safeGet(_value)); \ 91926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) _value = 0; \ 92926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) EXPECT_EQ(true, CheckedState::DidNotOverflow == (Checked<type, RecordOverflow>(std::numeric_limits<type>::max()) * value).safeGet(_value)); \ 93926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) _value = 0; \ 94926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) value = 0; \ 95926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) EXPECT_EQ(true, CheckedState::DidNotOverflow == (value * Checked<type, RecordOverflow>(std::numeric_limits<type>::max())).safeGet(_value)); \ 96926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) _value = 0; \ 97926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) EXPECT_EQ(true, CheckedState::DidNotOverflow == (Checked<type, RecordOverflow>(std::numeric_limits<type>::max()) * (type)0).safeGet(_value)); \ 98926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) _value = 0; \ 99926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) value = 1; \ 100926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) EXPECT_EQ(true, CheckedState::DidNotOverflow == (value * Checked<type, RecordOverflow>(std::numeric_limits<type>::max())).safeGet(_value)); \ 101926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) _value = 0; \ 102926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) EXPECT_EQ(true, CheckedState::DidNotOverflow == (Checked<type, RecordOverflow>(std::numeric_limits<type>::max()) * (type)1).safeGet(_value)); \ 103926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) _value = 0; \ 104926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) value = 2; \ 105926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) EXPECT_EQ(true, CheckedState::DidOverflow == (value * Checked<type, RecordOverflow>(std::numeric_limits<type>::max())).safeGet(_value)); \ 106926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) _value = 0; \ 107926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) EXPECT_EQ(true, CheckedState::DidOverflow == (Checked<type, RecordOverflow>(std::numeric_limits<type>::max()) * (type)2).safeGet(_value)); \ 108926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) value = 10; \ 109926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) EXPECT_EQ(true, (value * Checked<type, RecordOverflow>(std::numeric_limits<type>::max())).hasOverflowed()); \ 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) MixedSignednessTest(EXPECT_EQ(coerceLiteral(0), (value + -10).unsafeGet())); \ 1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) MixedSignednessTest(EXPECT_EQ(0U, (value - 10U).unsafeGet())); \ 1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) MixedSignednessTest(EXPECT_EQ(coerceLiteral(0), (-10 + value).unsafeGet())); \ 1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) MixedSignednessTest(EXPECT_EQ(0U, (10U - value).unsafeGet())); \ 1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) value = std::numeric_limits<type>::min(); \ 1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) MixedSignednessTest(EXPECT_EQ(true, (Checked<type, RecordOverflow>(value - 1)).hasOverflowed())); \ 1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) MixedSignednessTest(EXPECT_EQ(true, !(value--).hasOverflowed())); \ 1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) MixedSignednessTest(EXPECT_EQ(true, value.hasOverflowed())); \ 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) value = std::numeric_limits<type>::max(); \ 1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) MixedSignednessTest(EXPECT_EQ(true, !value.hasOverflowed())); \ 1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) MixedSignednessTest(EXPECT_EQ(true, (Checked<type, RecordOverflow>(value + 1)).hasOverflowed())); \ 1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) MixedSignednessTest(EXPECT_EQ(true, !(value++).hasOverflowed())); \ 1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) MixedSignednessTest(EXPECT_EQ(true, value.hasOverflowed())); \ 1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) value = std::numeric_limits<type>::max(); \ 1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) MixedSignednessTest(EXPECT_EQ(true, (value += 1).hasOverflowed())); \ 1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) MixedSignednessTest(EXPECT_EQ(true, value.hasOverflowed())); \ 1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) value = std::numeric_limits<type>::min(); \ 1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) MixedSignednessTest(EXPECT_EQ(true, (value - 1U).hasOverflowed())); \ 1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) MixedSignednessTest(EXPECT_EQ(true, !(value--).hasOverflowed())); \ 1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) MixedSignednessTest(EXPECT_EQ(true, value.hasOverflowed())); \ 1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) value = std::numeric_limits<type>::max(); \ 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) MixedSignednessTest(EXPECT_EQ(true, !value.hasOverflowed())); \ 1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) MixedSignednessTest(EXPECT_EQ(true, (Checked<type, RecordOverflow>(value + 1U)).hasOverflowed())); \ 1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) MixedSignednessTest(EXPECT_EQ(true, !(value++).hasOverflowed())); \ 1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) MixedSignednessTest(EXPECT_EQ(true, value.hasOverflowed())); \ 1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) value = std::numeric_limits<type>::max(); \ 1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) MixedSignednessTest(EXPECT_EQ(true, (value += 1U).hasOverflowed())); \ 1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) MixedSignednessTest(EXPECT_EQ(true, value.hasOverflowed())); \ 1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define CoerceLiteralToUnsigned(x) x##U 1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define CoerceLiteralNop(x) x 1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define AllowMixedSignednessTest(x) x 1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define IgnoreMixedSignednessTest(x) 1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)CheckedArithmeticTest(int8_t, CoerceLiteralNop, IgnoreMixedSignednessTest) 1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)CheckedArithmeticTest(int16_t, CoerceLiteralNop, IgnoreMixedSignednessTest) 1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)CheckedArithmeticTest(int32_t, CoerceLiteralNop, AllowMixedSignednessTest) 1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)CheckedArithmeticTest(uint32_t, CoerceLiteralToUnsigned, AllowMixedSignednessTest) 1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)CheckedArithmeticTest(int64_t, CoerceLiteralNop, IgnoreMixedSignednessTest) 1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)CheckedArithmeticTest(uint64_t, CoerceLiteralToUnsigned, IgnoreMixedSignednessTest) 1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)} // namespace 152