JUnitを使用してテストしているマージソート関数があります。以下は私のテストケースの1つです。
@Test
//test using randomly generated numbers
public void MergeSortTest002()
{
long seed = System.currentTimeMillis();
Random rng = new Random(seed);
Integer[] TestArray = new Integer[1000];
int MAX_VALUE = Integer.MAX_VALUE;
for(int i=0; i<1000; i++) {
//this will generate positive and negative numbers from
// -MAX_VALUE/2 to +MAX_VALUE/2
Integer newNum = rng.nextInt(MAX_VALUE/2) - MAX_VALUE;
TestArray[i] = newNum;
}
Integer[] correctArray = TestArray;
Arrays.sort(correctArray);
MergeSort.mergeSort(TestArray);
Assert.assertArrayEquals(correctArray,TestArray);
}
奇妙なことに、関数を呼び出す行をコメントアウトしてもmergeSort
、テストは合格します。
2つのことのいずれかが起こっていると思いました:assertArrayEquals
要素の順序を気にしない(ありそうもない)か、コピーTestArray
先の場合は参照によるコピーでcorrectArray
あるため、呼び出しも並べ替えです。Arrays.sort
correctArray
TestArray
誰かが2つのどちらが起こっているかを確認できますか、そして解決策は何ですか?順序を念頭に置いているものはAssert
ありますか、または明示的なforループを記述せずに、参照ではなく値で配列をコピーする方法はありますか?