Котлин, как протестировать (int)массив

Я хотел бы найти хороший и лаконичный способ протестировать intarray

сначала я пытался

mFaces[0].mIndices shouldBe intArrayOf(0, 1, 2)

где mIndices

var mIndices: IntArray = IntArray(0)

но терпит неудачу. Intellij также предлагает мне заменить equals() на Arrays

Тогда я хотел попробовать что-то вроде этого

mFaces[0].mIndices.all { it. == index } shouldBe true

но похоже, что нет способа получить индекс it внутри all{..} или это

var p = 0
mFaces[0].mIndices.all { it == p++ } shouldBe true

единственная возможность?


person elect    schedule 19.11.2016    source источник
comment
Можете ли вы показать нам декларацию mIndices ?   -  person miensol    schedule 19.11.2016
comment
Возможный дубликат: stackoverflow.com/q/35272761/3255152   -  person mfulton26    schedule 19.11.2016


Ответы (1)


В Java (Kotlin) массивы сравниваются по ссылке, не по содержимому. Это означает, что intArrayOf(1, 2, 3) != intArrayOf(1, 2, 3).

Для сравнения содержимого массивов у вас есть 2 варианта:

  1. Используйте глубокое сравнение:

    Arrays.deepequals(mFaces[0].mIndices, intArrayOf(0, 1, 2))

  2. Используйте списки:

    mFaces[0].mIndices.toList() == listOf(0, 1, 2)

person voddan    schedule 19.11.2016
comment
Строго говоря, оператор равенства вызывает метод equals() (это пока Kotlin), который в случае с массивами оказывается реализованным как сравнение ссылок (это вина Java). - person Michał Kosmulski; 19.11.2016