github.com/zebozhuang/go@v0.0.0-20200207033046-f8a98f6f5c5d/src/cmd/compile/internal/gc/reflect_test.go (about)

     1  // Copyright 2015 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package gc
     6  
     7  import (
     8  	"cmd/compile/internal/types"
     9  	"cmd/internal/obj"
    10  	"reflect"
    11  	"testing"
    12  )
    13  
    14  func TestSortingBySigLT(t *testing.T) {
    15  	data := []*Sig{
    16  		&Sig{name: "b", pkg: &types.Pkg{Path: "abc"}},
    17  		&Sig{name: "b", pkg: nil},
    18  		&Sig{name: "c", pkg: nil},
    19  		&Sig{name: "c", pkg: &types.Pkg{Path: "uvw"}},
    20  		&Sig{name: "c", pkg: nil},
    21  		&Sig{name: "b", pkg: &types.Pkg{Path: "xyz"}},
    22  		&Sig{name: "a", pkg: &types.Pkg{Path: "abc"}},
    23  		&Sig{name: "b", pkg: nil},
    24  	}
    25  	want := []*Sig{
    26  		&Sig{name: "a", pkg: &types.Pkg{Path: "abc"}},
    27  		&Sig{name: "b", pkg: nil},
    28  		&Sig{name: "b", pkg: nil},
    29  		&Sig{name: "b", pkg: &types.Pkg{Path: "abc"}},
    30  		&Sig{name: "b", pkg: &types.Pkg{Path: "xyz"}},
    31  		&Sig{name: "c", pkg: nil},
    32  		&Sig{name: "c", pkg: nil},
    33  		&Sig{name: "c", pkg: &types.Pkg{Path: "uvw"}},
    34  	}
    35  	if len(data) != len(want) {
    36  		t.Fatal("want and data must match")
    37  	}
    38  	if reflect.DeepEqual(data, want) {
    39  		t.Fatal("data must be shuffled")
    40  	}
    41  	obj.SortSlice(data, func(i, j int) bool { return siglt(data[i], data[j]) })
    42  	if !reflect.DeepEqual(data, want) {
    43  		t.Logf("want: %#v", want)
    44  		t.Logf("data: %#v", data)
    45  		t.Errorf("sorting failed")
    46  	}
    47  }