<!--
  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.
-->

<test-group xmlns="http://www.w3.org/2005/02/query-test-XQTSCatalog" name="AggregatePartition1Queries" featureOwner="VXQuery">
   <GroupInfo>
      <title>Single Test</title>
      <description/>
   </GroupInfo>
   <test-case name="simple-add" FilePath="Simple/" Creator="Preston Carman">
      <description>Adds two numbers.</description>
      <query name="add" date="2014-08-18"/>
      <output-file compare="Text">add.txt</output-file>
   </test-case>
   <test-case name="simple-fn-doc" FilePath="Simple/" Creator="Preston Carman">
      <description>Adds two numbers.</description>
      <query name="fn_doc" date="2014-08-18"/>
      <output-file compare="Text">fn_doc.txt</output-file>
   </test-case>
</test-group>
