多項式を定義する Term クラスがあります。
public class Term
{
final private int coef;
final private int expo;
private static Term zero, unit;
static
{
try
{
zero = new Term(0, 0); // the number zero
unit = new Term(1, 0); // the number one
}
catch (Exception e)
{
// constructor will not throw an exception here anyway
}
}
/**
*
* @param c
* The coefficient of the new term
* @param e
* The exponent of the new term (must be non-negative)
* @throws NegativeExponent
*/
public Term(int c, int e) throws NegativeExponent
{
if (e < 0)
throw new NegativeExponent();
coef = c;
expo = (coef == 0) ? 1 : e;
}
final public static Term Zero = zero;
final public static Term Unit = unit;
public boolean isConstant()
{
boolean isConst = false;
if (this.expo == 0)
{
isConst = true;
}
return isConst;
}
}
そして、私は次のようにJUnitテストを持っています:
/*
* const1 isConstant(zero) => true (0,0)
* const2 isConstant(unit) => true (1,0)
* const3 isConstant(0,5) => true
* const4 isConstant(5,1) => false
*/
@Test
public void const1() throws TError { assertTrue(Term.Zero.isConstant()); }
@Test
public void const2() throws TError { assertTrue(Term.Unit.isConstant()); }
@Test
public void const3() throws TError { assertTrue(new Term(0,5).isConstant()); }
@Test
public void const4() throws TError { assertFalse(new Term(5,1).isConstant()); }
テスト 2 と 4 は正常にパスしますが、テスト 1 と 3 は失敗として表示され、「ゼロ」が多項式を (0,0) として定義し、もう一方が (0,5) として定義している理由がわかりません。 . したがって、私の考えでは、指数が 5 であるため、1 番目のテストでは緑色のチェックマークが表示され、3 番目のテストでは赤いクロスが表示されるはずです。
何か案は?