// Copyright 2009 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // $G $F.go && $L $F.$A && ./$A.out package main import ( "fmt"; "rand"; "sort"; ) func BentleyMcIlroyTests(); func main() { { data := []int{74, 59, 238, -784, 9845, 959, 905, 0, 0, 42, 7586, -5467984, 7586}; a := sort.IntArray{&data}; sort.Sort(&a); /* for i := 0; i < len(data); i++ { print(data[i], " "); } print("\n"); */ if !sort.IsSorted(&a) { panic(); } } { data := []float{74.3, 59.0, 238.2, -784.0, 2.3, 9845.768, -959.7485, 905, 7.8, 7.8}; a := sort.FloatArray{&data}; sort.Sort(&a); /* for i := 0; i < len(data); i++ { print(data[i], " "); } print("\n"); */ if !sort.IsSorted(&a) { panic(); } } { data := []string{"", "Hello", "foo", "bar", "foo", "f00", "%*&^*&^&", "***"}; a := sort.StringArray{&data}; sort.Sort(&a); /* for i := 0; i < len(data); i++ { print(data[i], " "); } print("\n"); */ if !sort.IsSorted(&a) { panic(); } } // Same tests again, this time using the convenience wrappers { data := []int{74, 59, 238, -784, 9845, 959, 905, 0, 0, 42, 7586, -5467984, 7586}; sort.SortInts(&data); /* for i := 0; i < len(data); i++ { print(data[i], " "); } print("\n"); */ if !sort.IntsAreSorted(&data) { panic(); } } { data := []float{74.3, 59.0, 238.2, -784.0, 2.3, 9845.768, -959.7485, 905, 7.8, 7.8}; sort.SortFloats(&data); /* for i := 0; i < len(data); i++ { print(data[i], " "); } print("\n"); */ if !sort.FloatsAreSorted(&data) { panic(); } } { data := []string{"", "Hello", "foo", "bar", "foo", "f00", "%*&^*&^&", "***"}; sort.SortStrings(&data); /* for i := 0; i < len(data); i++ { print(data[i], " "); } print("\n"); */ if !sort.StringsAreSorted(&data) { panic(); } } { data := new([]int, 100000); for i := 0; i < len(data); i++ { data[i] = rand.rand() % 100; } if sort.IntsAreSorted(data) { panic("terrible rand.rand"); } sort.SortInts(data); if !sort.IntsAreSorted(data) { panic(); } } BentleyMcIlroyTests(); } const ( Sawtooth = iota; Rand; Stagger; Plateau; Shuffle; NDist; ) const ( Copy = iota; Reverse; ReverseFirstHalf; ReverseSecondHalf; Sort; Dither; NMode; ); type TestingData struct { data *[]int; maxswap int; // number of swaps allowed nswap int; } func (d *TestingData) len() int { return len(d.data); } func (d *TestingData) less(i, j int) bool { return d.data[i] < d.data[j]; } func (d *TestingData) swap(i, j int) { if d.nswap >= d.maxswap { panicln("used", d.nswap, "swaps sorting", len(d.data), "array"); } d.nswap++; d.data[i], d.data[j] = d.data[j], d.data[i]; } func Lg(n int) int { i := 0; for 1<