1 /***** ANSI includes *****/
\r
2 /* TRD : _GNU_SOURCE is required by sched.h for pthread_attr_setaffinity_np, CPU_ZERO and CPU_SET
\r
3 however it has to be defined very early as even the ANSI headers pull in stuff
\r
4 which uses _GNU_SOURCE and which I think must be protected against multiple inclusion,
\r
5 which basically means if you set it too late, it's not seen, because the headers
\r
6 have already been parsed with _GNU_SOURCE unset
\r
19 /***** internal includes *****/
\r
20 #include "abstraction.h"
\r
22 /***** external includes *****/
\r
23 #include "liblfds611.h"
\r
25 /***** defines *****/
\r
32 #define NO_FLAGS 0x0
\r
35 enum lfds611_test_operation
\r
43 /***** structs *****/
\r
44 #include "structures.h"
\r
46 /***** prototypes *****/
\r
47 int main( int argc, char **argv );
\r
49 void internal_display_test_name( char *test_name );
\r
50 void internal_display_test_result( unsigned int number_name_dvs_pairs, ... );
\r
51 void internal_display_lfds611_data_structure_validity( enum lfds611_data_structure_validity dvs );
\r
53 void benchmark_lfds611_freelist( void );
\r
54 thread_return_t CALLING_CONVENTION benchmark_lfds611_freelist_thread_pop_and_push( void *freelist_benchmark );
\r
56 void benchmark_lfds611_queue( void );
\r
57 thread_return_t CALLING_CONVENTION benchmark_lfds611_queue_thread_delfds611_queue_and_enqueue( void *queue_benchmark );
\r
59 void benchmark_lfds611_ringbuffer( void );
\r
60 thread_return_t CALLING_CONVENTION benchmark_lfds611_ringbuffer_thread_write_and_read( void *ringbuffer_benchmark );
\r
62 void benchmark_lfds611_stack( void );
\r
63 thread_return_t CALLING_CONVENTION benchmark_lfds611_stack_thread_push_and_pop( void *stack_benchmark );
\r
65 void test_lfds611_abstraction( void );
\r
66 void abstraction_test_increment( void );
\r
67 thread_return_t CALLING_CONVENTION abstraction_test_internal_thread_increment( void *shared_counter );
\r
68 thread_return_t CALLING_CONVENTION abstraction_test_internal_thread_atomic_increment( void *shared_counter );
\r
69 void abstraction_test_cas( void );
\r
70 thread_return_t CALLING_CONVENTION abstraction_test_internal_thread_cas( void *abstraction_test_cas_state );
\r
71 void abstraction_test_dcas( void );
\r
72 thread_return_t CALLING_CONVENTION abstraction_test_internal_thread_dcas( void *abstraction_test_dcas_state );
\r
74 void test_lfds611_freelist( void );
\r
75 void freelist_test_internal_popping( void );
\r
76 int freelist_test_internal_popping_init( void **user_data, void *user_state );
\r
77 thread_return_t CALLING_CONVENTION freelist_test_internal_thread_popping( void *freelist_test_popping_state );
\r
78 void freelist_test_internal_pushing( void );
\r
79 int freelist_test_internal_pushing_init( void **user_data, void *user_state );
\r
80 void freelist_test_internal_pushing_delete( void *user_data, void *user_state );
\r
81 thread_return_t CALLING_CONVENTION freelist_test_internal_thread_pushing( void *freelist_test_pushing_state );
\r
82 void freelist_test_internal_popping_and_pushing( void );
\r
83 thread_return_t CALLING_CONVENTION freelist_test_internal_thread_popping_and_pushing_start_popping( void *freelist_test_popping_and_pushing_state );
\r
84 thread_return_t CALLING_CONVENTION freelist_test_internal_thread_popping_and_pushing_start_pushing( void *freelist_test_popping_and_pushing_state );
\r
85 void freelist_test_internal_rapid_popping_and_pushing( void );
\r
86 thread_return_t CALLING_CONVENTION freelist_test_internal_thread_rapid_popping_and_pushing( void *lfds611_freelist_state );
\r
88 void test_lfds611_queue( void );
\r
89 void queue_test_enqueuing( void );
\r
90 thread_return_t CALLING_CONVENTION queue_test_internal_thread_simple_enqueuer( void *queue_test_enqueuing_state );
\r
91 void queue_test_dequeuing( void );
\r
92 thread_return_t CALLING_CONVENTION queue_test_internal_thread_simple_dequeuer( void *queue_test_dequeuing_state );
\r
93 void queue_test_enqueuing_and_dequeuing( void );
\r
94 thread_return_t CALLING_CONVENTION queue_test_internal_thread_enqueuer_and_dequeuer( void *queue_test_rapid_enqueuing_and_dequeuing_state );
\r
95 void queue_test_rapid_enqueuing_and_dequeuing( void );
\r
96 thread_return_t CALLING_CONVENTION queue_test_internal_thread_rapid_enqueuer_and_dequeuer( void *queue_test_rapid_enqueuing_and_dequeuing_state );
\r
98 void test_lfds611_ringbuffer( void );
\r
99 void ringbuffer_test_reading( void );
\r
100 thread_return_t CALLING_CONVENTION ringbuffer_test_thread_simple_reader( void *ringbuffer_test_reading_state );
\r
101 void ringbuffer_test_writing( void );
\r
102 thread_return_t CALLING_CONVENTION ringbuffer_test_thread_simple_writer( void *ringbuffer_test_writing_state );
\r
103 void ringbuffer_test_reading_and_writing( void );
\r
104 thread_return_t CALLING_CONVENTION ringbuffer_test_thread_reader_writer( void *ringbuffer_test_reading_and_writing_state );
\r
106 void test_lfds611_slist( void );
\r
107 void test_slist_new_delete_get( void );
\r
108 thread_return_t CALLING_CONVENTION slist_test_internal_thread_new_delete_get_new_head_and_next( void *slist_test_state );
\r
109 thread_return_t CALLING_CONVENTION slist_test_internal_thread_new_delete_get_delete_and_get( void *slist_test_state );
\r
110 void test_slist_get_set_user_data( void );
\r
111 thread_return_t CALLING_CONVENTION slist_test_internal_thread_get_set_user_data( void *slist_test_state );
\r
112 void test_slist_delete_all_elements( void );
\r
114 void test_lfds611_stack( void );
\r
115 void stack_test_internal_popping( void );
\r
116 thread_return_t CALLING_CONVENTION stack_test_internal_thread_popping( void *stack_test_popping_state );
\r
117 void stack_test_internal_pushing( void );
\r
118 thread_return_t CALLING_CONVENTION stack_test_internal_thread_pushing( void *stack_test_pushing_state );
\r
119 void stack_test_internal_popping_and_pushing( void );
\r
120 thread_return_t CALLING_CONVENTION stack_test_internal_thread_popping_and_pushing_start_popping( void *stack_test_popping_and_pushing_state );
\r
121 thread_return_t CALLING_CONVENTION stack_test_internal_thread_popping_and_pushing_start_pushing( void *stack_test_popping_and_pushing_state );
\r
122 void stack_test_internal_rapid_popping_and_pushing( void );
\r
123 thread_return_t CALLING_CONVENTION stack_test_internal_thread_rapid_popping_and_pushing( void *stack_state );
\r