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) } } }