12 struct opr_queue entry;
20 struct charqueue *entry;
22 entry=malloc(sizeof(struct charqueue));
28 queueAsString(struct opr_queue *head) {
29 static char items[255];
30 struct opr_queue *cursor;
33 for(opr_queue_Scan(head, cursor)) {
34 items[pos] = opr_queue_Entry(cursor, struct charqueue, entry)->item;
45 stringIntoQueue(char *string, struct opr_queue *q) {
49 while (string[i]!='\0') {
50 opr_queue_Append(q, &(newEntry(string[i])->entry));
58 struct opr_queue q1, q2, *cursor;
65 opr_queue_Append(&q1, &(newEntry('A')->entry));
66 opr_queue_Append(&q1, &(newEntry('B')->entry));
67 opr_queue_Append(&q1, &(newEntry('C')->entry));
68 is_string(queueAsString(&q1), "ABC", "Append works as expected");
70 opr_queue_Prepend(&q1, &(newEntry('D')->entry));
71 opr_queue_Prepend(&q1, &(newEntry('E')->entry));
72 is_string(queueAsString(&q1), "EDABC", "Prepend works");
74 opr_queue_Append(&q2, &(newEntry('1')->entry));
75 opr_queue_Append(&q2, &(newEntry('2')->entry));
77 opr_queue_SpliceAppend(&q1, &q2);
78 is_string(queueAsString(&q1), "EDABC12", "SpliceAppend works");
79 ok(opr_queue_IsEmpty(&q2),
80 "IsEmpty works (and splice empties queues)");
82 opr_queue_Append(&q2, &(newEntry('8')->entry));
83 opr_queue_Append(&q2, &(newEntry('9')->entry));
84 is_string(queueAsString(&q2), "89", "Append works again");
86 opr_queue_SplicePrepend(&q1, &q2);
87 is_string(queueAsString(&q1), "89EDABC12", "SplicePrepend works");
89 /* Now for some trickier stuff */
90 stringIntoQueue("XYZ", &q2);
92 /* Find the A in the string above */
93 for (opr_queue_Scan(&q1, cursor)) {
94 if (opr_queue_Entry(cursor, struct charqueue, entry)->item == 'A')
98 opr_queue_InsertBefore(cursor, &(newEntry('M')->entry));
99 is_string("89EDMABC12", queueAsString(&q1),
100 "InsertBefore functions correctly");
101 opr_queue_SplitBeforeAppend(&q1, &q2, cursor);
102 is_string("ABC12", queueAsString(&q1),
103 "SplitBefore leaves old queue in correct state");
104 is_string("XYZ89EDM", queueAsString(&q2),
105 "SplitBefore correctly appends to new queue");
107 /* Find the 9 in q2 */
108 for (opr_queue_Scan(&q2, cursor)) {
109 if (opr_queue_Entry(cursor, struct charqueue, entry)->item == '9')
112 opr_queue_InsertAfter(cursor, &(newEntry('N')->entry));
113 is_string("XYZ89NEDM", queueAsString(&q2), "InsertAfter");
115 opr_queue_SplitAfterPrepend(&q2, &q1, cursor);
116 is_string("NEDMABC12", queueAsString(&q1), "SplitAfterPrepend Q1");
117 is_string("XYZ89", queueAsString(&q2), "SplitAfterPrepend Q2");