📄 unifytest.java
字号:
package com.sri.oaa2.test.icl;
import com.sri.oaa2.icl.*;
import junit.framework.TestCase;
public class UnifyTest extends TestCase
{
public UnifyTest(String arg)
{
super(arg);
}
public void testUnifySameSizeListEmptyTails()
{
IclTerm t1 = IclTerm.fromString(true, "[a, b, c]");
IclTerm t2 = IclTerm.fromString(true, "[a, b, c]");
IclTerm t3 = IclTerm.fromString(true, "[a, b, d]");
Unifier u = new Unifier();
IclTerm result = u.unify(t1, t2);
TestCase.assertNotNull(result);
TestCase.assertEquals(t1, result);
result = u.unify(t1, t3);
TestCase.assertNull(result);
}
public void unifySameSizeOneTail(IclTerm t1, IclTerm t2, boolean expected)
{
Unifier u = new Unifier();
IclTerm result = u.unify(t1, t2);
if(expected) {
TestCase.assertNotNull(result);
}
else {
TestCase.assertNull(result);
}
if(expected) {
if(((IclList)t1).hasEmptyTail()) {
TestCase.assertEquals(t1, result);
}
else {
TestCase.assertEquals(t2, result);
}
}
}
public void testUnifySameSizeOneTail()
{
IclTerm t1 = IclTerm.fromString(true, "[a, b | X]");
IclTerm t2 = IclTerm.fromString(true, "[a, b, c]");
IclTerm t3 = IclTerm.fromString(true, "[a, c, d]");
IclTerm t4 = IclTerm.fromString(true, "[a, b, C]");
this.unifySameSizeOneTail(t1, t2, true);
this.unifySameSizeOneTail(t2, t1, true);
this.unifySameSizeOneTail(t1, t3, false);
this.unifySameSizeOneTail(t3, t1, false);
this.unifySameSizeOneTail(t1, t4, true);
this.unifySameSizeOneTail(t4, t1, true);
}
public void testUnifySameSizeBothTails()
{
IclTerm t1 = IclTerm.fromString(true, "[a, b | X]");
IclTerm t2 = IclTerm.fromString(true, "[a, b | X]");
IclTerm t3 = IclTerm.fromString(true, "[a, b | Y]");
IclTerm t4 = IclTerm.fromString(true, "[a, c | X]");
IclTerm t5 = IclTerm.fromString(true, "[a, c | Y]");
Unifier u = new Unifier();
IclTerm result;
{
result = u.unify(t1, t2);
TestCase.assertNotNull(result);
TestCase.assertEquals(t1, result);
}
{
IclList listResult;
listResult = (IclList)u.unify(t1, t3);
TestCase.assertNotNull(listResult);
TestCase.assertTrue(!listResult.hasEmptyTail());
TestCase.assertTrue(listResult.getTerm(listResult.size() - 1).isVar());
TestCase.assertEquals(t1.size(), listResult.size());
TestCase.assertEquals(IclTerm.fromString(true, "a"), listResult.getTerm(0));
TestCase.assertEquals(IclTerm.fromString(true, "b"), listResult.getTerm(1));
TestCase.assertEquals(IclTerm.fromString(true, "Y"), listResult.getTerm(2));
TestCase.assertTrue(!listResult.hasEmptyTail());
}
{
IclList listResult;
listResult = (IclList)u.unify(t3, t1);
TestCase.assertNotNull(listResult);
TestCase.assertTrue(!listResult.hasEmptyTail());
TestCase.assertTrue(listResult.getTerm(listResult.size() - 1).isVar());
TestCase.assertEquals(t1.size(), listResult.size());
TestCase.assertEquals(IclTerm.fromString(true, "a"), listResult.getTerm(0));
TestCase.assertEquals(IclTerm.fromString(true, "b"), listResult.getTerm(1));
TestCase.assertEquals(IclTerm.fromString(true, "X"), listResult.getTerm(2));
TestCase.assertTrue(!listResult.hasEmptyTail());
}
{
result = u.unify(t1, t4);
TestCase.assertTrue(result == null);
}
{
result = u.unify(t4, t1);
TestCase.assertTrue(result == null);
}
{
result = u.unify(t1, t5);
TestCase.assertTrue(result == null);
}
{
result = u.unify(t5, t1);
TestCase.assertTrue(result == null);
}
}
public void testDiffSizeNoTail()
{
IclTerm t1 = IclTerm.fromString(true, "[a, b, c]");
IclTerm t2 = IclTerm.fromString(true, "[a, b]");
Unifier u = new Unifier();
IclTerm result;
{
result = u.unify(t1, t2);
TestCase.assertNull(result);
}
{
result = u.unify(t2, t1);
TestCase.assertNull(result);
}
}
public void testDiffSizeNotList()
{
IclTerm t1 = IclTerm.fromString(true, "a(b, c, d)");
IclTerm t2 = IclTerm.fromString(true, "a(b,c)");
Unifier u = new Unifier();
IclTerm result;
{
result = u.unify(t1, t2);
TestCase.assertNull(result);
}
{
result = u.unify(t2, t1);
TestCase.assertNull(result);
}
}
public void diffSizeOneTail(IclTerm t1, IclTerm t2, boolean expected)
{
Unifier u = new Unifier();
IclTerm result = u.unify(t1, t2);
if(expected) {
TestCase.assertNotNull(result);
}
else {
TestCase.assertNull(result);
}
if(expected) {
if(((IclList)t1).hasEmptyTail()) {
TestCase.assertEquals(t1, result);
}
else {
TestCase.assertEquals(t2, result);
}
}
}
public void testDiffSizeOneTail()
{
IclTerm t1 = IclTerm.fromString(true, "[a, b | X]");
IclTerm t2 = IclTerm.fromString(true, "[a, b]");
IclTerm t3 = IclTerm.fromString(true, "[a, b, c, d]");
IclTerm t4 = IclTerm.fromString(true, "[a, c]");
IclTerm t5 = IclTerm.fromString(true, "[a, c, c]");
IclTerm t6 = IclTerm.fromString(true, "[a, b, c, d, E]");
IclTerm t7 = IclTerm.fromString(true, "[a, b, c, D]");
this.diffSizeOneTail(t1, t2, true);
this.diffSizeOneTail(t2, t1, true);
this.diffSizeOneTail(t1, t3, true);
this.diffSizeOneTail(t3, t1, true);
this.diffSizeOneTail(t1, t4, false);
this.diffSizeOneTail(t4, t1, false);
this.diffSizeOneTail(t1, t5, false);
this.diffSizeOneTail(t5, t1, false);
this.diffSizeOneTail(t1, t6, true);
this.diffSizeOneTail(t6, t1, true);
this.diffSizeOneTail(t1, t7, true);
this.diffSizeOneTail(t7, t1, true);
}
public void diffSizeBothTails(IclTerm t1, IclTerm t2, boolean expected)
{
Unifier u = new Unifier();
IclTerm result = u.unify(t1, t2);
if(!expected) {
TestCase.assertNull(result);
return;
} // fall through
TestCase.assertNotNull(result);
if(t1.size() > t2.size()) {
TestCase.assertEquals(t1, result);
}
else {
TestCase.assertEquals(t2, result);
}
}
public void testDiffSizeBothTails()
{
IclTerm t1 = IclTerm.fromString(true, "[a, b | X]");
IclTerm t2 = IclTerm.fromString(true, "[a, b, c | Y]");
IclTerm t3 = IclTerm.fromString(true, "[a, c, b | Y]");
IclTerm t4 = IclTerm.fromString(true, "[a | Y]");
IclTerm t5 = IclTerm.fromString(true, "[b | Y]");
this.diffSizeBothTails(t1, t2, true);
this.diffSizeBothTails(t2, t1, true);
this.diffSizeBothTails(t1, t3, false);
this.diffSizeBothTails(t3, t1, false);
this.diffSizeBothTails(t1, t4, true);
this.diffSizeBothTails(t4, t1, true);
this.diffSizeBothTails(t1, t5, false);
this.diffSizeBothTails(t5, t1, false);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -