avr: added some unit tests for LIST and TREE.
This commit is contained in:
240
avr/common/list_t.asm
Normal file
240
avr/common/list_t.asm
Normal file
@@ -0,0 +1,240 @@
|
||||
; ***************************************************************************
|
||||
; copyright : (C) 2025 by Martin Preuss
|
||||
; email : martin@libchipcard.de
|
||||
;
|
||||
; ***************************************************************************
|
||||
; * This file is part of the project "AqHome". *
|
||||
; * Please see toplevel file COPYING of that project for license details. *
|
||||
; ***************************************************************************
|
||||
|
||||
#ifndef AQH_AVR_COMMON_LIST_T_H
|
||||
#define AQH_AVR_COMMON_LIST_T_H
|
||||
|
||||
|
||||
|
||||
.equ LIST_TEST_OBJECT_OFFS_LIST = 0
|
||||
.equ LIST_TEST_OBJECT_OFFS_VALUE1 = LIST_SIZE
|
||||
.equ LIST_TEST_OBJECT_OFFS_VALUE2 = LIST_SIZE+1
|
||||
.equ LIST_TEST_OBJECT_SIZE = LIST_SIZE+2
|
||||
|
||||
|
||||
|
||||
|
||||
.dseg
|
||||
|
||||
listTest_list: .byte 2
|
||||
listTest_object1: .byte LIST_TEST_OBJECT_SIZE
|
||||
listTest_object2: .byte LIST_TEST_OBJECT_SIZE
|
||||
listTest_object3: .byte LIST_TEST_OBJECT_SIZE
|
||||
|
||||
|
||||
|
||||
.cseg
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine listTest_Object_Init
|
||||
; @param Y pointer to object to init
|
||||
; @param r18 value 1
|
||||
; @param r19 value 2
|
||||
|
||||
listTest_Object_Init:
|
||||
bigcall List_InitObject ; (R16)
|
||||
std Y+LIST_TEST_OBJECT_OFFS_VALUE1, r18
|
||||
std Y+LIST_TEST_OBJECT_OFFS_VALUE2, r19
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
listTest1:
|
||||
ldi yl, LOW(listTest_object1)
|
||||
ldi yh, HIGH(listTest_object1)
|
||||
ldi r18, 1
|
||||
ldi r19, 2
|
||||
rcall listTest_Object_Init
|
||||
sts listTest_list, yl
|
||||
sts listTest_list+1, yh
|
||||
mov xl, yl ; X=listTest_object1
|
||||
mov xh, yh
|
||||
|
||||
ldi yl, LOW(listTest_object2)
|
||||
ldi yh, HIGH(listTest_object2)
|
||||
ldi r18, 3
|
||||
ldi r19, 4
|
||||
rcall listTest_Object_Init
|
||||
|
||||
; X=object 1, Y=object 2
|
||||
bigcall List_AddObject ; (r16, r17, x)
|
||||
|
||||
lds yl, listTest_list
|
||||
lds yh, listTest_list+1
|
||||
|
||||
ldd r16, Y+LIST_TEST_OBJECT_OFFS_VALUE1
|
||||
cpi r16, 1
|
||||
ldi r16, 1
|
||||
brne listTest1_error
|
||||
ldd r16, Y+LIST_TEST_OBJECT_OFFS_VALUE2
|
||||
cpi r16, 2
|
||||
ldi r16, 2
|
||||
brne listTest1_error
|
||||
|
||||
bigcall List_GetNextObject
|
||||
ldi r16, 3
|
||||
cpi xl, LOW(listTest_object2)
|
||||
brne listTest1_error
|
||||
cpi xh, HIGH(listTest_object2)
|
||||
brne listTest1_error
|
||||
|
||||
mov yl, xl
|
||||
mov yh, xh
|
||||
ldd r16, Y+LIST_TEST_OBJECT_OFFS_VALUE1
|
||||
cpi r16, 3
|
||||
ldi r16, 4
|
||||
brne listTest1_error
|
||||
ldd r16, Y+LIST_TEST_OBJECT_OFFS_VALUE2
|
||||
cpi r16, 4
|
||||
ldi r16, 5
|
||||
brne listTest1_error
|
||||
|
||||
bigcall List_GetNextObject
|
||||
mov r16, xh
|
||||
or r16, xl
|
||||
ldi r16, 6
|
||||
brne listTest1_error
|
||||
sec
|
||||
ret
|
||||
listTest1_error:
|
||||
clc
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
listTest2:
|
||||
lds xl, listTest_list
|
||||
lds xh, listTest_list+1
|
||||
|
||||
ldi yl, LOW(listTest_object3)
|
||||
ldi yh, HIGH(listTest_object3)
|
||||
ldi r18, 5
|
||||
ldi r19, 6
|
||||
rcall listTest_Object_Init
|
||||
|
||||
; X=object 1, Y=object 2
|
||||
bigcall List_AddObject ; (r16, r17, x)
|
||||
|
||||
mov xl, yl
|
||||
mov xh, yh
|
||||
bigcall List_GetLastObject
|
||||
ldi r16, 1
|
||||
cpi xl, LOW(listTest_object3)
|
||||
brne listTest2_error
|
||||
cpi xh, HIGH(listTest_object3)
|
||||
brne listTest2_error
|
||||
|
||||
mov yl, xl
|
||||
mov yh, xh
|
||||
ldd r16, Y+LIST_TEST_OBJECT_OFFS_VALUE1
|
||||
cpi r16, 5
|
||||
ldi r16, 2
|
||||
brne listTest2_error
|
||||
ldd r16, Y+LIST_TEST_OBJECT_OFFS_VALUE2
|
||||
cpi r16, 6
|
||||
ldi r16, 3
|
||||
brne listTest2_error
|
||||
|
||||
sec
|
||||
ret
|
||||
listTest2_error:
|
||||
clc
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
listTest3:
|
||||
lds xl, listTest_list
|
||||
lds xh, listTest_list+1
|
||||
ldi yl, LOW(listTest_object2)
|
||||
ldi yh, HIGH(listTest_object2)
|
||||
bigcall List_UnlinkObject
|
||||
|
||||
lds yl, listTest_list
|
||||
lds yh, listTest_list+1
|
||||
|
||||
ldd r16, Y+LIST_TEST_OBJECT_OFFS_VALUE1
|
||||
cpi r16, 1
|
||||
ldi r16, 1
|
||||
brne listTest3_error
|
||||
ldd r16, Y+LIST_TEST_OBJECT_OFFS_VALUE2
|
||||
cpi r16, 2
|
||||
ldi r16, 2
|
||||
brne listTest3_error
|
||||
|
||||
bigcall List_GetNextObject
|
||||
ldi r16, 3
|
||||
cpi xl, LOW(listTest_object3)
|
||||
brne listTest3_error
|
||||
cpi xh, HIGH(listTest_object3)
|
||||
brne listTest3_error
|
||||
|
||||
mov yl, xl
|
||||
mov yh, xh
|
||||
ldd r16, Y+LIST_TEST_OBJECT_OFFS_VALUE1
|
||||
cpi r16, 5
|
||||
ldi r16, 4
|
||||
brne listTest3_error
|
||||
ldd r16, Y+LIST_TEST_OBJECT_OFFS_VALUE2
|
||||
cpi r16, 6
|
||||
ldi r16, 5
|
||||
brne listTest3_error
|
||||
|
||||
bigcall List_GetNextObject
|
||||
mov r16, xh
|
||||
or r16, xl
|
||||
ldi r16, 6
|
||||
brne listTest3_error
|
||||
sec
|
||||
ret
|
||||
listTest3_error:
|
||||
clc
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
listTest4:
|
||||
lds xl, listTest_list
|
||||
lds xh, listTest_list+1
|
||||
ldi yl, LOW(listTest_object3)
|
||||
ldi yh, HIGH(listTest_object3)
|
||||
bigcall List_UnlinkObject
|
||||
|
||||
lds yl, listTest_list
|
||||
lds yh, listTest_list+1
|
||||
|
||||
ldd r16, Y+LIST_TEST_OBJECT_OFFS_VALUE1
|
||||
cpi r16, 1
|
||||
ldi r16, 1
|
||||
brne listTest4_error
|
||||
ldd r16, Y+LIST_TEST_OBJECT_OFFS_VALUE2
|
||||
cpi r16, 2
|
||||
ldi r16, 2
|
||||
brne listTest4_error
|
||||
|
||||
bigcall List_GetNextObject
|
||||
mov r16, xh
|
||||
or r16, xl
|
||||
ldi r16, 6
|
||||
brne listTest4_error
|
||||
sec
|
||||
ret
|
||||
listTest4_error:
|
||||
clc
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user