You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by mu...@apache.org on 2025/07/23 11:48:57 UTC

(xalan-java) branch xalan-j_xslt3.0_mvn updated: committing implementation improvements for xpath general comparison operators =, !=, <, <=, >, >=

This is an automated email from the ASF dual-hosted git repository.

mukulg pushed a commit to branch xalan-j_xslt3.0_mvn
in repository https://gitbox.apache.org/repos/asf/xalan-java.git


The following commit(s) were added to refs/heads/xalan-j_xslt3.0_mvn by this push:
     new 26d869c46 committing implementation improvements for xpath general comparison operators =, !=, <, <=, >, >=
26d869c46 is described below

commit 26d869c461407ffedc352c7f5f0c571712fbccf9
Author: Mukul Gandhi <ga...@gmail.com>
AuthorDate: Wed Jul 23 17:18:33 2025 +0530

    committing implementation improvements for xpath general comparison operators =, !=, <, <=, >, >=
---
 README                                             |  8 +-
 .../org/apache/xalan/processor/XSLTSchema.java     |  2 +-
 .../org/apache/xalan/templates/ElemCopyOf.java     |  2 +-
 .../org/apache/xalan/templates/ElemForEach.java    |  2 +-
 .../xalan/templates/ElemTemplateElement.java       |  2 +-
 .../org/apache/xalan/templates/ElemValueOf.java    |  2 +-
 .../org/apache/xalan/templates/ElemVariable.java   |  2 +-
 .../org/apache/xalan/templates/TemplateList.java   |  2 +-
 .../org/apache/xml/serializer/SerializerBase.java  |  2 +-
 .../java/org/apache/xpath/compiler/Compiler.java   |  8 +-
 .../org/apache/xpath/compiler/FunctionTable.java   |  2 +-
 .../java/org/apache/xpath/compiler/Keywords.java   |  2 +-
 src/main/java/org/apache/xpath/compiler/OpMap.java |  2 +-
 .../org/apache/xpath/compiler/XPathParser.java     | 76 +++++++++---------
 .../java/org/apache/xpath/objects/XPathArray.java  | 17 +++++
 src/main/java/org/apache/xpath/operations/Div.java |  2 +-
 .../java/org/apache/xpath/operations/Equals.java   | 22 +++++-
 .../java/org/apache/xpath/operations/Minus.java    |  2 +-
 .../java/org/apache/xpath/operations/Mult.java     |  2 +-
 .../java/org/apache/xpath/operations/Plus.java     |  2 +-
 .../org/apache/xpath/res/XPATHErrorResources.java  |  2 +-
 .../xalan/tests/util/XslTransformTestsUtil.java    |  2 +-
 .../tests/w3c/xslt3/W3CXslTransformTestsUtil.java  | 40 ++++++++++
 .../w3c/xslt3/result/attr/_as-test-set_result.xml  |  4 +-
 .../w3c/xslt3/result/attr/_avt-test-set_result.xml |  2 +-
 .../xslt3/result/attr/_match-test-set_result.xml   |  2 +-
 .../xslt3/result/attr/_select-test-set_result.xml  |  4 +-
 .../_xpath-default-namespace-test-set_result.xml   |  2 +-
 .../result/decl/_attribute-set-test-set_result.xml |  2 +-
 .../result/decl/_character-map-test-set_result.xml |  2 +-
 .../result/decl/_function-test-set_result.xml      |  4 +-
 .../result/decl/_variable-test-set_result.xml      |  2 +-
 .../xslt3/result/expr/_axes-test-set_result.xml    |  4 +-
 .../result/expr/_castable-test-set_result.xml      |  2 +-
 .../result/expr/_expression-test-set_result.xml    |  2 +-
 .../w3c/xslt3/result/expr/_for-test-set_result.xml |  2 +-
 .../_higher-order-functions-test-set_result.xml    |  2 +-
 .../xslt3/result/expr/_math-test-set_result.xml    |  2 +-
 .../result/expr/_nodetest-test-set_result.xml      |  2 +-
 .../xslt3/result/expr/_path-test-set_result.xml    |  2 +-
 .../result/expr/_predicate-test-set_result.xml     |  2 +-
 .../result/fn/_deep-equal-test-set_result.xml      |  2 +-
 .../result/fn/_format-number-test-set_result.xml   |  2 +-
 .../w3c/xslt3/result/fn/_key-test-set_result.xml   |  2 +-
 .../xslt3/result/fn/_position-test-set_result.xml  |  2 +-
 .../w3c/xslt3/result/fn/_root-test-set_result.xml  |  4 +-
 .../insn/_analyze-string-test-set_result.xml       |  2 +-
 .../insn/_apply-templates-test-set_result.xml      |  2 +-
 .../result/insn/_attribute-test-set_result.xml     |  2 +-
 .../result/insn/_call-template-test-set_result.xml |  2 +-
 .../xslt3/result/insn/_choose-test-set_result.xml  |  2 +-
 .../xslt3/result/insn/_copy-test-set_result.xml    |  6 +-
 .../xslt3/result/insn/_element-test-set_result.xml |  2 +-
 .../insn/_for-each-group-test-set_result.xml       |  2 +-
 .../xslt3/result/insn/_iterate-test-set_result.xml |  6 +-
 .../result/insn/_sequence-test-set_result.xml      |  2 +-
 .../xslt3/result/insn/_sort-test-set_result.xml    |  2 +-
 .../w3c/xslt3/result/insn/_try-test-set_result.xml |  2 +-
 .../result/insn/_xsl-document-test-set_result.xml  |  6 +-
 .../xslt3/result/misc/_regex-test-set_result.xml   |  2 +-
 .../xslt3/result/type/_boolean-test-set_result.xml |  2 +-
 .../xslt3/result/type/_date-test-set_result.xml    |  2 +-
 .../xslt3/result/type/_node-test-set_result.xml    |  2 +-
 .../xslt3/result/type/_string-test-set_result.xml  |  2 +-
 .../result/w3c_xslt3_testsuite_xalan-j_result.xml  |  6 +-
 .../xpath3/XPathGeneralComparisonOpTests.java      | 40 ++++++++++
 .../xpath_general_comparison/gold/test15.out       |  5 ++
 .../xpath_general_comparison/gold/test16.out       |  4 +
 .../xpath_general_comparison/gold/test17.out       |  6 ++
 .../xpath_general_comparison/gold/test18.out       | 10 +++
 .../resources/xpath_general_comparison/test15.xml  |  6 ++
 .../resources/xpath_general_comparison/test15.xsl  | 56 ++++++++++++++
 .../resources/xpath_general_comparison/test16.xml  |  7 ++
 .../resources/xpath_general_comparison/test16.xsl  | 50 ++++++++++++
 .../resources/xpath_general_comparison/test17.xsl  | 89 ++++++++++++++++++++++
 .../resources/xpath_general_comparison/test18.xsl  | 76 ++++++++++++++++++
 76 files changed, 541 insertions(+), 123 deletions(-)

diff --git a/README b/README
index 40822e0cb..30ec063a9 100644
--- a/README
+++ b/README
@@ -17,7 +17,7 @@
 
 Copyright 1999-2025 The Apache Software Foundation
 
-Document last modified : 2025-07-22
+Document last modified : 2025-07-23
 
 Authors:
    Gary Gregory <gg...@apache.org>
@@ -59,16 +59,16 @@ The Maven build results like following shall be produced:
 [INFO]  T E S T S
 [INFO] -------------------------------------------------------
 [INFO] Running org.apache.xalan.tests.main.AllXalanXSLT3Tests
-[INFO] Tests run: 1166, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 126.82 s - in org.apache.xalan.tests.main.AllXalanXSLT3Tests
+[INFO] Tests run: 1170, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 33.613 s - in org.apache.xalan.tests.main.AllXalanXSLT3Tests
 [INFO]
 [INFO] Results:
 [INFO]
-[INFO] Tests run: 1166, Failures: 0, Errors: 0, Skipped: 0
+[INFO] Tests run: 1170, Failures: 0, Errors: 0, Skipped: 0
 [INFO]
 [INFO] ------------------------------------------------------------------------
 [INFO] BUILD SUCCESS
 [INFO] ------------------------------------------------------------------------
-[INFO] Total time:  04:17 min
+[INFO] Total time:  01:02 min
 
 
 If the user needs to run Xalan-J's XSLT 3.0 implementation via Java code, the value of JVM's system property 
diff --git a/src/main/java/org/apache/xalan/processor/XSLTSchema.java b/src/main/java/org/apache/xalan/processor/XSLTSchema.java
index c1ee123d1..4d56932dd 100644
--- a/src/main/java/org/apache/xalan/processor/XSLTSchema.java
+++ b/src/main/java/org/apache/xalan/processor/XSLTSchema.java
@@ -79,7 +79,7 @@ import org.apache.xalan.templates.ElemWithParam;
 import org.apache.xml.utils.QName;
 
 /**
- * This class defines the allowed structure for an XSLT 3 stylesheet, and the
+ * This class defines the allowed structure for an XSLT 3.0 stylesheet, and the
  * mapping between Xalan classes and the markup elements in the stylesheet.
  * 
  * @see <a href="https://www.w3.org/TR/xslt-30/#xsd11-schema-for-xslt">XSD 1.1 Schema for XSLT Stylesheets</a>
diff --git a/src/main/java/org/apache/xalan/templates/ElemCopyOf.java b/src/main/java/org/apache/xalan/templates/ElemCopyOf.java
index 7e2fc8025..c2d2c0d1d 100644
--- a/src/main/java/org/apache/xalan/templates/ElemCopyOf.java
+++ b/src/main/java/org/apache/xalan/templates/ElemCopyOf.java
@@ -72,7 +72,7 @@ import xml.xpath31.processor.types.XSUntypedAtomic;
  * @author Christine Li <jy...@apache.org>
  *         
  * @author Mukul Gandhi <mu...@apache.org>
- *         (XSLT 3 specific changes, to this class)
+ *         (XSLT 3.0 specific changes, to this class)
  * 
  * @xsl.usage advanced
  */
