@@ -139,3 +139,37 @@ func TestOccurrence_SetEnclosingSourceRange(t *testing.T) {
139139 require .True (t , ok )
140140 require .Equal (t , & MultiLineRange {StartLine : 1 , StartCharacter : 0 , EndLine : 5 , EndCharacter : 1 }, tr .MultiLineEnclosingRange )
141141}
142+
143+ func TestOccurrence_Compare (t * testing.T ) {
144+ mkOcc := func (r []int32 , sym string ) * Occurrence {
145+ return & Occurrence {Range : r , Symbol : sym }
146+ }
147+ tests := []struct {
148+ name string
149+ a , b * Occurrence
150+ want int
151+ }{
152+ {"equal" , mkOcc ([]int32 {1 , 0 , 5 }, "x" ), mkOcc ([]int32 {1 , 0 , 5 }, "x" ), 0 },
153+ {"earlier range" , mkOcc ([]int32 {0 , 0 , 5 }, "x" ), mkOcc ([]int32 {1 , 0 , 5 }, "x" ), - 1 },
154+ {"later range" , mkOcc ([]int32 {2 , 0 , 5 }, "x" ), mkOcc ([]int32 {1 , 0 , 5 }, "x" ), 1 },
155+ {"same range, earlier symbol" , mkOcc ([]int32 {1 , 0 , 5 }, "a" ), mkOcc ([]int32 {1 , 0 , 5 }, "b" ), - 1 },
156+ {"same range, later symbol" , mkOcc ([]int32 {1 , 0 , 5 }, "b" ), mkOcc ([]int32 {1 , 0 , 5 }, "a" ), 1 },
157+ }
158+ for _ , tc := range tests {
159+ t .Run (tc .name , func (t * testing.T ) {
160+ require .Equal (t , tc .want , tc .a .Compare (tc .b ))
161+ })
162+ }
163+ }
164+
165+ func TestOccurrence_Contains (t * testing.T ) {
166+ occ := & Occurrence {Range : []int32 {2 , 5 , 10 }}
167+ require .True (t , occ .Contains (Position {2 , 5 }))
168+ require .True (t , occ .Contains (Position {2 , 9 }))
169+ require .False (t , occ .Contains (Position {2 , 4 }))
170+ require .False (t , occ .Contains (Position {2 , 10 }))
171+ require .False (t , occ .Contains (Position {3 , 0 }))
172+
173+ empty := & Occurrence {}
174+ require .False (t , empty .Contains (Position {0 , 0 }))
175+ }
0 commit comments