259 lines
3.8 KiB
C
259 lines
3.8 KiB
C
/* { 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;
|
|
}
|