<?xml version="1.0"?>
<!--
   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.
-->

<!--
This file is used by the maven-changes-plugin to generate the release notes.
Useful ways of finding items to add to this file are:

1.  Add items when you fix a bug or add a feature (this makes the
release process easy :-).

2.  Do a JIRA search for tickets closed since the previous release.

3.  Use the report generated by the maven-changelog-plugin to see all
SVN commits.

To generate the file RELEASE-NOTES.txt from this file:

mvn changes:announcement-generate -Prelease-notes [-Dchanges.version]

The <action> type attribute can be add,update,fix,remove.
-->

<!-- NOTE:
The description attribute entries below are specially formatted
so as to improve the layout of the generated text release notes.

The parsing process removes all line feeds, replacing them with a single space.
The Velocity template in src/changes/release-notes.vm has been enhanced to replace pairs of adjacent spaces
with a new-line in the release notes. (These spaces are ignored when displaying HTML).
If the output is not quite correct, check for invisible trailing spaces!
-->

<document>
  <properties>
    <title>Apache Commons Numbers Release Notes</title>
  </properties>
  <body>
    <release version="1.0-beta2" date="TBD" description="
This is a beta release of Apache Commons Numbers. No guarantees are
made regarding the stability of the API or compatibility with future
releases.

Apache Commons Numbers 1.0-beta1 contains the following library modules:
  commons-numbers-angle (requires Java 8+)
  commons-numbers-arrays (requires Java 8+)
  commons-numbers-combinatorics (requires Java 8+)
  commons-numbers-complex (requires Java 8+)
  commons-numbers-core (requires Java 8+)
  commons-numbers-field (requires Java 8+)
  commons-numbers-fraction (requires Java 8+)
  commons-numbers-gamma (requires Java 8+)
  commons-numbers-primes (requires Java 8+)
  commons-numbers-quaternion (requires Java 8+)
  commons-numbers-rootfinder (requires Java 8+)
">
      <action dev="aherbert" type="fix" issue="NUMBERS-150" due-to="Jin Xu">
        "Fraction/BigFraction": Fixed pow(int) to handle Integer.MIN_VALUE and throw
        ArithmeticException for negative exponents to a fraction of zero.
      </action>
    </release>

    <release version="1.0-beta1" date="2020-04-08" description="
This is a beta release of Apache Commons Numbers. No guarantees are
made regarding the stability of the API or compatibility with future
releases.

Apache Commons Numbers 1.0-beta1 contains the following library modules:
  commons-numbers-angle (requires Java 8+)
  commons-numbers-arrays (requires Java 8+)
  commons-numbers-combinatorics (requires Java 8+)
  commons-numbers-complex (requires Java 8+)
  commons-numbers-core (requires Java 8+)
  commons-numbers-field (requires Java 8+)
  commons-numbers-fraction (requires Java 8+)
  commons-numbers-gamma (requires Java 8+)
  commons-numbers-primes (requires Java 8+)
  commons-numbers-quaternion (requires Java 8+)
  commons-numbers-rootfinder (requires Java 8+)
">
    </release>

  </body>
</document>
