2013-07-21 30 views
0

我想測試一個算法,建立一個HashDict,但我不能讓我的「預期」實際上等於我的「實際」。例如,如何比較字典與構造的字典?

iex> expected = HashDict.new([ key: 12 ]) 
#HashDict<[foo: 12]> 

iex> actual = Dict.put(HashDict.new, "key", 12) 
#HashDict<[{"foo", 12}]> 

我可以在一個更鈍的方式宣佈它獲得的HashDict第二「風格」在字面:

iex> HashDict.new([ { "key", 12 } ]) 
#HashDict<[{"foo", 12}]> 

我真的很喜歡很簡單快譯通文字語法我測試用例,但我的實現遞歸地構建了Dict。我怎樣才能使這些平等?

回答

6

在第一種情況下,鍵是原子,但在第二種情況下,它是一個字符串。

您可以在IEX做到這一點:

expected = HashDict.new([key: 12]) 
actual = Dict.put(HashDict.new, :key, 12) 
Dict.equals? actual, expected # returns true 

欲瞭解更多信息,請訪問:http://elixir-lang.org/docs/stable/

+0

這絕對有效。謝謝。可悲的是,這意味着我的測試用例不會產生非常豐富的錯誤信息。 –

+1

'「key」'與':key'不同。沒有辦法讓這些人平等。你可以將一個轉換爲另一個,但它們是相同的。 – Travis