2012-09-20 76 views
3

受Nick Johnson的博客Damn Cool Algorithms: Fountain Codes的啓發,我決定去實施一個Luby Transform (LT) code。我剛把它推到GitHub;它是用Python 3編寫的。如何測試我的LT代碼實現?

我使用一個非常短的文件組成的非常短的文件開發它,它只是「hello」,並在隨機生成的1MB文件上進行了測試。該軟件似乎有效地對文件進行編碼和解碼,只有原始文件的長度,塊編碼和液滴在編碼器和解碼器之間共享。

問題是,我該如何證明這確實是LT代碼的忠實實施?我如何證明解碼算法是有效的?

這是我的意圖是使用的液滴被Python的計數引用系統刪除。 如何檢查這確實發生?

對代碼本身的任何反饋也是受歡迎的,雖然它可能更適合作爲評論(而不是回答)或GitHub上的問題。

+1

儘管[此參考問題](http://stackoverflow.com/questions/5207101/how-do-you-prove-a-function-works)不是特定於你的,但它可能會有所幫助。 –

+0

關於參考計數我認爲你根本不能。首先,python語言可能經過了很好的測試,所以不應該有很多內存泄漏。其次,它高度依賴於版本(在X.Y中發現的內存泄漏,將在下一次釋放中修復)。 通常情況下,您只需將語言看作「完美」即可。除了已知的錯誤,我會說。順便說一句,即使試圖用匯編語言證明某些東西也不行,因爲硬件可能有錯誤,所以它是一個限制,你不能完全刪除。 – Bakuriu

+0

@Bakuriu感謝您的回答。我沒有試圖證明沒有內存泄漏,而是當我認爲它們應該是被刪除的對象時。 –

回答

2

如果您只想查看引用計數是否正常工作,您可以在類中定義__del__方法。請注意,這將防止環狀GC從這些類

另一種方法是看變化之類的引用計數工作,因爲每個實例具有對類

>>> from sys import getrefcount 
>>> class Obj(object): 
... pass 
... 
>>> sys.getrefcount(Obj) 
5 
>>> obj_list=[Obj() for x in range(5)] 
>>> sys.getrefcount(Obj) 
10 
>>> obj_list[:3]=[] 
>>> sys.getrefcount(Obj) 
7