仿真平台内核初版 -tlib库 包含<sparc arm riscv powerPC>
This commit is contained in:
131
tests/unit-tests/AdHocCompiler/adhoc-compiler.robot
Normal file
131
tests/unit-tests/AdHocCompiler/adhoc-compiler.robot
Normal file
@@ -0,0 +1,131 @@
|
||||
*** Variables ***
|
||||
${SIMPLE_PLATFORM}= SEPARATOR=
|
||||
... """ ${\n}
|
||||
... simple: SimplePeripheral @ sysbus 0x0 ${\n}
|
||||
... """
|
||||
|
||||
${COMPLEX_PLATFORM}= SEPARATOR=
|
||||
... """ ${\n}
|
||||
... simple: ReferencingPeripheral @ sysbus 0x0 ${\n}
|
||||
... """
|
||||
|
||||
${UNSAFE_PLATFORM}= SEPARATOR=
|
||||
... """ ${\n}
|
||||
... simple: UnsafePeripheral @ sysbus 0x0 ${\n}
|
||||
... """
|
||||
|
||||
# SimplePeripheral2 to avoid assembly reuse because all test cases run in the same Renode instance.
|
||||
# See the comment above `Should Compile Multiple Files Referencing Each Other` for more details.
|
||||
${SIMPLE_PLATFORM_WITH_PREINIT}= SEPARATOR=
|
||||
... """ ${\n}
|
||||
... simple: SimplePeripheral2 @ sysbus 0x0 ${\n}
|
||||
... ${SPACE*4}preinit: ${\n}
|
||||
... ${SPACE*8}include '${CURDIR}/SimplePeripheral2.cs' ${\n}
|
||||
... """
|
||||
|
||||
# Init is used because dependency cycles are not allowed in platform descriptions.
|
||||
${MUTUALLY_REFERENCING_PLATFORM_WITH_PREINIT}= SEPARATOR=
|
||||
... """ ${\n}
|
||||
... peri1: MutuallyReferencingPeripheral1 @ sysbus 0x0 ${\n}
|
||||
... ${SPACE*4}Other: peri2 ${\n}
|
||||
... peri2: MutuallyReferencingPeripheral2 @ sysbus 0x100 ${\n}
|
||||
... ${SPACE*4}init: ${\n}
|
||||
... ${SPACE*8}Other peri1 ${\n}
|
||||
... sysbus: ${\n}
|
||||
... ${SPACE*4}preinit add: ${\n}
|
||||
... ${SPACE*8}include '${CURDIR}/MutuallyReferencingPeripheral1.cs' '${CURDIR}/MutuallyReferencingPeripheral2.cs' ${\n}
|
||||
... """
|
||||
|
||||
*** Keywords ***
|
||||
Use Peripheral
|
||||
${r}= Execute Command sysbus ReadDoubleWord 0x4
|
||||
Should Be Equal As Numbers ${r} 0x0
|
||||
|
||||
${r}= Execute Command sysbus ReadDoubleWord 0x8
|
||||
Should Be Equal As Numbers ${r} 0x0
|
||||
|
||||
Execute Command sysbus WriteDoubleWord 0x0 0x147
|
||||
|
||||
${r}= Execute Command sysbus ReadDoubleWord 0x4
|
||||
Should Be Equal As Numbers ${r} 0x28e
|
||||
|
||||
${r}= Execute Command sysbus ReadDoubleWord 0x8
|
||||
Should Be Equal As Numbers ${r} 5
|
||||
|
||||
Use Nested Peripheral
|
||||
${r}= Execute Command sysbus ReadDoubleWord 0x10c
|
||||
Should Be Equal As Numbers ${r} 1
|
||||
|
||||
*** Test Cases ***
|
||||
Should Compile Simple Peripheral
|
||||
Execute Command include "${CURDIR}/SimplePeripheral.cs"
|
||||
|
||||
Execute Command mach create
|
||||
Execute Command machine LoadPlatformDescriptionFromString ${SIMPLE_PLATFORM}
|
||||
|
||||
Use Peripheral
|
||||
|
||||
# We load dynamically compiled assemblies right away after the compilation,
|
||||
# so type dependencies can be resolved automatically between separate assemblies.
|
||||
# In the past we had a call to 'EnsureTypeIsLoaded "Antmicro.Renode.Peripherals.ReferencedType"'.
|
||||
# 'EnsureTypeIsLoaded' is no longer necessary when files are referencing each other,
|
||||
# but can still be called explicitly if needed (e.g. there is no reference to the type in any of the loaded libraries).
|
||||
# To test both cases (with and without 'EnsureTypeIsLoaded') we would need to have a separate robot file
|
||||
# and to run this test in a different process to make it isolated, because in .NET Framework
|
||||
# there is no way to unload an individual assembly without unloading all of the application domains that contain it.
|
||||
# See: https://github.com/dotnet/docs/blob/376d4347ab1d83256c81d2427051e6ff705bcd30/docs/standard/assembly/load-unload.md
|
||||
# It isn't worth the effort, so legacy command was just removed.
|
||||
Should Compile Multiple Files With One Referencing The Other
|
||||
Execute Command include "${CURDIR}/ReferencedType.cs"
|
||||
Execute Command include "${CURDIR}/ReferencingPeripheral.cs"
|
||||
|
||||
Execute Command mach create
|
||||
Execute Command machine LoadPlatformDescriptionFromString ${COMPLEX_PLATFORM}
|
||||
|
||||
Use Peripheral
|
||||
|
||||
Should Compile Unsafe Peripheral
|
||||
Execute Command include "${CURDIR}/UnsafePeripheral.cs"
|
||||
|
||||
Execute Command mach create
|
||||
Execute Command machine LoadPlatformDescriptionFromString ${UNSAFE_PLATFORM}
|
||||
|
||||
Use Peripheral
|
||||
|
||||
Should Compile Simple Peripheral Through Preinit
|
||||
Execute Command mach create
|
||||
Execute Command machine LoadPlatformDescriptionFromString ${SIMPLE_PLATFORM_WITH_PREINIT}
|
||||
|
||||
Use Peripheral
|
||||
|
||||
Should Compile Two Peripherals Referencing Each Other Through Preinit
|
||||
Execute Command mach create
|
||||
Execute Command machine LoadPlatformDescriptionFromString ${MUTUALLY_REFERENCING_PLATFORM_WITH_PREINIT}
|
||||
|
||||
Execute Command sysbus WriteDoubleWord 0x0 0x859
|
||||
Execute Command sysbus WriteDoubleWord 0x4 0x314
|
||||
|
||||
${r}= Execute Command sysbus ReadDoubleWord 0x100
|
||||
Should Be Equal As Numbers ${r} 0x314
|
||||
${r}= Execute Command sysbus ReadDoubleWord 0x104
|
||||
Should Be Equal As Numbers ${r} 0x859
|
||||
|
||||
Should Compile Simple Peripherals Through Preinit In Repl File With Relative Path Lookup
|
||||
Execute Command include "${CURDIR}/adhoc-compiler.repl"
|
||||
|
||||
Use Peripheral
|
||||
Use Nested Peripheral
|
||||
|
||||
Should Find Simple Peripherals Through Preinit In Repl File With Origin Path Lookup
|
||||
# If this test case runs after one that has already used SimplePeripheral3.cs, like
|
||||
# `Should Compile Simple Peripherals Through Preinit In Repl File With Relative Path Lookup`, then
|
||||
# the preinit block will not actually compile the peripheral as it will have already been compiled,
|
||||
# but the important part of this test is to test the $ORIGIN-based path lookup
|
||||
Execute Script ${CURDIR}/adhoc-compiler.resc
|
||||
|
||||
Use Peripheral
|
||||
Use Nested Peripheral
|
||||
|
||||
EnsureTypeIsLoaded Should Throw Type Not Found
|
||||
${TEST_TYPE} SetVariable Antmicro.NotExistingType
|
||||
Run Keyword And Expect Error *Given type ${TEST_TYPE} was not found* Execute Command EnsureTypeIsLoaded "${TEST_TYPE}"
|
||||
Reference in New Issue
Block a user