| /* { dg-do run } */ |
| /* { dg-options -O2 } */ |
| |
| extern void abort (void); |
| |
| foo_div (int i, int j) |
| { |
| int k; |
| |
| /* [-INF, -1] / [1, +INF] should not give [-1, -1]. */ |
| if (i <= -1) |
| if (j >= 1) |
| { |
| k = i / j; |
| if (k == -1) |
| abort (); |
| |
| return k; |
| } |
| |
| /* [-20, -10] / [2, 10] should give [-10, -1]. */ |
| if (i >= -20) |
| if (i <= -10) |
| if (j >= 2) |
| if (j <= 10) |
| { |
| k = i / j; |
| if (k < -10) |
| link_error (); |
| if (k > -1) |
| link_error (); |
| |
| return k; |
| } |
| |
| /* [-20, -10] / [-10, -2] should give [1, 10]. */ |
| if (i >= -20) |
| if (i <= -10) |
| if (j >= -10) |
| if (j <= -2) |
| { |
| k = i / j; |
| if (k < 1) |
| link_error (); |
| if (k > 10) |
| link_error (); |
| |
| return k; |
| } |
| |
| /* [-20, 10] / [2, 10] should give [-10, 5]. */ |
| if (i >= -20) |
| if (i <= 10) |
| if (j >= 2) |
| if (j <= 10) |
| { |
| k = i / j; |
| if (k < -10) |
| link_error (); |
| if (k > 5) |
| link_error (); |
| |
| return k; |
| } |
| |
| /* [-20, 10] / [-10, -2] should give [-5, 10]. */ |
| if (i >= -20) |
| if (i <= 10) |
| if (j >= -10) |
| if (j <= -2) |
| { |
| k = i / j; |
| if (k < -5) |
| link_error (); |
| if (k > 10) |
| link_error (); |
| |
| return k; |
| } |
| |
| /* [10, 20] / [2, 10] should give [1, 10]. */ |
| if (i >= 10) |
| if (i <= 20) |
| if (j >= 2) |
| if (j <= 10) |
| { |
| k = i / j; |
| if (k < 1) |
| link_error (); |
| if (k > 10) |
| link_error (); |
| |
| return k; |
| } |
| |
| /* [10, 20] / [-10, -2] should give [-10, -1]. */ |
| if (i >= 10) |
| if (i <= 20) |
| if (j >= -10) |
| if (j <= -2) |
| { |
| k = i / j; |
| if (k > -1) |
| link_error (); |
| if (k < -10) |
| link_error (); |
| |
| return k; |
| } |
| |
| abort (); |
| } |
| |
| |
| foo_mult (int i, int j) |
| { |
| int k; |
| |
| /* [-20, -10] * [2, 10] should give [-200, -20]. */ |
| if (i >= -20) |
| if (i <= -10) |
| if (j >= 2) |
| if (j <= 10) |
| { |
| k = i * j; |
| if (k < -200) |
| link_error (); |
| if (k > -20) |
| link_error (); |
| |
| return k; |
| } |
| |
| /* [-20, -10] * [-10, -2] should give [20, 200]. */ |
| if (i >= -20) |
| if (i <= -10) |
| if (j >= -10) |
| if (j <= -2) |
| { |
| k = i * j; |
| if (k < 20) |
| link_error (); |
| if (k > 200) |
| link_error (); |
| |
| return k; |
| } |
| |
| /* [-20, 10] * [2, 10] should give [-200, 100]. */ |
| if (i >= -20) |
| if (i <= 10) |
| if (j >= 2) |
| if (j <= 10) |
| { |
| k = i * j; |
| if (k < -200) |
| link_error (); |
| if (k > 100) |
| link_error (); |
| |
| return k; |
| } |
| |
| /* [-20, 10] * [-10, -2] should give [-100, 200]. */ |
| if (i >= -20) |
| if (i <= 10) |
| if (j >= -10) |
| if (j <= -2) |
| { |
| k = i * j; |
| if (k < -100) |
| link_error (); |
| if (k > 200) |
| link_error (); |
| |
| return k; |
| } |
| |
| /* [10, 20] * [2, 10] should give [20, 200]. */ |
| if (i >= 10) |
| if (i <= 20) |
| if (j >= 2) |
| if (j <= 10) |
| { |
| k = i * j; |
| if (k < 20) |
| link_error (); |
| if (k > 200) |
| link_error (); |
| |
| return k; |
| } |
| |
| /* [10, 20] * [-10, -2] should give [-200, -20]. */ |
| if (i >= 10) |
| if (i <= 20) |
| if (j >= -10) |
| if (j <= -2) |
| { |
| k = i * j; |
| if (k < -200) |
| link_error (); |
| if (k > -20) |
| link_error (); |
| |
| return k; |
| } |
| |
| abort (); |
| } |
| |
| |
| main() |
| { |
| if (foo_div (-10, 5) != -2) |
| abort (); |
| |
| if (foo_div (-16, 4) != -4) |
| abort (); |
| |
| if (foo_div (-15, -5) != 3) |
| abort (); |
| |
| if (foo_div (8, 2) != 4) |
| abort (); |
| |
| if (foo_div (10, -2) != -5) |
| abort (); |
| |
| if (foo_div (20, 5) != 4) |
| abort (); |
| |
| if (foo_div (15, -3) != -5) |
| abort (); |
| |
| if (foo_mult (-10, 5) != -50) |
| abort (); |
| |
| if (foo_mult (-16, 4) != -64) |
| abort (); |
| |
| if (foo_mult (-15, -5) != 75) |
| abort (); |
| |
| if (foo_mult (8, 2) != 16) |
| abort (); |
| |
| if (foo_mult (10, -2) != -20) |
| abort (); |
| |
| if (foo_mult (20, 5) != 100) |
| abort (); |
| |
| if (foo_mult (15, -3) != -45) |
| abort (); |
| |
| return 0; |
| } |