<!--
  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="FunctionsAndOperatorsOnNumericQueries" featureOwner="VXQuery">
   <GroupInfo>
      <title>Function and Operators on Numerics</title>
      <description/>
   </GroupInfo>
   <test-case name="functions-and-operators-on-numerics-fn_abs" FilePath="Numerics/" Creator="Preston Carman">
      <description>Query for fn:abs with all numeric types.</description>
      <query name="fn_abs" date="2015-01-05"/>
      <output-file compare="Text">fn_abs.txt</output-file>
   </test-case>
   <test-case name="functions-and-operators-on-numerics-fn_ceiling" FilePath="Numerics/" Creator="Preston Carman">
      <description>Query for fn:ceiling with all numeric types.</description>
      <query name="fn_ceiling" date="2015-01-05"/>
      <output-file compare="Text">fn_ceiling.txt</output-file>
   </test-case>
   <test-case name="functions-and-operators-on-numerics-fn_round-half-to-even" FilePath="Numerics/" Creator="Shivani Mall">
      <description>Query for fn:round-half-to-even with all numeric types.</description>
      <query name="fn_round-half-to-even" date="2015-02-25"/>
      <output-file compare="Text">fn_round-half-to-even.txt</output-file>
   </test-case>
   <test-case name="functions-and-operators-on-numerics-fn_round" FilePath="Numerics/" Creator="Shivani Mall">
      <description>Query for fn:round with all numeric types.</description>
      <query name="fn_round" date="2015-02-25"/>
      <output-file compare="Text">fn_round.txt</output-file>
   </test-case>
   <test-case name="functions-and-operators-on-numerics-fn_floor" FilePath="Numerics/" Creator="Shivani Mall">
      <description>Query for fn:floor with all numeric types.</description>
      <query name="fn_floor" date="2015-02-25"/>
      <output-file compare="Text">fn_floor.txt</output-file>
   </test-case>
</test-group>