// File: /workspace/github_c_makefile_star2_O3/Ihsoh[P]ilang/list.c
// Function: llst_test
void llst_test(void) {
	LinkedList llst;

	llst_init(&llst, _test_comparer, NULL);
	MYASSERT(
		llst.head == NULL && llst.tail == NULL && llst.count == 0,
		"TEST llst_init(...)"
	);

	llst_append(&llst, "A");
	llst_append(&llst, "B");
	llst_append(&llst, "C");
	llst_append(&llst, "D");
	MYASSERT(
		llst.count == 4
			&& llst.head != NULL
			&& strcmp(llst.head->data, "A") == 0
			&& llst.head->next != NULL
			&& strcmp(llst.head->next->data, "B") == 0
			&& llst.head->next->next != NULL
			&& strcmp(llst.head->next->next->data, "C") == 0
			&& llst.head->next->next->next != NULL
			&& strcmp(llst.head->next->next->next->data, "D") == 0,
		"TEST llst_append(...)"
	);

	LinkedListNode *node = llst_find(&llst, "C");
	MYASSERT(
		node != NULL
			&& strcmp(node->data, "C") == 0,
		"TEST llst_find(...)"
	);

	llst_delete(&llst, llst.head->next, false);
	MYASSERT(
		llst.count == 3
			&& llst.head != NULL
			&& strcmp(llst.head->data, "A") == 0
			&& llst.head->next != NULL
			&& strcmp(llst.head->next->data, "C") == 0
			&& llst.head->next->next != NULL
			&& strcmp(llst.head->next->next->data, "D") == 0,
		"TEST llst_delete(...)"
	);

	llst_delete(&llst, llst.head, false);
	MYASSERT(
		llst.count == 2
			&& llst.head != NULL
			&& strcmp(llst.head->data, "C") == 0
			&& llst.head->next != NULL
			&& strcmp(llst.head->next->data, "D") == 0,
		"TEST llst_delete(...)"
	);


	llst_delete(&llst, llst.tail, false);
	MYASSERT(
		llst.count == 1
			&& llst.head != NULL
			&& strcmp(llst.head->data, "C") == 0,
		"TEST llst_delete(...)"
	);

	llst_delete(&llst, llst.head, false);
	MYASSERT(
		llst.head == NULL && llst.tail == NULL && llst.count == 0,
		"TEST llst_delete(...)"
	);

	llst_free(&llst, false);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %rbx
subq $0x28, %rsp
xorps %xmm0, %xmm0
leaq -0x30(%rbp), %rbx
movaps %xmm0, (%rbx)
movq $0x0, 0x10(%rbx)
leaq 0x30a(%rip), %rax       # 0xc3ed
movq %rax, 0x18(%rbx)
leaq -0x3ec(%rip), %rax      # 0xbd02
movq %rax, 0x20(%rbx)
leaq 0x29429(%rip), %rsi     # 0x35522
movq %rbx, %rdi
callq 0xbd8f
leaq 0x24dc9(%rip), %rsi     # 0x30ed1
movq %rbx, %rdi
callq 0xbd8f
leaq 0x250fe(%rip), %rsi     # 0x31215
movq %rbx, %rdi
callq 0xbd8f
leaq 0x24cfe(%rip), %rsi     # 0x30e24
movq %rbx, %rdi
callq 0xbd8f
movq (%rbx), %rax
cmpq $0x4, 0x10(%rbx)
sete %cl
testq %rax, %rax
setne %dl
andb %cl, %dl
cmpb $0x1, %dl
jne 0xc159
movq 0x8(%rax), %rcx
cmpb $0x41, (%rcx)
jne 0xc159
cmpb $0x0, 0x1(%rcx)
je 0xc306
leaq 0x219bc(%rip), %rdi     # 0x2db1c
leaq 0x21b59(%rip), %rdx     # 0x2dcc0
movl $0xc0, %esi
xorl %eax, %eax
callq 0xcf58
leaq 0x2509b(%rip), %rsi     # 0x31215
leaq -0x30(%rbp), %rdi
callq 0xc017
testq %rax, %rax
je 0xc197
movq 0x8(%rax), %rax
cmpb $0x43, (%rax)
jne 0xc197
cmpb $0x0, 0x1(%rax)
je 0xc1b1
leaq 0x2197e(%rip), %rdi     # 0x2db1c
leaq 0x21b31(%rip), %rdx     # 0x2dcd6
movl $0xc7, %esi
xorl %eax, %eax
callq 0xcf58
movq (%rbx), %rax
movq 0x18(%rax), %rsi
movq %rbx, %rdi
xorl %edx, %edx
callq 0xbee7
movq (%rbx), %rsi
cmpq $0x3, 0x10(%rbx)
sete %al
testq %rsi, %rsi
setne %cl
andb %al, %cl
cmpb $0x1, %cl
jne 0xc1ed
movq 0x8(%rsi), %rax
cmpb $0x41, (%rax)
jne 0xc1ed
cmpb $0x0, 0x1(%rax)
je 0xc377
leaq 0x21928(%rip), %rdi     # 0x2db1c
leaq 0x21aef(%rip), %rdx     # 0x2dcea
movl $0xd3, %esi
xorl %eax, %eax
callq 0xcf58
movq -0x30(%rbp), %rsi
movq %rbx, %rdi
xorl %edx, %edx
callq 0xbee7
movq (%rbx), %rax
cmpq $0x2, 0x10(%rbx)
sete %cl
testq %rax, %rax
setne %dl
andb %cl, %dl
cmpb $0x1, %dl
jne 0xc240
movq 0x8(%rax), %rcx
cmpb $0x43, (%rcx)
jne 0xc240
cmpb $0x0, 0x1(%rcx)
je 0xc3c4
leaq 0x218d5(%rip), %rdi     # 0x2db1c
leaq 0x21a9c(%rip), %rdx     # 0x2dcea
movl $0xdd, %esi
xorl %eax, %eax
callq 0xcf58
movq 0x8(%rbx), %rsi
movq %rbx, %rdi
xorl %edx, %edx
callq 0xbee7
movq (%rbx), %rsi
cmpq $0x1, 0x10(%rbx)
sete %al
testq %rsi, %rsi
setne %cl
andb %al, %cl
cmpb $0x1, %cl
jne 0xc28f
movq 0x8(%rsi), %rax
cmpb $0x43, (%rax)
jne 0xc28f
cmpb $0x0, 0x1(%rax)
je 0xc2ad
leaq 0x21886(%rip), %rdi     # 0x2db1c
leaq 0x21a4d(%rip), %rdx     # 0x2dcea
movl $0xe6, %esi
xorl %eax, %eax
callq 0xcf58
movq -0x30(%rbp), %rsi
movq %rbx, %rdi
xorl %edx, %edx
callq 0xbee7
cmpq $0x0, (%rbx)
jne 0xc2cb
cmpq $0x0, -0x28(%rbp)
jne 0xc2cb
cmpq $0x0, -0x20(%rbp)
je 0xc2ff
leaq 0x2184a(%rip), %rdi     # 0x2db1c
leaq 0x21a11(%rip), %rdx     # 0x2dcea
movl $0xec, %esi
xorl %eax, %eax
callq 0xcf58
movq -0x30(%rbp), %rdi
testq %rdi, %rdi
je 0xc2ff
movq 0x18(%rdi), %rbx
callq 0xa1a0
movq %rbx, %rdi
testq %rbx, %rbx
jne 0xc2ee
addq $0x28, %rsp
popq %rbx
popq %rbp
retq
movq 0x18(%rax), %rax
testq %rax, %rax
je 0xc159
movq 0x8(%rax), %rcx
cmpb $0x42, (%rcx)
jne 0xc159
cmpb $0x0, 0x1(%rcx)
jne 0xc159
movq 0x18(%rax), %rax
testq %rax, %rax
je 0xc159
movq 0x8(%rax), %rcx
cmpb $0x43, (%rcx)
jne 0xc159
cmpb $0x0, 0x1(%rcx)
jne 0xc159
movq 0x18(%rax), %rax
testq %rax, %rax
je 0xc159
movq 0x8(%rax), %rax
cmpb $0x44, (%rax)
jne 0xc159
cmpb $0x0, 0x1(%rax)
jne 0xc159
jmp 0xc173
movq 0x18(%rsi), %rax
testq %rax, %rax
je 0xc1ed
movq 0x8(%rax), %rcx
cmpb $0x43, (%rcx)
jne 0xc1ed
cmpb $0x0, 0x1(%rcx)
jne 0xc1ed
movq 0x18(%rax), %rax
testq %rax, %rax
je 0xc1ed
movq 0x8(%rax), %rax
cmpb $0x44, (%rax)
jne 0xc1ed
cmpb $0x0, 0x1(%rax)
jne 0xc1ed
jmp 0xc20b
movq 0x18(%rax), %rax
testq %rax, %rax
je 0xc240
movq 0x8(%rax), %rax
cmpb $0x44, (%rax)
jne 0xc240
cmpb $0x0, 0x1(%rax)
jne 0xc240
jmp 0xc25a