嗨大家好,我和 @Alan 在撰寫測試 FunC 的一個合約,發現了一個很有趣的現象,不曉得是不是 FunC 的 bug,這是我們執行的程式碼:
我們呼叫這個 function 時,帶入的 index
參數為 0
,因此 claim_bit_index = 0 % 256
,也就是 claim_bit_index = 0
,則 int mask = 1 << 0
,也就是 mask = 1
。
當我們開始拿 mask
變數開始去做一些比對,發現下列有趣的情況:mask
目前等於 1
,但若是拿他來跟 mask == 1
,dump 出來的結果卻是 0
,這和預料的結果不太一樣,他應該是 -1
,因為 mask = 1
,而 1 == 1
。接著再拿 mask ≠ 1
進行比較,dump 出來的結果就變成 -1
,這也和常理相反。
下方是我跑程式的結果輸出:
但我們發現我做了一個操作後,可以讓 mask == 1
以及 mask != 1
得到正確的結果,也就是在做完位元運算後多 / 1
,也就是 int mask = (1 << claim_bit_index) / 1;
。
透過這樣更改可以得到下方的結果:
這樣的結果不知道是碰到什麼問題了?想和大家一起討論看看這是不是屬於 FunC 的 bugs ??? 還是我們忽略了些什麼問題?!