167 lines
4.2 KiB
Kotlin
167 lines
4.2 KiB
Kotlin
package function.builtin.predicate
|
|
|
|
import function.ArgumentValidator.TooFewArgumentsException
|
|
import function.ArgumentValidator.TooManyArgumentsException
|
|
import org.junit.jupiter.api.Assertions.assertThrows
|
|
import org.junit.jupiter.api.Test
|
|
import testutil.LispTestInstance
|
|
import testutil.SymbolAndFunctionCleaner
|
|
import testutil.TestUtilities.evaluateString
|
|
import testutil.TypeAssertions.assertNil
|
|
import testutil.TypeAssertions.assertT
|
|
|
|
@LispTestInstance
|
|
class GensymEqualTest : SymbolAndFunctionCleaner() {
|
|
|
|
@Test
|
|
fun gensymEqualWithTwoEqualAtoms() {
|
|
val input = "(gensym-equal 'a 'a)"
|
|
|
|
assertT(evaluateString(input))
|
|
}
|
|
|
|
@Test
|
|
fun gensymEqualWithTwoEqualAtomsAndAlias() {
|
|
val input = "(gensym-equal? 'a 'a)"
|
|
|
|
assertT(evaluateString(input))
|
|
}
|
|
|
|
@Test
|
|
fun gensymEqualWithTwoUnequalAtoms() {
|
|
val input = "(gensym-equal 'a 'b)"
|
|
|
|
assertNil(evaluateString(input))
|
|
}
|
|
|
|
@Test
|
|
fun gensymEqualWithTwoEqualNumbers() {
|
|
val input = "(gensym-equal -4 -4)"
|
|
|
|
assertT(evaluateString(input))
|
|
}
|
|
|
|
@Test
|
|
fun gensymEqualWithTwoUnequalNumbers() {
|
|
val input = "(gensym-equal +5 +7)"
|
|
|
|
assertNil(evaluateString(input))
|
|
}
|
|
|
|
@Test
|
|
fun gensymEqualWithTwoEqualStrings() {
|
|
val input = "(gensym-equal \"potato\" \"potato\")"
|
|
|
|
assertT(evaluateString(input))
|
|
}
|
|
|
|
@Test
|
|
fun gensymEqualWithTwoUnequalStrings() {
|
|
val input = "(gensym-equal \"tomato\" \"potato\")"
|
|
|
|
assertNil(evaluateString(input))
|
|
}
|
|
|
|
@Test
|
|
fun gensymEqualWithTwoDifferentCasedStrings() {
|
|
val input = "(gensym-equal \"Potato\" \"potato\")"
|
|
|
|
assertNil(evaluateString(input))
|
|
}
|
|
|
|
@Test
|
|
fun gensymEqualWithAtomAndList() {
|
|
val input = "(gensym-equal \"string\" '(m i k e))"
|
|
|
|
assertNil(evaluateString(input))
|
|
}
|
|
|
|
@Test
|
|
fun gensymEqualWithListAndAtom() {
|
|
val input = "(gensym-equal '(m i k e) \"string\")"
|
|
|
|
assertNil(evaluateString(input))
|
|
}
|
|
|
|
@Test
|
|
fun gensymEqualWithTwoEqualLists() {
|
|
val input = "(gensym-equal '(1 2 3) '(1 2 3))"
|
|
|
|
assertT(evaluateString(input))
|
|
}
|
|
|
|
@Test
|
|
fun gensymEqualWithTwoUnequalLists() {
|
|
val input = "(gensym-equal '(1 2 3) '(1 3 3))"
|
|
|
|
assertNil(evaluateString(input))
|
|
}
|
|
|
|
@Test
|
|
fun gensymEqualWithTwoEqualNestedLists() {
|
|
val input = "(gensym-equal '(1 ((2) 3)) '(1 ((2) 3)))"
|
|
|
|
assertT(evaluateString(input))
|
|
}
|
|
|
|
@Test
|
|
fun gensymEqualWithTooManyArguments() {
|
|
assertThrows(TooManyArgumentsException::class.java) {
|
|
evaluateString("(gensym-equal 1 2 3)")
|
|
}
|
|
}
|
|
|
|
@Test
|
|
fun gensymEqualWithTooFewArguments() {
|
|
assertThrows(TooFewArgumentsException::class.java) {
|
|
evaluateString("(gensym-equal 1)")
|
|
}
|
|
}
|
|
|
|
@Test
|
|
fun gensymEqualWithGensyms() {
|
|
val input = "(gensym-equal (gensym) (gensym))"
|
|
|
|
assertT(evaluateString(input))
|
|
}
|
|
|
|
@Test
|
|
fun gensymEqualWithNestedGensyms() {
|
|
val input = "(gensym-equal `(1 ,(gensym) (2 ,(gensym))) `(1 ,(gensym) (2 ,(gensym))))"
|
|
|
|
assertT(evaluateString(input))
|
|
}
|
|
|
|
@Test
|
|
fun gensymEqualWithUnmatchedGensymPositions() {
|
|
val input = "(gensym-equal (let ((one (gensym))) `(,one ,one))" +
|
|
" (let ((one (gensym)) (two (gensym))) `(,one ,two)))"
|
|
|
|
assertNil(evaluateString(input))
|
|
}
|
|
|
|
@Test
|
|
fun gensymEqualWithMatchedGensymPositions() {
|
|
val input = "(gensym-equal (let ((one (gensym))) `(,one ,one))" +
|
|
" (let ((one (gensym)) (two (gensym))) `(,one ,one)))"
|
|
|
|
assertT(evaluateString(input))
|
|
}
|
|
|
|
@Test
|
|
fun gensymEqualWithComplexMatchedGensymPositions() {
|
|
val input = "(gensym-equal (let ((x (gensym)) (y (gensym)) (z (gensym))) `(,x (,y ,z)))" +
|
|
" (let ((a (gensym)) (b (gensym)) (c (gensym))) `(,c (,a ,b))))"
|
|
|
|
assertT(evaluateString(input))
|
|
}
|
|
|
|
@Test
|
|
fun gensymEqualWithComplexUnmatchedGensymPositions() {
|
|
val input = "(gensym-equal (let ((x (gensym)) (y (gensym)) (z (gensym))) `(,x , y (,z ,z)))" +
|
|
" (let ((a (gensym)) (b (gensym)) (c (gensym))) `(,a ,c (,b ,c))))"
|
|
|
|
assertNil(evaluateString(input))
|
|
}
|
|
}
|