TEST(List, Thread) { ThreadTest tt = { 0, MUTEX_INIT, }; // check the test works thrash(& tt); EXPECT_EQ(0, tt.head); int num = 100; pthread_t threads[num]; for (int i = 0; i < num; i++) { int err = pthread_create(& threads[i], 0, thrash, & tt); ASSERT(err == 0); } for (int i = 0; i < num; i++) { int err = pthread_join(threads[i], 0); ASSERT(err == 0); } // should be an empty list EXPECT_EQ(0, tt.head); int size = item_size(& tt.head); EXPECT_EQ(0, size); }
TEST(List, Stack) { int size; Item *head = 0; size = list_size((pList*) & head, pnext_item, 0); EXPECT_EQ(0, size); Item *item = 0; int num = 100; Item items[num]; // Initialise each item for (int i = 0; i < num; i++) { init_item(& items[i], i); } // Push onto stack for (int i = 0; i < num; i++) { list_push((pList*) & head, (pList) & items[i], pnext_item, 0); size = item_size(& head); EXPECT_EQ(i+1, size); } // Pop off stack for (int i = num-1; i >= 0; i--) { item = item_pop(& head); EXPECT_TRUE(item); // check it is the correct item EXPECT_EQ(& items[i], item); size = item_size(& head); EXPECT_EQ(i, size); // check the item is correct item_validate(item, i); } EXPECT_EQ(0, head); item = item_pop(& head); EXPECT_EQ(0, item); }
TEST(List, Sorted) { int size; Item *head = 0; Item *item = 0; int num = 100; Item items[num]; // Initialise each item for (int i = 0; i < num; i++) { init_item(& items[i], i); } int block[num]; rand_array(block, num); // add our items randomly to sorted list for (int i = 0; i < num; i++) { int idx = block[i]; item = & items[idx]; item_add_sorted(& head, item, 0); } // Pop off stack : it should be in order for (int i = 0; i < num; i++) { item = item_pop(& head); EXPECT_TRUE(item); // check it is the correct item EXPECT_EQ(& items[i], item); // check the item is correct item_validate(item, i); } EXPECT_EQ(0, head); item = item_pop(& head); EXPECT_EQ(0, item); size = item_size(& head); EXPECT_EQ(0, size); }
#define item_priv_size(n) (sizeof ((moal_private *)0)->n) /** Get moal_private member address */ #define item_priv_addr(n) ((t_ptr) &((moal_private *)0)->n) /** Get moal_handle member size */ #define item_handle_size(n) (sizeof ((moal_handle *)0)->n) /** Get moal_handle member address */ #define item_handle_addr(n) ((t_ptr) &((moal_handle *)0)->n) #ifdef STA_SUPPORT static struct debug_data items[] = { #ifdef DEBUG_LEVEL1 {"drvdbg", sizeof(drvdbg), (t_ptr) & drvdbg} , #endif {"wmm_ac_vo", item_size(wmm_ac_vo), item_addr(wmm_ac_vo)} , {"wmm_ac_vi", item_size(wmm_ac_vi), item_addr(wmm_ac_vi)} , {"wmm_ac_be", item_size(wmm_ac_be), item_addr(wmm_ac_be)} , {"wmm_ac_bk", item_size(wmm_ac_bk), item_addr(wmm_ac_bk)} , {"max_tx_buf_size", item_size(max_tx_buf_size), item_addr(max_tx_buf_size)} , {"tx_buf_size", item_size(tx_buf_size), item_addr(tx_buf_size)} , {"curr_tx_buf_size", item_size(curr_tx_buf_size), item_addr(curr_tx_buf_size)} , {"ps_mode", item_size(ps_mode), item_addr(ps_mode)}
TEST(List, Remove) { int size; Item *head = 0; //Item *item = 0; int num = 100; Item items[num]; // Initialise each item for (int i = 0; i < num; i++) { init_item(& items[i], i); } // Append to stack for (int i = 0; i < num; i++) { list_append((pList*) & head, (pList) & items[i], pnext_item, 0); size = item_size(& head); EXPECT_EQ(i+1, size); } size = item_size(& head); EXPECT_EQ(num, size); // Remove last item bool found; int i = num - 1; Item *item = & items[i]; found = item_remove(& head, item, 0); EXPECT_EQ(true, found); item_validate(item, i); // check it has gone size = item_size(& head); EXPECT_EQ(num-1, size); // can't remove it twice found = item_remove(& head, item, 0); EXPECT_EQ(false, found); // Remove the first item i = 0; item = & items[i]; found = item_remove(& head, item, 0); EXPECT_EQ(true, found); // check it has gone size = item_size(& head); EXPECT_EQ(num-2, size); // can't remove it twice found = item_remove(& head, item, 0); EXPECT_EQ(false, found); // Remove from the middle i = num / 2; item = & items[i]; found = item_remove(& head, item, 0); EXPECT_EQ(true, found); // check it has gone size = item_size(& head); EXPECT_EQ(num-3, size); // can't remove it twice found = item_remove(& head, item, 0); EXPECT_EQ(false, found); // pop the rest off while (item_pop(& head)) { } // Try removing from an empty list EXPECT_EQ(0, head); found = item_remove(& head, item, 0); EXPECT_EQ(false, found); }
#define item_size(n) (FIELD_SIZEOF(struct mwifiex_debug_info, n)) #define item_addr(n) (offsetof(struct mwifiex_debug_info, n)) /* size/addr for struct mwifiex_adapter */ #define adapter_item_size(n) (FIELD_SIZEOF(struct mwifiex_adapter, n)) #define adapter_item_addr(n) (offsetof(struct mwifiex_adapter, n)) struct mwifiex_debug_data { char name[32]; /* variable/array name */ u32 size; /* size of the variable/array */ size_t addr; /* address of the variable/array */ int num; /* number of variables in an array */ }; static struct mwifiex_debug_data items[] = { {"int_counter", item_size(int_counter), item_addr(int_counter), 1}, {"wmm_ac_vo", item_size(packets_out[WMM_AC_VO]), item_addr(packets_out[WMM_AC_VO]), 1}, {"wmm_ac_vi", item_size(packets_out[WMM_AC_VI]), item_addr(packets_out[WMM_AC_VI]), 1}, {"wmm_ac_be", item_size(packets_out[WMM_AC_BE]), item_addr(packets_out[WMM_AC_BE]), 1}, {"wmm_ac_bk", item_size(packets_out[WMM_AC_BK]), item_addr(packets_out[WMM_AC_BK]), 1}, {"max_tx_buf_size", item_size(max_tx_buf_size), item_addr(max_tx_buf_size), 1}, {"tx_buf_size", item_size(tx_buf_size), item_addr(tx_buf_size), 1}, {"curr_tx_buf_size", item_size(curr_tx_buf_size), item_addr(curr_tx_buf_size), 1},
#ifdef PROC_DEBUG #define item_size(n) (FIELD_SIZEOF(struct lbs_private, n)) #define item_addr(n) (offsetof(struct lbs_private, n)) struct debug_data { char name[32]; u32 size; size_t addr; }; /* To debug any member of struct lbs_private, simply add one line here. */ static struct debug_data items[] = { {"psmode", item_size(psmode), item_addr(psmode)}, {"psstate", item_size(psstate), item_addr(psstate)}, }; static int num_of_items = ARRAY_SIZE(items); /** * lbs_debugfs_read - proc read function * * @file: file to read * @userbuf: pointer to buffer * @count: number of bytes to read * @ppos: read data starting position * * returns: amount of data read or negative error code */
#define item1_addr(n) ((u32) &((wlan_dev_t *)0)->n) struct debug_data { char name[32]; u32 size; u32 addr; u32 offset; }; /* To debug any member of wlan_adapter or wlan_dev_t, simply add one line here. */ #define ITEMS_FROM_WLAN_DEV 1 static struct debug_data items[] = { {"IntCounter", item_size(IntCounter), 0, item_addr(IntCounter)}, {"ConnectStatus", item_size(MediaConnectStatus), 0, item_addr(MediaConnectStatus)}, {"wmmQStp", item_size(wmm.queueStopped), 0, item_addr(wmm.queueStopped)}, {"wmmPkts", item_size(wmm.packetsQueued), 0, item_addr(wmm.packetsQueued)}, {"wmmAcVo", item_size(wmm.packetsOut[WMM_AC_VO]), 0, item_addr(wmm.packetsOut[WMM_AC_VO])}, {"wmmAcVi", item_size(wmm.packetsOut[WMM_AC_VI]), 0, item_addr(wmm.packetsOut[WMM_AC_VI])}, {"wmmAcBE", item_size(wmm.packetsOut[WMM_AC_BE]), 0, item_addr(wmm.packetsOut[WMM_AC_BE])}, {"wmmAcBK", item_size(wmm.packetsOut[WMM_AC_BK]), 0, item_addr(wmm.packetsOut[WMM_AC_BK])}, {"PSMode", item_size(PSMode), 0, item_addr(PSMode)}, {"PSState", item_size(PSState), 0, item_addr(PSState)},
/** Address */ u32 addr; /** Offset */ u32 offset; /** Flag */ u32 flag; }; /* To debug any member of uap_adapter, simply add one line here. */ static struct debug_data items[] = { {"cmd_sent", item_dev_size(cmd_sent), 0, item_dev_addr(cmd_sent), OFFSET_UAP_DEV}, {"data_sent", item_dev_size(data_sent), 0, item_dev_addr(data_sent), OFFSET_UAP_DEV}, {"IntCounter", item_size(IntCounter), 0, item_addr(IntCounter), OFFSET_UAP_ADAPTER}, {"cmd_pending", item_size(cmd_pending), 0, item_addr(cmd_pending), OFFSET_UAP_ADAPTER}, {"num_cmd_h2c_fail", item_dbg_size(num_cmd_host_to_card_failure), 0, item_dbg_addr(num_cmd_host_to_card_failure), OFFSET_UAP_ADAPTER}, {"num_tx_h2c_fail", item_dbg_size(num_tx_host_to_card_failure), 0, item_dbg_addr(num_tx_host_to_card_failure), OFFSET_UAP_ADAPTER}, {"psmode", item_size(psmode), 0, item_addr(psmode), OFFSET_UAP_ADAPTER}, {"ps_state", item_size(ps_state), 0, item_addr(ps_state), OFFSET_UAP_ADAPTER}, #ifdef DEBUG_LEVEL1 /* * XXX: bnewbold: HORRIBLE HACK here, blindly commenting this line out to avoid * gcc error: *