You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
170 lines
5.2 KiB
170 lines
5.2 KiB
// Copyright 2020 The SwiftShader Authors. All Rights Reserved.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
package cov_test
|
|
|
|
import (
|
|
"reflect"
|
|
"testing"
|
|
|
|
cov "."
|
|
)
|
|
|
|
func TestSpanListAddNoMerge(t *testing.T) {
|
|
l := cov.SpanList{}
|
|
l.Add(span(3, 1, 3, 5))
|
|
checkSpanList(t, l, span(3, 1, 3, 5))
|
|
|
|
l.Add(span(4, 1, 4, 5))
|
|
checkSpanList(t, l, span(3, 1, 3, 5), span(4, 1, 4, 5))
|
|
|
|
l.Add(span(2, 1, 2, 5))
|
|
checkSpanList(t, l, span(2, 1, 2, 5), span(3, 1, 3, 5), span(4, 1, 4, 5))
|
|
}
|
|
|
|
func TestSpanListAddExpand(t *testing.T) {
|
|
l := cov.SpanList{span(1, 1, 1, 5), span(5, 4, 5, 7), span(9, 1, 9, 5)}
|
|
|
|
// Expand front (column)
|
|
l.Add(span(5, 1, 5, 5))
|
|
checkSpanList(t, l, span(1, 1, 1, 5), span(5, 1, 5, 7), span(9, 1, 9, 5))
|
|
|
|
// Expand back (column)
|
|
l.Add(span(5, 5, 5, 9))
|
|
checkSpanList(t, l, span(1, 1, 1, 5), span(5, 1, 5, 9), span(9, 1, 9, 5))
|
|
|
|
// Expand front (line)
|
|
l.Add(span(4, 3, 5, 2))
|
|
checkSpanList(t, l, span(1, 1, 1, 5), span(4, 3, 5, 9), span(9, 1, 9, 5))
|
|
|
|
// Expand back (line)
|
|
l.Add(span(5, 4, 6, 3))
|
|
checkSpanList(t, l, span(1, 1, 1, 5), span(4, 3, 6, 3), span(9, 1, 9, 5))
|
|
|
|
// Expand front (touching)
|
|
l.Add(span(4, 2, 4, 3))
|
|
checkSpanList(t, l, span(1, 1, 1, 5), span(4, 2, 6, 3), span(9, 1, 9, 5))
|
|
|
|
// Expand back (touching)
|
|
l.Add(span(6, 3, 6, 4))
|
|
checkSpanList(t, l, span(1, 1, 1, 5), span(4, 2, 6, 4), span(9, 1, 9, 5))
|
|
}
|
|
|
|
func TestSpanListAddMergeOverlap(t *testing.T) {
|
|
l := cov.SpanList{span(1, 1, 1, 5), span(5, 4, 5, 7), span(9, 1, 9, 5)}
|
|
|
|
l.Add(span(1, 3, 5, 6))
|
|
checkSpanList(t, l, span(1, 1, 5, 7), span(9, 1, 9, 5))
|
|
|
|
l.Add(span(5, 5, 9, 3))
|
|
checkSpanList(t, l, span(1, 1, 9, 5))
|
|
}
|
|
|
|
func TestSpanListAddMergeTouching(t *testing.T) {
|
|
l := cov.SpanList{span(1, 1, 1, 5), span(5, 4, 5, 7), span(9, 1, 9, 5)}
|
|
|
|
l.Add(span(1, 5, 9, 1))
|
|
checkSpanList(t, l, span(1, 1, 9, 5))
|
|
}
|
|
|
|
func TestSpanListRemoveNothing(t *testing.T) {
|
|
l := cov.SpanList{span(2, 1, 2, 5), span(3, 1, 3, 5), span(4, 1, 4, 5)}
|
|
|
|
l.Remove(span(1, 1, 2, 1))
|
|
checkSpanList(t, l, span(2, 1, 2, 5), span(3, 1, 3, 5), span(4, 1, 4, 5))
|
|
|
|
l.Remove(span(2, 5, 3, 1))
|
|
checkSpanList(t, l, span(2, 1, 2, 5), span(3, 1, 3, 5), span(4, 1, 4, 5))
|
|
|
|
l.Remove(span(3, 5, 4, 1))
|
|
checkSpanList(t, l, span(2, 1, 2, 5), span(3, 1, 3, 5), span(4, 1, 4, 5))
|
|
|
|
l.Remove(span(4, 5, 10, 10))
|
|
checkSpanList(t, l, span(2, 1, 2, 5), span(3, 1, 3, 5), span(4, 1, 4, 5))
|
|
}
|
|
|
|
func TestSpanListRemoveWhole(t *testing.T) {
|
|
l := cov.SpanList{span(2, 1, 2, 5), span(3, 1, 3, 5), span(4, 1, 4, 5)}
|
|
|
|
l.Remove(span(3, 1, 3, 5))
|
|
checkSpanList(t, l, span(2, 1, 2, 5), span(4, 1, 4, 5))
|
|
|
|
l.Remove(span(1, 1, 3, 3))
|
|
checkSpanList(t, l, span(4, 1, 4, 5))
|
|
|
|
l.Remove(span(3, 1, 4, 5))
|
|
checkSpanList(t, l)
|
|
}
|
|
|
|
func TestSpanListRemoveZeroLength(t *testing.T) {
|
|
l := cov.SpanList{span(2, 1, 2, 5), span(3, 1, 3, 5), span(4, 1, 4, 5)}
|
|
|
|
l.Remove(span(3, 1, 3, 1))
|
|
checkSpanList(t, l, span(2, 1, 2, 5), span(3, 1, 3, 5), span(4, 1, 4, 5))
|
|
|
|
l.Remove(span(3, 5, 3, 5))
|
|
checkSpanList(t, l, span(2, 1, 2, 5), span(3, 1, 3, 5), span(4, 1, 4, 5))
|
|
}
|
|
|
|
func TestSpanListRemoveTrim(t *testing.T) {
|
|
l := cov.SpanList{span(2, 1, 2, 5), span(3, 1, 3, 5), span(4, 1, 4, 5)}
|
|
|
|
l.Remove(span(2, 1, 2, 2))
|
|
checkSpanList(t, l, span(2, 2, 2, 5), span(3, 1, 3, 5), span(4, 1, 4, 5))
|
|
|
|
l.Remove(span(2, 4, 2, 5))
|
|
checkSpanList(t, l, span(2, 2, 2, 4), span(3, 1, 3, 5), span(4, 1, 4, 5))
|
|
|
|
l.Remove(span(2, 5, 3, 2))
|
|
checkSpanList(t, l, span(2, 2, 2, 4), span(3, 2, 3, 5), span(4, 1, 4, 5))
|
|
|
|
l.Remove(span(3, 4, 3, 5))
|
|
checkSpanList(t, l, span(2, 2, 2, 4), span(3, 2, 3, 4), span(4, 1, 4, 5))
|
|
|
|
l.Remove(span(4, 1, 4, 2))
|
|
checkSpanList(t, l, span(2, 2, 2, 4), span(3, 2, 3, 4), span(4, 2, 4, 5))
|
|
|
|
l.Remove(span(4, 4, 4, 5))
|
|
checkSpanList(t, l, span(2, 2, 2, 4), span(3, 2, 3, 4), span(4, 2, 4, 4))
|
|
}
|
|
|
|
func TestSpanListRemoveSplit(t *testing.T) {
|
|
l := cov.SpanList{span(2, 1, 2, 5), span(3, 1, 3, 5), span(4, 1, 4, 5)}
|
|
|
|
l.Remove(span(2, 2, 2, 3))
|
|
checkSpanList(t, l, span(2, 1, 2, 2), span(2, 3, 2, 5), span(3, 1, 3, 5), span(4, 1, 4, 5))
|
|
|
|
l.Remove(span(3, 2, 3, 4))
|
|
checkSpanList(t, l, span(2, 1, 2, 2), span(2, 3, 2, 5), span(3, 1, 3, 2), span(3, 4, 3, 5), span(4, 1, 4, 5))
|
|
|
|
l.Remove(span(4, 2, 4, 2)) // zero length == no split
|
|
checkSpanList(t, l, span(2, 1, 2, 2), span(2, 3, 2, 5), span(3, 1, 3, 2), span(3, 4, 3, 5), span(4, 1, 4, 5))
|
|
}
|
|
|
|
func span(startLine, startColumn, endLine, endColumn int) cov.Span {
|
|
return cov.Span{
|
|
Start: cov.Location{Line: startLine, Column: startColumn},
|
|
End: cov.Location{Line: endLine, Column: endColumn},
|
|
}
|
|
}
|
|
|
|
func checkSpanList(t *testing.T, got cov.SpanList, expect ...cov.Span) {
|
|
if expect == nil {
|
|
expect = cov.SpanList{}
|
|
}
|
|
if !reflect.DeepEqual(got, cov.SpanList(expect)) {
|
|
t.Errorf("SpanList not as expected.\nGot:\n%v\nExpect:\n%v", got, cov.SpanList(expect))
|
|
}
|
|
}
|