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