80 lines
1.5 KiB
C
80 lines
1.5 KiB
C
/* PR target/11044 */
|
|
/* Originator: Tim McGrath <misty-@charter.net> */
|
|
/* Testcase contributed by Eric Botcazou <ebotcazou@libertysurf.fr> */
|
|
/* { dg-do run { target i?86-*-* } } */
|
|
/* { dg-options "-mtune=k6 -O3 -ffast-math -funroll-loops" } */
|
|
|
|
extern void *memset (void *, int, __SIZE_TYPE__);
|
|
extern void abort (void);
|
|
|
|
typedef struct
|
|
{
|
|
unsigned char colormod;
|
|
} entity_state_t;
|
|
|
|
typedef struct
|
|
{
|
|
int num_entities;
|
|
entity_state_t *entities;
|
|
} packet_entities_t;
|
|
|
|
typedef struct
|
|
{
|
|
double senttime;
|
|
float ping_time;
|
|
packet_entities_t entities;
|
|
} client_frame_t;
|
|
|
|
typedef enum
|
|
{
|
|
cs_free,
|
|
cs_server,
|
|
cs_zombie,
|
|
cs_connected,
|
|
cs_spawned
|
|
} sv_client_state_t;
|
|
|
|
typedef struct client_s
|
|
{
|
|
sv_client_state_t state;
|
|
int ping;
|
|
client_frame_t frames[64];
|
|
} client_t;
|
|
|
|
int CalcPing (client_t *cl)
|
|
{
|
|
float ping;
|
|
int count, i;
|
|
register client_frame_t *frame;
|
|
|
|
if (cl->state == cs_server)
|
|
return cl->ping;
|
|
ping = 0;
|
|
count = 0;
|
|
for (frame = cl->frames, i = 0; i < 64; i++, frame++) {
|
|
if (frame->ping_time > 0) {
|
|
ping += frame->ping_time;
|
|
count++;
|
|
}
|
|
}
|
|
if (!count)
|
|
return 9999;
|
|
ping /= count;
|
|
|
|
return ping * 1000;
|
|
}
|
|
|
|
int main(void)
|
|
{
|
|
client_t cl;
|
|
|
|
memset(&cl, 0, sizeof(cl));
|
|
|
|
cl.frames[0].ping_time = 1.0f;
|
|
|
|
if (CalcPing(&cl) != 1000)
|
|
abort();
|
|
|
|
return 0;
|
|
}
|