Array : very weird behavior
Hi everybody, I am experiencing a very weird behavior with Arrays : I writed a test case as follows ; testChange | bitArray1 | bitArray1 := #(0 0 0 0). (1 to: bitArray1 size) do: [ :index ||temp| temp := (bitArray1 at: index) + 1. bitArray1 at: index put: (temp). ]. self assert: bitArray1 = #(1 1 1 1) The thing is that the test succedes the first time but if I run it again it fails.Moreover, if  I change the testChange arbitrarily (just add a space and save) the test succeeds the first time then it fails.....etc. Actually bitArray1 := #(0 0 0 0) changes the value of bitArray1 in the first run but then bitArray1 does not change any more in the next runs. The problem does not occur if  I replace bitArray1 := #(0 0 0 0). with bitArray1 := Array new:4 withAll: 0 . Any idea where the problem can be?Should I open a bug entry? where? Abdelghani
Hello, You are changing the âliteral arrayâ itself. The #(0 0 0 0) creates an array as part of the compiledMethod and you are changing this. (Yes, many people think that all literals should be immutableâ¦). If you add a #copy it will work. bitArray1 := #(0 0 0 0) copy or create the array at runtime with {0.0.0.0} As for bit array (bit field), I wanted to answer your original question which I will do later⦠Marcus
On 19 Nov 2015, at 16:12, abdelghani ALIDRA <alidrandco@yahoo.fr> wrote:
Hi everybody,
I am experiencing a very weird behavior with Arrays :
I writed a test case as follows ;
testChange | bitArray1 |
bitArray1 := #(0 0 0 0).
(1 to: bitArray1 size) do: [ :index ||temp| temp := (bitArray1 at: index) + 1. bitArray1 at: index put: (temp). ]. self assert: bitArray1 = #(1 1 1 1)
The thing is that the test succedes the first time but if I run it again it fails. Moreover, if I change the testChange arbitrarily (just add a space and save) the test succeeds the first time then it fails.....etc.
Actually bitArray1 := #(0 0 0 0) changes the value of bitArray1 in the first run but then bitArray1 does not change any more in the next runs.
The problem does not occur if I replace bitArray1 := #(0 0 0 0). with bitArray1 := Array new:4 withAll: 0 .
Any idea where the problem can be? Should I open a bug entry? where?
Abdelghani
participants (2)
-
abdelghani ALIDRA -
Marcus Denker