Revision: 7272
          
http://languagetool.svn.sourceforge.net/languagetool/?rev=7272&view=rev
Author:   milek_pl
Date:     2012-06-06 21:31:22 +0000 (Wed, 06 Jun 2012)
Log Message:
-----------
add JavaDoc to explain why unification works

Modified Paths:
--------------
    trunk/JLanguageTool/src/java/org/languagetool/rules/patterns/Unifier.java
    
trunk/JLanguageTool/src/test/org/languagetool/rules/patterns/UnifierTest.java

Modified: 
trunk/JLanguageTool/src/java/org/languagetool/rules/patterns/Unifier.java
===================================================================
--- trunk/JLanguageTool/src/java/org/languagetool/rules/patterns/Unifier.java   
2012-06-06 21:03:18 UTC (rev 7271)
+++ trunk/JLanguageTool/src/java/org/languagetool/rules/patterns/Unifier.java   
2012-06-06 21:31:22 UTC (rev 7272)
@@ -316,11 +316,24 @@
   /**
    * Tests if the token sequence is unified.
    * 
+   * Usage note: to test if the sequence of tokens is unified (i.e.,
+   * shares a group of features, such as the same gender, number,
+   * grammatical case etc.), you need to test all tokens but the last one 
+   * in the following way: call {@link #isUnified} for every reading of a 
token,
+   * and set lastreading to <code>true</code>. For the last token, check the
+   * truth value returned by this method. In previous cases, it may actually be
+   * discarded before the final check. See {@link AbstractPatternRule} for 
+   * an example. <p/>
+   * 
+   * To make it work in XML rules, the Elements built based on 
<code>&lt;token&gt;</code>s inside
+   * the unify block, have to be processed in a special way: namely the last 
Element has to be
+   * marked as the last one (by using {@link Element#setLastInUnification}).
+   * 
    * @param matchToken
-   *          AnalyzedToken token to unify
+   *          {@link AnalyzedToken} token to unify
  * @param lastReading
    *          true when the matchToken is the last reading in the
-   *          AnalyzedReadings
+   *          {@link AnalyzedTokenReadings}
    * @return True if the tokens in the sequence are unified.
    */
   public final boolean isUnified(final AnalyzedToken matchToken,

Modified: 
trunk/JLanguageTool/src/test/org/languagetool/rules/patterns/UnifierTest.java
===================================================================
--- 
trunk/JLanguageTool/src/test/org/languagetool/rules/patterns/UnifierTest.java   
    2012-06-06 21:03:18 UTC (rev 7271)
+++ 
trunk/JLanguageTool/src/test/org/languagetool/rules/patterns/UnifierTest.java   
    2012-06-06 21:31:22 UTC (rev 7272)
@@ -244,25 +244,21 @@
     assertEquals(false, satisfied);
     uni.reset();
 
-    //now test the simplified interface
-    satisfied = true; //this must be true to start with...
-    satisfied &= uni.isUnified(sing1, equiv, false);
-    satisfied &= uni.isUnified(sing1a, equiv, false);
-    satisfied &= uni.isUnified(sing1b, equiv, true);
-    satisfied &= uni.isUnified(sing2, equiv, true);
-    satisfied &= uni.isUnified(sing3, equiv, true);
-    assertEquals(false, satisfied);
+    //now test the simplified interface    
+    uni.isUnified(sing1, equiv, false);
+    uni.isUnified(sing1a, equiv, false);
+    uni.isUnified(sing1b, equiv, true);
+    uni.isUnified(sing2, equiv, true);    
+    assertEquals(false, uni.isUnified(sing3, equiv, true));
     uni.reset();
 
     sing1a = new AnalyzedToken("osobiste", 
"adj:pl:nom.acc.voc:f.n.m2.m3:pos:aff", "osobisty");
     sing1b = new AnalyzedToken("osobiste", "adj:sg:nom.acc.voc:n:pos:aff", 
"osobisty");
     sing2 = new AnalyzedToken("godło", "subst:sg:nom.acc.voc:n", "godło");
-
-    satisfied = true;
-    satisfied &= uni.isUnified(sing1a, equiv, false);
-    satisfied &= uni.isUnified(sing1b, equiv, true);
-    satisfied &= uni.isUnified(sing2, equiv, true);
-    assertEquals(true, satisfied);
+    
+    uni.isUnified(sing1a, equiv, false);
+    uni.isUnified(sing1b, equiv, true);    
+    assertEquals(true, uni.isUnified(sing2, equiv, true));
     assertEquals("[osobisty/adj:sg:nom.acc.voc:n:pos:aff, 
godło/subst:sg:nom.acc.voc:n]", Arrays.toString(uni.getFinalUnified()));
     uni.reset();
 
@@ -272,13 +268,11 @@
     sing1b = new AnalyzedToken("osobiste", "adj:sg:nom.acc.voc:n:pos:aff", 
"osobisty");
     final AnalyzedToken sing2a = new AnalyzedToken("godło", 
"subst:sg:nom.acc.voc:n", "godło");
     final AnalyzedToken sing2b = new AnalyzedToken("godło", "indecl", "godło");
-
-    satisfied = true;
-    satisfied &= uni.isUnified(sing1a, equiv, false);
-    satisfied &= uni.isUnified(sing1b, equiv, true);
-    satisfied &= uni.isUnified(sing2a, equiv, false);
-    satisfied &= uni.isUnified(sing2b, equiv, true);
-    assertEquals(true, satisfied);
+    
+    uni.isUnified(sing1a, equiv, false);
+    uni.isUnified(sing1b, equiv, true);
+    uni.isUnified(sing2a, equiv, false);
+    assertEquals(true, uni.isUnified(sing2b, equiv, true));
     assertEquals("[osobisty/adj:sg:nom.acc.voc:n:pos:aff, 
godło/subst:sg:nom.acc.voc:n]", Arrays.toString(uni.getFinalUnified()));
     uni.reset();
   }
