2017-08-30 17 views
1

2つのユニットテストがあり、どちらも有効です。だから、なぜInt16.CompateToが2つの数値の差を返すのですが、Int32Int64CompareToメソッドは厳密には-1, 0, 1を返しますか?Int16.CompareToがInt32.CompareToと異なる結果を返す理由

[TestMethod] 
public void Int16CompareTo() 
{ 
    Int16 value1 = 60; 
    Int16 value2 = 5; 
    var result = value1.CompareTo(value2); 
    Assert.AreEqual(result, 55); 
} 

[TestMethod] 
public void Int32CompareTo() 
{ 
    Int32 value1 = 60; 
    Int32 value2 = 5; 
    var result = value1.CompareTo(value2); 
    Assert.AreEqual(result, 1); 
} 
+3

。 'IComparable.CompareTo'の結果は負、ゼロまたは正です。返される*特定の値*は実装定義であり、テストするべきではありません。 –

+2

参照元[helpfully documents](http://referencesource.microsoft.com/#mscorlib/system/int32.cs,49)なぜ 'Int32'と' Int64'は単にオーバーフローを処理するだけではないのですか? 'Int16'は減算され、引数が暗黙的に' Int32'に昇格するので、同じ問題はありません。その事実を使用するのは開発者の方が少し愚かですが。 –

答えて

0

MSNのドキュメントには、受信した動作が反映されています。すべてのメソッドの保証は、数値が大きい場合は0より大きい値を取得することです。数値が等しい場合は0、少ない場合は0を返します。

私が望むのであれば、メソッドをオーバーライドするか、テストケース用に新しいメソッドを作成します。

32ビット 彼らは異なる方法で実装している、とあなたのテストが間違っているのでhttps://msdn.microsoft.com/en-us/library/y2ky8xsk(v=vs.110).aspx

16ビット https://msdn.microsoft.com/en-us/library/06x7xh8y(v=vs.110).aspx

関連する問題