⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unifytest.java

📁 SRI international 发布的OAA框架软件
💻 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 + -