Content of file Rational.java.html

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../jacoco-resources/report.gif" type="image/gif"/><title>Rational.java</title><link rel="stylesheet" href="../../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../../index.html" class="el_report">Mistral Operations</a> &gt; <a href="../index.html" class="el_bundle">image-core</a> &gt; <a href="index.source.html" class="el_package">it.tidalwave.image</a> &gt; <span class="el_source">Rational.java</span></div><h1>Rational.java</h1><pre class="source lang-java linenums">/*
 * *********************************************************************************************************************
 *
 * Mistral: open source imaging engine
 * http://tidalwave.it/projects/mistral
 *
 * Copyright (C) 2003 - 2023 by Tidalwave s.a.s. (http://tidalwave.it)
 *
 * *********************************************************************************************************************
 *
 * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;); 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 &quot;AS IS&quot; 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.
 *
 * *********************************************************************************************************************
 *
 * git clone https://bitbucket.org/tidalwave/mistral-src
 * git clone https://github.com/tidalwave-it/mistral-src
 *
 * *********************************************************************************************************************
 */
package it.tidalwave.image;

import javax.annotation.Nonnull;
import javax.annotation.concurrent.Immutable;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.RequiredArgsConstructor;

/***********************************************************************************************************************
 *
 * @author Fabrizio Giudici
 *
 **********************************************************************************************************************/
<span class="pc bpc" id="L40" title="5 of 10 branches missed.">@Immutable @RequiredArgsConstructor(staticName = &quot;of&quot;) @EqualsAndHashCode(callSuper = false)</span>
public final class Rational extends Number
  {
<span class="fc" id="L43">    @Getter</span>
    private final int numerator;

<span class="fc" id="L46">    @Getter</span>
    private final int denominator;

    /*******************************************************************************************************************
     *
     * @param     i
     *
     ******************************************************************************************************************/
    @Nonnull
    public static Rational of (final int i)
      {
<span class="nc" id="L57">        return of(i, 1);</span>
      }

    /*******************************************************************************************************************
     *
     * @param d
     *
     ******************************************************************************************************************/
    @Nonnull
    public static Rational of (final double d)
      {
<span class="nc" id="L68">        var denominator = 100000;</span>
<span class="nc" id="L69">        var numerator = (int)Math.round(d * denominator);</span>
        // TODO: normalize
normalize
<span class="nc" id="L71"> return of(numerator, denominator);</span> } /******************************************************************************************************************* * * {@inheritDoc} * ******************************************************************************************************************/ @Override public double doubleValue() { <span class="fc" id="L82"> return (double)numerator / (double)denominator;</span> } /******************************************************************************************************************* * * {@inheritDoc} * ******************************************************************************************************************/ @Override public float floatValue() { <span class="nc" id="L93"> return (float)numerator / (float)denominator;</span> } /******************************************************************************************************************* * * {@inheritDoc} * ******************************************************************************************************************/ @Override public byte byteValue() { <span class="nc" id="L104"> return (byte)doubleValue();</span> } /******************************************************************************************************************* * * {@inheritDoc} * ******************************************************************************************************************/ @Override public int intValue() { <span class="nc" id="L115"> return (int)doubleValue();</span> } /******************************************************************************************************************* * * {@inheritDoc} * ******************************************************************************************************************/ @Override public long longValue() { <span class="nc" id="L126"> return (long)doubleValue();</span> } /******************************************************************************************************************* * * {@inheritDoc} * ******************************************************************************************************************/ @Override public short shortValue() { <span class="nc" id="L137"> return (short)doubleValue();</span> } /******************************************************************************************************************* * * * @param det * @return * ******************************************************************************************************************/ @Nonnull public Rational divide (final double det) { <span class="nc" id="L150"> return Rational.of(numerator, (int)Math.round(denominator * det));</span> } /******************************************************************************************************************* * * * ******************************************************************************************************************/ @Nonnull public Rational getReciprocal() { <span class="nc" id="L161"> return Rational.of(denominator, numerator);</span> } /******************************************************************************************************************* * * * ******************************************************************************************************************/ public boolean isInteger() { <span class="nc bnc" id="L171" title="All 10 branches missed."> return (denominator == 1) || ((denominator != 0) &amp;&amp; ((numerator % denominator) == 0))</span> || ((denominator == 0) &amp;&amp; (numerator == 0)); } /******************************************************************************************************************* * * {@inheritDoc} * ******************************************************************************************************************/ @Override @Nonnull public String toString() { <span class="fc" id="L183"> return numerator + &quot;/&quot; + denominator;</span> } } </pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.7.202105040129</span></div></body></html>