// File: /workspace/github_c_makefile_star2_O2/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)
andq $0x0, 0x10(%rbx)
leaq 0x2fb(%rip), %rax       # 0xc12a
movq %rax, 0x18(%rbx)
leaq -0x38b(%rip), %rax      # 0xbaaf
movq %rax, 0x20(%rbx)
leaq 0x2876c(%rip), %rsi     # 0x345b1
movq %rbx, %rdi
callq 0xbb35
leaq 0x2408d(%rip), %rsi     # 0x2fee1
movq %rbx, %rdi
callq 0xbb35
leaq 0x243c2(%rip), %rsi     # 0x30225
movq %rbx, %rdi
callq 0xbb35
leaq 0x23fc2(%rip), %rsi     # 0x2fe34
movq %rbx, %rdi
callq 0xbb35
movq (%rbx), %rax
cmpq $0x4, 0x10(%rbx)
sete %cl
testq %rax, %rax
setne %dl
andb %cl, %dl
cmpb $0x1, %dl
jne 0xbea5
movq 0x8(%rax), %rcx
cmpb $0x41, (%rcx)
jne 0xbea5
cmpb $0x0, 0x1(%rcx)
je 0xc043
leaq 0x20c70(%rip), %rdi     # 0x2cb1c
leaq 0x20e0d(%rip), %rdx     # 0x2ccc0
movl $0xc0, %esi
xorl %eax, %eax
callq 0xcb84
leaq 0x2435f(%rip), %rsi     # 0x30225
leaq -0x30(%rbp), %rdi
callq 0xbd93
testq %rax, %rax
je 0xbee3
movq 0x8(%rax), %rax
cmpb $0x43, (%rax)
jne 0xbee3
cmpb $0x0, 0x1(%rax)
je 0xbefd
leaq 0x20c32(%rip), %rdi     # 0x2cb1c
leaq 0x20de5(%rip), %rdx     # 0x2ccd6
movl $0xc7, %esi
xorl %eax, %eax
callq 0xcb84
movq (%rbx), %rax
movq 0x18(%rax), %rsi
movq %rbx, %rdi
xorl %edx, %edx
callq 0xbc6b
movq (%rbx), %rsi
cmpq $0x3, 0x10(%rbx)
sete %al
testq %rsi, %rsi
setne %cl
andb %al, %cl
cmpb $0x1, %cl
jne 0xbf39
movq 0x8(%rsi), %rax
cmpb $0x41, (%rax)
jne 0xbf39
cmpb $0x0, 0x1(%rax)
je 0xc0b4
leaq 0x20bdc(%rip), %rdi     # 0x2cb1c
leaq 0x20da3(%rip), %rdx     # 0x2ccea
movl $0xd3, %esi
xorl %eax, %eax
callq 0xcb84
movq -0x30(%rbp), %rsi
movq %rbx, %rdi
xorl %edx, %edx
callq 0xbc6b
movq (%rbx), %rax
cmpq $0x2, 0x10(%rbx)
sete %cl
testq %rax, %rax
setne %dl
andb %cl, %dl
cmpb $0x1, %dl
jne 0xbf8c
movq 0x8(%rax), %rcx
cmpb $0x43, (%rcx)
jne 0xbf8c
cmpb $0x0, 0x1(%rcx)
je 0xc101
leaq 0x20b89(%rip), %rdi     # 0x2cb1c
leaq 0x20d50(%rip), %rdx     # 0x2ccea
movl $0xdd, %esi
xorl %eax, %eax
callq 0xcb84
movq 0x8(%rbx), %rsi
movq %rbx, %rdi
xorl %edx, %edx
callq 0xbc6b
movq (%rbx), %rsi
cmpq $0x1, 0x10(%rbx)
sete %al
testq %rsi, %rsi
setne %cl
andb %al, %cl
cmpb $0x1, %cl
jne 0xbfdb
movq 0x8(%rsi), %rax
cmpb $0x43, (%rax)
jne 0xbfdb
cmpb $0x0, 0x1(%rax)
je 0xbff9
leaq 0x20b3a(%rip), %rdi     # 0x2cb1c
leaq 0x20d01(%rip), %rdx     # 0x2ccea
movl $0xe6, %esi
xorl %eax, %eax
callq 0xcb84
movq -0x30(%rbp), %rsi
movq %rbx, %rdi
xorl %edx, %edx
callq 0xbc6b
cmpq $0x0, (%rbx)
jne 0xc017
cmpq $0x0, -0x28(%rbp)
jne 0xc017
cmpq $0x0, -0x20(%rbp)
je 0xc031
leaq 0x20afe(%rip), %rdi     # 0x2cb1c
leaq 0x20cc5(%rip), %rdx     # 0x2ccea
movl $0xec, %esi
xorl %eax, %eax
callq 0xcb84
leaq -0x30(%rbp), %rdi
xorl %esi, %esi
callq 0xbad0
addq $0x28, %rsp
popq %rbx
popq %rbp
retq
movq 0x18(%rax), %rax
testq %rax, %rax
je 0xbea5
movq 0x8(%rax), %rcx
cmpb $0x42, (%rcx)
jne 0xbea5
cmpb $0x0, 0x1(%rcx)
jne 0xbea5
movq 0x18(%rax), %rax
testq %rax, %rax
je 0xbea5
movq 0x8(%rax), %rcx
cmpb $0x43, (%rcx)
jne 0xbea5
cmpb $0x0, 0x1(%rcx)
jne 0xbea5
movq 0x18(%rax), %rax
testq %rax, %rax
je 0xbea5
movq 0x8(%rax), %rax
cmpb $0x44, (%rax)
jne 0xbea5
cmpb $0x0, 0x1(%rax)
jne 0xbea5
jmp 0xbebf
movq 0x18(%rsi), %rax
testq %rax, %rax
je 0xbf39
movq 0x8(%rax), %rcx
cmpb $0x43, (%rcx)
jne 0xbf39
cmpb $0x0, 0x1(%rcx)
jne 0xbf39
movq 0x18(%rax), %rax
testq %rax, %rax
je 0xbf39
movq 0x8(%rax), %rax
cmpb $0x44, (%rax)
jne 0xbf39
cmpb $0x0, 0x1(%rax)
jne 0xbf39
jmp 0xbf57
movq 0x18(%rax), %rax
testq %rax, %rax
je 0xbf8c
movq 0x8(%rax), %rax
cmpb $0x44, (%rax)
jne 0xbf8c
cmpb $0x0, 0x1(%rax)
jne 0xbf8c
jmp 0xbfa6