pkg.re/essentialkaos/ek.v3@v12.41.0+incompatible/sortutil/sortutil_test.go (about)

     1  package sortutil
     2  
     3  // ////////////////////////////////////////////////////////////////////////////////// //
     4  //                                                                                    //
     5  //                         Copyright (c) 2022 ESSENTIAL KAOS                          //
     6  //      Apache License, Version 2.0 <https://www.apache.org/licenses/LICENSE-2.0>     //
     7  //                                                                                    //
     8  // ////////////////////////////////////////////////////////////////////////////////// //
     9  
    10  import (
    11  	"testing"
    12  
    13  	. "pkg.re/essentialkaos/check.v1"
    14  )
    15  
    16  // ////////////////////////////////////////////////////////////////////////////////// //
    17  
    18  type SortSuite struct{}
    19  
    20  // ////////////////////////////////////////////////////////////////////////////////// //
    21  
    22  func Test(t *testing.T) { TestingT(t) }
    23  
    24  // ////////////////////////////////////////////////////////////////////////////////// //
    25  
    26  var _ = Suite(&SortSuite{})
    27  
    28  // ////////////////////////////////////////////////////////////////////////////////// //
    29  
    30  func (s *SortSuite) TestVersionSorting(c *C) {
    31  	v1 := []string{"1", "2.1", "2", "2.3.4", "1.3", "1.6.5", "2.3.3", "14.0", "6"}
    32  
    33  	Versions(v1)
    34  
    35  	c.Assert(v1, DeepEquals, []string{"1", "1.3", "1.6.5", "2", "2.1", "2.3.3", "2.3.4", "6", "14.0"})
    36  
    37  	v2 := []string{"1-2", "2", "2.2.3", "2.2.3", "1"}
    38  
    39  	Versions(v2)
    40  
    41  	c.Assert(v2, DeepEquals, []string{"1", "1-2", "2", "2.2.3", "2.2.3"})
    42  }
    43  
    44  func (s *SortSuite) TestStringSorting(c *C) {
    45  	s1 := []string{"Apple", "auto", "image", "Monica", "7", "flower", "moon"}
    46  	s2 := []string{"Apple", "auto", "image", "Monica", "7", "flower", "moon"}
    47  
    48  	Strings(s1, false)
    49  	Strings(s2, true)
    50  
    51  	c.Assert(s1, DeepEquals, []string{"7", "Apple", "Monica", "auto", "flower", "image", "moon"})
    52  	c.Assert(s2, DeepEquals, []string{"7", "Apple", "auto", "flower", "image", "Monica", "moon"})
    53  }
    54  
    55  func (s *SortSuite) TestNaturalSorting(c *C) {
    56  	s1 := []string{"abc5", "abc1", "abc01", "ab", "abc10", "abc2"}
    57  
    58  	StringsNatural(s1)
    59  
    60  	c.Assert(s1, DeepEquals, []string{"ab", "abc1", "abc01", "abc2", "abc5", "abc10"})
    61  
    62  	c.Assert(NaturalLess("0", "00"), Equals, true)
    63  	c.Assert(NaturalLess("00", "0"), Equals, false)
    64  	c.Assert(NaturalLess("aa", "ab"), Equals, true)
    65  	c.Assert(NaturalLess("ab", "abc"), Equals, true)
    66  	c.Assert(NaturalLess("abc", "ad"), Equals, true)
    67  	c.Assert(NaturalLess("ab1", "ab2"), Equals, true)
    68  	c.Assert(NaturalLess("ab1c", "ab1c"), Equals, false)
    69  	c.Assert(NaturalLess("ab12", "abc"), Equals, true)
    70  	c.Assert(NaturalLess("ab2a", "ab10"), Equals, true)
    71  	c.Assert(NaturalLess("a0001", "a0000001"), Equals, true)
    72  	c.Assert(NaturalLess("a10", "abcdefgh2"), Equals, true)
    73  	c.Assert(NaturalLess("аб2аб", "аб10аб"), Equals, true)
    74  	c.Assert(NaturalLess("2аб", "3аб"), Equals, true)
    75  	c.Assert(NaturalLess("a1b", "a01b"), Equals, true)
    76  	c.Assert(NaturalLess("a01b", "a1b"), Equals, false)
    77  	c.Assert(NaturalLess("ab01b", "ab010b"), Equals, true)
    78  	c.Assert(NaturalLess("ab010b", "ab01b"), Equals, false)
    79  	c.Assert(NaturalLess("a001b01", "a01b001"), Equals, false)
    80  	c.Assert(NaturalLess("a1", "a1x"), Equals, true)
    81  	c.Assert(NaturalLess("1ax", "1b"), Equals, true)
    82  	c.Assert(NaturalLess("1b", "1ax"), Equals, false)
    83  	c.Assert(NaturalLess("082", "83"), Equals, true)
    84  	c.Assert(NaturalLess("083a", "9a"), Equals, false)
    85  	c.Assert(NaturalLess("9a", "083a"), Equals, true)
    86  }