diff --git a/src/main/java/org/apache/xalan/templates/ElemForEach.java b/src/main/java/org/apache/xalan/templates/ElemForEach.java
index 71bbea562..89fd2fb91 100644
--- a/src/main/java/org/apache/xalan/templates/ElemForEach.java
+++ b/src/main/java/org/apache/xalan/templates/ElemForEach.java
@@ -61,7 +61,7 @@ import xml.xpath31.processor.types.XSBoolean;
  *         Ilene Seelemann <il...@apache.org>
  * 
  * @author Mukul Gandhi <mu...@apache.org>
- *         (XSLT 3 specific changes, to this class)
+ *         (XSLT 3.0 specific changes, to this class)
  * 
  * @xsl.usage advanced
  */
diff --git a/src/main/java/org/apache/xalan/templates/ElemTemplateElement.java b/src/main/java/org/apache/xalan/templates/ElemTemplateElement.java
index 4d92e85c8..a58e79235 100644
--- a/src/main/java/org/apache/xalan/templates/ElemTemplateElement.java
+++ b/src/main/java/org/apache/xalan/templates/ElemTemplateElement.java
@@ -78,7 +78,7 @@ import org.xml.sax.helpers.NamespaceSupport;
  * @author Joseph Kesselman <jk...@apache.org>
  * 
  * @author Mukul Gandhi <mu...@apache.org>
- *         (XSLT 3 specific changes, to this class)
+ *         (XSLT 3.0 specific changes, to this class)
  * 
  * @xsl.usage advanced
  */
diff --git a/src/main/java/org/apache/xalan/templates/ElemValueOf.java b/src/main/java/org/apache/xalan/templates/ElemValueOf.java
index d5bc1ca17..ec7622a31 100644
--- a/src/main/java/org/apache/xalan/templates/ElemValueOf.java
+++ b/src/main/java/org/apache/xalan/templates/ElemValueOf.java
@@ -71,7 +71,7 @@ import xml.xpath31.processor.types.XSQName;
  *         Morris Kwan <mk...@apache.org>, Christine Li <jy...@apache.org>
  *         
  * @author Mukul Gandhi <mu...@apache.org>
- *         (XSLT 3 specific changes, to this class)
+ *         (XSLT 3.0 specific changes, to this class)
  * 
  * @xsl.usage advanced
  */
diff --git a/src/main/java/org/apache/xalan/templates/ElemVariable.java b/src/main/java/org/apache/xalan/templates/ElemVariable.java
index 70899ec39..3b9670107 100644
--- a/src/main/java/org/apache/xalan/templates/ElemVariable.java
+++ b/src/main/java/org/apache/xalan/templates/ElemVariable.java
@@ -85,7 +85,7 @@ import xml.xpath31.processor.types.XSUntypedAtomic;
  *         Christine Li <jy...@apache.org>
  *         
  * @author Mukul Gandhi <mu...@apache.org>
- *         (XSLT 3 specific changes, to this class)
+ *         (XSLT 3.0 specific changes, to this class)
  *
  * @xsl.usage advanced
  */
diff --git a/src/main/java/org/apache/xalan/templates/TemplateList.java b/src/main/java/org/apache/xalan/templates/TemplateList.java
index ab81567dd..681580f07 100644
--- a/src/main/java/org/apache/xalan/templates/TemplateList.java
+++ b/src/main/java/org/apache/xalan/templates/TemplateList.java
@@ -437,7 +437,7 @@ public class TemplateList implements java.io.Serializable
   /**
    * Add a template to the template list.
    * 
-   * This method definition supports XSLT 3 xsl:template pattern strings 
+   * This method definition supports XSLT 3.0 xsl:template pattern strings 
    * like ".", and .[...] (this is XPath pattern '.' followed by predicate 
    * that imposes a boolean filter condition on context value '.'. Only 
    * one predicate is supported here).
diff --git a/src/main/java/org/apache/xml/serializer/SerializerBase.java b/src/main/java/org/apache/xml/serializer/SerializerBase.java
index 99f09292a..6f18b89dd 100644
--- a/src/main/java/org/apache/xml/serializer/SerializerBase.java
+++ b/src/main/java/org/apache/xml/serializer/SerializerBase.java
@@ -243,7 +243,7 @@ public abstract class SerializerBase
     protected char[] m_attrBuff = new char[30];
     
     /**
-     * This class field supports, XSLT 3 instruction xsl:character-map 
+     * This class field supports, XSLT 3.0 xsl:character-map instruction 
      * processing.
      */
     private CharacterMapConfig m_charMapConfig = new CharacterMapConfig();
diff --git a/src/main/java/org/apache/xpath/compiler/Compiler.java b/src/main/java/org/apache/xpath/compiler/Compiler.java
index 166d89d69..60f474d43 100644
--- a/src/main/java/org/apache/xpath/compiler/Compiler.java
+++ b/src/main/java/org/apache/xpath/compiler/Compiler.java
@@ -105,7 +105,7 @@ import org.apache.xpath.res.XPATHErrorResources;
  *         Christine Li <jy...@apache.org>
  *         
  * @author Mukul Gandhi <mu...@apache.org>
- *         (XPath 3 specific changes, to this class)         
+ *         (XPath 3.1 specific changes, to this class)         
  * 
  * @xsl.usage advanced
  */
@@ -122,7 +122,7 @@ public class Compiler extends OpMap
    *                     may be null, but which, if not null, must be valid over 
    *                     the long haul, in other words, it will not be cloned.
    * @param funcTable    The FunctionTable object where the xpath build-in 
-   *                     functions are stored.
+   *                     functions are stored.                 
    */
   public Compiler(ErrorListener errorHandler, SourceLocator locator, FunctionTable funcTable)
   {
@@ -291,11 +291,11 @@ public class Compiler extends OpMap
     case OpCodes.OP_ARRAY_COMPARISON :
       expr = xpathExpressionArrayComparison(opPos); break;  
     case OpCodes.OP_QUO:
-      error(XPATHErrorResources.ER_UNKNOWN_OPCODE, new Object[]{ "quo" });
+      error(XPATHErrorResources.ER_UNKNOWN_OPCODE, new Object[]{ m_currentPattern, "quo" });
       break;
     default :
       error(XPATHErrorResources.ER_UNKNOWN_OPCODE,
-            new Object[]{ Integer.toString(getOp(opPos)) });
+            new Object[]{ m_currentPattern, Integer.toString(getOp(opPos)) });
     }
     
     return expr;
diff --git a/src/main/java/org/apache/xpath/compiler/FunctionTable.java b/src/main/java/org/apache/xpath/compiler/FunctionTable.java
index 60b31e57b..45cef2f52 100644
--- a/src/main/java/org/apache/xpath/compiler/FunctionTable.java
+++ b/src/main/java/org/apache/xpath/compiler/FunctionTable.java
@@ -36,7 +36,7 @@ import org.apache.xpath.functions.Function;
  * @author Christine Li <jy...@apache.org>
  * 
  * @author Mukul Gandhi <mu...@apache.org>
- *         (XPath 3 specific changes, to this class)
+ *         (XPath 3.1 specific changes, to this class)
  */
 public class FunctionTable
 {
diff --git a/src/main/java/org/apache/xpath/compiler/Keywords.java b/src/main/java/org/apache/xpath/compiler/Keywords.java
index f50551706..d53043565 100644
--- a/src/main/java/org/apache/xpath/compiler/Keywords.java
+++ b/src/main/java/org/apache/xpath/compiler/Keywords.java
@@ -31,7 +31,7 @@ import java.util.Hashtable;
  * @author Christine Li <jy...@apache.org>
  * 
  * @author Mukul Gandhi <mu...@apache.org>
- *         (XPath 3 specific changes, to this class)
+ *         (XPath 3.1 specific changes, to this class)
  * 
  * @xsl.usage internal
  */
diff --git a/src/main/java/org/apache/xpath/compiler/OpMap.java b/src/main/java/org/apache/xpath/compiler/OpMap.java
index 32765061e..565301e19 100644
--- a/src/main/java/org/apache/xpath/compiler/OpMap.java
+++ b/src/main/java/org/apache/xpath/compiler/OpMap.java
@@ -289,7 +289,7 @@ public class OpMap
     else
     {
       error(org.apache.xpath.res.XPATHErrorResources.ER_UNKNOWN_OPCODE,
-            new Object[]{ String.valueOf(stepType) });  //"ERROR! Unknown op code: "+m_opMap[opPos]);
+            new Object[]{ m_currentPattern, String.valueOf(stepType) });  //"ERROR! Unknown op code: "+m_opMap[opPos]);
       return -1;
     }
   }
diff --git a/src/main/java/org/apache/xpath/compiler/XPathParser.java b/src/main/java/org/apache/xpath/compiler/XPathParser.java
index cd57c55c1..efa92478c 100644
--- a/src/main/java/org/apache/xpath/compiler/XPathParser.java
+++ b/src/main/java/org/apache/xpath/compiler/XPathParser.java
@@ -122,7 +122,7 @@ import xml.xpath31.processor.types.XSInteger;
  *         Henry Zongaro <zo...@ca.ibm.com>, Christine Li <jy...@apache.org>
  *         
  * @author Mukul Gandhi <mu...@apache.org>
- *         (XPath 3 specific changes, to this class)
+ *         (XPath 3.1 specific changes, to this class)
  * 
  * @xsl.usage general
  */
@@ -392,10 +392,12 @@ public class XPathParser
         	   }
         	           	   
         	   if (isXPathExprStrHasBalancedParens || tokenIs(',')) {
-        		   // We check for the token string "," as well, since
-        		   // an XPath parse might have finished without completing
-        		   // parse of all sequence items if it was an XPath literal 
-        		   // sequence constructor parse.
+        		   /**
+        		    * We check for the token string "," as well, since
+        		    * an XPath parse might have finished without completing
+        		    * parse of all sequence items if it was an XPath literal
+        		    * sequence constructor parse.
+        		    */
         		   newExpression = "(" + expression + ")"; 
         	   }
         	}
