transcendental-lisp/src/test/kotlin/function/builtin/FuseTest.kt
2018-10-21 18:25:19 -04:00

68 lines
1.8 KiB
Kotlin

package function.builtin
import function.ArgumentValidator.BadArgumentTypeException
import function.ArgumentValidator.TooFewArgumentsException
import function.ArgumentValidator.TooManyArgumentsException
import org.junit.jupiter.api.Assertions.assertThrows
import org.junit.jupiter.api.Test
import sexpression.Symbol
import testutil.LispTestInstance
import testutil.SymbolAndFunctionCleaner
import testutil.TestUtilities.assertSExpressionsMatch
import testutil.TestUtilities.evaluateString
@LispTestInstance
class FuseTest : SymbolAndFunctionCleaner() {
@Test
fun fuseSymbolAndNumber() {
assertSExpressionsMatch(Symbol("A-1"), evaluateString("(fuse 'a 1)"))
}
@Test
fun fuseTwoSymbols_NeitherQuoted() {
evaluateString("(setq a 'aaa)")
evaluateString("(setq b 'bbb)")
assertSExpressionsMatch(Symbol("AAA-BBB"), evaluateString("(fuse a b)"))
}
@Test
fun fuseTwoSymbols_OneQuoted() {
evaluateString("(setq b 'bbb)")
assertSExpressionsMatch(Symbol("A-BBB"), evaluateString("(fuse 'a b)"))
}
@Test
fun fuseTwoSymbols_BothQuoted() {
assertSExpressionsMatch(Symbol("A-B"), evaluateString("(fuse 'a 'b)"))
}
@Test
fun fuseWithTooFewArguments() {
assertThrows(TooFewArgumentsException::class.java) {
evaluateString("(fuse 'a)")
}
}
@Test
fun fuseWithTooManyArguments() {
assertThrows(TooManyArgumentsException::class.java) {
evaluateString("(fuse 'a 'b 'c)")
}
}
@Test
fun fuseWithBadFirstArgumentType() {
assertThrows(BadArgumentTypeException::class.java) {
evaluateString("(fuse 1 'b)")
}
}
@Test
fun fuseWithBadSecondArgumentType() {
assertThrows(BadArgumentTypeException::class.java) {
evaluateString("(fuse 'a \"b\")")
}
}
}