Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
SafeMathTest.cpp
Go to the documentation of this file.
1/*
2 * Copyright 2017 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
9#include "tests/Test.h"
10
11#include <cstddef>
12#include <limits>
13
14DEF_TEST(SafeMath, r) {
15 size_t max = std::numeric_limits<size_t>::max();
16
17 {
18 size_t halfMax = max >> 1;
19 size_t halfMaxPlus1 = halfMax + 1;
20 SkSafeMath safe;
21 REPORTER_ASSERT(r, safe.add(halfMax, halfMax) == 2 * halfMax);
22 REPORTER_ASSERT(r, safe);
23 REPORTER_ASSERT(r, safe.add(halfMax, halfMaxPlus1) == max);
24 REPORTER_ASSERT(r, safe);
25 REPORTER_ASSERT(r, safe.add(max, 1) == 0);
26 REPORTER_ASSERT(r, !safe);
27 }
28
29 {
30 SkSafeMath safe;
31 (void) safe.add(max, max);
32 REPORTER_ASSERT(r, !safe);
33 }
34
35 {
36 size_t bits = (sizeof(size_t) * 8);
37 size_t halfBits = bits / 2;
38 size_t sqrtMax = max >> halfBits;
39 size_t sqrtMaxPlus1 = sqrtMax + 1;
40 SkSafeMath safe;
41 REPORTER_ASSERT(r, safe.mul(sqrtMax, sqrtMax) == sqrtMax * sqrtMax);
42 REPORTER_ASSERT(r, safe);
43 REPORTER_ASSERT(r, safe.mul(sqrtMax, sqrtMaxPlus1) == sqrtMax << halfBits);
44 REPORTER_ASSERT(r, safe);
45 REPORTER_ASSERT(r, safe.mul(sqrtMaxPlus1, sqrtMaxPlus1) == 0);
46 REPORTER_ASSERT(r, !safe);
47 }
48
49 {
50 SkSafeMath safe;
51 (void) safe.mul(max, max);
52 REPORTER_ASSERT(r, !safe);
53 }
54}
#define DEF_TEST(name, reporter)
Definition Test.h:312
#define REPORTER_ASSERT(r, cond,...)
Definition Test.h:286
size_t add(size_t x, size_t y)
Definition SkSafeMath.h:33
size_t mul(size_t x, size_t y)
Definition SkSafeMath.h:29
static float max(float r, float g, float b)
Definition hsl.cpp:49