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 
7 extern void *memset (void *, int, __SIZE_TYPE__);
8 extern void abort (void);
9 
10 typedef struct
11 {
12         unsigned char colormod;
13 } entity_state_t;
14 
15 typedef struct
16 {
17         int num_entities;
18         entity_state_t *entities;
19 } packet_entities_t;
20 
21 typedef struct
22 {
23         double senttime;
24         float ping_time;
25         packet_entities_t entities;
26 } client_frame_t;
27 
28 typedef enum
29 {
30         cs_free,
31         cs_server,
32         cs_zombie,
33         cs_connected,
34         cs_spawned
35 } sv_client_state_t;
36 
37 typedef struct client_s
38 {
39         sv_client_state_t state;
40         int ping;
41         client_frame_t frames[64];
42 } client_t;
43 
CalcPing(client_t * cl)44 int 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 
main(void)67 int 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