1 /* used by ExSingleList and ExSequencedList tests */
5 IN PXLIST_HEADER ListHead
,
6 IN PXLIST_ENTRY Entries
,
7 IN PKSPIN_LOCK pSpinLock
)
9 USHORT ExpectedSequence
= 0;
12 Ret
= FlushXList(ListHead
);
13 ok_eq_pointer(Ret
, NULL
);
14 CheckXListHeader(ListHead
, NULL
, 0);
16 Ret
= PopXList(ListHead
, pSpinLock
);
17 ok_eq_pointer(Ret
, NULL
);
18 CheckXListHeader(ListHead
, NULL
, 0);
20 Ret
= PushXList(ListHead
, &Entries
[0], pSpinLock
);
22 ok_eq_pointer(Ret
, NULL
);
23 ok_eq_pointer(Entries
[0].Next
, NULL
);
24 CheckXListHeader(ListHead
, &Entries
[0], 1);
26 Ret
= PushXList(ListHead
, &Entries
[1], pSpinLock
);
28 ok_eq_pointer(Ret
, &Entries
[0]);
29 ok_eq_pointer(Entries
[0].Next
, NULL
);
30 ok_eq_pointer(Entries
[1].Next
, &Entries
[0]);
31 CheckXListHeader(ListHead
, &Entries
[1], 2);
33 Ret
= PopXList(ListHead
, pSpinLock
);
34 ok_eq_pointer(Ret
, &Entries
[1]);
35 ok_eq_pointer(Entries
[0].Next
, NULL
);
36 ok_free_xlist(Entries
[1].Next
, &Entries
[0]);
37 CheckXListHeader(ListHead
, &Entries
[0], 1);
39 Ret
= PopXList(ListHead
, pSpinLock
);
40 ok_eq_pointer(Ret
, &Entries
[0]);
41 ok_free_xlist(Entries
[0].Next
, NULL
);
42 ok_free_xlist(Entries
[1].Next
, &Entries
[0]);
43 CheckXListHeader(ListHead
, NULL
, 0);
45 Ret
= PopXList(ListHead
, pSpinLock
);
46 ok_eq_pointer(Ret
, NULL
);
47 ok_free_xlist(Entries
[0].Next
, NULL
);
48 ok_free_xlist(Entries
[1].Next
, &Entries
[0]);
49 CheckXListHeader(ListHead
, NULL
, 0);
51 /* add entries again */
52 Ret
= PushXList(ListHead
, &Entries
[0], pSpinLock
);
54 ok_eq_pointer(Ret
, NULL
);
55 ok_eq_pointer(Entries
[0].Next
, NULL
);
56 CheckXListHeader(ListHead
, &Entries
[0], 1);
58 Ret
= PushXList(ListHead
, &Entries
[1], pSpinLock
);
60 ok_eq_pointer(Ret
, &Entries
[0]);
61 ok_eq_pointer(Entries
[0].Next
, NULL
);
62 ok_eq_pointer(Entries
[1].Next
, &Entries
[0]);
63 CheckXListHeader(ListHead
, &Entries
[1], 2);
65 Ret
= PopXList(ListHead
, pSpinLock
);
66 ok_eq_pointer(Ret
, &Entries
[1]);
67 ok_eq_pointer(Entries
[0].Next
, NULL
);
68 ok_free_xlist(Entries
[1].Next
, &Entries
[0]);
69 CheckXListHeader(ListHead
, &Entries
[0], 1);
71 Ret
= PushXList(ListHead
, &Entries
[1], pSpinLock
);
73 ok_eq_pointer(Ret
, &Entries
[0]);
74 ok_eq_pointer(Entries
[0].Next
, NULL
);
75 ok_eq_pointer(Entries
[1].Next
, &Entries
[0]);
76 CheckXListHeader(ListHead
, &Entries
[1], 2);
78 Ret
= PushXList(ListHead
, &Entries
[2], pSpinLock
);
80 ok_eq_pointer(Ret
, &Entries
[1]);
81 ok_eq_pointer(Entries
[0].Next
, NULL
);
82 ok_eq_pointer(Entries
[1].Next
, &Entries
[0]);
83 ok_eq_pointer(Entries
[2].Next
, &Entries
[1]);
84 CheckXListHeader(ListHead
, &Entries
[2], 3);
86 Ret
= FlushXList(ListHead
);
87 ok_eq_pointer(Ret
, &Entries
[2]);
88 CheckXListHeader(ListHead
, NULL
, 0);
91 #undef TestXListFunctional