atomic_fifo_queue_test.c [plain text]
#if defined(i386) || defined(__x86_64__)
#include <libkern/OSAtomic.h>
#include <stdio.h>
#include <string.h>
#include <err.h>
typedef struct {
void *next;
char *str;
} QueueNode;
int atomic_fifo_queue_test( void *the_argp ) {
OSFifoQueueHead head = OS_ATOMIC_FIFO_QUEUE_INIT;
char *str1 = "String 1", *str2 = "String 2";
QueueNode node1 = { 0, str1 };
OSAtomicFifoEnqueue(&head, &node1, 0);
QueueNode node2 = { 0, str2 };
OSAtomicFifoEnqueue(&head, &node2, 0);
QueueNode *node_ptr = OSAtomicFifoDequeue(&head, 0);
if( strcmp(node_ptr->str, str1) != 0 ) {
warnx("OSAtomicFifoDequeue returned incorrect string. Expected %s, got %s", str1, node_ptr->str);
return 1;
}
node_ptr = OSAtomicFifoDequeue(&head, 0);
if( strcmp(node_ptr->str, str2) != 0 ) {
warnx("OSAtomicFifoDequeue returned incorrect string. Expected %s, got %s", str2, node_ptr->str);
return 1;
}
return 0;
}
#endif