1/* PR target/11044 */
2/* Originator: Tim McGrath <misty-@charter.net> */
3/* Testcase contributed by Eric Botcazou <ebotcazou@libertysurf.fr> */
4
5/* Testcase copied from gcc.target/i386/loop-3.c */
6
7extern void *memset (void *, int, __SIZE_TYPE__);
8extern void abort (void);
9
10typedef struct
11{
12        unsigned char colormod;
13} entity_state_t;
14
15typedef struct
16{
17        int num_entities;
18        entity_state_t *entities;
19} packet_entities_t;
20
21typedef struct
22{
23        double senttime;
24        float ping_time;
25        packet_entities_t entities;
26} client_frame_t;
27
28typedef enum
29{
30        cs_free,
31        cs_server,
32        cs_zombie,
33        cs_connected,
34        cs_spawned
35} sv_client_state_t;
36
37typedef struct client_s
38{
39        sv_client_state_t state;
40        int ping;
41        client_frame_t frames[64];
42} client_t;
43
44int CalcPing (client_t *cl)
45{
46        float ping;
47        int count, i;
48        register client_frame_t *frame;
49
50        if (cl->state == cs_server)
51                return cl->ping;
52        ping = 0;
53        count = 0;
54        for (frame = cl->frames, i = 0; i < 64; i++, frame++) {
55                if (frame->ping_time > 0) {
56                        ping += frame->ping_time;
57                        count++;
58                }
59        }
60        if (!count)
61                return 9999;
62        ping /= count;
63
64        return ping * 1000;
65}
66
67int main(void)
68{
69   client_t cl;
70
71   memset(&cl, 0, sizeof(cl));
72
73   cl.frames[0].ping_time = 1.0f;
74
75   if (CalcPing(&cl) != 1000)
76     abort();
77
78   return 0;
79}
80