@@ -332,11 +326,9 @@
       uni.reset();
 
       //now test the simplified interface
-      satisfied = true; //this must be true to start with...
-      satisfied &= uni.isUnified(det_sing_masc, equiv, true);
-      satisfied &= uni.isUnified(sing_masc, equiv, true);
-      satisfied &= uni.isUnified(subst_sing_masc, equiv, true);
-      assertEquals(true, satisfied);
+      uni.isUnified(det_sing_masc, equiv, true);
+      uni.isUnified(sing_masc, equiv, true);      
+      assertEquals(true, uni.isUnified(subst_sing_masc, equiv, true));
       uni.reset();
       
       //now let's negate this
@@ -351,84 +343,64 @@
       assertEquals(false, !satisfied);
       uni.reset();
 
-      //now test the simplified interface
-      satisfied = true; //this must be true to start with...
-      satisfied &= uni.isUnified(det_sing_masc, equiv, true);
-      satisfied &= uni.isUnified(sing_masc, equiv, true);
-      satisfied &= uni.isUnified(subst_sing_masc, equiv, true);
-      assertEquals(false, !satisfied);
+      //now test the simplified interface      
+      uni.isUnified(det_sing_masc, equiv, true);
+      uni.isUnified(sing_masc, equiv, true);      
+      assertEquals(false, !uni.isUnified(subst_sing_masc, equiv, true));
       uni.reset();
       
       //OK, so let's test it with something that is not correct
-      satisfied = true; //this must be true to start with...
-      satisfied &= uni.isUnified(det_sing_fem, equiv, true);
-      satisfied &= uni.isUnified(sing_masc, equiv, true);
-      satisfied &= uni.isUnified(subst_sing_masc, equiv, true);
-      assertEquals(true, !satisfied);
+      uni.isUnified(det_sing_fem, equiv, true);
+      uni.isUnified(sing_masc, equiv, true);      
+      assertEquals(true, !uni.isUnified(subst_sing_masc, equiv, true));
       uni.reset();
 
       //OK, so let's test it with something that is not correct
-      satisfied = true; //this must be true to start with...
-      satisfied &= uni.isUnified(det_sing_masc, equiv, true);
-      satisfied &= uni.isUnified(sing_fem, equiv, true);  
-      satisfied &= uni.isUnified(subst_sing_masc, equiv, true);
-      assertEquals(true, !satisfied);
+      uni.isUnified(det_sing_masc, equiv, true);
+      uni.isUnified(sing_fem, equiv, true);        
+      assertEquals(true, !uni.isUnified(subst_sing_masc, equiv, true));
       uni.reset();
 
       //OK, second token does not match
