78 lines
1.4 KiB
Kotlin
78 lines
1.4 KiB
Kotlin
|
package net.shadowfacts.kiwidsl
|
||
|
|
||
|
import no.birkett.kiwi.Solver
|
||
|
import no.birkett.kiwi.Variable
|
||
|
import org.junit.jupiter.api.Assertions.*
|
||
|
import org.junit.jupiter.api.BeforeEach
|
||
|
import org.junit.jupiter.api.Test
|
||
|
import kotlin.math.abs
|
||
|
|
||
|
/**
|
||
|
* @author shadowfacts
|
||
|
*/
|
||
|
class DSLTest {
|
||
|
|
||
|
val EPSILON = 1.0e-8
|
||
|
|
||
|
lateinit var solver: Solver
|
||
|
|
||
|
@BeforeEach
|
||
|
fun setup() {
|
||
|
solver = Solver()
|
||
|
}
|
||
|
|
||
|
@Test
|
||
|
fun simpleNew() {
|
||
|
val x = Variable("x")
|
||
|
solver.dsl {
|
||
|
(x + 2) equalTo 20
|
||
|
}
|
||
|
solver.updateVariables()
|
||
|
assertEquals(x.value, 18.0, EPSILON)
|
||
|
}
|
||
|
|
||
|
@Test
|
||
|
fun simple0() {
|
||
|
val x = Variable("x")
|
||
|
val y = Variable("y")
|
||
|
solver.dsl {
|
||
|
x equalTo 20
|
||
|
(x + 2) equalTo (y + 10)
|
||
|
}
|
||
|
solver.updateVariables()
|
||
|
assertEquals(x.value, 20.0, EPSILON)
|
||
|
assertEquals(y.value, 12.0, EPSILON)
|
||
|
}
|
||
|
|
||
|
@Test
|
||
|
fun simple1() {
|
||
|
val x = Variable("x")
|
||
|
val y = Variable("y")
|
||
|
solver.dsl {
|
||
|
x equalTo y
|
||
|
}
|
||
|
solver.updateVariables()
|
||
|
assertEquals(x.value, y.value, EPSILON)
|
||
|
}
|
||
|
|
||
|
@Test
|
||
|
fun casso1() {
|
||
|
val x = Variable("x")
|
||
|
val y = Variable("y")
|
||
|
solver.dsl {
|
||
|
x lessThanOrEqualTo y
|
||
|
y equalTo (x + 3)
|
||
|
x.equalTo(10, strength = WEAK)
|
||
|
y.equalTo(10, strength = WEAK)
|
||
|
}
|
||
|
solver.updateVariables()
|
||
|
if (abs(x.value - 10.0) < EPSILON) {
|
||
|
assertEquals(10.0, x.value, EPSILON)
|
||
|
assertEquals(13.0, y.value, EPSILON)
|
||
|
} else {
|
||
|
assertEquals(7.0, x.value, EPSILON)
|
||
|
assertEquals(10.0, y.value, EPSILON)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|