@@ -1520,6 +1522,8 @@ public class XPathParser
         	  // XPath parse of general comparison (i.e, =, !=, <, <=, >, >=) between 
         	  // an xdm array on LHS and another XPath operand on RHS.
         	  
+        	  List<String> arrComparisonXpathLhs = new ArrayList<String>();
+        	  
         	  TokenQueueScanPosition prevTokenQueueScanPos = new TokenQueueScanPosition(m_queueMark, m_tokenChar, m_token);        	  
         	          	  
         	  StringBuffer arrItemXPathStrBuff = new StringBuffer();
@@ -1531,17 +1535,17 @@ public class XPathParser
         		  
         		  if (tokenIs(',')) {
         			  nextToken();
-        			  seqOrArrayXPathItems.add(arrItemXPathStrBuff.toString());
+        			  arrComparisonXpathLhs.add(arrItemXPathStrBuff.toString());
         			  arrItemXPathStrBuff = new StringBuffer();        			  
         			  continue;
         		  }
         		  
         		  if (tokenIs(']')) {
         			  nextToken();
-        			  seqOrArrayXPathItems.add(arrItemXPathStrBuff.toString());        			  
+        			  arrComparisonXpathLhs.add(arrItemXPathStrBuff.toString());        			  
         			  break; 
         		  }        		  
-        	  }        	          	        		       		          	          	  
+        	  }
         	  
         	  if (m_token != null) {
         		 m_xpathArrayComparison = new XPathArrayComparison();
@@ -1582,22 +1586,21 @@ public class XPathParser
           			nextToken();
           		 }
         		 