-      satisfied = true; //this must be true to start with...
-      satisfied &= uni.isUnified(det_sing_masc, equiv, true);
-      satisfied &= uni.isUnified(sing_masc, equiv, true); 
-      satisfied &= uni.isUnified(subst_sing_fem, equiv, true);
-      assertEquals(true, !satisfied);
+      uni.isUnified(det_sing_masc, equiv, true);
+      uni.isUnified(sing_masc, equiv, true);       
+      assertEquals(true, !uni.isUnified(subst_sing_fem, equiv, true));
       uni.reset();
 
       //OK, second token does not match
-      satisfied = true; //this must be true to start with...
-      satisfied &= uni.isUnified(det_sing_masc, equiv, true);
-      satisfied &= uni.isUnified(plur_masc, equiv, true); 
-      satisfied &= uni.isUnified(subst_sing_fem, equiv, true);
-      assertEquals(true, !satisfied);
+      uni.isUnified(det_sing_masc, equiv, true);
+      uni.isUnified(plur_masc, equiv, true);       
+      assertEquals(true, !uni.isUnified(subst_sing_fem, equiv, true));
       uni.reset();
 
       //OK, second token does not match
-      satisfied = true; //this must be true to start with...
-      satisfied &= uni.isUnified(det_sing_masc, equiv, true);
-      satisfied &= uni.isUnified(plur_fem, equiv, true); 
-      satisfied &= uni.isUnified(subst_sing_fem, equiv, true);
-      assertEquals(true, !satisfied);
+      uni.isUnified(det_sing_masc, equiv, true);
+      uni.isUnified(plur_fem, equiv, true);       
+      assertEquals(true, !uni.isUnified(subst_sing_fem, equiv, true));
       uni.reset();
 
       //and another one
-      satisfied = true; //this must be true to start with...
-      satisfied &= uni.isUnified(det_plur_fem, equiv, true);
-      satisfied &= uni.isUnified(plur_fem, equiv, true); 
-      satisfied &= uni.isUnified(subst_sing_fem, equiv, true);
-      assertEquals(true, !satisfied);
+      uni.isUnified(det_plur_fem, equiv, true);
+      uni.isUnified(plur_fem, equiv, true);       
+      assertEquals(true, !uni.isUnified(subst_sing_fem, equiv, true));
       uni.reset();
       
     //and another one
-      satisfied = true; //this must be true to start with...
-      satisfied &= uni.isUnified(det_sing_fem, equiv, true);
-      satisfied &= uni.isUnified(plur_fem, equiv, true); 
-      satisfied &= uni.isUnified(subst_plur_fem, equiv, true);
-      assertEquals(true, !satisfied);
+      uni.isUnified(det_sing_fem, equiv, true);
+      uni.isUnified(plur_fem, equiv, true);       
+      assertEquals(true, !uni.isUnified(subst_plur_fem, equiv, true));
       uni.reset();
 
       //and another one
-      satisfied = true; //this must be true to start with...
-      satisfied &= uni.isUnified(det_sing_fem, equiv, true);
-      satisfied &= uni.isUnified(plur_fem, equiv, true); 
-      satisfied &= uni.isUnified(subst_plur_masc, equiv, true);
-      assertEquals(true, !satisfied);
+      uni.isUnified(det_sing_fem, equiv, true);
+      uni.isUnified(plur_fem, equiv, true);       
+      assertEquals(true, !uni.isUnified(subst_plur_masc, equiv, true));
       uni.reset();
       
     //and another one
-      satisfied = true; //this must be true to start with...
-      satisfied &= uni.isUnified(det_plur_masc, equiv, true);
-      satisfied &= uni.isUnified(plur_fem, equiv, true); 
-      satisfied &= uni.isUnified(subst_plur_masc, equiv, true);
-      assertEquals(true, !satisfied);
+      uni.isUnified(det_plur_masc, equiv, true);
+      uni.isUnified(plur_fem, equiv, true);       
+      assertEquals(true, !uni.isUnified(subst_plur_masc, equiv, true));
       uni.reset();
       
       

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Languagetool-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/languagetool-cvs

Reply via email to