Imported Upstream version 2.9.0
[debian/cc1111] / support / regression / tests / bug-524691.c
1 /* Division by powers of two.
2  */
3 #include <testfwk.h>
4
5 typedef unsigned int UINT;
6
7 typedef struct _HeapEntryState
8 {
9   void *pBase;
10   UINT uFlags;
11 } HeapEntryState;
12
13 static HeapEntryState *_getHeapEntryState(void *p, HeapEntryState *pStates, UINT nStateEntries)
14 {
15   int uLeft = -1, uRight = nStateEntries, uMiddle;
16
17   while (uRight - uLeft > 1)
18     {
19       int iDiff;
20
21       uMiddle = (uLeft + uRight)/2;
22       /* A divide by zero is added just before iDiff is assigned */
23       iDiff = pStates[uMiddle].pBase - p;
24
25       if (iDiff > 0)
26         {
27           uRight = uMiddle;
28         }
29       else if (iDiff < 0)
30         {
31           uLeft = uMiddle;
32         }
33       else
34         {
35           return pStates + uMiddle;
36         }
37     }
38
39   return NULL;
40 }
41
42 void
43 testDivByZero(void)
44 {
45   HeapEntryState aStates[] = {
46     { (void xdata *)1, 0 }
47   };
48   void *p = (void xdata *)0x1234;
49
50   ASSERT(_getHeapEntryState(p, aStates, 1) == NULL);
51
52   aStates[0].pBase = p;
53   ASSERT(_getHeapEntryState(p, aStates, 1) == aStates + 0);
54 }