2019-06-24 20:18:50 +00:00
|
|
|
package prog8tests
|
|
|
|
|
2021-11-07 23:16:58 +00:00
|
|
|
import io.kotest.core.spec.style.FunSpec
|
2021-11-08 14:50:29 +00:00
|
|
|
import io.kotest.matchers.shouldBe
|
|
|
|
import io.kotest.matchers.shouldNotBe
|
2019-07-08 11:30:28 +00:00
|
|
|
import prog8.ast.base.DataType
|
|
|
|
import prog8.ast.base.Position
|
2019-08-13 01:00:17 +00:00
|
|
|
import prog8.ast.expressions.ArrayLiteralValue
|
2020-03-12 00:10:19 +00:00
|
|
|
import prog8.ast.expressions.InferredTypes
|
2019-07-17 00:11:16 +00:00
|
|
|
import prog8.ast.expressions.NumericLiteralValue
|
2019-08-13 01:00:17 +00:00
|
|
|
import prog8.ast.expressions.StringLiteralValue
|
2019-06-24 20:18:50 +00:00
|
|
|
|
2021-11-07 23:16:58 +00:00
|
|
|
class TestNumericLiteralValue: FunSpec({
|
2019-06-24 20:18:50 +00:00
|
|
|
|
2021-11-07 23:16:58 +00:00
|
|
|
fun sameValueAndType(lv1: NumericLiteralValue, lv2: NumericLiteralValue): Boolean {
|
2021-06-01 19:21:33 +00:00
|
|
|
return lv1.type==lv2.type && lv1==lv2
|
|
|
|
}
|
|
|
|
|
2021-11-07 23:16:58 +00:00
|
|
|
val dummyPos = Position("test", 0, 0, 0)
|
2019-06-24 20:18:50 +00:00
|
|
|
|
2021-11-07 23:16:58 +00:00
|
|
|
test("testIdentity") {
|
2021-11-16 22:52:30 +00:00
|
|
|
val v = NumericLiteralValue(DataType.UWORD, 12345.0, dummyPos)
|
2021-11-08 14:50:29 +00:00
|
|
|
(v==v) shouldBe true
|
|
|
|
(v != v) shouldBe false
|
|
|
|
(v <= v) shouldBe true
|
|
|
|
(v >= v) shouldBe true
|
|
|
|
(v < v ) shouldBe false
|
|
|
|
(v > v ) shouldBe false
|
|
|
|
|
2021-11-16 22:52:30 +00:00
|
|
|
sameValueAndType(NumericLiteralValue(DataType.UWORD, 12345.0, dummyPos), NumericLiteralValue(DataType.UWORD, 12345.0, dummyPos)) shouldBe true
|
|
|
|
}
|
|
|
|
|
|
|
|
test("test rounding") {
|
|
|
|
NumericLiteralValue(DataType.BYTE, -2.345, dummyPos).number shouldBe -2.0
|
|
|
|
NumericLiteralValue(DataType.BYTE, -2.6, dummyPos).number shouldBe -3.0
|
|
|
|
NumericLiteralValue(DataType.UWORD, 2222.345, dummyPos).number shouldBe 2222.0
|
|
|
|
NumericLiteralValue(DataType.UWORD, 2222.6, dummyPos).number shouldBe 2223.0
|
|
|
|
NumericLiteralValue(DataType.FLOAT, 123.456, dummyPos).number shouldBe 123.456
|
2019-06-24 20:18:50 +00:00
|
|
|
}
|
|
|
|
|
2021-11-07 23:16:58 +00:00
|
|
|
test("testEqualsAndNotEquals") {
|
2021-11-16 22:52:30 +00:00
|
|
|
(NumericLiteralValue(DataType.UBYTE, 100.0, dummyPos) == NumericLiteralValue(DataType.UBYTE, 100.0, dummyPos)) shouldBe true
|
|
|
|
(NumericLiteralValue(DataType.UBYTE, 100.0, dummyPos) == NumericLiteralValue(DataType.UWORD, 100.0, dummyPos)) shouldBe true
|
|
|
|
(NumericLiteralValue(DataType.UBYTE, 100.0, dummyPos) == NumericLiteralValue(DataType.FLOAT, 100.0, dummyPos)) shouldBe true
|
|
|
|
(NumericLiteralValue(DataType.UWORD, 254.0, dummyPos) == NumericLiteralValue(DataType.UBYTE, 254.0, dummyPos)) shouldBe true
|
|
|
|
(NumericLiteralValue(DataType.UWORD, 12345.0, dummyPos) == NumericLiteralValue(DataType.UWORD, 12345.0, dummyPos)) shouldBe true
|
|
|
|
(NumericLiteralValue(DataType.UWORD, 12345.0, dummyPos) == NumericLiteralValue(DataType.FLOAT, 12345.0, dummyPos)) shouldBe true
|
|
|
|
(NumericLiteralValue(DataType.FLOAT, 100.0, dummyPos) == NumericLiteralValue(DataType.UBYTE, 100.0, dummyPos)) shouldBe true
|
|
|
|
(NumericLiteralValue(DataType.FLOAT, 22239.0, dummyPos) == NumericLiteralValue(DataType.UWORD, 22239.0, dummyPos)) shouldBe true
|
2021-11-08 14:50:29 +00:00
|
|
|
(NumericLiteralValue(DataType.FLOAT, 9.99, dummyPos) == NumericLiteralValue(DataType.FLOAT, 9.99, dummyPos)) shouldBe true
|
|
|
|
|
2021-11-16 22:52:30 +00:00
|
|
|
sameValueAndType(NumericLiteralValue(DataType.UBYTE, 100.0, dummyPos), NumericLiteralValue(DataType.UBYTE, 100.0, dummyPos)) shouldBe true
|
|
|
|
sameValueAndType(NumericLiteralValue(DataType.UBYTE, 100.0, dummyPos), NumericLiteralValue(DataType.UWORD, 100.0, dummyPos)) shouldBe false
|
|
|
|
sameValueAndType(NumericLiteralValue(DataType.UBYTE, 100.0, dummyPos), NumericLiteralValue(DataType.FLOAT, 100.0, dummyPos)) shouldBe false
|
|
|
|
sameValueAndType(NumericLiteralValue(DataType.UWORD, 254.0, dummyPos), NumericLiteralValue(DataType.UBYTE, 254.0, dummyPos)) shouldBe false
|
|
|
|
sameValueAndType(NumericLiteralValue(DataType.UWORD, 12345.0, dummyPos), NumericLiteralValue(DataType.UWORD, 12345.0, dummyPos)) shouldBe true
|
|
|
|
sameValueAndType(NumericLiteralValue(DataType.UWORD, 12345.0, dummyPos), NumericLiteralValue(DataType.FLOAT, 12345.0, dummyPos)) shouldBe false
|
|
|
|
sameValueAndType(NumericLiteralValue(DataType.FLOAT, 100.0, dummyPos), NumericLiteralValue(DataType.UBYTE, 100.0, dummyPos)) shouldBe false
|
|
|
|
sameValueAndType(NumericLiteralValue(DataType.FLOAT, 22239.0, dummyPos), NumericLiteralValue(DataType.UWORD, 22239.0, dummyPos)) shouldBe false
|
2021-11-08 14:50:29 +00:00
|
|
|
sameValueAndType(NumericLiteralValue(DataType.FLOAT, 9.99, dummyPos), NumericLiteralValue(DataType.FLOAT, 9.99, dummyPos)) shouldBe true
|
|
|
|
|
2021-11-16 22:52:30 +00:00
|
|
|
(NumericLiteralValue(DataType.UBYTE, 100.0, dummyPos) != NumericLiteralValue(DataType.UBYTE, 101.0, dummyPos)) shouldBe true
|
|
|
|
(NumericLiteralValue(DataType.UBYTE, 100.0, dummyPos) != NumericLiteralValue(DataType.UWORD, 101.0, dummyPos)) shouldBe true
|
|
|
|
(NumericLiteralValue(DataType.UBYTE, 100.0, dummyPos) != NumericLiteralValue(DataType.FLOAT, 101.0, dummyPos)) shouldBe true
|
|
|
|
(NumericLiteralValue(DataType.UWORD, 245.0, dummyPos) != NumericLiteralValue(DataType.UBYTE, 246.0, dummyPos)) shouldBe true
|
|
|
|
(NumericLiteralValue(DataType.UWORD, 12345.0, dummyPos) != NumericLiteralValue(DataType.UWORD, 12346.0, dummyPos)) shouldBe true
|
|
|
|
(NumericLiteralValue(DataType.UWORD, 12345.0, dummyPos) != NumericLiteralValue(DataType.FLOAT, 12346.0, dummyPos)) shouldBe true
|
|
|
|
(NumericLiteralValue(DataType.FLOAT, 9.99, dummyPos) != NumericLiteralValue(DataType.UBYTE, 9.0, dummyPos)) shouldBe true
|
|
|
|
(NumericLiteralValue(DataType.FLOAT, 9.99, dummyPos) != NumericLiteralValue(DataType.UWORD, 9.0, dummyPos)) shouldBe true
|
2021-11-08 14:50:29 +00:00
|
|
|
(NumericLiteralValue(DataType.FLOAT, 9.99, dummyPos) != NumericLiteralValue(DataType.FLOAT, 9.0, dummyPos)) shouldBe true
|
|
|
|
|
2021-11-16 22:52:30 +00:00
|
|
|
sameValueAndType(NumericLiteralValue(DataType.UBYTE, 100.0, dummyPos), NumericLiteralValue(DataType.UBYTE, 101.0, dummyPos)) shouldBe false
|
|
|
|
sameValueAndType(NumericLiteralValue(DataType.UBYTE, 100.0, dummyPos), NumericLiteralValue(DataType.UWORD, 101.0, dummyPos)) shouldBe false
|
|
|
|
sameValueAndType(NumericLiteralValue(DataType.UBYTE, 100.0, dummyPos), NumericLiteralValue(DataType.FLOAT, 101.0, dummyPos)) shouldBe false
|
|
|
|
sameValueAndType(NumericLiteralValue(DataType.UWORD, 245.0, dummyPos), NumericLiteralValue(DataType.UBYTE, 246.0, dummyPos)) shouldBe false
|
|
|
|
sameValueAndType(NumericLiteralValue(DataType.UWORD, 12345.0, dummyPos), NumericLiteralValue(DataType.UWORD, 12346.0, dummyPos)) shouldBe false
|
|
|
|
sameValueAndType(NumericLiteralValue(DataType.UWORD, 12345.0, dummyPos), NumericLiteralValue(DataType.FLOAT, 12346.0, dummyPos)) shouldBe false
|
|
|
|
sameValueAndType(NumericLiteralValue(DataType.FLOAT, 9.99, dummyPos), NumericLiteralValue(DataType.UBYTE, 9.0, dummyPos)) shouldBe false
|
|
|
|
sameValueAndType(NumericLiteralValue(DataType.FLOAT, 9.99, dummyPos), NumericLiteralValue(DataType.UWORD, 9.0, dummyPos)) shouldBe false
|
2021-11-08 14:50:29 +00:00
|
|
|
sameValueAndType(NumericLiteralValue(DataType.FLOAT, 9.99, dummyPos), NumericLiteralValue(DataType.FLOAT, 9.0, dummyPos)) shouldBe false
|
2019-07-14 22:26:06 +00:00
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2021-11-07 23:16:58 +00:00
|
|
|
test("testEqualsRef") {
|
2021-11-08 14:50:29 +00:00
|
|
|
(StringLiteralValue("hello", false, dummyPos) == StringLiteralValue("hello", false, dummyPos)) shouldBe true
|
|
|
|
(StringLiteralValue("hello", false, dummyPos) != StringLiteralValue("bye", false, dummyPos)) shouldBe true
|
|
|
|
(StringLiteralValue("hello", true, dummyPos) == StringLiteralValue("hello", true, dummyPos)) shouldBe true
|
|
|
|
(StringLiteralValue("hello", true, dummyPos) != StringLiteralValue("bye", true, dummyPos)) shouldBe true
|
|
|
|
(StringLiteralValue("hello", true, dummyPos) != StringLiteralValue("hello", false, dummyPos)) shouldBe true
|
2019-07-14 22:26:06 +00:00
|
|
|
|
2021-11-16 22:52:30 +00:00
|
|
|
val lvOne = NumericLiteralValue(DataType.UBYTE, 1.0, dummyPos)
|
|
|
|
val lvTwo = NumericLiteralValue(DataType.UBYTE, 2.0, dummyPos)
|
|
|
|
val lvThree = NumericLiteralValue(DataType.UBYTE, 3.0, dummyPos)
|
|
|
|
val lvOneR = NumericLiteralValue(DataType.UBYTE, 1.0, dummyPos)
|
|
|
|
val lvTwoR = NumericLiteralValue(DataType.UBYTE, 2.0, dummyPos)
|
|
|
|
val lvThreeR = NumericLiteralValue(DataType.UBYTE, 3.0, dummyPos)
|
|
|
|
val lvFour= NumericLiteralValue(DataType.UBYTE, 4.0, dummyPos)
|
2020-03-12 00:10:19 +00:00
|
|
|
val lv1 = ArrayLiteralValue(InferredTypes.InferredType.known(DataType.ARRAY_UB), arrayOf(lvOne, lvTwo, lvThree), dummyPos)
|
|
|
|
val lv2 = ArrayLiteralValue(InferredTypes.InferredType.known(DataType.ARRAY_UB), arrayOf(lvOneR, lvTwoR, lvThreeR), dummyPos)
|
|
|
|
val lv3 = ArrayLiteralValue(InferredTypes.InferredType.known(DataType.ARRAY_UB), arrayOf(lvOneR, lvTwoR, lvFour), dummyPos)
|
2021-11-08 14:50:29 +00:00
|
|
|
lv1 shouldBe lv2
|
|
|
|
lv1 shouldNotBe lv3
|
2019-06-24 20:18:50 +00:00
|
|
|
}
|
|
|
|
|
2021-11-07 23:16:58 +00:00
|
|
|
test("testGreaterThan") {
|
2021-11-16 22:52:30 +00:00
|
|
|
(NumericLiteralValue(DataType.UBYTE, 100.0, dummyPos) > NumericLiteralValue(DataType.UBYTE, 99.0, dummyPos)) shouldBe true
|
|
|
|
(NumericLiteralValue(DataType.UWORD, 254.0, dummyPos) > NumericLiteralValue(DataType.UWORD, 253.0, dummyPos)) shouldBe true
|
2021-11-08 14:50:29 +00:00
|
|
|
(NumericLiteralValue(DataType.FLOAT, 100.0, dummyPos) > NumericLiteralValue(DataType.FLOAT, 99.9, dummyPos)) shouldBe true
|
2019-06-24 20:18:50 +00:00
|
|
|
|
2021-11-16 22:52:30 +00:00
|
|
|
(NumericLiteralValue(DataType.UBYTE, 100.0, dummyPos) >= NumericLiteralValue(DataType.UBYTE, 100.0, dummyPos)) shouldBe true
|
|
|
|
(NumericLiteralValue(DataType.UWORD, 254.0, dummyPos) >= NumericLiteralValue(DataType.UWORD, 254.0, dummyPos)) shouldBe true
|
2021-11-08 14:50:29 +00:00
|
|
|
(NumericLiteralValue(DataType.FLOAT, 100.0, dummyPos) >= NumericLiteralValue(DataType.FLOAT, 100.0, dummyPos)) shouldBe true
|
2019-06-24 20:18:50 +00:00
|
|
|
|
2021-11-16 22:52:30 +00:00
|
|
|
(NumericLiteralValue(DataType.UBYTE, 100.0, dummyPos) > NumericLiteralValue(DataType.UBYTE, 100.0, dummyPos)) shouldBe false
|
|
|
|
(NumericLiteralValue(DataType.UWORD, 254.0, dummyPos) > NumericLiteralValue(DataType.UWORD, 254.0, dummyPos)) shouldBe false
|
2021-11-08 14:50:29 +00:00
|
|
|
(NumericLiteralValue(DataType.FLOAT, 100.0, dummyPos) > NumericLiteralValue(DataType.FLOAT, 100.0, dummyPos)) shouldBe false
|
2019-06-24 20:18:50 +00:00
|
|
|
|
2021-11-16 22:52:30 +00:00
|
|
|
(NumericLiteralValue(DataType.UBYTE, 100.0, dummyPos) >= NumericLiteralValue(DataType.UBYTE, 101.0, dummyPos)) shouldBe false
|
|
|
|
(NumericLiteralValue(DataType.UWORD, 254.0, dummyPos) >= NumericLiteralValue(DataType.UWORD, 255.0, dummyPos)) shouldBe false
|
2021-11-08 14:50:29 +00:00
|
|
|
(NumericLiteralValue(DataType.FLOAT, 100.0, dummyPos) >= NumericLiteralValue(DataType.FLOAT, 100.1, dummyPos)) shouldBe false
|
2019-06-24 20:18:50 +00:00
|
|
|
}
|
|
|
|
|
2021-11-07 23:16:58 +00:00
|
|
|
test("testLessThan") {
|
2021-11-16 22:52:30 +00:00
|
|
|
(NumericLiteralValue(DataType.UBYTE, 100.0, dummyPos) < NumericLiteralValue(DataType.UBYTE, 101.0, dummyPos)) shouldBe true
|
|
|
|
(NumericLiteralValue(DataType.UWORD, 254.0, dummyPos) < NumericLiteralValue(DataType.UWORD, 255.0, dummyPos)) shouldBe true
|
2021-11-08 14:50:29 +00:00
|
|
|
(NumericLiteralValue(DataType.FLOAT, 100.0, dummyPos) < NumericLiteralValue(DataType.FLOAT, 100.1, dummyPos)) shouldBe true
|
2019-06-24 20:18:50 +00:00
|
|
|
|
2021-11-16 22:52:30 +00:00
|
|
|
(NumericLiteralValue(DataType.UBYTE, 100.0, dummyPos) <= NumericLiteralValue(DataType.UBYTE, 100.0, dummyPos)) shouldBe true
|
|
|
|
(NumericLiteralValue(DataType.UWORD, 254.0, dummyPos) <= NumericLiteralValue(DataType.UWORD, 254.0, dummyPos)) shouldBe true
|
2021-11-08 14:50:29 +00:00
|
|
|
(NumericLiteralValue(DataType.FLOAT, 100.0, dummyPos) <= NumericLiteralValue(DataType.FLOAT, 100.0, dummyPos)) shouldBe true
|
2019-06-24 20:18:50 +00:00
|
|
|
|
2021-11-16 22:52:30 +00:00
|
|
|
(NumericLiteralValue(DataType.UBYTE, 100.0, dummyPos) < NumericLiteralValue(DataType.UBYTE, 100.0, dummyPos)) shouldBe false
|
|
|
|
(NumericLiteralValue(DataType.UWORD, 254.0, dummyPos) < NumericLiteralValue(DataType.UWORD, 254.0, dummyPos)) shouldBe false
|
2021-11-08 14:50:29 +00:00
|
|
|
(NumericLiteralValue(DataType.FLOAT, 100.0, dummyPos) < NumericLiteralValue(DataType.FLOAT, 100.0, dummyPos)) shouldBe false
|
2019-06-24 20:18:50 +00:00
|
|
|
|
2021-11-16 22:52:30 +00:00
|
|
|
(NumericLiteralValue(DataType.UBYTE, 100.0, dummyPos) <= NumericLiteralValue(DataType.UBYTE, 99.0, dummyPos)) shouldBe false
|
|
|
|
(NumericLiteralValue(DataType.UWORD, 254.0, dummyPos) <= NumericLiteralValue(DataType.UWORD, 253.0, dummyPos)) shouldBe false
|
2021-11-08 14:50:29 +00:00
|
|
|
(NumericLiteralValue(DataType.FLOAT, 100.0, dummyPos) <= NumericLiteralValue(DataType.FLOAT, 99.9, dummyPos)) shouldBe false
|
2019-06-24 20:18:50 +00:00
|
|
|
}
|
|
|
|
|
2021-11-07 23:16:58 +00:00
|
|
|
})
|