1 unsigned sat_add(unsigned i)2sat_add (unsigned i) 3 { 4 unsigned ret = i + 1; 5 if (ret < i) 6 ret = i; 7 return ret; 8 } 9 10 unsigned sat_add2(unsigned i)11sat_add2 (unsigned i) 12 { 13 unsigned ret = i + 1; 14 if (ret > i) 15 return ret; 16 return i; 17 } 18 19 unsigned sat_add3(unsigned i)20sat_add3 (unsigned i) 21 { 22 unsigned ret = i - 1; 23 if (ret > i) 24 ret = i; 25 return ret; 26 } 27 28 unsigned sat_add4(unsigned i)29sat_add4 (unsigned i) 30 { 31 unsigned ret = i - 1; 32 if (ret < i) 33 return ret; 34 return i; 35 } main()36main () 37 { 38 if (sat_add (~0U) != ~0U) 39 abort (); 40 if (sat_add2 (~0U) != ~0U) 41 abort (); 42 if (sat_add3 (0U) != 0U) 43 abort (); 44 if (sat_add4 (0U) != 0U) 45 abort (); 46 exit (0); 47 } 48