2017-05-31 16 views
0

は、配列内の値のリストです:値のリストを昇順でアサートする方法は?ここ

[463, 246, 216, 194, 154, 152, 147, 140, 129, 128, 123, 118, 118, 102, 102, 101, 97, 96, 93, 85] 

どうやって確保/配列リストが昇順であることをRSpecの通過主張することができますか?

+3

'list == list.sort'? – mudasobwa

+0

質問に例を挙げると便利ですが、質問で参照されていない任意の数値配列を含めることは意味がありません。 –

答えて

5

最も単純な方法は、おそらくです:

expect(array.sort).to eq(array) 
+1

厳密に昇順であることをアサートするには、 'expect(array.uniq.size)== array.size'という別のテストを追加します。 –

+0

はい@IIya意味があります:) –

+1

['Array#sort'](http://ruby-doc.org/core/Array.html#method-sort)は安定していないので安定していません等しい要素があれば動作します。 –

1

は「昇順」を「次の要素が現在よりも小さくない」という意味します。あなたは簡単に述語の中にそれをエンコードすることができます:ない安定しているので、

expect(array.sort).to eq(array) 

のようなもの動作しない

expect(array.each_cons(2).all? {|a, b| a <= b }).to be_truthy 

注意Array#sortこと!

+0

ソートがうまくいかず、あなたの答えがうまくいけば、インスタンスを提供してもらえますか?また、 'be_truthy'は__not nilまたはfalse__、' be true'で十分です。 – Ilya

+0

'sort'は不安定です。つまり、' <=> 'が' 0'を返す要素がある場合、それらが相対的な順序を保つという保証はありません。 '<=>'が '0'を返す要素に対しては' == 'が' true'を返すという保証はありません(ただし、バグではないと非常に奇妙だと考えていますが、ちょっと、人々は奇妙なことをします)。したがって、同じ順序であるが等しくない2つの要素がある場合、ソートによってスワップされ、元の配列とソートされた配列が等しくならないことがあります。 –

+1

しかし、質問には整数しかありません。この文脈ではあなたの答えはオーバーヘッドであると思いますが、もちろん(非常にまれな)条件では理にかなっています。 – Ilya

関連する問題