1e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project/* safe_iop 2e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project * License:: released in to the public domain 3e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project * Author:: Will Drewry <redpig@dataspill.org> 4e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project * Copyright 2007,2008 redpig@dataspill.org 5e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project * Some portions copyright The Android Open Source Project 6e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project * 7e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 8e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project * distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 9e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project * OF ANY KIND, either express or implied. 10e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project * 11e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project * See safe_iop.h for more info. 12e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project */ 13e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project#include <stdint.h> 14e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project#include <stdarg.h> 15e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project#include <string.h> 16e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project#include <sys/types.h> 17e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 18e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project#include <safe_iop.h> 19e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 20e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project/* Read off the type if the first value matches a type prefix 21e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project * and consume characters if successful. 22e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project */ 23e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectstatic int _safe_op_read_type(safe_type_t *type, const char **c) { 24e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project if (type == NULL) { 25e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return 0; 26e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project } 27e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project if (c == NULL || *c == NULL || **c == '\0') { 28e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return 0; 29e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project } 30e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project /* Extract a type for the operation if there is one */ 31e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project if (strchr(SAFE_IOP_TYPE_PREFIXES, **c) != NULL) { 32e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project switch(**c) { 33e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project case 'u': 34e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project if ((*(*c+1) && *(*c+1) == '3') && 35e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project (*(*c+2) && *(*c+2) == '2')) { 36e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project *type = SAFE_IOP_TYPE_U32; 37e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project *c += 3; /* Advance past type */ 38e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project } 39e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project break; 40e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project case 's': 41e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project if ((*(*c+1) && *(*c+1) == '3') && 42e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project (*(*c+2) && *(*c+2) == '2')) { 43e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project *type = SAFE_IOP_TYPE_S32; 44e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project *c += 3; /* Advance past type */ 45e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project } 46e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project break; 47e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project default: 48e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project /* Unknown type */ 49e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return 0; 50e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project } 51e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project } 52e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return 1; 53e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 54e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 55e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project#define _SAFE_IOP_TYPE_CASE(_type, _func) { \ 56e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project _type a = va_arg(ap, _type), value = *((_type *) result); \ 57e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project if (!baseline) { \ 58e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project value = a; \ 59e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a = va_arg(ap, _type); \ 60e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project baseline = 1; \ 61e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project } \ 62e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project if (! _func( (_type *) result, value, a)) \ 63e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return 0; \ 64e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 65e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project#define _SAFE_IOP_OP_CASE(u32func, s32func) \ 66e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project switch (type) { \ 67e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project case SAFE_IOP_TYPE_U32: \ 68e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project _SAFE_IOP_TYPE_CASE(u_int32_t, u32func); \ 69e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project break; \ 70e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project case SAFE_IOP_TYPE_S32: \ 71e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project _SAFE_IOP_TYPE_CASE(int32_t, s32func); \ 72e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project break; \ 73e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project default: \ 74e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return 0; \ 75e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project } 76e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 77e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint safe_iopf(void *result, const char *const fmt, ...) { 78e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project va_list ap; 79e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int baseline = 0; /* indicates if the base value is present */ 80e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 81e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project const char *c = NULL; 82e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project safe_type_t type = SAFE_IOP_TYPE_DEFAULT; 83e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project /* Result should not be NULL */ 84e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project if (!result) 85e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return 0; 86e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 87e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project va_start(ap, fmt); 88e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project if (fmt == NULL || fmt[0] == '\0') 89e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return 0; 90e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project for(c=fmt;(*c);c++) { 91e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project /* Read the type if specified */ 92e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project if (!_safe_op_read_type(&type, &c)) { 93e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return 0; 94e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project } 95e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 96e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project /* Process the the operations */ 97e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project switch(*c) { /* operation */ 98e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project case '+': /* add */ 99e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project _SAFE_IOP_OP_CASE(safe_uadd, safe_sadd); 100e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project break; 101e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project case '-': /* sub */ 102e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project _SAFE_IOP_OP_CASE(safe_usub, safe_ssub); 103e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project break; 104e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project case '*': /* mul */ 105e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project _SAFE_IOP_OP_CASE(safe_umul, safe_smul); 106e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project break; 107e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project case '/': /* div */ 108e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project _SAFE_IOP_OP_CASE(safe_udiv, safe_sdiv); 109e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project break; 110e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project case '%': /* mod */ 111e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project _SAFE_IOP_OP_CASE(safe_umod, safe_smod); 112e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project break; 113e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project default: 114e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project /* unknown op */ 115e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return 0; 116e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project } 117e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project /* Reset the type */ 118e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project type = SAFE_IOP_TYPE_DEFAULT; 119e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project } 120e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project /* Success! */ 121e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return 1; 122e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 123e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 124e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project#ifdef SAFE_IOP_TEST 125e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project#include <stdio.h> 126e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project#include <stdint.h> 127e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project#include <limits.h> 128e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 129e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project/* __LP64__ is given by GCC. Without more work, this is bound to GCC. */ 130e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project#if __LP64__ == 1 || __SIZEOF_LONG__ > __SIZEOF_INT__ 131e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project# define SAFE_INT64_MAX 0x7fffffffffffffffL 132e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project# define SAFE_UINT64_MAX 0xffffffffffffffffUL 133e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project# define SAFE_INT64_MIN (-SAFE_INT64_MAX - 1L) 134e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project#elif __SIZEOF_LONG__ == __SIZEOF_INT__ 135e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project# define SAFE_INT64_MAX 0x7fffffffffffffffLL 136e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project# define SAFE_UINT64_MAX 0xffffffffffffffffULL 137e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project# define SAFE_INT64_MIN (-SAFE_INT64_MAX - 1LL) 138e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project#else 139e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project# warning "64-bit support disabled" 140e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project# define SAFE_IOP_NO_64 1 141e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project#endif 142e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 143e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project/* Pull these from GNU's limit.h */ 144e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project#ifndef LLONG_MAX 145e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project# define LLONG_MAX 9223372036854775807LL 146e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project#endif 147e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project#ifndef LLONG_MIN 148e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project# define LLONG_MIN (-LLONG_MAX - 1LL) 149e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project#endif 150e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project#ifndef ULLONG_MAX 151e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project# define ULLONG_MAX 18446744073709551615ULL 152e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project#endif 153e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 154e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project/* Assumes SSIZE_MAX */ 155e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project#ifndef SSIZE_MIN 156e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project# if SSIZE_MAX == LONG_MAX 157e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project# define SSIZE_MIN LONG_MIN 158e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project# elif SSIZE_MAX == LONG_LONG_MAX 159e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project# define SSIZE_MIN LONG_LONG_MIN 160e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project# else 161e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project# error "SSIZE_MIN is not defined and could not be guessed" 162e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project# endif 163e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project#endif 164e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 165e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project#define EXPECT_FALSE(cmd) ({ \ 166e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project printf("%s: EXPECT_FALSE(" #cmd ") => ", __func__); \ 167e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project if ((cmd) != 0) { printf(" FAILED\n"); expect_fail++; r = 0; } \ 168e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project else { printf(" PASSED\n"); expect_succ++; } \ 169e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project expect++; \ 170e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project }) 171e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project#define EXPECT_TRUE(cmd) ({ \ 172e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project printf("%s: EXPECT_TRUE(" #cmd ") => ", __func__); \ 173e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project if ((cmd) != 1) { printf(" FAILED\n"); expect_fail++; r = 0; } \ 174e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project else { printf(" PASSED\n"); expect_succ++; } \ 175e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project expect++; \ 176e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project }) 177e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 178e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectstatic int expect = 0, expect_succ = 0, expect_fail = 0; 179e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 180e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project/***** ADD *****/ 181e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_add_s8() { 182e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 183e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int8_t a, b; 184e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SCHAR_MIN; b=-1; EXPECT_FALSE(safe_add(NULL, a, b)); 185e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SCHAR_MAX; b=1; EXPECT_FALSE(safe_add(NULL, a, b)); 186e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=11; EXPECT_TRUE(safe_add(NULL, a, b)); 187e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=-10; b=-11; EXPECT_TRUE(safe_add(NULL, a, b)); 188e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SCHAR_MIN; b=SCHAR_MAX; EXPECT_TRUE(safe_add(NULL, a, b)); 189e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SCHAR_MIN+1; b=-1; EXPECT_TRUE(safe_add(NULL, a, b)); 190e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SCHAR_MAX/2; b=SCHAR_MAX/2; EXPECT_TRUE(safe_add(NULL, a, b)); 191e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 192e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 193e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 194e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_add_s16() { 195e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 196e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int16_t a, b; 197e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SHRT_MIN; b=-1; EXPECT_FALSE(safe_add(NULL, a, b)); 198e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SHRT_MAX; b=1; EXPECT_FALSE(safe_add(NULL, a, b)); 199e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=11; EXPECT_TRUE(safe_add(NULL, a, b)); 200e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SHRT_MIN; b=SHRT_MAX; EXPECT_TRUE(safe_add(NULL, a, b)); 201e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SHRT_MAX/2; b=SHRT_MAX/2; EXPECT_TRUE(safe_add(NULL, a, b)); 202e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 203e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 204e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 205e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_add_s32() { 206e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 207e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int32_t a, b; 208e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=INT_MIN; b=-1; EXPECT_FALSE(safe_add(NULL, a, b)); 209e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=INT_MAX; b=1; EXPECT_FALSE(safe_add(NULL, a, b)); 210e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=11; EXPECT_TRUE(safe_add(NULL, a, b)); 211e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=INT_MIN; b=INT_MAX; EXPECT_TRUE(safe_add(NULL, a, b)); 212e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=INT_MAX/2; b=INT_MAX/2; EXPECT_TRUE(safe_add(NULL, a, b)); 213e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 214e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 215e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 216e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_add_s64() { 217e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 218e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int64_t a, b; 219e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SAFE_INT64_MIN; b=-1; EXPECT_FALSE(safe_add(NULL, a, b)); 220e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SAFE_INT64_MAX; b=1; EXPECT_FALSE(safe_add(NULL, a, b)); 221e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=11; EXPECT_TRUE(safe_add(NULL, a, b)); 222e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SAFE_INT64_MIN; b=SAFE_INT64_MAX; EXPECT_TRUE(safe_add(NULL, a, b)); 223e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SAFE_INT64_MAX/2; b=SAFE_INT64_MAX/2; EXPECT_TRUE(safe_add(NULL, a, b)); 224e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 225e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 226e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 227e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_add_long() { 228e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 229e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project long a, b; 230e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=LONG_MIN; b=-1; EXPECT_FALSE(safe_add(NULL, a, b)); 231e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=LONG_MAX; b=1; EXPECT_FALSE(safe_add(NULL, a, b)); 232e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=11; EXPECT_TRUE(safe_add(NULL, a, b)); 233e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=LONG_MIN; b=LONG_MAX; EXPECT_TRUE(safe_add(NULL, a, b)); 234e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=LONG_MAX/2; b=LONG_MAX/2; EXPECT_TRUE(safe_add(NULL, a, b)); 235e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 236e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 237e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_add_longlong() { 238e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 239e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project long long a, b; 240e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=LLONG_MIN; b=-1; EXPECT_FALSE(safe_add(NULL, a, b)); 241e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=LLONG_MAX; b=1; EXPECT_FALSE(safe_add(NULL, a, b)); 242e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=11; EXPECT_TRUE(safe_add(NULL, a, b)); 243e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=LLONG_MIN; b=LLONG_MAX; EXPECT_TRUE(safe_add(NULL, a, b)); 244e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=LLONG_MAX/2; b=LLONG_MAX/2; EXPECT_TRUE(safe_add(NULL, a, b)); 245e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 246e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 247e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_add_ssizet() { 248e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 249e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project ssize_t a, b; 250e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SSIZE_MIN; b=-1; EXPECT_FALSE(safe_add(NULL, a, b)); 251e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SSIZE_MAX; b=1; EXPECT_FALSE(safe_add(NULL, a, b)); 252e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=11; EXPECT_TRUE(safe_add(NULL, a, b)); 253e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SSIZE_MIN; b=SSIZE_MAX; EXPECT_TRUE(safe_add(NULL, a, b)); 254e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SSIZE_MAX/2; b=SSIZE_MAX/2; EXPECT_TRUE(safe_add(NULL, a, b)); 255e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 256e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 257e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 258e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_add_u8() { 259e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 260e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project uint8_t a, b; 261e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=1; b=UCHAR_MAX; EXPECT_FALSE(safe_add(NULL, a, b)); 262e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=UCHAR_MAX/2; b=a+2; EXPECT_FALSE(safe_add(NULL, a, b)); 263e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=UCHAR_MAX/2; b=a; EXPECT_TRUE(safe_add(NULL, a, b)); 264e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=UCHAR_MAX/2; b=a+1; EXPECT_TRUE(safe_add(NULL, a, b)); 265e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=11; EXPECT_TRUE(safe_add(NULL, a, b)); 266e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=0; b=UCHAR_MAX; EXPECT_TRUE(safe_add(NULL, a, b)); 267e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 268e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 269e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 270e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_add_u16() { 271e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 272e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project uint16_t a, b; 273e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=1; b=USHRT_MAX; EXPECT_FALSE(safe_add(NULL, a, b)); 274e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=USHRT_MAX/2; b=a+2; EXPECT_FALSE(safe_add(NULL, a, b)); 275e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=USHRT_MAX/2; b=a; EXPECT_TRUE(safe_add(NULL, a, b)); 276e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=USHRT_MAX/2; b=a+1; EXPECT_TRUE(safe_add(NULL, a, b)); 277e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=11; EXPECT_TRUE(safe_add(NULL, a, b)); 278e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=0; b=USHRT_MAX; EXPECT_TRUE(safe_add(NULL, a, b)); 279e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 280e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 281e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 282e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_add_u32() { 283e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 284e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project uint32_t a, b; 285e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=1; b=UINT_MAX; EXPECT_FALSE(safe_add(NULL, a, b)); 286e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=UINT_MAX/2; b=a+2; EXPECT_FALSE(safe_add(NULL, a, b)); 287e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=UINT_MAX/2; b=a; EXPECT_TRUE(safe_add(NULL, a, b)); 288e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=UINT_MAX/2; b=a+1; EXPECT_TRUE(safe_add(NULL, a, b)); 289e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=11; EXPECT_TRUE(safe_add(NULL, a, b)); 290e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=0; b=UINT_MAX; EXPECT_TRUE(safe_add(NULL, a, b)); 291e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 292e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 293e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 294e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_add_u64() { 295e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 296e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project uint64_t a, b; 297e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=1; b=SAFE_UINT64_MAX; EXPECT_FALSE(safe_add(NULL, a, b)); 298e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SAFE_UINT64_MAX/2; b=a+2; EXPECT_FALSE(safe_add(NULL, a, b)); 299e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SAFE_UINT64_MAX/2; b=a; EXPECT_TRUE(safe_add(NULL, a, b)); 300e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SAFE_UINT64_MAX/2; b=a+1; EXPECT_TRUE(safe_add(NULL, a, b)); 301e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=11; EXPECT_TRUE(safe_add(NULL, a, b)); 302e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=0; b=SAFE_UINT64_MAX; EXPECT_TRUE(safe_add(NULL, a, b)); 303e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 304e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 305e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 306e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_add_ulong() { 307e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 308e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project unsigned long a, b; 309e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=1; b=ULONG_MAX; EXPECT_FALSE(safe_add(NULL, a, b)); 310e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=ULONG_MAX/2; b=a+2; EXPECT_FALSE(safe_add(NULL, a, b)); 311e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=ULONG_MAX/2; b=a; EXPECT_TRUE(safe_add(NULL, a, b)); 312e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=ULONG_MAX/2; b=a+1; EXPECT_TRUE(safe_add(NULL, a, b)); 313e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=11; EXPECT_TRUE(safe_add(NULL, a, b)); 314e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=0; b=ULONG_MAX; EXPECT_TRUE(safe_add(NULL, a, b)); 315e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 316e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 317e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 318e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_add_ulonglong() { 319e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 320e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project unsigned long long a, b; 321e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=1; b=ULLONG_MAX; EXPECT_FALSE(safe_add(NULL, a, b)); 322e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=ULLONG_MAX/2; b=a+2; EXPECT_FALSE(safe_add(NULL, a, b)); 323e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=ULLONG_MAX/2; b=a; EXPECT_TRUE(safe_add(NULL, a, b)); 324e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=ULLONG_MAX/2; b=a+1; EXPECT_TRUE(safe_add(NULL, a, b)); 325e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=11; EXPECT_TRUE(safe_add(NULL, a, b)); 326e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=0; b=ULLONG_MAX; EXPECT_TRUE(safe_add(NULL, a, b)); 327e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 328e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 329e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 330e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_add_sizet() { 331e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 332e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project size_t a, b; 333e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=1; b=SIZE_MAX; EXPECT_FALSE(safe_add(NULL, a, b)); 334e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SIZE_MAX/2; b=a+2; EXPECT_FALSE(safe_add(NULL, a, b)); 335e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SIZE_MAX/2; b=a; EXPECT_TRUE(safe_add(NULL, a, b)); 336e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SIZE_MAX/2; b=a+1; EXPECT_TRUE(safe_add(NULL, a, b)); 337e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=11; EXPECT_TRUE(safe_add(NULL, a, b)); 338e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=0; b=SIZE_MAX; EXPECT_TRUE(safe_add(NULL, a, b)); 339e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 340e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 341e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 342e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_add_mixed() { 343e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 344e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int8_t a = 1; 345e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project uint8_t b = 2; 346e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project uint16_t c = 3; 347e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project EXPECT_FALSE(safe_add(NULL, a, b)); 348e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project EXPECT_FALSE(safe_add(NULL, b, c)); 349e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project EXPECT_FALSE(safe_add(NULL, a, c)); 350e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project EXPECT_FALSE(safe_add3(NULL, a, b, c)); 351e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 352e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 353e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 354e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_add_increment() { 355e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 356e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project uint16_t a = 1, b = 2, c = 0, d[2]= {0}; 357e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project uint16_t *cur = d; 358e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project EXPECT_TRUE(safe_add(cur++, a++, b)); 359e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project EXPECT_TRUE(cur == &d[1]); 360e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project EXPECT_TRUE(d[0] == 3); 361e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project EXPECT_TRUE(a == 2); 362e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a = 1; b = 2; c = 1; cur=d;d[0] = 0; 363e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project EXPECT_TRUE(safe_add3(cur++, a++, b++, c)); 364e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project EXPECT_TRUE(d[0] == 4); 365e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project EXPECT_TRUE(cur == &d[1]); 366e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project EXPECT_TRUE(a == 2); 367e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project EXPECT_TRUE(b == 3); 368e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project EXPECT_TRUE(c == 1); 369e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 370e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 371e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 372e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 373e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 374e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project/***** SUB *****/ 375e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_sub_s8() { 376e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 377e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int8_t a, b; 378e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SCHAR_MIN; b=1; EXPECT_FALSE(safe_sub(NULL, a, b)); 379e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SCHAR_MIN; b=SCHAR_MAX; EXPECT_FALSE(safe_sub(NULL, a, b)); 380e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SCHAR_MIN/2; b=SCHAR_MAX; EXPECT_FALSE(safe_sub(NULL, a, b)); 381e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=-2; b=SCHAR_MAX; EXPECT_FALSE(safe_sub(NULL, a, b)); 382e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SCHAR_MAX; b=SCHAR_MAX; EXPECT_TRUE(safe_sub(NULL, a, b)); 383e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=2; EXPECT_TRUE(safe_sub(NULL, a, b)); 384e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=2; b=10; EXPECT_TRUE(safe_sub(NULL, a, b)); 385e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 386e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 387e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 388e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_sub_s16() { 389e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 390e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int16_t a, b; 391e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SHRT_MIN; b=1; EXPECT_FALSE(safe_sub(NULL, a, b)); 392e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SHRT_MIN; b=SHRT_MAX; EXPECT_FALSE(safe_sub(NULL, a, b)); 393e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SHRT_MIN/2; b=SHRT_MAX; EXPECT_FALSE(safe_sub(NULL, a, b)); 394e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=-2; b=SHRT_MAX; EXPECT_FALSE(safe_sub(NULL, a, b)); 395e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SHRT_MAX; b=SHRT_MAX; EXPECT_TRUE(safe_sub(NULL, a, b)); 396e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=2; EXPECT_TRUE(safe_sub(NULL, a, b)); 397e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=2; b=10; EXPECT_TRUE(safe_sub(NULL, a, b)); 398e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 399e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 400e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 401e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_sub_s32() { 402e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 403e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int32_t a, b; 404e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=INT_MIN; b=1; EXPECT_FALSE(safe_sub(NULL, a, b)); 405e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=INT_MIN; b=INT_MAX; EXPECT_FALSE(safe_sub(NULL, a, b)); 406e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=INT_MIN/2; b=INT_MAX; EXPECT_FALSE(safe_sub(NULL, a, b)); 407e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=-2; b=INT_MAX; EXPECT_FALSE(safe_sub(NULL, a, b)); 408e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=INT_MAX; b=INT_MAX; EXPECT_TRUE(safe_sub(NULL, a, b)); 409e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=2; EXPECT_TRUE(safe_sub(NULL, a, b)); 410e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=2; b=10; EXPECT_TRUE(safe_sub(NULL, a, b)); 411e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 412e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 413e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 414e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_sub_s64() { 415e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 416e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int64_t a, b; 417e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SAFE_INT64_MIN; b=1; EXPECT_FALSE(safe_sub(NULL, a, b)); 418e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SAFE_INT64_MIN; b=SAFE_INT64_MAX; EXPECT_FALSE(safe_sub(NULL, a, b)); 419e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SAFE_INT64_MIN/2; b=SAFE_INT64_MAX; EXPECT_FALSE(safe_sub(NULL, a, b)); 420e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=-2; b=SAFE_INT64_MAX; EXPECT_FALSE(safe_sub(NULL, a, b)); 421e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SAFE_INT64_MAX; b=SAFE_INT64_MAX; EXPECT_TRUE(safe_sub(NULL, a, b)); 422e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=2; EXPECT_TRUE(safe_sub(NULL, a, b)); 423e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=2; b=10; EXPECT_TRUE(safe_sub(NULL, a, b)); 424e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 425e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 426e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 427e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_sub_long() { 428e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 429e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project long a, b; 430e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=LONG_MIN; b=1; EXPECT_FALSE(safe_sub(NULL, a, b)); 431e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=LONG_MIN; b=LONG_MAX; EXPECT_FALSE(safe_sub(NULL, a, b)); 432e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=LONG_MIN/2; b=LONG_MAX; EXPECT_FALSE(safe_sub(NULL, a, b)); 433e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=-2; b=LONG_MAX; EXPECT_FALSE(safe_sub(NULL, a, b)); 434e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=LONG_MAX; b=LONG_MAX; EXPECT_TRUE(safe_sub(NULL, a, b)); 435e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=2; EXPECT_TRUE(safe_sub(NULL, a, b)); 436e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=2; b=10; EXPECT_TRUE(safe_sub(NULL, a, b)); 437e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 438e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 439e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 440e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_sub_longlong() { 441e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 442e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project long long a, b; 443e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=LLONG_MIN; b=1; EXPECT_FALSE(safe_sub(NULL, a, b)); 444e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=LLONG_MIN; b=LLONG_MAX; EXPECT_FALSE(safe_sub(NULL, a, b)); 445e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=LLONG_MIN/2; b=LLONG_MAX; EXPECT_FALSE(safe_sub(NULL, a, b)); 446e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=-2; b=LLONG_MAX; EXPECT_FALSE(safe_sub(NULL, a, b)); 447e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=LLONG_MAX; b=LLONG_MAX; EXPECT_TRUE(safe_sub(NULL, a, b)); 448e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=2; EXPECT_TRUE(safe_sub(NULL, a, b)); 449e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=2; b=10; EXPECT_TRUE(safe_sub(NULL, a, b)); 450e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 451e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 452e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 453e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_sub_ssizet() { 454e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 455e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project ssize_t a, b; 456e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SSIZE_MIN; b=1; EXPECT_FALSE(safe_sub(NULL, a, b)); 457e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SSIZE_MIN; b=SSIZE_MAX; EXPECT_FALSE(safe_sub(NULL, a, b)); 458e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SSIZE_MIN/2; b=SSIZE_MAX; EXPECT_FALSE(safe_sub(NULL, a, b)); 459e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=-2; b=SSIZE_MAX; EXPECT_FALSE(safe_sub(NULL, a, b)); 460e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SSIZE_MAX; b=SSIZE_MAX; EXPECT_TRUE(safe_sub(NULL, a, b)); 461e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=2; EXPECT_TRUE(safe_sub(NULL, a, b)); 462e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=2; b=10; EXPECT_TRUE(safe_sub(NULL, a, b)); 463e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 464e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 465e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 466e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_sub_u8() { 467e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 468e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project uint8_t a, b; 469e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=0; b=UCHAR_MAX; EXPECT_FALSE(safe_sub(NULL, a, b)); 470e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=UCHAR_MAX-1; b=UCHAR_MAX; EXPECT_FALSE(safe_sub(NULL, a, b)); 471e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=UCHAR_MAX; b=UCHAR_MAX; EXPECT_TRUE(safe_sub(NULL, a, b)); 472e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=1; b=100; EXPECT_FALSE(safe_sub(NULL, a, b)); 473e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=100; b=0; EXPECT_TRUE(safe_sub(NULL, a, b)); 474e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=2; EXPECT_TRUE(safe_sub(NULL, a, b)); 475e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=0; b=0; EXPECT_TRUE(safe_sub(NULL, a, b)); 476e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 477e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 478e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 479e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_sub_u16() { 480e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 481e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project uint16_t a, b; 482e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=0; b=USHRT_MAX; EXPECT_FALSE(safe_sub(NULL, a, b)); 483e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=USHRT_MAX-1; b=USHRT_MAX; EXPECT_FALSE(safe_sub(NULL, a, b)); 484e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=USHRT_MAX; b=USHRT_MAX; EXPECT_TRUE(safe_sub(NULL, a, b)); 485e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=1; b=100; EXPECT_FALSE(safe_sub(NULL, a, b)); 486e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=100; b=0; EXPECT_TRUE(safe_sub(NULL, a, b)); 487e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=2; EXPECT_TRUE(safe_sub(NULL, a, b)); 488e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=0; b=0; EXPECT_TRUE(safe_sub(NULL, a, b)); 489e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 490e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 491e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 492e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_sub_u32() { 493e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 494e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project uint32_t a, b; 495e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=UINT_MAX-1; b=UINT_MAX; EXPECT_FALSE(safe_sub(NULL, a, b)); 496e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=UINT_MAX; b=UINT_MAX; EXPECT_TRUE(safe_sub(NULL, a, b)); 497e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=1; b=100; EXPECT_FALSE(safe_sub(NULL, a, b)); 498e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=100; b=0; EXPECT_TRUE(safe_sub(NULL, a, b)); 499e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=2; EXPECT_TRUE(safe_sub(NULL, a, b)); 500e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=0; b=0; EXPECT_TRUE(safe_sub(NULL, a, b)); 501e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 502e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 503e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 504e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_sub_u64() { 505e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 506e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project uint64_t a, b; 507e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SAFE_UINT64_MAX-1; b=SAFE_UINT64_MAX; EXPECT_FALSE(safe_sub(NULL, a, b)); 508e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SAFE_UINT64_MAX; b=SAFE_UINT64_MAX; EXPECT_TRUE(safe_sub(NULL, a, b)); 509e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=1; b=100; EXPECT_FALSE(safe_sub(NULL, a, b)); 510e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=100; b=0; EXPECT_TRUE(safe_sub(NULL, a, b)); 511e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=2; EXPECT_TRUE(safe_sub(NULL, a, b)); 512e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=0; b=0; EXPECT_TRUE(safe_sub(NULL, a, b)); 513e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 514e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 515e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 516e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_sub_ulong() { 517e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 518e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project unsigned long a, b; 519e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=ULONG_MAX-1; b=ULONG_MAX; EXPECT_FALSE(safe_sub(NULL, a, b)); 520e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=ULONG_MAX; b=ULONG_MAX; EXPECT_TRUE(safe_sub(NULL, a, b)); 521e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=1; b=100; EXPECT_FALSE(safe_sub(NULL, a, b)); 522e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=100; b=0; EXPECT_TRUE(safe_sub(NULL, a, b)); 523e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=2; EXPECT_TRUE(safe_sub(NULL, a, b)); 524e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=0; b=0; EXPECT_TRUE(safe_sub(NULL, a, b)); 525e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 526e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 527e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 528e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_sub_ulonglong() { 529e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 530e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project unsigned long long a, b; 531e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=ULLONG_MAX-1; b=ULLONG_MAX; EXPECT_FALSE(safe_sub(NULL, a, b)); 532e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=ULLONG_MAX; b=ULLONG_MAX; EXPECT_TRUE(safe_sub(NULL, a, b)); 533e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=1; b=100; EXPECT_FALSE(safe_sub(NULL, a, b)); 534e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=100; b=0; EXPECT_TRUE(safe_sub(NULL, a, b)); 535e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=2; EXPECT_TRUE(safe_sub(NULL, a, b)); 536e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=0; b=0; EXPECT_TRUE(safe_sub(NULL, a, b)); 537e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 538e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 539e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 540e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_sub_sizet() { 541e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 542e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project size_t a, b; 543e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SIZE_MAX-1; b=SIZE_MAX; EXPECT_FALSE(safe_sub(NULL, a, b)); 544e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SIZE_MAX; b=SIZE_MAX; EXPECT_TRUE(safe_sub(NULL, a, b)); 545e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=1; b=100; EXPECT_FALSE(safe_sub(NULL, a, b)); 546e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=100; b=0; EXPECT_TRUE(safe_sub(NULL, a, b)); 547e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=2; EXPECT_TRUE(safe_sub(NULL, a, b)); 548e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=0; b=0; EXPECT_TRUE(safe_sub(NULL, a, b)); 549e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 550e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 551e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 552e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project/***** MUL *****/ 553e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_mul_s8() { 554e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 555e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int8_t a, b; 556e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SCHAR_MIN; b=-1; EXPECT_FALSE(safe_mul(NULL, a, b)); 557e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SCHAR_MIN; b=-2; EXPECT_FALSE(safe_mul(NULL, a, b)); 558e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SCHAR_MAX; b=SCHAR_MAX; EXPECT_FALSE(safe_mul(NULL, a, b)); 559e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SCHAR_MAX/2+1; b=2; EXPECT_FALSE(safe_mul(NULL, a, b)); 560e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SCHAR_MAX/2; b=2; EXPECT_TRUE(safe_mul(NULL, a, b)); 561e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=100; b=0; EXPECT_TRUE(safe_mul(NULL, a, b)); 562e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=2; EXPECT_TRUE(safe_mul(NULL, a, b)); 563e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SCHAR_MAX; b=0; EXPECT_TRUE(safe_mul(NULL, a, b)); 564e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SCHAR_MIN; b=0; EXPECT_TRUE(safe_mul(NULL, a, b)); 565e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=0; b=SCHAR_MAX; EXPECT_TRUE(safe_mul(NULL, a, b)); 566e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=0; b=SCHAR_MIN; EXPECT_TRUE(safe_mul(NULL, a, b)); 567e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=0; b=0; EXPECT_TRUE(safe_mul(NULL, a, b)); 568e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 569e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 570e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 571e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_mul_s16() { 572e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 573e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int16_t a, b; 574e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SHRT_MIN; b=-1; EXPECT_FALSE(safe_mul(NULL, a, b)); 575e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SHRT_MIN; b=-2; EXPECT_FALSE(safe_mul(NULL, a, b)); 576e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SHRT_MAX; b=SHRT_MAX; EXPECT_FALSE(safe_mul(NULL, a, b)); 577e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SHRT_MAX/2+1; b=2; EXPECT_FALSE(safe_mul(NULL, a, b)); 578e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SHRT_MAX/2; b=2; EXPECT_TRUE(safe_mul(NULL, a, b)); 579e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=100; b=0; EXPECT_TRUE(safe_mul(NULL, a, b)); 580e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=2; EXPECT_TRUE(safe_mul(NULL, a, b)); 581e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SHRT_MAX; b=0; EXPECT_TRUE(safe_mul(NULL, a, b)); 582e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SHRT_MIN; b=0; EXPECT_TRUE(safe_mul(NULL, a, b)); 583e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=0; b=SHRT_MAX; EXPECT_TRUE(safe_mul(NULL, a, b)); 584e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=0; b=SHRT_MIN; EXPECT_TRUE(safe_mul(NULL, a, b)); 585e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=0; b=0; EXPECT_TRUE(safe_mul(NULL, a, b)); 586e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 587e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 588e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 589e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_mul_s32() { 590e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 591e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int32_t a, b; 592e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=INT_MIN; b=-1; EXPECT_FALSE(safe_mul(NULL, a, b)); 593e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=INT_MIN; b=-2; EXPECT_FALSE(safe_mul(NULL, a, b)); 594e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=INT_MAX; b=INT_MAX; EXPECT_FALSE(safe_mul(NULL, a, b)); 595e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=INT_MAX/2+1; b=2; EXPECT_FALSE(safe_mul(NULL, a, b)); 596e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=INT_MAX/2; b=2; EXPECT_TRUE(safe_mul(NULL, a, b)); 597e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=100; b=0; EXPECT_TRUE(safe_mul(NULL, a, b)); 598e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=2; EXPECT_TRUE(safe_mul(NULL, a, b)); 599e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=INT_MAX; b=0; EXPECT_TRUE(safe_mul(NULL, a, b)); 600e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=INT_MIN; b=0; EXPECT_TRUE(safe_mul(NULL, a, b)); 601e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=0; b=INT_MAX; EXPECT_TRUE(safe_mul(NULL, a, b)); 602e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=0; b=INT_MIN; EXPECT_TRUE(safe_mul(NULL, a, b)); 603e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=0; b=0; EXPECT_TRUE(safe_mul(NULL, a, b)); 604e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 605e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 606e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 607e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_mul_s64() { 608e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 609e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int64_t a, b; 610e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SAFE_INT64_MIN; b=-1; EXPECT_FALSE(safe_mul(NULL, a, b)); 611e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SAFE_INT64_MIN; b=-2; EXPECT_FALSE(safe_mul(NULL, a, b)); 612e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SAFE_INT64_MAX; b=SAFE_INT64_MAX; EXPECT_FALSE(safe_mul(NULL, a, b)); 613e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SAFE_INT64_MAX/2+1; b=2; EXPECT_FALSE(safe_mul(NULL, a, b)); 614e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SAFE_INT64_MAX/2; b=2; EXPECT_TRUE(safe_mul(NULL, a, b)); 615e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=100; b=0; EXPECT_TRUE(safe_mul(NULL, a, b)); 616e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=2; EXPECT_TRUE(safe_mul(NULL, a, b)); 617e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SAFE_INT64_MAX; b=0; EXPECT_TRUE(safe_mul(NULL, a, b)); 618e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SAFE_INT64_MIN; b=0; EXPECT_TRUE(safe_mul(NULL, a, b)); 619e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=0; b=SAFE_INT64_MAX; EXPECT_TRUE(safe_mul(NULL, a, b)); 620e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=0; b=SAFE_INT64_MIN; EXPECT_TRUE(safe_mul(NULL, a, b)); 621e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=0; b=0; EXPECT_TRUE(safe_mul(NULL, a, b)); 622e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 623e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 624e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 625e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_mul_long() { 626e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 627e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project long a, b; 628e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=LONG_MIN; b=-1; EXPECT_FALSE(safe_mul(NULL, a, b)); 629e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=LONG_MIN; b=-2; EXPECT_FALSE(safe_mul(NULL, a, b)); 630e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=LONG_MAX; b=LONG_MAX; EXPECT_FALSE(safe_mul(NULL, a, b)); 631e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=LONG_MAX/2+1; b=2; EXPECT_FALSE(safe_mul(NULL, a, b)); 632e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=LONG_MAX/2; b=2; EXPECT_TRUE(safe_mul(NULL, a, b)); 633e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=100; b=0; EXPECT_TRUE(safe_mul(NULL, a, b)); 634e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=2; EXPECT_TRUE(safe_mul(NULL, a, b)); 635e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=LONG_MAX; b=0; EXPECT_TRUE(safe_mul(NULL, a, b)); 636e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=LONG_MIN; b=0; EXPECT_TRUE(safe_mul(NULL, a, b)); 637e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=0; b=LONG_MAX; EXPECT_TRUE(safe_mul(NULL, a, b)); 638e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=0; b=LONG_MIN; EXPECT_TRUE(safe_mul(NULL, a, b)); 639e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=0; b=0; EXPECT_TRUE(safe_mul(NULL, a, b)); 640e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 641e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 642e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_mul_longlong() { 643e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 644e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project long long a, b; 645e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=LLONG_MIN; b=-1; EXPECT_FALSE(safe_mul(NULL, a, b)); 646e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=LLONG_MIN; b=-2; EXPECT_FALSE(safe_mul(NULL, a, b)); 647e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=LLONG_MAX; b=LLONG_MAX; EXPECT_FALSE(safe_mul(NULL, a, b)); 648e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=LLONG_MAX/2+1; b=2; EXPECT_FALSE(safe_mul(NULL, a, b)); 649e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=LLONG_MAX/2; b=2; EXPECT_TRUE(safe_mul(NULL, a, b)); 650e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=100; b=0; EXPECT_TRUE(safe_mul(NULL, a, b)); 651e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=2; EXPECT_TRUE(safe_mul(NULL, a, b)); 652e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=LLONG_MAX; b=0; EXPECT_TRUE(safe_mul(NULL, a, b)); 653e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=LLONG_MIN; b=0; EXPECT_TRUE(safe_mul(NULL, a, b)); 654e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=0; b=LLONG_MAX; EXPECT_TRUE(safe_mul(NULL, a, b)); 655e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=0; b=LLONG_MIN; EXPECT_TRUE(safe_mul(NULL, a, b)); 656e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=0; b=0; EXPECT_TRUE(safe_mul(NULL, a, b)); 657e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 658e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 659e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_mul_ssizet() { 660e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 661e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project ssize_t a, b; 662e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SSIZE_MIN; b=-1; EXPECT_FALSE(safe_mul(NULL, a, b)); 663e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SSIZE_MIN; b=-2; EXPECT_FALSE(safe_mul(NULL, a, b)); 664e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SSIZE_MAX; b=SSIZE_MAX; EXPECT_FALSE(safe_mul(NULL, a, b)); 665e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SSIZE_MAX/2+1; b=2; EXPECT_FALSE(safe_mul(NULL, a, b)); 666e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SSIZE_MAX/2; b=2; EXPECT_TRUE(safe_mul(NULL, a, b)); 667e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=100; b=0; EXPECT_TRUE(safe_mul(NULL, a, b)); 668e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=2; EXPECT_TRUE(safe_mul(NULL, a, b)); 669e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SSIZE_MAX; b=0; EXPECT_TRUE(safe_mul(NULL, a, b)); 670e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SSIZE_MIN; b=0; EXPECT_TRUE(safe_mul(NULL, a, b)); 671e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=0; b=SSIZE_MAX; EXPECT_TRUE(safe_mul(NULL, a, b)); 672e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=0; b=SSIZE_MIN; EXPECT_TRUE(safe_mul(NULL, a, b)); 673e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=0; b=0; EXPECT_TRUE(safe_mul(NULL, a, b)); 674e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 675e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 676e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 677e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_mul_u8() { 678e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 679e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project uint8_t a, b; 680e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=UCHAR_MAX-1; b=2; EXPECT_FALSE(safe_mul(NULL, a, b)); 681e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=2; b=UCHAR_MAX-1; EXPECT_FALSE(safe_mul(NULL, a, b)); 682e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=UCHAR_MAX; b=2; EXPECT_FALSE(safe_mul(NULL, a, b)); 683e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=2; b=UCHAR_MAX; EXPECT_FALSE(safe_mul(NULL, a, b)); 684e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=UCHAR_MAX/2+1; b=2; EXPECT_FALSE(safe_mul(NULL, a, b)); 685e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=2; b=UCHAR_MAX/2+1; EXPECT_FALSE(safe_mul(NULL, a, b)); 686e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=UCHAR_MAX/2; b=2; EXPECT_TRUE(safe_mul(NULL, a, b)); 687e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=0; b=UCHAR_MAX; EXPECT_TRUE(safe_mul(NULL, a, b)); 688e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=1; b=UCHAR_MAX; EXPECT_TRUE(safe_mul(NULL, a, b)); 689e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=UCHAR_MAX; b=0; EXPECT_TRUE(safe_mul(NULL, a, b)); 690e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=UCHAR_MAX; b=1; EXPECT_TRUE(safe_mul(NULL, a, b)); 691e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=2; EXPECT_TRUE(safe_mul(NULL, a, b)); 692e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 693e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 694e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 695e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_mul_u16() { 696e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 697e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project uint16_t a, b; 698e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=USHRT_MAX-1; b=2; EXPECT_FALSE(safe_mul(NULL, a, b)); 699e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=2; b=USHRT_MAX-1; EXPECT_FALSE(safe_mul(NULL, a, b)); 700e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=USHRT_MAX; b=2; EXPECT_FALSE(safe_mul(NULL, a, b)); 701e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=2; b=USHRT_MAX; EXPECT_FALSE(safe_mul(NULL, a, b)); 702e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=USHRT_MAX/2+1; b=2; EXPECT_FALSE(safe_mul(NULL, a, b)); 703e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=2; b=USHRT_MAX/2+1; EXPECT_FALSE(safe_mul(NULL, a, b)); 704e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=USHRT_MAX/2; b=2; EXPECT_TRUE(safe_mul(NULL, a, b)); 705e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=0; b=USHRT_MAX; EXPECT_TRUE(safe_mul(NULL, a, b)); 706e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=1; b=USHRT_MAX; EXPECT_TRUE(safe_mul(NULL, a, b)); 707e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=USHRT_MAX; b=0; EXPECT_TRUE(safe_mul(NULL, a, b)); 708e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=USHRT_MAX; b=1; EXPECT_TRUE(safe_mul(NULL, a, b)); 709e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=2; EXPECT_TRUE(safe_mul(NULL, a, b)); 710e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 711e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 712e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 713e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_mul_u32() { 714e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 715e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project uint32_t a, b; 716e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=UINT_MAX-1; b=2; EXPECT_FALSE(safe_mul(NULL, a, b)); 717e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=2; b=UINT_MAX-1; EXPECT_FALSE(safe_mul(NULL, a, b)); 718e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=UINT_MAX; b=2; EXPECT_FALSE(safe_mul(NULL, a, b)); 719e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=2; b=UINT_MAX; EXPECT_FALSE(safe_mul(NULL, a, b)); 720e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=UINT_MAX/2+1; b=2; EXPECT_FALSE(safe_mul(NULL, a, b)); 721e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=2; b=UINT_MAX/2+1; EXPECT_FALSE(safe_mul(NULL, a, b)); 722e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=UINT_MAX/2; b=2; EXPECT_TRUE(safe_mul(NULL, a, b)); 723e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=0; b=UINT_MAX; EXPECT_TRUE(safe_mul(NULL, a, b)); 724e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=1; b=UINT_MAX; EXPECT_TRUE(safe_mul(NULL, a, b)); 725e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=UINT_MAX; b=0; EXPECT_TRUE(safe_mul(NULL, a, b)); 726e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=UINT_MAX; b=1; EXPECT_TRUE(safe_mul(NULL, a, b)); 727e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=2; EXPECT_TRUE(safe_mul(NULL, a, b)); 728e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 729e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 730e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 731e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_mul_u64() { 732e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 733e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project uint64_t a, b; 734e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SAFE_UINT64_MAX-1; b=2; EXPECT_FALSE(safe_mul(NULL, a, b)); 735e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=2; b=SAFE_UINT64_MAX-1; EXPECT_FALSE(safe_mul(NULL, a, b)); 736e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SAFE_UINT64_MAX; b=2; EXPECT_FALSE(safe_mul(NULL, a, b)); 737e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=2; b=SAFE_UINT64_MAX; EXPECT_FALSE(safe_mul(NULL, a, b)); 738e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SAFE_UINT64_MAX/2+1; b=2; EXPECT_FALSE(safe_mul(NULL, a, b)); 739e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=2; b=SAFE_UINT64_MAX/2+1; EXPECT_FALSE(safe_mul(NULL, a, b)); 740e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SAFE_UINT64_MAX/2; b=2; EXPECT_TRUE(safe_mul(NULL, a, b)); 741e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=0; b=SAFE_UINT64_MAX; EXPECT_TRUE(safe_mul(NULL, a, b)); 742e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=1; b=SAFE_UINT64_MAX; EXPECT_TRUE(safe_mul(NULL, a, b)); 743e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SAFE_UINT64_MAX; b=0; EXPECT_TRUE(safe_mul(NULL, a, b)); 744e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SAFE_UINT64_MAX; b=1; EXPECT_TRUE(safe_mul(NULL, a, b)); 745e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=2; EXPECT_TRUE(safe_mul(NULL, a, b)); 746e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 747e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 748e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 749e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_mul_ulong() { 750e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 751e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project unsigned long a, b; 752e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=ULONG_MAX-1; b=2; EXPECT_FALSE(safe_mul(NULL, a, b)); 753e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=2; b=ULONG_MAX-1; EXPECT_FALSE(safe_mul(NULL, a, b)); 754e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=ULONG_MAX; b=2; EXPECT_FALSE(safe_mul(NULL, a, b)); 755e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=2; b=ULONG_MAX; EXPECT_FALSE(safe_mul(NULL, a, b)); 756e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=ULONG_MAX/2+1; b=2; EXPECT_FALSE(safe_mul(NULL, a, b)); 757e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=2; b=ULONG_MAX/2+1; EXPECT_FALSE(safe_mul(NULL, a, b)); 758e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=ULONG_MAX/2; b=2; EXPECT_TRUE(safe_mul(NULL, a, b)); 759e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=0; b=ULONG_MAX; EXPECT_TRUE(safe_mul(NULL, a, b)); 760e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=1; b=ULONG_MAX; EXPECT_TRUE(safe_mul(NULL, a, b)); 761e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=ULONG_MAX; b=0; EXPECT_TRUE(safe_mul(NULL, a, b)); 762e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=ULONG_MAX; b=1; EXPECT_TRUE(safe_mul(NULL, a, b)); 763e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=2; EXPECT_TRUE(safe_mul(NULL, a, b)); 764e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 765e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 766e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 767e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_mul_ulonglong() { 768e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 769e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project unsigned long long a, b; 770e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=ULLONG_MAX-1; b=2; EXPECT_FALSE(safe_mul(NULL, a, b)); 771e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=2; b=ULLONG_MAX-1; EXPECT_FALSE(safe_mul(NULL, a, b)); 772e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=ULLONG_MAX; b=2; EXPECT_FALSE(safe_mul(NULL, a, b)); 773e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=2; b=ULLONG_MAX; EXPECT_FALSE(safe_mul(NULL, a, b)); 774e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=ULLONG_MAX/2+1; b=2; EXPECT_FALSE(safe_mul(NULL, a, b)); 775e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=2; b=ULLONG_MAX/2+1; EXPECT_FALSE(safe_mul(NULL, a, b)); 776e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=ULLONG_MAX/2; b=2; EXPECT_TRUE(safe_mul(NULL, a, b)); 777e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=0; b=ULLONG_MAX; EXPECT_TRUE(safe_mul(NULL, a, b)); 778e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=1; b=ULLONG_MAX; EXPECT_TRUE(safe_mul(NULL, a, b)); 779e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=ULLONG_MAX; b=0; EXPECT_TRUE(safe_mul(NULL, a, b)); 780e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=ULLONG_MAX; b=1; EXPECT_TRUE(safe_mul(NULL, a, b)); 781e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=2; EXPECT_TRUE(safe_mul(NULL, a, b)); 782e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 783e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 784e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 785e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_mul_sizet() { 786e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 787e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project size_t a, b; 788e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SIZE_MAX-1; b=2; EXPECT_FALSE(safe_mul(NULL, a, b)); 789e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=2; b=SIZE_MAX-1; EXPECT_FALSE(safe_mul(NULL, a, b)); 790e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SIZE_MAX; b=2; EXPECT_FALSE(safe_mul(NULL, a, b)); 791e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=2; b=SIZE_MAX; EXPECT_FALSE(safe_mul(NULL, a, b)); 792e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SIZE_MAX/2+1; b=2; EXPECT_FALSE(safe_mul(NULL, a, b)); 793e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=2; b=SIZE_MAX/2+1; EXPECT_FALSE(safe_mul(NULL, a, b)); 794e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SIZE_MAX/2; b=2; EXPECT_TRUE(safe_mul(NULL, a, b)); 795e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=0; b=SIZE_MAX; EXPECT_TRUE(safe_mul(NULL, a, b)); 796e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=1; b=SIZE_MAX; EXPECT_TRUE(safe_mul(NULL, a, b)); 797e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SIZE_MAX; b=0; EXPECT_TRUE(safe_mul(NULL, a, b)); 798e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SIZE_MAX; b=1; EXPECT_TRUE(safe_mul(NULL, a, b)); 799e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=2; EXPECT_TRUE(safe_mul(NULL, a, b)); 800e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 801e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 802e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 803e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project/***** MOD *****/ 804e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_mod_s8() { 805e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 806e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int8_t a, b; 807e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SCHAR_MIN; b=-1; EXPECT_FALSE(safe_mod(NULL, a, b)); 808e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=100; b=0; EXPECT_FALSE(safe_mod(NULL, a, b)); 809e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=2; EXPECT_TRUE(safe_mod(NULL, a, b)); 810e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 811e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 812e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 813e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_mod_s16() { 814e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 815e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int16_t a, b; 816e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SHRT_MIN; b=-1; EXPECT_FALSE(safe_mod(NULL, a, b)); 817e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=100; b=0; EXPECT_FALSE(safe_mod(NULL, a, b)); 818e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=2; EXPECT_TRUE(safe_mod(NULL, a, b)); 819e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 820e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 821e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 822e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_mod_s32() { 823e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 824e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int32_t a, b; 825e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=INT_MIN; b=-1; EXPECT_FALSE(safe_mod(NULL, a, b)); 826e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=100; b=0; EXPECT_FALSE(safe_mod(NULL, a, b)); 827e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=2; EXPECT_TRUE(safe_mod(NULL, a, b)); 828e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 829e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 830e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 831e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_mod_s64() { 832e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 833e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int64_t a, b; 834e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SAFE_INT64_MIN; b=-1; EXPECT_FALSE(safe_mod(NULL, a, b)); 835e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=100; b=0; EXPECT_FALSE(safe_mod(NULL, a, b)); 836e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=2; EXPECT_TRUE(safe_mod(NULL, a, b)); 837e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 838e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 839e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 840e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_mod_long() { 841e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 842e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project long a, b; 843e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=LONG_MIN; b=-1; EXPECT_FALSE(safe_mod(NULL, a, b)); 844e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=100; b=0; EXPECT_FALSE(safe_mod(NULL, a, b)); 845e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=2; EXPECT_TRUE(safe_mod(NULL, a, b)); 846e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 847e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 848e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_mod_longlong() { 849e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 850e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project long long a, b; 851e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=LLONG_MIN; b=-1LL; EXPECT_FALSE(safe_mod(NULL, a, b)); 852e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=100LL; b=0LL; EXPECT_FALSE(safe_mod(NULL, a, b)); 853e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10LL; b=2LL; EXPECT_TRUE(safe_mod(NULL, a, b)); 854e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 855e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 856e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_mod_ssizet() { 857e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 858e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project ssize_t a, b; 859e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SSIZE_MIN; b=-1; EXPECT_FALSE(safe_mod(NULL, a, b)); 860e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=100; b=0; EXPECT_FALSE(safe_mod(NULL, a, b)); 861e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=2; EXPECT_TRUE(safe_mod(NULL, a, b)); 862e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 863e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 864e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 865e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_mod_u8() { 866e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 867e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project uint8_t a, b; 868e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=0; b=UCHAR_MAX; EXPECT_TRUE(safe_mod(NULL, a, b)); 869e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=100; b=0; EXPECT_FALSE(safe_mod(NULL, a, b)); 870e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=2; EXPECT_TRUE(safe_mod(NULL, a, b)); 871e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 872e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 873e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 874e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_mod_u16() { 875e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 876e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project uint16_t a, b; 877e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=0; b=USHRT_MAX; EXPECT_TRUE(safe_mod(NULL, a, b)); 878e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=100; b=0; EXPECT_FALSE(safe_mod(NULL, a, b)); 879e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=2; EXPECT_TRUE(safe_mod(NULL, a, b)); 880e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 881e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 882e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 883e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_mod_u32() { 884e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 885e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project uint32_t a, b; 886e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=0; b=UINT_MAX; EXPECT_TRUE(safe_mod(NULL, a, b)); 887e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=100; b=0; EXPECT_FALSE(safe_mod(NULL, a, b)); 888e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=2; EXPECT_TRUE(safe_mod(NULL, a, b)); 889e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 890e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 891e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 892e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_mod_u64() { 893e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 894e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project uint64_t a, b; 895e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=0; b=SAFE_INT64_MAX; EXPECT_TRUE(safe_mod(NULL, a, b)); 896e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=100; b=0; EXPECT_FALSE(safe_mod(NULL, a, b)); 897e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=2; EXPECT_TRUE(safe_mod(NULL, a, b)); 898e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 899e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 900e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 901e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_mod_ulong() { 902e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 903e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project unsigned long a, b; 904e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=0; b=LONG_MAX; EXPECT_TRUE(safe_mod(NULL, a, b)); 905e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=100; b=0; EXPECT_FALSE(safe_mod(NULL, a, b)); 906e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=2; EXPECT_TRUE(safe_mod(NULL, a, b)); 907e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 908e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 909e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 910e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_mod_ulonglong() { 911e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 912e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project unsigned long long a, b; 913e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=0ULL; b=~0ULL; EXPECT_TRUE(safe_mod(NULL, a, b)); 914e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=100ULL; b=0ULL; EXPECT_FALSE(safe_mod(NULL, a, b)); 915e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10ULL; b=2ULL; EXPECT_TRUE(safe_mod(NULL, a, b)); 916e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 917e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 918e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 919e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_mod_sizet() { 920e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 921e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project size_t a, b; 922e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=0; b=SIZE_MAX; EXPECT_TRUE(safe_mod(NULL, a, b)); 923e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=100; b=0; EXPECT_FALSE(safe_mod(NULL, a, b)); 924e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=2; EXPECT_TRUE(safe_mod(NULL, a, b)); 925e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 926e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 927e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 928e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project/***** DIV *****/ 929e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_div_s8() { 930e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 931e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int8_t a, b; 932e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SCHAR_MIN; b=-1; EXPECT_FALSE(safe_div(NULL, a, b)); 933e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=100; b=0; EXPECT_FALSE(safe_div(NULL, a, b)); 934e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=2; EXPECT_TRUE(safe_div(NULL, a, b)); 935e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 936e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 937e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 938e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_div_s16() { 939e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 940e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int16_t a, b; 941e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SHRT_MIN; b=-1; EXPECT_FALSE(safe_div(NULL, a, b)); 942e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=100; b=0; EXPECT_FALSE(safe_div(NULL, a, b)); 943e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=2; EXPECT_TRUE(safe_div(NULL, a, b)); 944e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 945e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 946e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 947e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_div_s32() { 948e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 949e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int32_t a, b; 950e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=INT_MIN; b=-1; EXPECT_FALSE(safe_div(NULL, a, b)); 951e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=100; b=0; EXPECT_FALSE(safe_div(NULL, a, b)); 952e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=2; EXPECT_TRUE(safe_div(NULL, a, b)); 953e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 954e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 955e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 956e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_div_s64() { 957e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 958e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int64_t a, b; 959e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SAFE_INT64_MIN; b=-1; EXPECT_FALSE(safe_div(NULL, a, b)); 960e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=100; b=0; EXPECT_FALSE(safe_div(NULL, a, b)); 961e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=2; EXPECT_TRUE(safe_div(NULL, a, b)); 962e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 963e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 964e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 965e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_div_long() { 966e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 967e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project long a, b; 968e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=LONG_MIN; b=-1; EXPECT_FALSE(safe_div(NULL, a, b)); 969e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=100; b=0; EXPECT_FALSE(safe_div(NULL, a, b)); 970e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=2; EXPECT_TRUE(safe_div(NULL, a, b)); 971e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 972e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 973e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_div_longlong() { 974e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 975e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project long long a, b; 976e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=LLONG_MIN; b=-1LL; EXPECT_FALSE(safe_div(NULL, a, b)); 977e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=100LL; b=0LL; EXPECT_FALSE(safe_div(NULL, a, b)); 978e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10LL; b=2LL; EXPECT_TRUE(safe_div(NULL, a, b)); 979e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 980e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 981e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_div_ssizet() { 982e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 983e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project ssize_t a, b; 984e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=SSIZE_MIN; b=-1; EXPECT_FALSE(safe_div(NULL, a, b)); 985e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=100; b=0; EXPECT_FALSE(safe_div(NULL, a, b)); 986e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=2; EXPECT_TRUE(safe_div(NULL, a, b)); 987e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 988e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 989e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 990e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_div_u8() { 991e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 992e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project uint8_t a, b; 993e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=0; b=UCHAR_MAX; EXPECT_TRUE(safe_div(NULL, a, b)); 994e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=100; b=0; EXPECT_FALSE(safe_div(NULL, a, b)); 995e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=2; EXPECT_TRUE(safe_div(NULL, a, b)); 996e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 997e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 998e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 999e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_div_u16() { 1000e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 1001e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project uint16_t a, b; 1002e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=0; b=USHRT_MAX; EXPECT_TRUE(safe_div(NULL, a, b)); 1003e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=100; b=0; EXPECT_FALSE(safe_div(NULL, a, b)); 1004e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=2; EXPECT_TRUE(safe_div(NULL, a, b)); 1005e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 1006e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 1007e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 1008e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_div_u32() { 1009e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 1010e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project uint32_t a, b; 1011e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=0; b=UINT_MAX; EXPECT_TRUE(safe_div(NULL, a, b)); 1012e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=100; b=0; EXPECT_FALSE(safe_div(NULL, a, b)); 1013e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=2; EXPECT_TRUE(safe_div(NULL, a, b)); 1014e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 1015e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 1016e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 1017e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_div_u64() { 1018e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 1019e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project uint64_t a, b; 1020e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=0; b=SAFE_INT64_MAX; EXPECT_TRUE(safe_div(NULL, a, b)); 1021e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=100; b=0; EXPECT_FALSE(safe_div(NULL, a, b)); 1022e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=2; EXPECT_TRUE(safe_div(NULL, a, b)); 1023e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 1024e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 1025e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 1026e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_div_ulong() { 1027e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 1028e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project unsigned long a, b; 1029e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=0; b=LONG_MAX; EXPECT_TRUE(safe_div(NULL, a, b)); 1030e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=100; b=0; EXPECT_FALSE(safe_div(NULL, a, b)); 1031e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=2; EXPECT_TRUE(safe_div(NULL, a, b)); 1032e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 1033e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 1034e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 1035e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_div_ulonglong() { 1036e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 1037e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project unsigned long long a, b; 1038e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=0ULL; b=~0ULL; EXPECT_TRUE(safe_div(NULL, a, b)); 1039e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=100ULL; b=0ULL; EXPECT_FALSE(safe_div(NULL, a, b)); 1040e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10ULL; b=2ULL; EXPECT_TRUE(safe_div(NULL, a, b)); 1041e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 1042e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 1043e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 1044e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_div_sizet() { 1045e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 1046e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project size_t a, b; 1047e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=0; b=SIZE_MAX; EXPECT_TRUE(safe_div(NULL, a, b)); 1048e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=100; b=0; EXPECT_FALSE(safe_div(NULL, a, b)); 1049e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project a=10; b=2; EXPECT_TRUE(safe_div(NULL, a, b)); 1050e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 1051e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 1052e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 1053e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint T_magic_constants() { 1054e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int r=1; 1055e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project EXPECT_TRUE(__sio(m)(smin)(((int8_t)0)) == SCHAR_MIN); 1056e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project EXPECT_TRUE(__sio(m)(smax)(((int8_t)0)) == SCHAR_MAX); 1057e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project EXPECT_TRUE(__sio(m)(umax)(((uint8_t)0)) == UCHAR_MAX); 1058e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 1059e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project EXPECT_TRUE(__sio(m)(smin)(((int16_t)0)) == SHRT_MIN); 1060e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project EXPECT_TRUE(__sio(m)(smax)(((int16_t)0)) == SHRT_MAX); 1061e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project EXPECT_TRUE(__sio(m)(umax)(((uint16_t)0)) == USHRT_MAX); 1062e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 1063e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project EXPECT_TRUE(__sio(m)(smin)(((int32_t)0)) == INT_MIN); 1064e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project EXPECT_TRUE(__sio(m)(smax)(((int32_t)0)) == INT_MAX); 1065e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project EXPECT_TRUE(__sio(m)(umax)(((uint32_t)0)) == UINT_MAX); 1066e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 1067e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project EXPECT_TRUE(__sio(m)(smin)(((int64_t)0)) == SAFE_INT64_MIN); 1068e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project EXPECT_TRUE(__sio(m)(smax)(((int64_t)0)) == SAFE_INT64_MAX); 1069e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project EXPECT_TRUE(__sio(m)(umax)(((uint64_t)0)) == SAFE_UINT64_MAX); 1070e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 1071e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project EXPECT_TRUE(__sio(m)(smin)(((ssize_t)0)) == SSIZE_MIN); 1072e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project EXPECT_TRUE(__sio(m)(smax)(((ssize_t)0)) == SSIZE_MAX); 1073e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project EXPECT_TRUE(__sio(m)(umax)(((size_t)0)) == SIZE_MAX); 1074e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 1075e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project EXPECT_TRUE(__sio(m)(smin)(((long)0)) == LONG_MIN); 1076e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project EXPECT_TRUE(__sio(m)(smax)(((long)0)) == LONG_MAX); 1077e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project EXPECT_TRUE(__sio(m)(umax)(((unsigned long)0)) == ULONG_MAX); 1078e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 1079e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project EXPECT_TRUE(__sio(m)(smin)(((long long)0)) == LLONG_MIN); 1080e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project EXPECT_TRUE(__sio(m)(smax)(((long long)0)) == LLONG_MAX); 1081e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project EXPECT_TRUE(__sio(m)(umax)(((unsigned long long)0)) == ULLONG_MAX); 1082e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 1083e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return r; 1084e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 1085e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 1086e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 1087e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 1088e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 1089e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Projectint main(int argc, char **argv) { 1090e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project /* test inlines */ 1091e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project int tests = 0, succ = 0, fail = 0; 1092e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_div_s8()) succ++; else fail++; 1093e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_div_s16()) succ++; else fail++; 1094e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_div_s32()) succ++; else fail++; 1095e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_div_s64()) succ++; else fail++; 1096e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_div_long()) succ++; else fail++; 1097e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_div_longlong()) succ++; else fail++; 1098e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_div_ssizet()) succ++; else fail++; 1099e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_div_u8()) succ++; else fail++; 1100e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_div_u16()) succ++; else fail++; 1101e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_div_u32()) succ++; else fail++; 1102e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_div_u64()) succ++; else fail++; 1103e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_div_ulong()) succ++; else fail++; 1104e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_div_ulonglong()) succ++; else fail++; 1105e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_div_sizet()) succ++; else fail++; 1106e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 1107e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_mod_s8()) succ++; else fail++; 1108e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_mod_s16()) succ++; else fail++; 1109e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_mod_s32()) succ++; else fail++; 1110e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_mod_s64()) succ++; else fail++; 1111e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_mod_long()) succ++; else fail++; 1112e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_mod_longlong()) succ++; else fail++; 1113e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_mod_ssizet()) succ++; else fail++; 1114e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_mod_u8()) succ++; else fail++; 1115e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_mod_u16()) succ++; else fail++; 1116e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_mod_u32()) succ++; else fail++; 1117e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_mod_u64()) succ++; else fail++; 1118e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_mod_ulong()) succ++; else fail++; 1119e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_mod_ulonglong()) succ++; else fail++; 1120e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_mod_sizet()) succ++; else fail++; 1121e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 1122e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_mul_s8()) succ++; else fail++; 1123e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_mul_s16()) succ++; else fail++; 1124e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_mul_s32()) succ++; else fail++; 1125e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_mul_s64()) succ++; else fail++; 1126e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_mul_long()) succ++; else fail++; 1127e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_mul_longlong()) succ++; else fail++; 1128e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_mul_ssizet()) succ++; else fail++; 1129e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_mul_u8()) succ++; else fail++; 1130e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_mul_u16()) succ++; else fail++; 1131e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_mul_u32()) succ++; else fail++; 1132e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_mul_u64()) succ++; else fail++; 1133e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_mul_ulong()) succ++; else fail++; 1134e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_mul_ulonglong()) succ++; else fail++; 1135e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_mul_sizet()) succ++; else fail++; 1136e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 1137e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_sub_s8()) succ++; else fail++; 1138e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_sub_s16()) succ++; else fail++; 1139e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_sub_s32()) succ++; else fail++; 1140e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_sub_s64()) succ++; else fail++; 1141e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_sub_long()) succ++; else fail++; 1142e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_sub_longlong()) succ++; else fail++; 1143e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_sub_ssizet()) succ++; else fail++; 1144e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_sub_u8()) succ++; else fail++; 1145e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_sub_u16()) succ++; else fail++; 1146e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_sub_u32()) succ++; else fail++; 1147e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_sub_u64()) succ++; else fail++; 1148e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_sub_ulong()) succ++; else fail++; 1149e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_sub_ulonglong()) succ++; else fail++; 1150e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_sub_sizet()) succ++; else fail++; 1151e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 1152e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_add_s8()) succ++; else fail++; 1153e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_add_s16()) succ++; else fail++; 1154e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_add_s32()) succ++; else fail++; 1155e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_add_s64()) succ++; else fail++; 1156e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_add_long()) succ++; else fail++; 1157e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_add_longlong()) succ++; else fail++; 1158e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_add_ssizet()) succ++; else fail++; 1159e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_add_u8()) succ++; else fail++; 1160e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_add_u16()) succ++; else fail++; 1161e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_add_u32()) succ++; else fail++; 1162e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_add_u64()) succ++; else fail++; 1163e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_add_ulong()) succ++; else fail++; 1164e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_add_ulonglong()) succ++; else fail++; 1165e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_add_sizet()) succ++; else fail++; 1166e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_add_mixed()) succ++; else fail++; 1167e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_add_increment()) succ++; else fail++; 1168e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 1169e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project tests++; if (T_magic_constants()) succ++; else fail++; 1170e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project 1171e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project printf("%d/%d expects succeeded (%d failures)\n", 1172e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project expect_succ, expect, expect_fail); 1173e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project printf("%d/%d tests succeeded (%d failures)\n", succ, tests, fail); 1174e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project /* TODO: Add tests for safe_iopf when upgraded */ 1175e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project return fail; 1176e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project} 1177e154e426f1ace6ae8fa613fb3f7323e1731536deThe Android Open Source Project#endif 1178