Commit 878c45f0 authored by Kunshan Wang's avatar Kunshan Wang

Test '&' operator.

parent 9d7a38b4
...@@ -26,6 +26,8 @@ lazy val root = (project in file(".")).settings( ...@@ -26,6 +26,8 @@ lazy val root = (project in file(".")).settings(
"org.scalatest" %% "scalatest" % "2.2.4" % "test", "org.scalatest" %% "scalatest" % "2.2.4" % "test",
"junit" % "junit" % "4.12" % "test" "junit" % "junit" % "4.12" % "test"
), ),
testOptions in Test += Tests.Argument("-oF"), // print full stack trace when testing
antlr4Settings, antlr4Settings,
......
...@@ -125,7 +125,7 @@ class UvmHailBasicTest extends UvmHailTesterBase { ...@@ -125,7 +125,7 @@ class UvmHailBasicTest extends UvmHailTesterBase {
assertTR64FP("@g_tr1", 3.14) assertTR64FP("@g_tr1", 3.14)
assertTR64Int("@g_tr2", 0xfedcba9876543L) assertTR64Int("@g_tr2", 0xfedcba9876543L)
val nullref = mc.handleFromConst("@NULLREF").asInstanceOf[MuRefValue] val nullref = mc.handleFromConst("@NULLREF").asInstanceOf[MuRefValue]
assertTR64Ref("@g_tr3", nullref, 31) assertTR64Ref("@g_tr3", nullref, 31)
...@@ -256,6 +256,36 @@ class UvmHailBasicTest extends UvmHailTesterBase { ...@@ -256,6 +256,36 @@ class UvmHailBasicTest extends UvmHailTesterBase {
} }
mc.closeContext() mc.closeContext()
} }
it should "recognise the '&' expression to assign internal references" in {
val mc = microVM.newContext()
loadHailFromFile(mc, "tests/uvm-hail-test/basic-hail-test-5.hail")
val hBar = mc.loadGlobal("@g_my_hybrid_r").asInstanceOf[MuRefValue]
val hBarIr = mc.getIRef(hBar)
def assertIREqual(globalID: Int, expected: MuIRefValue): Unit = {
val hIr = mc.loadGlobal(globalID).asInstanceOf[MuIRefValue]
// printf("found offset: 0x%x expected offset: 0x%x\n", hIr.vb.offset, expected.vb.offset)
mc.refEq(hIr, expected) shouldBe true
}
assertIREqual("@g_iri64", mc.getFieldIRef(hBarIr, 0))
assertIREqual("@g_irdouble", mc.getFieldIRef(hBarIr, 1))
val hBarIr_vp = mc.getVarPartIRef(hBarIr)
assertIREqual("@g_iri8", hBarIr_vp)
val hBarIr_vp_2 = mc.shiftIRef(hBarIr_vp, mc.handleFromInt(2, 64))
val hBarIr_vp_3 = mc.shiftIRef(hBarIr_vp, mc.handleFromInt(3, 64))
assertIREqual("@g_iri8_2", hBarIr_vp_2)
assertIREqual("@g_irvoid", hBarIr_vp_3)
mc.closeContext()
}
} }
object UvmHailBasicTest { object UvmHailBasicTest {
......
// hail
.newhybrid $bar <@my_hybrid> 5
.init @g_my_hybrid_r = $bar
.init @g_iri64 = &$bar[0]
.init @g_irdouble = &$bar[1]
.init @g_iri8 = &$bar[2]
.init @g_iri8_2 = &$bar[2][2]
.init @g_irvoid = &$bar[2][3] // implicit refcast
.init @g_irvoid2 = &@g_big_struct[2] // implicit refcast
// uir // uir
// require "../uvm-refimpl-test/primitives.uir" // require "../uvm-refimpl-test/primitives.uir"
// test-1-2
.typedef @refrefvoid = ref<@refvoid> .typedef @refrefvoid = ref<@refvoid>
.typedef @refirefvoid = ref<@irefvoid> .typedef @refirefvoid = ref<@irefvoid>
.typedef @refweakrefvoid = ref<@weakrefvoid> .typedef @refweakrefvoid = ref<@weakrefvoid>
...@@ -27,6 +29,8 @@ ...@@ -27,6 +29,8 @@
.funcdecl @foo <@v_v> .funcdecl @foo <@v_v>
.expose @foo_native = @foo #DEFAULT @I64_2 .expose @foo_native = @foo #DEFAULT @I64_2
// test-3
.const @P1 <@ptrvoid> = 0x123456789abcdef0 .const @P1 <@ptrvoid> = 0x123456789abcdef0
.const @P2 <@fpv_v> = 0xfedcba9876543210 .const @P2 <@fpv_v> = 0xfedcba9876543210
...@@ -49,6 +53,8 @@ ...@@ -49,6 +53,8 @@
.const @I52_99 <@i52> = 99 .const @I52_99 <@i52> = 99
.const @I6_15 <@i6> = 15 .const @I6_15 <@i6> = 15
// test-4
.typedef @small_struct = struct <@i8 @i16 @i32 @i64> .typedef @small_struct = struct <@i8 @i16 @i32 @i64>
.typedef @big_struct = struct <@float @small_struct @double> .typedef @big_struct = struct <@float @small_struct @double>
.typedef @small_array = array <@i32 6> .typedef @small_array = array <@i32 6>
...@@ -65,3 +71,12 @@ ...@@ -65,3 +71,12 @@
.global @g_my_hybrid_r <@my_hybrid_r> .global @g_my_hybrid_r <@my_hybrid_r>
// test-5
.global @g_iri64 <@irefi64>
.global @g_irdouble <@irefdouble>
.global @g_iri8 <@irefi8>
.global @g_iri8_2 <@irefi8>
.global @g_irvoid <@irefvoid>
.global @g_irvoid2 <@irefvoid>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment