6502-opcodes/src/test/scala/com/htmlism/mos6502/dsl/DslSpec.scala

125 lines
2.7 KiB
Scala
Raw Normal View History

2020-08-15 18:38:08 +00:00
package com.htmlism.mos6502.dsl
2020-08-15 21:04:16 +00:00
import cats.data.NonEmptyList
2023-10-03 20:15:10 +00:00
import org.scalatest.flatspec.*
import org.scalatest.matchers.*
2020-08-15 18:38:08 +00:00
2022-02-14 23:11:45 +00:00
class DslSpec extends AnyFlatSpec with should.Matchers:
2020-08-15 18:38:08 +00:00
2023-06-13 18:01:45 +00:00
"the dsl" should "compile" in:
2020-08-15 18:38:08 +00:00
val doc =
asmDoc { implicit ctx =>
2020-08-15 20:29:32 +00:00
group("constants test") { implicit g =>
2020-08-15 21:04:16 +00:00
(constant("margin", 16), constant("secret", 42))
2020-08-15 20:29:32 +00:00
}
2020-08-15 18:38:08 +00:00
}
2020-08-15 21:04:16 +00:00
doc shouldEqual AsmDocument(
List(
DefinitionGroup(
"constants test",
List(
Definition("margin", 16),
Definition("secret", 42)
)
)
)
)
2023-06-13 18:01:45 +00:00
"enum" should "compile" in:
2020-08-15 21:04:16 +00:00
val doc =
asmDoc { implicit ctx =>
2022-02-14 18:20:51 +00:00
enumAsm[Triforce]
2020-08-15 21:04:16 +00:00
}
doc shouldEqual AsmDocument(
List(
DefinitionGroup(
"foo as enum",
List(
Definition("courage", 0),
Definition("wisdom", 1),
Definition("power", 2)
)
)
)
)
2023-06-13 18:01:45 +00:00
"bit field" should "compile" in:
2020-08-15 21:04:16 +00:00
val doc =
asmDoc { implicit ctx =>
2020-08-21 20:43:23 +00:00
bitField[TestDirection]
2020-08-15 21:04:16 +00:00
}
doc shouldEqual AsmDocument(
List(
DefinitionGroup(
"foo as bit field",
List(
Definition("up", 0x01),
Definition("down", 0x02),
Definition("left", 0x04),
Definition("right", 0x08)
)
)
)
)
2020-08-16 04:08:18 +00:00
2023-06-13 18:01:45 +00:00
"label" should "compile" in:
2020-08-16 06:17:04 +00:00
val doc =
asmDoc { implicit ctx =>
asm { implicit a =>
label("init")
}
}
doc shouldEqual AsmDocument(
List(
AsmFragment(
List(
Label("init")
)
)
)
)
2020-08-15 21:04:16 +00:00
2020-08-15 21:19:36 +00:00
sealed trait Triforce
2020-08-15 21:04:16 +00:00
2020-08-15 21:19:36 +00:00
case object Courage extends Triforce
2022-12-02 01:44:59 +00:00
case object Wisdom extends Triforce
case object Power extends Triforce
2020-08-15 21:19:36 +00:00
2022-02-14 23:11:45 +00:00
object Triforce:
2023-06-19 09:33:38 +00:00
given enumTriforce: EnumAsm[Triforce] =
2022-09-07 15:21:22 +00:00
new EnumAsm[Triforce]:
2020-08-15 21:04:16 +00:00
def comment: String =
"foo as enum"
2020-08-15 21:19:36 +00:00
def all: NonEmptyList[Triforce] =
NonEmptyList.of(Courage, Wisdom, Power)
2020-08-15 21:10:37 +00:00
2020-08-15 21:19:36 +00:00
def label(x: Triforce): String =
x.toString.toLowerCase
2020-08-15 21:10:37 +00:00
2020-08-15 21:19:36 +00:00
def comment(x: Triforce): String =
x.toString
2020-08-21 20:43:23 +00:00
sealed trait TestDirection
2020-08-15 21:19:36 +00:00
2022-12-02 01:44:59 +00:00
case object Up extends TestDirection
case object Down extends TestDirection
case object Left extends TestDirection
2020-08-21 20:43:23 +00:00
case object Right extends TestDirection
2020-08-15 21:04:16 +00:00
2022-02-14 23:11:45 +00:00
object TestDirection:
2023-06-19 09:33:38 +00:00
given bitFieldDirection: BitField[TestDirection] =
2022-09-07 15:21:22 +00:00
new BitField[TestDirection]:
2020-08-26 05:35:37 +00:00
def definitionGroupComment: String =
2020-08-15 21:04:16 +00:00
"foo as bit field"
2020-08-21 20:43:23 +00:00
def all: NonEmptyList[TestDirection] =
2020-08-15 21:19:36 +00:00
NonEmptyList.of(Up, Down, Left, Right)
2020-08-15 21:04:16 +00:00
2020-08-21 20:43:23 +00:00
def label(x: TestDirection): String =
2020-08-15 21:19:36 +00:00
x.toString.toLowerCase