Skip to content

Commit

Permalink
Make PsyScalar extend Comparable. Remove redundant code.
Browse files Browse the repository at this point in the history
  • Loading branch information
urbic committed May 12, 2024
1 parent f543073 commit e7fea13
Show file tree
Hide file tree
Showing 8 changed files with 43 additions and 115 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -209,14 +209,16 @@ public PsyInteger psySignum()
}

@Override
public int cmp(final PsyRealNumeric oRealNumeric)
public int compareTo(final PsyRealNumeric oRealNumeric)
{
if(oRealNumeric instanceof PsyIntegral oIntegral)
return value.compareTo(oIntegral.bigIntegerValue());
if(oRealNumeric instanceof PsyRational oRational)
return psyMul(oRational.psyDenominator()).cmp(oRational.psyNumerator());
return psyMul(oRational.psyDenominator()).compareTo(oRational.psyNumerator());
if(oRealNumeric instanceof PsyReal oReal)
return Double.compare(doubleValue(), oReal.doubleValue());

// TODO
throw new ClassCastException();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,34 +98,9 @@ public PsyBoolean psyEq(final PsyObject o)
}

@Override
public PsyInteger psyCmp(final PsyBoolean oBoolean)
public int compareTo(final PsyBoolean oBoolean)
{
return this==oBoolean? PsyInteger.ZERO:
this==FALSE? PsyInteger.MINUS_ONE: PsyInteger.ONE;
}

@Override
public PsyBoolean psyLt(final PsyBoolean oBoolean)
{
return PsyBoolean.of(this==FALSE && oBoolean==TRUE);
}

@Override
public PsyBoolean psyLe(final PsyBoolean oBoolean)
{
return PsyBoolean.of(this==FALSE || this==oBoolean);
}

@Override
public PsyBoolean psyGt(final PsyBoolean oBoolean)
{
return PsyBoolean.of(this==TRUE && this==FALSE);
}

@Override
public PsyBoolean psyGe(final PsyBoolean oBoolean)
{
return PsyBoolean.of(this==TRUE || this==oBoolean);
return this==oBoolean? 0: this==FALSE? -1: 1;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -236,14 +236,14 @@ public PsyRealNumeric psyMul(final PsyRealNumeric oRealNumeric)
}

