@@ -19,7 +19,6 @@ import kotlin.test.assertEquals
19
19
import kotlin.test.assertSame
20
20
21
21
class CommonAddressesTests {
22
-
23
22
@Test
24
23
fun testDropCommon () {
25
24
val commonAddresses = listOf<Long >(5 , 4 , 3 , 2 , 1 , 0 )
@@ -28,17 +27,142 @@ class CommonAddressesTests {
28
27
assertEquals(listOf<Long >(8 , 7 , 6 ), withoutCommonAddresses)
29
28
}
30
29
30
+ @Test
31
+ fun testDropCommonPartialMatch () {
32
+ val commonAddresses = listOf<Long >(3 , 2 , 1 )
33
+ val addresses = listOf<Long >(9 , 8 , 7 , 2 , 1 )
34
+ val withoutCommonAddresses = addresses.dropCommonAddresses(commonAddresses)
35
+ assertEquals(listOf<Long >(9 , 8 , 7 ), withoutCommonAddresses)
36
+ }
37
+
38
+ @Test
39
+ fun testDropCommonNoMatch () {
40
+ val commonAddresses = listOf<Long >(5 , 4 , 3 )
41
+ val addresses = listOf<Long >(9 , 8 , 7 , 6 )
42
+ val withoutCommonAddresses = addresses.dropCommonAddresses(commonAddresses)
43
+ assertEquals(addresses, withoutCommonAddresses)
44
+ }
45
+
46
+ @Test
47
+ fun testDropCommonSingleElementMatch () {
48
+ val commonAddresses = listOf<Long >(1 )
49
+ val addresses = listOf<Long >(5 , 4 , 3 , 1 )
50
+ val withoutCommonAddresses = addresses.dropCommonAddresses(commonAddresses)
51
+ assertEquals(listOf<Long >(5 , 4 , 3 ), withoutCommonAddresses)
52
+ }
53
+
31
54
@Test
32
55
fun testDropCommonEmptyCommon () {
33
56
val addresses = listOf<Long >(0 , 1 , 2 )
34
57
val withoutCommonAddresses = addresses.dropCommonAddresses(emptyList())
35
58
assertSame(addresses, withoutCommonAddresses)
36
59
}
37
60
61
+ @Test
62
+ fun testDropCommonEmptyAddresses () {
63
+ val commonAddresses = listOf<Long >(1 , 2 , 3 )
64
+ val addresses = emptyList<Long >()
65
+ val withoutCommonAddresses = addresses.dropCommonAddresses(commonAddresses)
66
+ assertSame(addresses, withoutCommonAddresses)
67
+ }
68
+
38
69
@Test
39
70
fun testDropCommonSameAddresses () {
40
71
val addresses = listOf<Long >(0 , 1 , 2 )
41
72
val withoutCommonAddresses = addresses.dropCommonAddresses(addresses)
42
73
assertEquals(emptyList(), withoutCommonAddresses)
43
74
}
75
+
76
+ @Test
77
+ fun testDropCommonLargerCommonList () {
78
+ val commonAddresses = listOf<Long >(5 , 4 , 3 , 2 , 1 , 0 )
79
+ val addresses = listOf<Long >(2 , 1 , 0 )
80
+ val withoutCommonAddresses = addresses.dropCommonAddresses(commonAddresses)
81
+ assertEquals(emptyList(), withoutCommonAddresses)
82
+ }
83
+
84
+ @Test
85
+ fun testDropCommonLargerAddressList () {
86
+ val commonAddresses = listOf<Long >(2 , 1 , 0 )
87
+ val addresses = listOf<Long >(9 , 8 , 7 , 6 , 5 , 4 , 2 , 1 , 0 )
88
+ val withoutCommonAddresses = addresses.dropCommonAddresses(commonAddresses)
89
+ assertEquals(listOf<Long >(9 , 8 , 7 , 6 , 5 , 4 ), withoutCommonAddresses)
90
+ }
91
+
92
+ @Test
93
+ fun testDropCommonNoIndexOutOfBounds_LargeCommonList () {
94
+ // This test specifically targets the original bug where i-- could become -1
95
+ val commonAddresses = (0L .. 26L ).toList().reversed() // 27 elements: [26, 25, ..., 1, 0]
96
+ val addresses = listOf<Long >(30 , 29 , 28 , 2 , 1 , 0 )
97
+
98
+ // This should not throw IndexOutOfBoundsException
99
+ val withoutCommonAddresses = addresses.dropCommonAddresses(commonAddresses)
100
+ assertEquals(listOf<Long >(30 , 29 , 28 ), withoutCommonAddresses)
101
+ }
102
+
103
+ @Test
104
+ fun testDropCommonNoIndexOutOfBounds_ExactSizeMatch () {
105
+ // Test when commonAddresses.size equals the number of matching elements
106
+ val commonAddresses = listOf<Long >(4 , 3 , 2 , 1 , 0 )
107
+ val addresses = listOf<Long >(9 , 8 , 7 , 4 , 3 , 2 , 1 , 0 )
108
+
109
+ val withoutCommonAddresses = addresses.dropCommonAddresses(commonAddresses)
110
+ assertEquals(listOf<Long >(9 , 8 , 7 ), withoutCommonAddresses)
111
+ }
112
+
113
+ @Test
114
+ fun testDropCommonNoIndexOutOfBounds_OffByOneScenario () {
115
+ // Test the exact scenario that caused the original crash
116
+ val commonAddresses = (1L .. 27L ).toList() // size: 27
117
+ val addresses = listOf<Long >(100L , 99L , 98L ) + commonAddresses.takeLast(3 )
118
+
119
+ val withoutCommonAddresses = addresses.dropCommonAddresses(commonAddresses)
120
+ assertEquals(listOf<Long >(100L , 99L , 98L ), withoutCommonAddresses)
121
+ }
122
+
123
+ @Test
124
+ fun testDropCommonRepeatedElements () {
125
+ val commonAddresses = listOf<Long >(1 , 1 , 1 , 0 , 0 )
126
+ val addresses = listOf<Long >(5 , 4 , 1 , 1 , 0 )
127
+
128
+ val withoutCommonAddresses = addresses.dropCommonAddresses(commonAddresses)
129
+ assertEquals(listOf<Long >(5 , 4 , 1 , 1 ), withoutCommonAddresses)
130
+ }
131
+
132
+ @Test
133
+ fun testDropCommonMaintainsOrder () {
134
+ val commonAddresses = listOf<Long >(3 , 2 , 1 )
135
+ val addresses = listOf<Long >(9 , 8 , 7 , 6 , 5 , 3 , 2 , 1 )
136
+
137
+ val withoutCommonAddresses = addresses.dropCommonAddresses(commonAddresses)
138
+ assertEquals(listOf<Long >(9 , 8 , 7 , 6 , 5 ), withoutCommonAddresses)
139
+ }
140
+
141
+ @Test
142
+ fun testDropCommonOutOfSequenceMatch () {
143
+ // Common addresses are in different order than in the target list
144
+ val commonAddresses = listOf<Long >(1 , 3 , 2 ) // Note: 3 and 2 are swapped
145
+ val addresses = listOf<Long >(9 , 8 , 7 , 6 , 2 )
146
+
147
+ val withoutCommonAddresses = addresses.dropCommonAddresses(commonAddresses)
148
+ assertEquals(listOf<Long >(9 , 8 , 7 , 6 ), withoutCommonAddresses) // Should drop 2
149
+ }
150
+
151
+ @Test
152
+ fun testDropCommonMixedPositiveNegative () {
153
+ val commonAddresses = listOf<Long >(1 , 0 , - 1 )
154
+ val addresses = listOf<Long >(5 , 4 , 3 , 1 , 0 , - 1 )
155
+
156
+ val withoutCommonAddresses = addresses.dropCommonAddresses(commonAddresses)
157
+ assertEquals(listOf<Long >(5 , 4 , 3 ), withoutCommonAddresses)
158
+ }
159
+
160
+ @Test
161
+ fun testDropCommonLargeNumbers () {
162
+ val commonAddresses = listOf (Long .MAX_VALUE - 1 , Long .MAX_VALUE - 2 )
163
+ val addresses = listOf (Long .MAX_VALUE , Long .MAX_VALUE - 1 , Long .MAX_VALUE - 2 )
164
+
165
+ val withoutCommonAddresses = addresses.dropCommonAddresses(commonAddresses)
166
+ assertEquals(listOf (Long .MAX_VALUE ), withoutCommonAddresses)
167
+ }
44
168
}
0 commit comments