]> pd.if.org Git - liblfds/blob - liblfds/liblfds7.1.0/test_and_benchmark/libtest/src/libtest_tests/libtest_tests_queue_bounded_manyproducer_manyconsumer_count.c
Initial import (all versions, including the new 7.1.0)
[liblfds] / liblfds / liblfds7.1.0 / test_and_benchmark / libtest / src / libtest_tests / libtest_tests_queue_bounded_manyproducer_manyconsumer_count.c
1 /***** includes *****/
2 #include "libtest_tests_internal.h"
3
4
5
6
7
8 /****************************************************************************/
9 #pragma warning( disable : 4100 )
10
11 void libtest_tests_queue_bmm_count( struct lfds710_list_asu_state *list_of_logical_processors, struct libshared_memory_state *ms, enum lfds710_misc_validity *dvs )
12 {
13   int
14     rv;
15
16   lfds710_pal_uint_t
17     expected_count = 0,
18     key,
19     loop,
20     number_elements,
21     subloop,
22     value;
23
24   struct lfds710_queue_bmm_element
25     qbmme_array[8];
26
27   struct lfds710_queue_bmm_state
28     qbmms;
29
30   LFDS710_PAL_ASSERT( list_of_logical_processors != NULL );
31   LFDS710_PAL_ASSERT( ms != NULL );
32   LFDS710_PAL_ASSERT( dvs != NULL );
33
34   /* TRD : make a queue with 8 elements
35            1. enqueue to full, count
36            2. dequeue to empty, count
37            3. enqueue to full, half dequeue, add two more, count
38   */
39
40   *dvs = LFDS710_MISC_VALIDITY_VALID;
41
42   lfds710_queue_bmm_init_valid_on_current_logical_core( &qbmms, qbmme_array, 8, NULL );
43
44   // TRD : loop a few times
45   for( loop = 0 ; loop < 64 ; loop++ )
46   {
47     // TRD : enqueue two (but the queue may be full, so we might only queue one)
48     for( subloop = 0 ; subloop < 2 ; subloop++ )
49     {
50       rv = lfds710_queue_bmm_enqueue( &qbmms, NULL, NULL );
51
52       if( rv == 1 and expected_count == 8 )
53         *dvs = LFDS710_MISC_VALIDITY_INVALID_TEST_DATA;
54
55       if( rv == 1 and expected_count < 8 )
56         expected_count++;
57     }
58
59     // TRD : dequeue one
60     rv = lfds710_queue_bmm_dequeue( &qbmms, (void **) &key, (void **) &value );
61
62     if( rv == 1 )
63       expected_count--;
64
65     if( rv == 0 )
66       *dvs = LFDS710_MISC_VALIDITY_INVALID_TEST_DATA;
67
68     lfds710_queue_bmm_query( &qbmms, LFDS710_QUEUE_BMM_QUERY_GET_POTENTIALLY_INACCURATE_COUNT, NULL, (void *) &number_elements );
69
70     if( number_elements != expected_count )
71       *dvs = LFDS710_MISC_VALIDITY_INVALID_TEST_DATA;
72   }
73
74   lfds710_queue_bmm_cleanup( &qbmms, NULL );
75
76   return;
77 }
78
79 #pragma warning( default : 4100 )
80