1// Copyright 2021 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// Generic sort function, tested with two different pointer types.
6
7package mysort
8
9import (
10	"fmt"
11)
12
13type LessConstraint[T any] interface {
14	Less(T) bool
15}
16
17//go:noinline
18func Sort[T LessConstraint[T]](x []T) {
19	n := len(x)
20	for i := 1; i < n; i++ {
21		for j := i; j > 0 && x[j].Less(x[j-1]); j-- {
22			x[j], x[j-1] = x[j-1], x[j]
23		}
24	}
25}
26
27type MyInt struct {
28	Value int
29}
30
31func (a *MyInt) Less(b *MyInt) bool {
32	return a.Value < b.Value
33}
34
35//go:noinline
36func F() {
37	sl1 := []*MyInt{&MyInt{4}, &MyInt{3}, &MyInt{8}, &MyInt{7}}
38	Sort(sl1)
39	fmt.Printf("%v %v %v %v\n", sl1[0], sl1[1], sl1[2], sl1[3])
40}
41