-            	 if (isRelnComparison) {            		             		             		             		             		             		             		             		             		 
-            		 StringBuffer seqArrItemXPathStrBuff = new StringBuffer();            		 
-            		 if (lookahead(null, 1)) {
-            			 arrComparisonXpathRhs.add(m_token);
-            			 nextToken();
-            		 }
-            		 else if (tokenIs('(')) {
-            			 consumeExpected('(');
+            	 if (isRelnComparison) {            		             		             		             		             		             		             		             		             		             		             		             		             		 
+            		 if (tokenIs('[')) {
+            			 // The RHS operand is a literal array constructor            			 
+            			 consumeExpected('[');
+            			 StringBuffer seqArrItemXPathStrBuff = new StringBuffer();
             			 while (m_token != null) {
-            				 if (tokenIs(')')) { 
-            					 arrComparisonXpathRhs.add(seqArrItemXPathStrBuff.toString());
-            					 consumeExpected(')'); 
+            				 if (tokenIs(']')) {
+            					 if (seqArrItemXPathStrBuff.length() > 0) {
+            					    arrComparisonXpathRhs.add(seqArrItemXPathStrBuff.toString());
+            					 }
+            					 consumeExpected(']');            					 
             				 }
-            				 else if (tokenIs(',')) {
-            					 nextToken();
+            				 else if (tokenIs(',')) {            					 
             					 arrComparisonXpathRhs.add(seqArrItemXPathStrBuff.toString());
+            					 nextToken();
             					 seqArrItemXPathStrBuff = new StringBuffer();
             				 }
             				 else {
@@ -1606,26 +1609,17 @@ public class XPathParser
             				 }            				 
             			 }
             	     }
-            		 else if (tokenIs('[')) {
-            			 consumeExpected('(');
+            		 else {
+            			 // The RHS operand XPath expression
+            			 StringBuffer seqArrItemXPathStrBuff = new StringBuffer();
             			 while (m_token != null) {
-            				 if (tokenIs(']')) { 
-            					 arrComparisonXpathRhs.add(seqArrItemXPathStrBuff.toString());
-            					 consumeExpected(')'); 
-            				 }
-            				 else if (tokenIs(',')) {
-            					 nextToken();
-            					 arrComparisonXpathRhs.add(seqArrItemXPathStrBuff.toString());
-            					 seqArrItemXPathStrBuff = new StringBuffer();
-            				 }
-            				 else {
-            					 seqArrItemXPathStrBuff.append(m_token);
-            					 nextToken(); 
-            				 }            				 
+            				 seqArrItemXPathStrBuff.append(m_token);
+        					 nextToken(); 
             			 }
-            	     }            		 
+            			 arrComparisonXpathRhs.add(seqArrItemXPathStrBuff.toString());
+            		 }
             		             		 
-            		 m_xpathArrayComparison.setArrayConstructorXPathLhs(seqOrArrayXPathItems);
+            		 m_xpathArrayComparison.setArrayConstructorXPathLhs(arrComparisonXpathLhs);
             		 m_xpathArrayComparison.setSeqArrConstructorXPathRhs(arrComparisonXpathRhs);
             		 
             		 int opPos = m_ops.getOp(OpMap.MAPINDEX_LENGTH);
@@ -1638,12 +1632,14 @@ public class XPathParser
                      return;
             	 }
             	 else {
-            		 seqOrArrayXPathItems.clear();            		 
+            		 seqOrArrayXPathItems.clear();
+            		 
             		 restoreTokenQueueScanPosition(prevTokenQueueScanPos);
             	 }
         	  }
         	  else {
-        		 seqOrArrayXPathItems.clear();        		 
+        		 seqOrArrayXPathItems.clear();
+        		 
         		 restoreTokenQueueScanPosition(prevTokenQueueScanPos); 
         	  }
           }
diff --git a/src/main/java/org/apache/xpath/objects/XPathArray.java b/src/main/java/org/apache/xpath/objects/XPathArray.java
index 8d34e8aae..09f10305e 100644
--- a/src/main/java/org/apache/xpath/objects/XPathArray.java
+++ b/src/main/java/org/apache/xpath/objects/XPathArray.java
@@ -93,6 +93,23 @@ public class XPathArray extends XObject {
 	   fList.clear(); 
    }
    
+   /**
+    * Method definition, to atomize an XPath array 
+    * to a sequence.
+    * 
+    * @return		        ResultSequence object		
+    */
+   public ResultSequence atomize() {
+	   ResultSequence result = new ResultSequence();
+	   
+	   for (int i = 0; i < this.size(); i++) {
+		   XObject arrItem = this.get(i);
+		   result.add(arrItem);
+	   }
+
+	   return result;
+   }
+   
    /**
     * Get the string value of this XPathArray object.
     * 
diff --git a/src/main/java/org/apache/xpath/operations/Div.java b/src/main/java/org/apache/xpath/operations/Div.java
index 314009d88..2bb6d4f07 100644
--- a/src/main/java/org/apache/xpath/operations/Div.java
+++ b/src/main/java/org/apache/xpath/operations/Div.java
@@ -43,7 +43,7 @@ import xml.xpath31.processor.types.XSYearMonthDuration;
  * @author Scott Boag <sc...@us.ibm.com>
  * 
  * @author Mukul Gandhi <mu...@apache.org>
- *         (XSLT 3 specific changes, to this class)
+ *         (XPath 3.1 specific changes, to this class)
  */
 public class Div extends ArithmeticOperation
 {
diff --git a/src/main/java/org/apache/xpath/operations/Equals.java b/src/main/java/org/apache/xpath/operations/Equals.java
index 63998adbd..dbf979c47 100644
--- a/src/main/java/org/apache/xpath/operations/Equals.java
+++ b/src/main/java/org/apache/xpath/operations/Equals.java
@@ -31,6 +31,7 @@ import org.apache.xpath.objects.XBooleanStatic;
 import org.apache.xpath.objects.XMLNodeCursorImpl;
 import org.apache.xpath.objects.XNumber;
 import org.apache.xpath.objects.XObject;
+import org.apache.xpath.objects.XPathArray;
 import org.apache.xpath.objects.XString;
 
 import xml.xpath31.processor.types.XSBoolean;
@@ -59,6 +60,14 @@ public class Equals extends Operation
           throws javax.xml.transform.TransformerException
   {
 	  XObject result = null;
+	  
+	  if (left instanceof XPathArray) {
+		 left = ((XPathArray)left).atomize();
+	  }
+	  
+	  if (right instanceof XPathArray) {
+		 right = ((XPathArray)right).atomize(); 
+	  }
 	  	  
 	  if (right instanceof ResultSequence) {
 		 if (left instanceof XNumber) {
@@ -85,9 +94,16 @@ public class Equals extends Operation
 				 XObject xObj1 = resultSeqLhs.item(i); 
 				 for (int j = 0; j < resultSeqRhs.size(); j++) {
 					XObject xObj2 = resultSeqRhs.item(j);
-					if (xObj1.equals(xObj2)) {
-						isEqual = true;
-						break;
+					if (xObj2 instanceof ResultSequence) {
+					   XObject r1 = operate(xObj1, xObj2);
+					   isEqual = r1.bool();
+					}					
+					else if (xObj1.equals(xObj2)) {
+					   isEqual = true;						
+					}
+					
+					if (isEqual) {
+					   break;	
 					}
 				 }
 				 
diff --git a/src/main/java/org/apache/xpath/operations/Minus.java b/src/main/java/org/apache/xpath/operations/Minus.java
index 9dc32e770..c4cf89259 100644
--- a/src/main/java/org/apache/xpath/operations/Minus.java
+++ b/src/main/java/org/apache/xpath/operations/Minus.java
@@ -46,7 +46,7 @@ import xml.xpath31.processor.types.XSYearMonthDuration;
  * @author Scott Boag <sc...@us.ibm.com>
  * 
  * @author Mukul Gandhi <mu...@apache.org>
- *         (XSLT 3 specific changes, to this class)
+ *         (XPath 3.1 specific changes, to this class)
  */
 public class Minus extends ArithmeticOperation
 {
diff --git a/src/main/java/org/apache/xpath/operations/Mult.java b/src/main/java/org/apache/xpath/operations/Mult.java
index c3b6781a6..72ab3cd62 100644
--- a/src/main/java/org/apache/xpath/operations/Mult.java
+++ b/src/main/java/org/apache/xpath/operations/Mult.java
@@ -47,7 +47,7 @@ import xml.xpath31.processor.types.XSYearMonthDuration;
  * @author Scott Boag <sc...@us.ibm.com>
  * 
  * @author Mukul Gandhi <mu...@apache.org>
- *         (XSLT 3 specific changes, to this class)
+ *         (XPath 3.1 specific changes, to this class)
  */
 public class Mult extends ArithmeticOperation
 {
diff --git a/src/main/java/org/apache/xpath/operations/Plus.java b/src/main/java/org/apache/xpath/operations/Plus.java
index 6b0f52558..c58609c09 100644
--- a/src/main/java/org/apache/xpath/operations/Plus.java
+++ b/src/main/java/org/apache/xpath/operations/Plus.java
@@ -49,7 +49,7 @@ import xml.xpath31.processor.types.XSYearMonthDuration;
  * @author Scott Boag <sc...@us.ibm.com>
  * 
  * @author Mukul Gandhi <mu...@apache.org>
- *         (XSLT 3 specific changes, to this class)
+ *         (XPath 3.1 specific changes, to this class)
  */
 public class Plus extends ArithmeticOperation
 {
diff --git a/src/main/java/org/apache/xpath/res/XPATHErrorResources.java b/src/main/java/org/apache/xpath/res/XPATHErrorResources.java
index 36242d78e..9af0bf5cd 100644
--- a/src/main/java/org/apache/xpath/res/XPATHErrorResources.java
+++ b/src/main/java/org/apache/xpath/res/XPATHErrorResources.java
@@ -474,7 +474,7 @@ public static final String ER_IGNORABLE_WHITESPACE_NOT_HANDLED =
       "Could not get variable named {0}"},
 
   { ER_UNKNOWN_OPCODE,
-     "ERROR! Unknown op code: {0}"},
+     "XPST0003 : An XPath expression {0} has syntax error. Unknown op code : {1}."},
 
   { ER_EXTRA_ILLEGAL_TOKENS,
      "Extra illegal tokens: {0}"},
diff --git a/src/test/java/org/apache/xalan/tests/util/XslTransformTestsUtil.java b/src/test/java/org/apache/xalan/tests/util/XslTransformTestsUtil.java
index a325f04cc..1876cce4e 100644
--- a/src/test/java/org/apache/xalan/tests/util/XslTransformTestsUtil.java
+++ b/src/test/java/org/apache/xalan/tests/util/XslTransformTestsUtil.java
@@ -620,7 +620,7 @@ public class XslTransformTestsUtil extends FileComparisonUtil {
 	}
 	
 	/**
-     * This method definition checks whether, two XML or HTML
+     * Method definition, to check whether two XML or HTML
      * string values represent equal document content.
      */
     protected boolean isTwoXmlHtmlStrEqual(String str1, String str2) {
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/W3CXslTransformTestsUtil.java b/src/test/java/org/apache/xalan/tests/w3c/xslt3/W3CXslTransformTestsUtil.java
index f73940e47..dc49eded7 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/W3CXslTransformTestsUtil.java
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/W3CXslTransformTestsUtil.java
@@ -61,6 +61,7 @@ import org.w3c.dom.Element;
 import org.w3c.dom.NamedNodeMap;
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
+import org.w3c.dom.Text;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
 
@@ -490,9 +491,13 @@ public class W3CXslTransformTestsUtil extends XslTransformTestsUtil {
             	}
 
             	Document xmlInpDoc1 = m_xmlDocumentBuilder.parse(new ByteArrayInputStream((resultStrWriter.toString()).getBytes()));            	
+            	normalizeXmlDocumentText(xmlInpDoc1);
+            	
             	String xmlHtmlStr1 = serializeXmlDomElementNode(xmlInpDoc1);
 
             	Document xmlInpDoc2 = m_xmlDocumentBuilder.parse(new ByteArrayInputStream((expectedResultStr).getBytes()));
+            	normalizeXmlDocumentText(xmlInpDoc2);
+            	
             	String xmlHtmlStr2 = serializeXmlDomElementNode(xmlInpDoc2);
 
             	if (isTwoXmlHtmlStrEqual(xmlHtmlStr1, xmlHtmlStr2)) {            		
@@ -1099,6 +1104,41 @@ public class W3CXslTransformTestsUtil extends XslTransformTestsUtil {
 		}
 	}
 	
+	/**
+     * Method definition, to normalize an XML document content
+     * if an XML document's top most element only contains text 
+     * node children.
+     * 
+     * @param document					 The supplied XML document
+     */
+	private void normalizeXmlDocumentText(Document document) {
+		Element docElem = document.getDocumentElement();
+		StringBuffer strBuff = new StringBuffer();
+		NodeList nodeList = docElem.getChildNodes();
+		boolean isAllTextNode = true;
+		for (int i = 0; i < nodeList.getLength(); i++) {
+		    Node node = nodeList.item(i);
+		    if (node.getNodeType() == Node.TEXT_NODE) {
+		    	strBuff.append(node.getTextContent());
+		    }
+		    else {
+		    	isAllTextNode = false;
+		    	break;
+		    }
+		}
+		
+		if (isAllTextNode) {
+		    String normalizedTextNodeValue = (strBuff.toString()).trim();
+		    for (int i = 0; i < nodeList.getLength(); i++) {
+		    	Node node = nodeList.item(i);
+		    	docElem.removeChild(node);            	    	
+		    }
+		    
+		    Text textNode = document.createTextNode(normalizedTextNodeValue);
+		    docElem.appendChild(textNode);
+		}
+	}
+	
 	/**
 	 * An object of this class, contains information for XSL test case's expected 
 	 * run-time result, when the test case specifies expected XSL transformation 
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_as-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_as-test-set_result.xml
index 22fabc3d2..17e35a55e 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_as-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_as-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:54:59Z" fail="53" name="as" pass="51" skipped="4" statusUnknown="1" totalRun="105">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:34:36Z" fail="53" name="as" pass="51" skipped="4" statusUnknown="1" totalRun="105">
    <testResult status="pass" testName="as-0101"/>
    <testResult status="pass" testName="as-0102"/>
    <testResult status="pass" testName="as-0103"/>
@@ -131,7 +131,7 @@
    <testResult status="fail" testName="as-1222">
       <outResult>
          <errTrace>XTTE0570 : The required item type of an xdm input node is item(). The supplied value does'nt match an expected type.</errTrace>
-         <errTrace>ERROR! Unknown op code: -1</errTrace>
+         <errTrace>XPST0003 : An XPath expression /out/par1/normalize-space() = "hello namespaced true" has syntax error. Unknown op code : -1.</errTrace>
          <errTrace>java.lang.NullPointerException</errTrace>
       </outResult>
    </testResult>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_avt-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_avt-test-set_result.xml
index 4cdc7a053..4fdc777c3 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_avt-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_avt-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:55:04Z" fail="14" name="avt" pass="21" skipped="0" statusUnknown="0" totalRun="35">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:34:40Z" fail="14" name="avt" pass="21" skipped="0" statusUnknown="0" totalRun="35">
    <testResult status="pass" testName="avt-0101"/>
    <testResult status="fail" testName="avt-0201"/>
    <testResult status="pass" testName="avt-0202"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_match-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_match-test-set_result.xml
index 6571255df..a51504205 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_match-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_match-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:55:05Z" fail="61" name="match" pass="67" skipped="8" statusUnknown="1" totalRun="129">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:34:41Z" fail="61" name="match" pass="67" skipped="8" statusUnknown="1" totalRun="129">
    <testResult status="pass" testName="match-001"/>
    <testResult status="pass" testName="match-002"/>
    <testResult status="pass" testName="match-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_select-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_select-test-set_result.xml
index 8462a9753..2842f317c 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_select-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_select-test-set_result.xml
@@ -1,7 +1,7 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:55:11Z" fail="6" name="select" pass="18" skipped="0" statusUnknown="1" totalRun="25">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:34:45Z" fail="5" name="select" pass="19" skipped="0" statusUnknown="1" totalRun="25">
    <testResult status="pass" testName="select-0101"/>
    <testResult status="pass" testName="select-0102"/>
-   <testResult status="fail" testName="select-0201"/>
+   <testResult status="pass" testName="select-0201"/>
    <testResult status="pass" testName="select-0202"/>
    <testResult status="pass" testName="select-0301"/>
    <testResult status="fail" testName="select-0302"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_xpath-default-namespace-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_xpath-default-namespace-test-set_result.xml
index 87006c574..d899f8c33 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_xpath-default-namespace-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_xpath-default-namespace-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:59:14Z" fail="17" name="xpath-default-namespace" pass="9" skipped="0" statusUnknown="0" totalRun="26">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:36:59Z" fail="17" name="xpath-default-namespace" pass="9" skipped="0" statusUnknown="0" totalRun="26">
    <testResult status="pass" testName="xpath-default-namespace-0101"/>
    <testResult status="fail" testName="xpath-default-namespace-0102"/>
    <testResult status="pass" testName="xpath-default-namespace-0103"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_attribute-set-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_attribute-set-test-set_result.xml
index 0cd28a011..9737dd325 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_attribute-set-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_attribute-set-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:55:41Z" fail="8" name="attribute-set" pass="41" skipped="1" statusUnknown="0" totalRun="49">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:35:04Z" fail="8" name="attribute-set" pass="41" skipped="1" statusUnknown="0" totalRun="49">
    <testResult status="pass" testName="attribute-set-0101"/>
    <testResult status="fail" testName="attribute-set-0102">
       <outResult/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_character-map-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_character-map-test-set_result.xml
index cfaa0dd19..7ed129bc3 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_character-map-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_character-map-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:55:40Z" fail="12" name="character-map" pass="15" skipped="1" statusUnknown="1" totalRun="28">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:35:03Z" fail="12" name="character-map" pass="15" skipped="1" statusUnknown="1" totalRun="28">
    <testResult status="pass" testName="character-map-001"/>
    <testResult status="pass" testName="character-map-002"/>
    <testResult status="pass" testName="character-map-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_function-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_function-test-set_result.xml
index f5ece154e..d0aa28d8f 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_function-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_function-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:55:37Z" fail="27" name="function" pass="38" skipped="4" statusUnknown="1" totalRun="66">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:35:02Z" fail="27" name="function" pass="38" skipped="4" statusUnknown="1" totalRun="66">
    <testResult status="fail" testName="function-0001">
       <outResult/>
    </testResult>
@@ -47,7 +47,7 @@
    <testResult status="fail" testName="function-0401"/>
    <testResult status="fail" testName="function-0501">
       <outResult>
-         <errTrace>ERROR! Unknown op code: 0</errTrace>
+         <errTrace>XPST0003 : An XPath expression /out/section[1]/actor[1][@name="User"][children/child="Administrator"][empty(parents/node())] has syntax error. Unknown op code : 0.</errTrace>
          <errTrace>java.lang.ArrayIndexOutOfBoundsException</errTrace>
       </outResult>
    </testResult>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_variable-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_variable-test-set_result.xml
index b965458f2..d248f6a1d 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_variable-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_variable-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:54:57Z" fail="3" name="variable" pass="16" skipped="0" statusUnknown="1" totalRun="20">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:34:34Z" fail="3" name="variable" pass="16" skipped="0" statusUnknown="1" totalRun="20">
    <testResult status="pass" testName="variable-0101"/>
    <testResult status="pass" testName="variable-0102"/>
    <testResult status="pass" testName="variable-0103"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_axes-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_axes-test-set_result.xml
index 57b8e339a..0c87875d0 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_axes-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_axes-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:55:43Z" fail="20" name="axes" pass="181" skipped="0" statusUnknown="0" totalRun="201">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:35:05Z" fail="20" name="axes" pass="181" skipped="0" statusUnknown="0" totalRun="201">
    <testResult status="pass" testName="axes-001"/>
    <testResult status="pass" testName="axes-002"/>
    <testResult status="pass" testName="axes-003"/>
@@ -65,7 +65,7 @@
    <testResult status="fail" testName="axes-060"/>
    <testResult status="fail" testName="axes-061">
       <outResult>
-         <errTrace>ERROR! Unknown op code: 21</errTrace>
+         <errTrace>XPST0003 : An XPath expression                 /out/u = "2,9,3,4"                /out/u = "9,2,3,4"              has syntax error. Unknown op code : 21.</errTrace>
          <errTrace>java.lang.ArrayIndexOutOfBoundsException</errTrace>
       </outResult>
    </testResult>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_castable-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_castable-test-set_result.xml
index c5475bbfa..ebe17213a 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_castable-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_castable-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:55:50Z" fail="5" name="castable" pass="4" skipped="0" statusUnknown="0" totalRun="9">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:35:10Z" fail="5" name="castable" pass="4" skipped="0" statusUnknown="0" totalRun="9">
    <testResult status="pass" testName="castable-001"/>
    <testResult status="pass" testName="castable-002"/>
    <testResult status="pass" testName="castable-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_expression-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_expression-test-set_result.xml
index 81b3c9e62..ae3561d83 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_expression-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_expression-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:55:51Z" fail="0" name="expression" pass="9" skipped="0" statusUnknown="1" totalRun="10">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:35:10Z" fail="0" name="expression" pass="9" skipped="0" statusUnknown="1" totalRun="10">
    <testResult status="pass" testName="expression-0101"/>
    <testResult status="pass" testName="expression-0301"/>
    <testResult status="pass" testName="expression-0302"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_for-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_for-test-set_result.xml
index 955e81a69..36257ac42 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_for-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_for-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:55:52Z" fail="2" name="for" pass="1" skipped="0" statusUnknown="1" totalRun="4">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:35:10Z" fail="2" name="for" pass="1" skipped="0" statusUnknown="1" totalRun="4">
    <testResult status="fail" testName="for-001"/>
    <testResult status="fail" testName="for-002"/>
    <testResult status="pass" testName="for-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_higher-order-functions-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_higher-order-functions-test-set_result.xml
index 3e7a5bdd6..bc4d5083f 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_higher-order-functions-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_higher-order-functions-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:56:01Z" fail="6" name="higher-order-functions" pass="18" skipped="0" statusUnknown="1" totalRun="25">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:35:16Z" fail="6" name="higher-order-functions" pass="18" skipped="0" statusUnknown="1" totalRun="25">
    <testResult status="pass" testName="higher-order-functions-001"/>
    <testResult status="pass" testName="higher-order-functions-002"/>
    <testResult status="pass" testName="higher-order-functions-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_math-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_math-test-set_result.xml
index 5335f20b2..dc0eec7be 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_math-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_math-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:55:54Z" fail="39" name="math" pass="108" skipped="0" statusUnknown="1" totalRun="148">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:35:12Z" fail="39" name="math" pass="108" skipped="0" statusUnknown="1" totalRun="148">
    <testResult status="pass" testName="math-0101"/>
    <testResult status="fail" testName="math-0102">
       <outResult/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_nodetest-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_nodetest-test-set_result.xml
index 7eea4d661..67d20d6c2 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_nodetest-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_nodetest-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:55:59Z" fail="36" name="nodetest" pass="2" skipped="0" statusUnknown="0" totalRun="38">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:35:15Z" fail="36" name="nodetest" pass="2" skipped="0" statusUnknown="0" totalRun="38">
    <testResult status="pass" testName="nodetest-001"/>
    <testResult status="pass" testName="nodetest-002"/>
    <testResult status="fail" testName="nodetest-003">
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_path-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_path-test-set_result.xml
index 803a6d51d..c16ed0682 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_path-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_path-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:56:01Z" fail="3" name="path" pass="7" skipped="0" statusUnknown="0" totalRun="10">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:35:16Z" fail="3" name="path" pass="7" skipped="0" statusUnknown="0" totalRun="10">
    <testResult status="pass" testName="path-001"/>
    <testResult status="pass" testName="path-002"/>
    <testResult status="pass" testName="path-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_predicate-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_predicate-test-set_result.xml
index 7a8b6748d..00d97a7e8 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_predicate-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_predicate-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:56:03Z" fail="7" name="predicate" pass="50" skipped="0" statusUnknown="0" totalRun="57">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:35:17Z" fail="7" name="predicate" pass="50" skipped="0" statusUnknown="0" totalRun="57">
    <testResult status="fail" testName="predicate-001"/>
    <testResult status="fail" testName="predicate-002"/>
    <testResult status="fail" testName="predicate-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_deep-equal-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_deep-equal-test-set_result.xml
index 3eff19a12..f1140d1ac 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_deep-equal-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_deep-equal-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:58:59Z" fail="0" name="deep-equal" pass="2" skipped="0" statusUnknown="0" totalRun="2">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:36:50Z" fail="0" name="deep-equal" pass="2" skipped="0" statusUnknown="0" totalRun="2">
    <testResult status="pass" testName="deep-equal-001"/>
    <testResult status="pass" testName="deep-equal-002"/>
 </testrun>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_format-number-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_format-number-test-set_result.xml
index 5adac9d2f..3c722e0f9 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_format-number-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_format-number-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:59:10Z" fail="32" name="format-number" pass="38" skipped="4" statusUnknown="0" totalRun="70">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:36:56Z" fail="32" name="format-number" pass="38" skipped="4" statusUnknown="0" totalRun="70">
    <testResult status="fail" testName="format-number-001"/>
    <testResult status="fail" testName="format-number-002"/>
    <testResult status="fail" testName="format-number-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_key-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_key-test-set_result.xml
index 3e7559ff9..907b18407 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_key-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_key-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:59:08Z" fail="3" name="key" pass="21" skipped="0" statusUnknown="1" totalRun="25">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:36:55Z" fail="3" name="key" pass="21" skipped="0" statusUnknown="1" totalRun="25">
    <testResult status="pass" testName="key-001"/>
    <testResult status="fail" testName="key-002"/>
    <testResult status="pass" testName="key-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_position-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_position-test-set_result.xml
index 03675ec2d..f3595dbf8 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_position-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_position-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:59:00Z" fail="11" name="position" pass="126" skipped="0" statusUnknown="1" totalRun="138">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:36:50Z" fail="11" name="position" pass="126" skipped="0" statusUnknown="1" totalRun="138">
    <testResult status="pass" testName="position-0101"/>
    <testResult status="fail" testName="position-0102"/>
    <testResult status="fail" testName="position-0103">
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_root-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_root-test-set_result.xml
index 04bfec74e..7ba16e946 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_root-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_root-test-set_result.xml
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:59:07Z" fail="4" name="root" pass="6" skipped="0" statusUnknown="0" totalRun="10">
-   <testResult status="fail" testName="root-0101"/>
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:36:55Z" fail="3" name="root" pass="7" skipped="0" statusUnknown="0" totalRun="10">
+   <testResult status="pass" testName="root-0101"/>
    <testResult status="fail" testName="root-0102"/>
    <testResult status="pass" testName="root-0103"/>
    <testResult status="fail" testName="root-0104"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_analyze-string-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_analyze-string-test-set_result.xml
index 38f556cb6..0a8bc6516 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_analyze-string-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_analyze-string-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:59:04Z" fail="17" name="analyze-string" pass="36" skipped="5" statusUnknown="0" totalRun="53">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:36:53Z" fail="17" name="analyze-string" pass="36" skipped="5" statusUnknown="0" totalRun="53">
    <testResult status="pass" testName="analyze-string-001"/>
    <testResult status="pass" testName="analyze-string-002"/>
    <testResult status="pass" testName="analyze-string-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_apply-templates-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_apply-templates-test-set_result.xml
index af04777c5..a2c69f9b9 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_apply-templates-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_apply-templates-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:55:12Z" fail="25" name="apply-templates" pass="21" skipped="2" statusUnknown="0" totalRun="46">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:34:46Z" fail="25" name="apply-templates" pass="21" skipped="2" statusUnknown="0" totalRun="46">
    <testResult status="fail" testName="apply-templates-001">
       <outResult>&lt;?xml version="1.0" encoding="UTF-8"?&gt;&#13;
 &#13;
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_attribute-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_attribute-test-set_result.xml
index 37c834400..c0864981a 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_attribute-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_attribute-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:55:18Z" fail="21" name="attribute" pass="8" skipped="0" statusUnknown="1" totalRun="30">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:34:50Z" fail="21" name="attribute" pass="8" skipped="0" statusUnknown="1" totalRun="30">
    <testResult status="fail" testName="attribute-0001"/>
    <testResult status="fail" testName="attribute-0002">
       <outResult/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_call-template-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_call-template-test-set_result.xml
index 4a8d2957a..91ccc9602 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_call-template-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_call-template-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:55:19Z" fail="14" name="call-template" pass="27" skipped="1" statusUnknown="0" totalRun="41">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:34:51Z" fail="14" name="call-template" pass="27" skipped="1" statusUnknown="0" totalRun="41">
    <testResult status="fail" testName="call-template-0001">
       <outResult>&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;out/&gt;</outResult>
    </testResult>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_choose-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_choose-test-set_result.xml
index b81b00c25..60911114c 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_choose-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_choose-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:55:21Z" fail="6" name="choose" pass="17" skipped="0" statusUnknown="1" totalRun="24">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:34:52Z" fail="6" name="choose" pass="17" skipped="0" statusUnknown="1" totalRun="24">
    <testResult status="pass" testName="choose-0101"/>
    <testResult status="pass" testName="choose-0102"/>
    <testResult status="fail" testName="choose-0103"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_copy-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_copy-test-set_result.xml
index b5b9919d8..d8d708b73 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_copy-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_copy-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:55:25Z" fail="43" name="copy" pass="16" skipped="0" statusUnknown="1" totalRun="60">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:34:54Z" fail="43" name="copy" pass="16" skipped="0" statusUnknown="1" totalRun="60">
    <testResult status="fail" testName="copy-0101"/>
    <testResult status="pass" testName="copy-0102"/>
    <testResult status="fail" testName="copy-0103"/>
@@ -262,7 +262,7 @@
    <testResult status="fail" testName="copy-1213">
       <outResult>
          <errTrace>XTSE0010 : an instruction xsl:where-populated is not known to the XSLT processor.</errTrace>
-         <errTrace>ERROR! Unknown op code: 0</errTrace>
+         <errTrace>XPST0003 : An XPath expression /out/comment() = "Boo!" has syntax error. Unknown op code : 0.</errTrace>
          <errTrace>java.lang.ArrayIndexOutOfBoundsException</errTrace>
       </outResult>
    </testResult>
@@ -274,7 +274,7 @@
    <testResult status="fail" testName="copy-1215">
       <outResult>
          <errTrace>XTTE0570 : The xs:string value 'Boo!' cannot be cast to a type node().</errTrace>
-         <errTrace>ERROR! Unknown op code: 0</errTrace>
+         <errTrace>XPST0003 : An XPath expression /out/text() = "Boo!" has syntax error. Unknown op code : 0.</errTrace>
          <errTrace>java.lang.ArrayIndexOutOfBoundsException</errTrace>
       </outResult>
    </testResult>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_element-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_element-test-set_result.xml
index fc7fc6dcf..3d0c6ea84 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_element-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_element-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:55:33Z" fail="18" name="element" pass="11" skipped="0" statusUnknown="0" totalRun="29">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:34:59Z" fail="18" name="element" pass="11" skipped="0" statusUnknown="0" totalRun="29">
    <testResult status="fail" testName="element-0001">
       <outResult/>
    </testResult>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_for-each-group-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_for-each-group-test-set_result.xml
index 6cae113a8..b6090745d 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_for-each-group-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_for-each-group-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:55:13Z" fail="26" name="for-each-group" pass="47" skipped="4" statusUnknown="1" totalRun="74">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:34:47Z" fail="26" name="for-each-group" pass="47" skipped="4" statusUnknown="1" totalRun="74">
    <testResult status="pass" testName="for-each-group-001"/>
    <testResult status="skipped" testName="for-each-group-002a" xsltVersion="xslt 2.0 only"/>
    <testResult status="pass" testName="for-each-group-002"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_iterate-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_iterate-test-set_result.xml
index 9d1a1dffc..2c04a7f78 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_iterate-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_iterate-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:55:28Z" fail="29" name="iterate" pass="15" skipped="0" statusUnknown="0" totalRun="44">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:34:56Z" fail="29" name="iterate" pass="15" skipped="0" statusUnknown="0" totalRun="44">
    <testResult status="pass" testName="iterate-001"/>
    <testResult status="pass" testName="iterate-002"/>
    <testResult status="pass" testName="iterate-003"/>
@@ -111,7 +111,7 @@
    </testResult>
    <testResult status="fail" testName="iterate-028">
       <outResult>
-         <errTrace>ERROR! Unknown op code: 0</errTrace>
+         <errTrace>XPST0003 : An XPath expression /out/text()[. = "exit at 12 of 76"] has syntax error. Unknown op code : 0.</errTrace>
          <errTrace>java.lang.ArrayIndexOutOfBoundsException</errTrace>
       </outResult>
    </testResult>
@@ -119,7 +119,7 @@
    <testResult status="fail" testName="iterate-030">
       <outResult>
          <errTrace>XTSE0010 : An xsl:next-iteration instruction is not in a tail position within the sequence constructor of an xsl:iterate instruction.</errTrace>
-         <errTrace>ERROR! Unknown op code: 0</errTrace>
+         <errTrace>XPST0003 : An XPath expression /out/text()["count 2"] has syntax error. Unknown op code : 0.</errTrace>
          <errTrace>java.lang.ArrayIndexOutOfBoundsException</errTrace>
       </outResult>
    </testResult>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_sequence-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_sequence-test-set_result.xml
index 2e490be31..175d89e62 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_sequence-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_sequence-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:55:30Z" fail="18" name="sequence" pass="8" skipped="0" statusUnknown="1" totalRun="27">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:34:57Z" fail="18" name="sequence" pass="8" skipped="0" statusUnknown="1" totalRun="27">
    <testResult status="fail" testName="sequence-0101"/>
    <testResult status="fail" testName="sequence-0102"/>
    <testResult status="pass" testName="sequence-0103"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_sort-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_sort-test-set_result.xml
index 7259684ca..d7eac0b8f 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_sort-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_sort-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:55:34Z" fail="44" name="sort" pass="36" skipped="0" statusUnknown="0" totalRun="80">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:35:00Z" fail="44" name="sort" pass="36" skipped="0" statusUnknown="0" totalRun="80">
    <testResult status="pass" testName="sort-001"/>
    <testResult status="pass" testName="sort-002"/>
    <testResult status="fail" testName="sort-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_try-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_try-test-set_result.xml
index 6540e2498..bba7e4b91 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_try-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_try-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:55:17Z" fail="26" name="try" pass="11" skipped="5" statusUnknown="0" totalRun="37">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:34:49Z" fail="26" name="try" pass="11" skipped="5" statusUnknown="0" totalRun="37">
    <testResult status="pass" testName="try-001"/>
    <testResult status="fail" testName="try-002">
       <outResult/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_xsl-document-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_xsl-document-test-set_result.xml
index 6e755ea06..dfaef46e6 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_xsl-document-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_xsl-document-test-set_result.xml
@@ -1,8 +1,8 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:59:13Z" fail="13" name="xsl-document" pass="12" skipped="0" statusUnknown="0" totalRun="25">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:36:59Z" fail="13" name="xsl-document" pass="12" skipped="0" statusUnknown="0" totalRun="25">
    <testResult status="pass" testName="xsl-document-0101"/>
    <testResult status="fail" testName="xsl-document-0102">
       <outResult>
-         <errTrace>ERROR! Unknown op code: 0</errTrace>
+         <errTrace>XPST0003 : An XPath expression /out/node()[1][self::comment()][.="Valuable comment"] has syntax error. Unknown op code : 0.</errTrace>
          <errTrace>java.lang.ArrayIndexOutOfBoundsException: -1</errTrace>
       </outResult>
    </testResult>
@@ -16,7 +16,7 @@
    <testResult status="pass" testName="xsl-document-0203"/>
    <testResult status="fail" testName="xsl-document-0301">
       <outResult>
-         <errTrace>ERROR! Unknown op code: 0</errTrace>
+         <errTrace>XPST0003 : An XPath expression /out/node()[1][self::*:e1][namespace-uri()="http://www.example.org/foo"][@t1="1"][@t2="2"][@t3="3"] has syntax error. Unknown op code : 0.</errTrace>
          <errTrace>java.lang.ArrayIndexOutOfBoundsException: -1</errTrace>
       </outResult>
    </testResult>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/misc/_regex-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/misc/_regex-test-set_result.xml
index bcb7dee2a..50b74ea93 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/misc/_regex-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/misc/_regex-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:59:12Z" fail="12" name="regex" pass="33" skipped="0" statusUnknown="0" totalRun="45">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:36:58Z" fail="12" name="regex" pass="33" skipped="0" statusUnknown="0" totalRun="45">
    <testResult status="pass" testName="regex-001"/>
    <testResult status="fail" testName="regex-002"/>
    <testResult status="pass" testName="regex-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_boolean-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_boolean-test-set_result.xml
index 17c92dd16..bc3199c23 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_boolean-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_boolean-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:56:05Z" fail="24" name="boolean" pass="88" skipped="0" statusUnknown="0" totalRun="112">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:35:19Z" fail="24" name="boolean" pass="88" skipped="0" statusUnknown="0" totalRun="112">
    <testResult status="pass" testName="boolean-001"/>
    <testResult status="pass" testName="boolean-002"/>
    <testResult status="pass" testName="boolean-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_date-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_date-test-set_result.xml
index 371c67800..1baeb01b8 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_date-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_date-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:56:13Z" fail="47" name="date" pass="37" skipped="0" statusUnknown="1" totalRun="85">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:35:24Z" fail="47" name="date" pass="37" skipped="0" statusUnknown="1" totalRun="85">
    <testResult status="pass" testName="date-001"/>
    <testResult status="pass" testName="date-002"/>
    <testResult status="pass" testName="date-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_node-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_node-test-set_result.xml
index cf31f05af..23565e76e 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_node-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_node-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:56:08Z" fail="17" name="node" pass="15" skipped="0" statusUnknown="0" totalRun="32">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:35:21Z" fail="17" name="node" pass="15" skipped="0" statusUnknown="0" totalRun="32">
    <testResult status="pass" testName="node-0101"/>
    <testResult status="pass" testName="node-0201"/>
    <testResult status="fail" testName="node-0301">
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_string-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_string-test-set_result.xml
index fce23d5c7..994e44bb2 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_string-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_string-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:56:09Z" fail="8" name="string" pass="128" skipped="0" statusUnknown="0" totalRun="136">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:35:21Z" fail="8" name="string" pass="128" skipped="0" statusUnknown="0" totalRun="136">
    <testResult status="pass" testName="string-001"/>
    <testResult status="pass" testName="string-002"/>
    <testResult status="pass" testName="string-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/w3c_xslt3_testsuite_xalan-j_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/w3c_xslt3_testsuite_xalan-j_result.xml
index 18fa1e327..7bf6dc03e 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/w3c_xslt3_testsuite_xalan-j_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/w3c_xslt3_testsuite_xalan-j_result.xml
@@ -1,10 +1,10 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<testResult dateTime="2025-07-22T12:59:54Z" desc="W3C XSLT 3.0 test suite results" fail="777" pass="1415" skipped="39" success="64.03%" totalRun="2210" xslt_processor="Xalan-J XSLT 3.0 development code">
+<testResult dateTime="2025-07-23T11:37:14Z" desc="W3C XSLT 3.0 test suite results" fail="775" pass="1417" skipped="39" success="64.12%" totalRun="2210" xslt_processor="Xalan-J XSLT 3.0 development code">
   <attr>
     <as fail="53" pass="51" skipped="4" success="48.57%" totalRun="105"/>
     <avt fail="14" pass="21" skipped="0" success="60.0%" totalRun="35"/>
     <match fail="61" pass="67" skipped="8" success="51.94%" totalRun="129"/>
-    <select fail="6" pass="18" skipped="0" success="72.0%" totalRun="25"/>
+    <select fail="5" pass="19" skipped="0" success="76.0%" totalRun="25"/>
     <xpath-default-namespace fail="17" pass="9" skipped="0" success="34.62%" totalRun="26"/>
   </attr>
   <decl>
@@ -29,7 +29,7 @@
     <format-number fail="32" pass="38" skipped="4" success="54.29%" totalRun="70"/>
     <key fail="3" pass="21" skipped="0" success="84.0%" totalRun="25"/>
     <position fail="11" pass="126" skipped="0" success="91.3%" totalRun="138"/>
-    <root fail="4" pass="6" skipped="0" success="60.0%" totalRun="10"/>
+    <root fail="3" pass="7" skipped="0" success="70.0%" totalRun="10"/>
   </fn>
   <insn>
     <analyze-string fail="17" pass="36" skipped="5" success="67.92%" totalRun="53"/>
diff --git a/src/test/java/org/apache/xalan/tests/xpath3/XPathGeneralComparisonOpTests.java b/src/test/java/org/apache/xalan/tests/xpath3/XPathGeneralComparisonOpTests.java
index a6a6c3463..142dc0829 100644
--- a/src/test/java/org/apache/xalan/tests/xpath3/XPathGeneralComparisonOpTests.java
+++ b/src/test/java/org/apache/xalan/tests/xpath3/XPathGeneralComparisonOpTests.java
@@ -189,5 +189,45 @@ public class XPathGeneralComparisonOpTests extends XslTransformTestsUtil {
         
         runXslTransformAndAssertOutput(xmlFilePath, xslFilePath, goldFilePath, null);
     }
+    
+    @Test
+    public void xpathGeneralComparisonOpTest15() {
+        String xmlFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test15.xml"; 
+        String xslFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test15.xsl";
+        
+        String goldFilePath = XSL_TRANSFORM_GOLD_DIRPATH + "test15.out";                
+        
+        runXslTransformAndAssertOutput(xmlFilePath, xslFilePath, goldFilePath, null);
+    }
+    
+    @Test
+    public void xpathGeneralComparisonOpTest16() {
+        String xmlFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test16.xml"; 
+        String xslFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test16.xsl";
+        
+        String goldFilePath = XSL_TRANSFORM_GOLD_DIRPATH + "test16.out";                
+        
+        runXslTransformAndAssertOutput(xmlFilePath, xslFilePath, goldFilePath, null);
+    }
+    
+    @Test
+    public void xpathGeneralComparisonOpTest17() {
+        String xmlFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test16.xml"; 
+        String xslFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test17.xsl";
+        
+        String goldFilePath = XSL_TRANSFORM_GOLD_DIRPATH + "test17.out";                
+        
+        runXslTransformAndAssertOutput(xmlFilePath, xslFilePath, goldFilePath, null);
+    }
+    
+    @Test
+    public void xpathGeneralComparisonOpTest18() {
+        String xmlFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test18.xsl"; 
+        String xslFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test18.xsl";
+        
+        String goldFilePath = XSL_TRANSFORM_GOLD_DIRPATH + "test18.out";                
+        
+        runXslTransformAndAssertOutput(xmlFilePath, xslFilePath, goldFilePath, null);
+    }
 
 }
diff --git a/src/test/resources/xpath_general_comparison/gold/test15.out b/src/test/resources/xpath_general_comparison/gold/test15.out
new file mode 100644
index 000000000..9ecf8cef3
--- /dev/null
+++ b/src/test/resources/xpath_general_comparison/gold/test15.out
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?><result>
+  <one>true</one>
+  <two>false</two>
+  <three>false</three>
+</result>
diff --git a/src/test/resources/xpath_general_comparison/gold/test16.out b/src/test/resources/xpath_general_comparison/gold/test16.out
new file mode 100644
index 000000000..8f8f9e2b5
--- /dev/null
+++ b/src/test/resources/xpath_general_comparison/gold/test16.out
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?><result>
+  <a>1</a>
+  <b/>
+</result>
diff --git a/src/test/resources/xpath_general_comparison/gold/test17.out b/src/test/resources/xpath_general_comparison/gold/test17.out
new file mode 100644
index 000000000..b32099c45
--- /dev/null
+++ b/src/test/resources/xpath_general_comparison/gold/test17.out
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?><result>
+  <a>1</a>
+  <b/>
+  <c>3</c>
+  <d>4</d>
+</result>
diff --git a/src/test/resources/xpath_general_comparison/gold/test18.out b/src/test/resources/xpath_general_comparison/gold/test18.out
new file mode 100644
index 000000000..80a4b0dae
--- /dev/null
+++ b/src/test/resources/xpath_general_comparison/gold/test18.out
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?><result>
+  <one>true</one>
+  <two>true</two>
+  <three>false</three>
+  <four>false</four>
+  <a>true</a>
+  <b>true</b>
+  <c>false</c>
+  <d>false</d>
+</result>
diff --git a/src/test/resources/xpath_general_comparison/test15.xml b/src/test/resources/xpath_general_comparison/test15.xml
new file mode 100644
index 000000000..2c1d4abbb
--- /dev/null
+++ b/src/test/resources/xpath_general_comparison/test15.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<doc>
+  <a>hello</a>
+  <b>ok</b>
+  <c>thanks</c>
+</doc>
diff --git a/src/test/resources/xpath_general_comparison/test15.xsl b/src/test/resources/xpath_general_comparison/test15.xsl
new file mode 100644
index 000000000..e3ea4f233
--- /dev/null
+++ b/src/test/resources/xpath_general_comparison/test15.xsl
@@ -0,0 +1,56 @@
+<?xml version="1.0"?> 
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+                xmlns:xs="http://www.w3.org/2001/XMLSchema"
+                xmlns:fn0="http://fn0"
+                exclude-result-prefixes="#all"				
+                version="3.0">    
+    
+    <!-- Author: mukulg@apache.org -->
+    
+    <!-- use with test15.xml -->
+  
+    <!-- An XSL stylesheet test case, to test XPath 3.1 general 
+         comparison operator != with XPath literal array on LHS. --> 				
+				
+    <xsl:output method="xml" indent="yes"/>				
+
+	<xsl:template match="/doc">
+	   <result>
+		  <one>
+		     <xsl:value-of select="[fn0:str1(a), fn0:str1(b), fn0:str1(c)] != 'thanks'"/>
+		  </one>
+		  <two>
+		     <xsl:value-of select="[fn0:str1(a), fn0:str1(a), fn0:str1(a)] != 'hello'"/>
+		  </two>
+		  <three>
+		     <xsl:value-of select="[fn0:str1(a), fn0:str1(a), fn0:str1(a)] != fn0:str1(a)"/>
+		  </three>
+	   </result>
+	</xsl:template>
+	
+	<!-- An XSL stylesheet function, that returns string value of 
+	     supplied xdm element node. -->
+	<xsl:function name="fn0:str1" as="xs:string">
+	   <xsl:param name="p1" as="element()"/>
+	   <xsl:sequence select="string($p1)"/>
+	</xsl:function>
+	
+	<!--
+      * Licensed to the Apache Software Foundation (ASF) under one
+      * or more contributor license agreements. See the NOTICE file
+      * distributed with this work for additional information
+      * regarding copyright ownership. The ASF licenses this file
+      * to you under the Apache License, Version 2.0 (the "License");
+      * you may not use this file except in compliance with the License.
+      * You may obtain a copy of the License at
+      *
+      *     http://www.apache.org/licenses/LICENSE-2.0
+      *
+      * Unless required by applicable law or agreed to in writing, software
+      * distributed under the License is distributed on an "AS IS" BASIS,
+      * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+      * See the License for the specific language governing permissions and
+      * limitations under the License.
+    -->
+
+</xsl:stylesheet>
diff --git a/src/test/resources/xpath_general_comparison/test16.xml b/src/test/resources/xpath_general_comparison/test16.xml
new file mode 100644
index 000000000..0e050deab
--- /dev/null
+++ b/src/test/resources/xpath_general_comparison/test16.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<doc>
+   <one>1</one>
+   <two>2</two>
+   <three>3</three>
+   <four>4</four>
+</doc>
diff --git a/src/test/resources/xpath_general_comparison/test16.xsl b/src/test/resources/xpath_general_comparison/test16.xsl
new file mode 100644
index 000000000..e2f2b5f2c
--- /dev/null
+++ b/src/test/resources/xpath_general_comparison/test16.xsl
@@ -0,0 +1,50 @@
+<?xml version="1.0"?> 
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"                				
+                version="3.0">
+    
+    <!-- Author: mukulg@apache.org -->
+    
+    <!-- use with test16.xml -->
+  
+    <!-- An XSL stylesheet test case, to test XPath 3.1 general 
+         comparison operator = with XPath literal array on LHS. --> 				
+				
+    <xsl:output method="xml" indent="yes"/>				
+
+	<xsl:template match="/doc">
+	   <result>
+		  <a>
+			 <xsl:variable name="var1">
+				<xsl:if test="[number(two), number(one), number(three)] = number(two)">
+				   1
+				</xsl:if>
+		     </xsl:variable>
+			 <xsl:value-of select="normalize-space($var1)"/>
+		  </a>
+		  <b>
+			 <xsl:if test="[number(two), number(one), number(three)] = number(four)">
+				  2
+		     </xsl:if>
+		  </b>
+	   </result>
+	</xsl:template>
+	
+	<!--
+      * Licensed to the Apache Software Foundation (ASF) under one
+      * or more contributor license agreements. See the NOTICE file
+      * distributed with this work for additional information
+      * regarding copyright ownership. The ASF licenses this file
+      * to you under the Apache License, Version 2.0 (the "License");
+      * you may not use this file except in compliance with the License.
+      * You may obtain a copy of the License at
+      *
+      *     http://www.apache.org/licenses/LICENSE-2.0
+      *
+      * Unless required by applicable law or agreed to in writing, software
+      * distributed under the License is distributed on an "AS IS" BASIS,
+      * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+      * See the License for the specific language governing permissions and
+      * limitations under the License.
+    -->		
+
+</xsl:stylesheet>
diff --git a/src/test/resources/xpath_general_comparison/test17.xsl b/src/test/resources/xpath_general_comparison/test17.xsl
new file mode 100644
index 000000000..88966e154
--- /dev/null
+++ b/src/test/resources/xpath_general_comparison/test17.xsl
@@ -0,0 +1,89 @@
+<?xml version="1.0"?> 
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+                xmlns:xs="http://www.w3.org/2001/XMLSchema"
+                xmlns:fn0="http://fn0"
+                exclude-result-prefixes="#all"                				
+                version="3.0">
+    
+    <!-- Author: mukulg@apache.org -->
+    
+    <!-- use with test16.xml -->
+  
+    <!-- An XSL stylesheet test case, to test XPath 3.1 general 
+         comparison operator = with XPath literal array on LHS. 
+         
+         This stylesheet also tests, calling XSL stylesheet function 
+         with arguments that're XPath literal sequence or array.         
+    -->				
+				
+    <xsl:output method="xml" indent="yes"/>				
+
+	<xsl:template match="/doc">
+	   <result>
+			<a>
+				<xsl:variable name="var1">
+					<xsl:if test="[two, one, three] = two">
+						1
+					</xsl:if>
+				</xsl:variable>
+				<xsl:value-of select="normalize-space($var1)" />
+			</a>
+			<b>
+				<xsl:if test="[two, one, three] = four">
+					2
+				</xsl:if>
+			</b>
+			<c>
+				<xsl:variable name="var1">
+					<xsl:if test="fn0:compareXdmSeq((two, one, three), two)">
+						3
+					</xsl:if>
+				</xsl:variable>
+				<xsl:value-of select="normalize-space($var1)" />
+			</c>
+			<d>
+				<xsl:variable name="var1">
+					<xsl:if test="fn0:compareXdmArray([two, one, three], two)">
+						4
+					</xsl:if>
+				</xsl:variable>
+				<xsl:value-of select="normalize-space($var1)" />
+			</d>
+       </result>
+	</xsl:template>
+	
+	<!-- An XSL stylesheet function, that compares an xdm sequence of 
+	     elements with an element node using XPath operator '='. -->
+	<xsl:function name="fn0:compareXdmSeq" as="xs:boolean">
+	   <xsl:param name="p1" as="element()*"/>
+	   <xsl:param name="p2" as="element()"/>
+	   <xsl:sequence select="$p1 = $p2"/>
+	</xsl:function>
+	
+	<!-- An XSL stylesheet function, that compares an xdm array of 
+	     elements with an element node using XPath operator '='. -->
+	<xsl:function name="fn0:compareXdmArray" as="xs:boolean">
+	   <xsl:param name="p1" as="array(*)"/>
+	   <xsl:param name="p2" as="element()"/>
+	   <xsl:sequence select="$p1 = $p2"/>
+	</xsl:function>
+	
+	<!--
+      * Licensed to the Apache Software Foundation (ASF) under one
+      * or more contributor license agreements. See the NOTICE file
+      * distributed with this work for additional information
+      * regarding copyright ownership. The ASF licenses this file
+      * to you under the Apache License, Version 2.0 (the "License");
+      * you may not use this file except in compliance with the License.
+      * You may obtain a copy of the License at
+      *
+      *     http://www.apache.org/licenses/LICENSE-2.0
+      *
+      * Unless required by applicable law or agreed to in writing, software
+      * distributed under the License is distributed on an "AS IS" BASIS,
+      * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+      * See the License for the specific language governing permissions and
+      * limitations under the License.
+    -->
+
+</xsl:stylesheet>
diff --git a/src/test/resources/xpath_general_comparison/test18.xsl b/src/test/resources/xpath_general_comparison/test18.xsl
new file mode 100644
index 000000000..35d041717
--- /dev/null
+++ b/src/test/resources/xpath_general_comparison/test18.xsl
@@ -0,0 +1,76 @@
+<?xml version="1.0"?> 
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+                xmlns:xs="http://www.w3.org/2001/XMLSchema"
+                exclude-result-prefixes="xs"				
+                version="3.0">
+                
+    <!-- Author: mukulg@apache.org -->
+  
+    <!-- An XSL stylesheet test case, to test XPath 3.1 general 
+         comparison operator = with XPath literal array on LHS
+         and XPath literal array or sequence on RHS.         
+         
+         As per XPath 3.1 spec, from the point of view of XPath 
+         comparison operator =, XPath literal arrays are atomized 
+         to sequence before comparison, which means that XPath literal 
+         array is similar to literal sequence for comparison purposes.         
+    -->	                				
+				
+    <xsl:output method="xml" indent="yes"/>				
+
+	<xsl:template match="/">
+	   <result>
+		  <one>
+		     <xsl:value-of select="[1,2,3] = [2,5]"/>
+		  </one>
+		  <two>
+		     <xsl:value-of select="[1,2,3] = (2,5)"/>
+		  </two>
+		  <three>
+		     <xsl:value-of select="[1,2,3] = [6,7]"/>
+		  </three>
+		  <four>
+		     <xsl:value-of select="[1,2,3] = (6,7)"/>
+		  </four>
+		  
+		  <!-- Using xsl:variable, to do same comparisons -->
+		  <xsl:variable name="n1" select="1" as="xs:integer"/>
+		  <xsl:variable name="n2" select="2" as="xs:integer"/>
+		  <xsl:variable name="n3" select="3" as="xs:integer"/>
+		  <xsl:variable name="n5" select="5" as="xs:integer"/>
+		  <xsl:variable name="n6" select="6" as="xs:integer"/>
+		  <xsl:variable name="n7" select="7" as="xs:integer"/>
+		  <a>
+		    <xsl:value-of select="[$n1, $n2, $n3] = [$n2, $n5]"/>
+		  </a>
+		  <b>
+		    <xsl:value-of select="[$n1, $n2, $n3] = ($n2, $n5)"/>
+		  </b>
+		  <c>
+		    <xsl:value-of select="[$n1, $n2, $n3] = [$n6, $n7]"/>
+		  </c>
+		  <d>
+		    <xsl:value-of select="[$n1, $n2, $n3] = ($n6, $n7)"/>
+		  </d>
+	   </result>
+	</xsl:template>
+	
+	<!--
+      * Licensed to the Apache Software Foundation (ASF) under one
+      * or more contributor license agreements. See the NOTICE file
+      * distributed with this work for additional information
+      * regarding copyright ownership. The ASF licenses this file
+      * to you under the Apache License, Version 2.0 (the "License");
+      * you may not use this file except in compliance with the License.
+      * You may obtain a copy of the License at
+      *
+      *     http://www.apache.org/licenses/LICENSE-2.0
+      *
+      * Unless required by applicable law or agreed to in writing, software
+      * distributed under the License is distributed on an "AS IS" BASIS,
+      * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+      * See the License for the specific language governing permissions and
+      * limitations under the License.
+    -->		
+
+</xsl:stylesheet>


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@xalan.apache.org
For additional commands, e-mail: commits-help@xalan.apache.org