Skip to content

Commit 7e9544e

Browse files
author
Oron Port
committed
fix lack decimal operation between a Scala Int on the LHS and DFHDL Int on the RHS
1 parent 18b4b19 commit 7e9544e

File tree

2 files changed

+52
-1
lines changed

2 files changed

+52
-1
lines changed

core/src/main/scala/dfhdl/core/DFDecimal.scala

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -330,7 +330,7 @@ object DFDecimal:
330330
): Either[String, (Boolean, Int, Int, BigInt)] =
331331
dec.replace(",", "").replace("_", "") match
332332
case intExp(numStr) => Right(fromIntDecString(numStr, signedForced))
333-
case _ =>
333+
case _ =>
334334
Left(s"Invalid decimal pattern found: $dec")
335335
end match
336336
end fromDecString
@@ -916,6 +916,27 @@ object DFXInt:
916916
def >>[P](shift: DFValTP[DFInt32, P])(using dfc: DFC): DFValTP[DFInt32, CONST | P] = trydf {
917917
DFVal.Func(DFInt32, FuncOp.>>, List(DFConstInt32(lhs), shift)).asValTP[DFInt32, P]
918918
}
919+
def +[P](rhs: DFValTP[DFInt32, P])(using dfc: DFC): DFValTP[DFInt32, P] = trydf {
920+
DFVal.Func(DFInt32, FuncOp.+, List(DFConstInt32(lhs), rhs)).asValTP[DFInt32, P]
921+
}
922+
def -[P](rhs: DFValTP[DFInt32, P])(using dfc: DFC): DFValTP[DFInt32, P] = trydf {
923+
DFVal.Func(DFInt32, FuncOp.-, List(DFConstInt32(lhs), rhs)).asValTP[DFInt32, P]
924+
}
925+
def *[P](rhs: DFValTP[DFInt32, P])(using dfc: DFC): DFValTP[DFInt32, P] = trydf {
926+
DFVal.Func(DFInt32, FuncOp.`*`, List(DFConstInt32(lhs), rhs)).asValTP[DFInt32, P]
927+
}
928+
def /[P](rhs: DFValTP[DFInt32, P])(using dfc: DFC): DFValTP[DFInt32, P] = trydf {
929+
DFVal.Func(DFInt32, FuncOp./, List(DFConstInt32(lhs), rhs)).asValTP[DFInt32, P]
930+
}
931+
def %[P](rhs: DFValTP[DFInt32, P])(using dfc: DFC): DFValTP[DFInt32, P] = trydf {
932+
DFVal.Func(DFInt32, FuncOp.%, List(DFConstInt32(lhs), rhs)).asValTP[DFInt32, P]
933+
}
934+
def max[P](rhs: DFValTP[DFInt32, P])(using dfc: DFC): DFValTP[DFInt32, P] = trydf {
935+
DFVal.Func(DFInt32, FuncOp.max, List(DFConstInt32(lhs), rhs)).asValTP[DFInt32, P]
936+
}
937+
def min[P](rhs: DFValTP[DFInt32, P])(using dfc: DFC): DFValTP[DFInt32, P] = trydf {
938+
DFVal.Func(DFInt32, FuncOp.min, List(DFConstInt32(lhs), rhs)).asValTP[DFInt32, P]
939+
}
919940
def **[P](shift: DFValTP[DFInt32, P])(using dfc: DFC): DFValTP[DFInt32, P] = trydf {
920941
DFVal.Func(DFInt32, FuncOp.**, List(DFConstInt32(lhs), shift)).asValTP[DFInt32, P]
921942
}

core/src/test/scala/CoreSpec/DFDecimalSpec.scala

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -552,4 +552,34 @@ class DFDecimalSpec extends DFSpec:
552552
"""u8 % d"9'22""""
553553
)
554554
}
555+
test("Int32 arithmetic") {
556+
val param: Int <> CONST = 2
557+
val t1 = 1 + param
558+
val r1: Int <> CONST = 3
559+
assertEquals(t1, r1)
560+
val t2 = 1 - param
561+
val r2: Int <> CONST = -1
562+
assertEquals(t2, r2)
563+
val t3 = 4 * param
564+
val r3: Int <> CONST = 8
565+
assertEquals(t3, r3)
566+
val t4 = 10 / param
567+
val r4: Int <> CONST = 5
568+
assertEquals(t4, r4)
569+
val t5 = 10 % param
570+
val r5: Int <> CONST = 0
571+
assertEquals(t5, r5)
572+
val t6 = 3 ** param
573+
val r6: Int <> CONST = 9
574+
assertEquals(t6, r6)
575+
val t7 = 1 max param
576+
val r7: Int <> CONST = 2
577+
assertEquals(t7, r7)
578+
val t8 = 1 min param
579+
val r8: Int <> CONST = 1
580+
assertEquals(t8, r8)
581+
val t9 = 2 ** param
582+
val r9: Int <> CONST = 4
583+
assertEquals(t9, r9)
584+
}
555585
end DFDecimalSpec

0 commit comments

Comments
 (0)