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