@Override
public int cmp(final PsyRealNumeric oRealNumeric)
public int compareTo(final PsyRealNumeric oRealNumeric)
{
if(oRealNumeric instanceof PsyInteger oInteger)
return Long.compare(value, oInteger.value);
if(oRealNumeric instanceof PsyBigInteger oBigInteger)
return bigIntegerValue().compareTo(oBigInteger.bigIntegerValue());
if(oRealNumeric instanceof PsyRational oRational)
return psyMul(oRational.psyDenominator()).cmp(oRational.psyNumerator());
return psyMul(oRational.psyDenominator()).compareTo(oRational.psyNumerator());
if(oRealNumeric instanceof PsyReal oReal)
return Double.compare(doubleValue(), oReal.doubleValue());
throw new ClassCastException();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -158,11 +158,11 @@ public static PsyRational of(final PsyIntegral oNumerator, final PsyIntegral oDe
}

@Override
default public int cmp(final PsyRealNumeric oNumeric)
default public int compareTo(final PsyRealNumeric oNumeric)
{
if(oNumeric instanceof PsyRational oRational)
return psyNumerator().psyMul(oRational.psyDenominator())
.cmp(psyDenominator().psyMul(oRational.psyNumerator()));
.compareTo(psyDenominator().psyMul(oRational.psyNumerator()));
// TODO
return Double.compare(doubleValue(), oNumeric.doubleValue());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -171,12 +171,11 @@ public PsyReal psyCeiling()
}

@Override
public int cmp(final PsyRealNumeric oNumeric)
public int compareTo(final PsyRealNumeric oNumeric)
{
return Double.compare(value, oNumeric.doubleValue());
}


@Override
public String toSyntaxString()
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -228,52 +228,11 @@ default public PsyReal psyHypot(final PsyRealNumeric oRealNumeric)
@Override
default public PsyBoolean psyEq(final PsyObject o)
{
return PsyBoolean.of(o instanceof PsyRealNumeric oRealNumeric && cmp(oRealNumeric)==0);
return PsyBoolean.of(o instanceof PsyRealNumeric oRealNumeric && compareTo(oRealNumeric)==0);
}

public int cmp(final PsyRealNumeric oRealNumeric);

/**
* The “less” arithmetic comparison.
*/
@Override
default public PsyBoolean psyLt(final PsyRealNumeric oRealNumeric)
{
return PsyBoolean.of(cmp(oRealNumeric)<0);
}

/**
* The “less or equal” arithmetic comparison.
*/
@Override
default public PsyBoolean psyLe(final PsyRealNumeric oRealNumeric)
{
return PsyBoolean.of(cmp(oRealNumeric)<=0);
}

/**
* The “greater” arithmetic comparison.
*/
@Override
default public PsyBoolean psyGt(final PsyRealNumeric oRealNumeric)
{
return PsyBoolean.of(cmp(oRealNumeric)>0);
}

/**
* The “greater or equal” arithmetic comparison.
*/
@Override
default public PsyBoolean psyGe(final PsyRealNumeric oRealNumeric)
{
return PsyBoolean.of(cmp(oRealNumeric)>=0);
}

@Override
default public PsyInteger psyCmp(final PsyRealNumeric oRealNumeric)
{
return PsyInteger.of(cmp(oRealNumeric));
}
public int compareTo(final PsyRealNumeric oRealNumeric);

/**
* Context action of the {@code ceiling} operator.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,22 @@
*/
@Type("scalar")
public interface PsyScalar<T extends PsyScalar>
extends PsyObject
extends PsyObject, Comparable<T>
{

public int compareTo(T oScalar);

/**
* Returns a {@code boolean} object representing the result of “less” comparison of this object
* and a given object.
*
* @param oScalar an object with which this object is compared.
* @return a {@code boolean} value indicating if this object is less than given object.
*/
public PsyBoolean psyLt(final T oScalar);
default public PsyBoolean psyLt(final T oScalar)
{
return PsyBoolean.of(compareTo(oScalar)<0);
}

/**
* Returns a {@code boolean} object representing the result of “less or equal” comparison of
Expand All @@ -30,7 +35,10 @@ public interface PsyScalar<T extends PsyScalar>
* @return a {@code boolean} value indicating if this object is less than or equal to given
* object.
*/
public PsyBoolean psyLe(final T oScalar);
default public PsyBoolean psyLe(final T oScalar)
{
return PsyBoolean.of(compareTo(oScalar)<=0);
}

/**
* Returns a {@code boolean} object representing the result of “greater” comparison of this
Expand All @@ -39,7 +47,10 @@ public interface PsyScalar<T extends PsyScalar>
* @param oScalar an object with which this object is compared.
* @return a {@code boolean} result of comparison.
*/
public PsyBoolean psyGt(final T oScalar);
default public PsyBoolean psyGt(final T oScalar)
{
return PsyBoolean.of(compareTo(oScalar)>0);
}

/**
* Returns a {@code boolean} object representing the result of “greater or equal” comparison of
Expand All @@ -48,7 +59,10 @@ public interface PsyScalar<T extends PsyScalar>
* @param oScalar an object with which this object is compared.
* @return a {@code boolean} result of comparison.
*/
public PsyBoolean psyGe(final T oScalar);
default public PsyBoolean psyGe(final T oScalar)
{
return PsyBoolean.of(compareTo(oScalar)>=0);
}

/**
* Compares this object against given object and returns an {@code integer} indicating the
Expand All @@ -59,7 +73,10 @@ public interface PsyScalar<T extends PsyScalar>
* @param oScalar an object with which this object is compared.
* @return a result of the comparison.
*/
public PsyInteger psyCmp(final T oScalar);
default public PsyInteger psyCmp(final T oScalar)
{
return PsyInteger.of(compareTo(oScalar));
}

/**
* Returns the minimum of this {@code scalar} and given {@code scalar}.
Expand All @@ -69,7 +86,7 @@ public interface PsyScalar<T extends PsyScalar>
*/
default public PsyScalar psyMin(final T oScalar)
{
return psyLt(oScalar).booleanValue()? this: oScalar;
return compareTo(oScalar)<0? this: oScalar;
}

/**
Expand All @@ -80,7 +97,7 @@ default public PsyScalar psyMin(final T oScalar)
*/
default public PsyScalar psyMax(final T oScalar)
{
return psyGt(oScalar).booleanValue()? this: oScalar;
return compareTo(oScalar)>0? this: oScalar;
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,40 +91,16 @@ default public int length()
}

@Override
default public PsyBoolean psyEq(final PsyObject o)
{
return PsyBoolean.of(o instanceof PsyTextual
&& stringValue().equals(((PsyTextual)o).stringValue()));
}

@Override
default public PsyBoolean psyLt(final PsyTextual oString)
{
return PsyBoolean.of(stringValue().compareTo(oString.stringValue())<0);
}

@Override
default public PsyBoolean psyLe(final PsyTextual oString)
default public int compareTo(final PsyTextual oTextual)
{
return PsyBoolean.of(stringValue().compareTo(oString.stringValue())<=0);
return stringValue().compareTo(oTextual.stringValue());
}

@Override
default public PsyBoolean psyGt(final PsyTextual oString)
{
return PsyBoolean.of(stringValue().compareTo(oString.stringValue())>0);
}

@Override
default public PsyBoolean psyGe(final PsyTextual oString)
{
return PsyBoolean.of(stringValue().compareTo(oString.stringValue())>=0);
}

@Override
default public PsyInteger psyCmp(final PsyTextual oString)
default public PsyBoolean psyEq(final PsyObject o)
{
return PsyInteger.of(stringValue().compareTo(oString.stringValue()));
return PsyBoolean.of(o instanceof PsyTextual
&& stringValue().equals(((PsyTextual)o).stringValue()));
}

default public PsyArray psySplit(final PsyRegExp oRegExp)
Expand Down

0 comments on commit e7fea13

Please sign in to comment.