]> git.saurik.com Git - apple/icu.git/blobdiff - icuSources/test/cintltst/putiltst.c
ICU-62141.0.1.tar.gz
[apple/icu.git] / icuSources / test / cintltst / putiltst.c
index 8d18f6cf56209cda9b5f494f70966de26f1cdf71..1c3e0730410dcccc9ffed5e3efc91bb48a8cb674 100644 (file)
@@ -1,6 +1,8 @@
+// © 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
 /********************************************************************
  * COPYRIGHT: 
- * Copyright (c) 1998-2011, International Business Machines Corporation and
+ * Copyright (c) 1998-2016, International Business Machines Corporation and
  * others. All Rights Reserved.
  ********************************************************************/
 /*
@@ -26,7 +28,7 @@
 #include <stdio.h>
 
 /* See the comments on U_SIGNED_RIGHT_SHIFT_IS_ARITHMETIC. */
-static void TestSignedRightShiftIsArithmetic() {
+static void TestSignedRightShiftIsArithmetic(void) {
     int32_t x=0xfff5fff3;
     int32_t m=-1;
     int32_t x4=x>>4;
@@ -126,6 +128,20 @@ static void TestPUtilAPI(void){
         log_err("ERROR: uprv_isInfinite failed.\n");
     }
 
+    log_verbose("Testing the APIs uprv_add32_overflow and uprv_mul32_overflow\n");
+    int32_t overflow_result;
+    doAssert(FALSE, uprv_add32_overflow(INT32_MAX - 2, 1, &overflow_result), "should not overflow");
+    doAssert(INT32_MAX - 1, overflow_result, "should equal INT32_MAX - 1");
+    doAssert(FALSE, uprv_add32_overflow(INT32_MAX - 2, 2, &overflow_result), "should not overflow");
+    doAssert(INT32_MAX, overflow_result, "should equal exactly INT32_MAX");
+    doAssert(TRUE, uprv_add32_overflow(INT32_MAX - 2, 3, &overflow_result), "should overflow");
+    doAssert(FALSE, uprv_mul32_overflow(INT32_MAX / 5, 4, &overflow_result), "should not overflow");
+    doAssert(INT32_MAX / 5 * 4, overflow_result, "should equal INT32_MAX / 5 * 4");
+    doAssert(TRUE, uprv_mul32_overflow(INT32_MAX / 5, 6, &overflow_result), "should overflow");
+    // Test on negative numbers:
+    doAssert(FALSE, uprv_add32_overflow(-3, -2, &overflow_result), "should not overflow");
+    doAssert(-5, overflow_result, "should equal -5");
+
 #if 0
     log_verbose("Testing the API uprv_digitsAfterDecimal()....\n");
     doAssert(uprv_digitsAfterDecimal(value1), 3, "uprv_digitsAfterDecimal() failed.");
@@ -565,7 +581,7 @@ static void toolutil_findBasename(void)
       ""
     },
   };
-  int32_t count=(sizeof(testCases)/sizeof(testCases[0]));
+  int32_t count=UPRV_LENGTHOF(testCases);
   int32_t i;
 
 
@@ -661,7 +677,7 @@ static void toolutil_findDirname(void)
       ""
     }
   };
-  int32_t count=(sizeof(testCases)/sizeof(testCases[0]));
+  int32_t count=UPRV_LENGTHOF(testCases);
 
   log_verbose("Testing findDirname()\n");
   for(i=0;i<count;i++) {