116 lines
2.7 KiB
Kotlin
116 lines
2.7 KiB
Kotlin
package function.builtin.math
|
|
|
|
import function.ArgumentValidator.BadArgumentTypeException
|
|
import function.ArgumentValidator.TooFewArgumentsException
|
|
import function.ArgumentValidator.TooManyArgumentsException
|
|
import function.builtin.math.Divide.DivideByZeroException
|
|
import org.junit.jupiter.api.Assertions.assertThrows
|
|
import org.junit.jupiter.api.Test
|
|
import sexpression.LispNumber
|
|
import testutil.LispTestInstance
|
|
import testutil.SymbolAndFunctionCleaner
|
|
import testutil.TestUtilities.assertSExpressionsMatch
|
|
import testutil.TestUtilities.evaluateString
|
|
|
|
@LispTestInstance
|
|
class RemainderTest : SymbolAndFunctionCleaner() {
|
|
|
|
@Test
|
|
fun rem() {
|
|
val input = "(rem 5 3)"
|
|
|
|
assertSExpressionsMatch(LispNumber("2"), evaluateString(input))
|
|
}
|
|
|
|
@Test
|
|
fun remainder() {
|
|
val input = "(remainder 11 7)"
|
|
|
|
assertSExpressionsMatch(LispNumber("4"), evaluateString(input))
|
|
}
|
|
|
|
@Test
|
|
fun dividendGreaterThanDivisor() {
|
|
val input = "(rem 21 19)"
|
|
|
|
assertSExpressionsMatch(LispNumber("2"), evaluateString(input))
|
|
}
|
|
|
|
@Test
|
|
fun dividendLessThanDivisor() {
|
|
val input = "(rem 5 239)"
|
|
|
|
assertSExpressionsMatch(LispNumber("5"), evaluateString(input))
|
|
}
|
|
|
|
@Test
|
|
fun dividendEqualToDivisor() {
|
|
val input = "(rem 5 5)"
|
|
|
|
assertSExpressionsMatch(LispNumber("0"), evaluateString(input))
|
|
}
|
|
|
|
@Test
|
|
fun dividendMultipleOfDivisor() {
|
|
val input = "(rem 20 5)"
|
|
|
|
assertSExpressionsMatch(LispNumber("0"), evaluateString(input))
|
|
}
|
|
|
|
@Test
|
|
fun divisorOfOne() {
|
|
val input = "(rem 5 1)"
|
|
|
|
assertSExpressionsMatch(LispNumber("0"), evaluateString(input))
|
|
}
|
|
|
|
@Test
|
|
fun dividendOfZero() {
|
|
val input = "(rem 0 2309)"
|
|
|
|
assertSExpressionsMatch(LispNumber("0"), evaluateString(input))
|
|
}
|
|
|
|
@Test
|
|
fun negativeDividend() {
|
|
val input = "(rem -23 25)"
|
|
|
|
assertSExpressionsMatch(LispNumber("-23"), evaluateString(input))
|
|
}
|
|
|
|
@Test
|
|
fun negativeDivisor() {
|
|
val input = "(rem 5 -11)"
|
|
|
|
assertSExpressionsMatch(LispNumber("5"), evaluateString(input))
|
|
}
|
|
|
|
@Test
|
|
fun divisorOfZero() {
|
|
assertThrows(DivideByZeroException::class.java) {
|
|
evaluateString("(rem 5 0)")
|
|
}
|
|
}
|
|
|
|
@Test
|
|
fun remWithNonNumber() {
|
|
assertThrows(BadArgumentTypeException::class.java) {
|
|
evaluateString("(rem 'a 'b)")
|
|
}
|
|
}
|
|
|
|
@Test
|
|
fun remWithTooFewArguments() {
|
|
assertThrows(TooFewArgumentsException::class.java) {
|
|
evaluateString("(rem 1)")
|
|
}
|
|
}
|
|
|
|
@Test
|
|
fun remWithTooManyArguments() {
|
|
assertThrows(TooManyArgumentsException::class.java) {
|
|
evaluateString("(rem 1 2 3)")
|
|
}
|
|
}
|
|
}
|