github.com/weaviate/weaviate@v1.24.6/adapters/repos/db/aggregator/date_test.go (about) 1 // _ _ 2 // __ _____ __ ___ ___ __ _| |_ ___ 3 // \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \ 4 // \ V V / __/ (_| |\ V /| | (_| | || __/ 5 // \_/\_/ \___|\__,_| \_/ |_|\__,_|\__\___| 6 // 7 // Copyright © 2016 - 2024 Weaviate B.V. All rights reserved. 8 // 9 // CONTACT: hello@weaviate.io 10 // 11 12 package aggregator 13 14 import ( 15 "testing" 16 "time" 17 18 "github.com/stretchr/testify/assert" 19 ) 20 21 const ( 22 DateYearMonthDayHourMinute = "2022-06-16T17:30:" 23 DateNanoSecondsTimeZone = ".451235Z" 24 ) 25 26 func TestDateAggregator(t *testing.T) { 27 tests := []struct { 28 name string 29 seconds []string 30 expectedMedian string 31 expectedMode string 32 }{ 33 { 34 name: "Single value", 35 seconds: []string{"17"}, 36 expectedMedian: "17", 37 expectedMode: "17", 38 }, 39 { 40 name: "Even number of values", 41 seconds: []string{"18", "18", "20", "25"}, 42 expectedMedian: "19", 43 expectedMode: "18", 44 }, 45 { 46 name: "Uneven number of values", 47 seconds: []string{"18", "18", "19", "20", "25"}, 48 expectedMedian: "19", 49 expectedMode: "18", 50 }, 51 } 52 names := []string{"AddTimestamp", "AddRow"} 53 for _, tt := range tests { 54 for _, name := range names { // test two ways of adding the value to the aggregator 55 t.Run(tt.name+" "+name, func(t *testing.T) { 56 agg := newDateAggregator() 57 for _, second := range tt.seconds { 58 fullDate := DateYearMonthDayHourMinute + second + DateNanoSecondsTimeZone 59 if name == names[0] { 60 err := agg.AddTimestamp(fullDate) 61 assert.Nil(t, err) 62 } else { 63 timeParsed, err := time.Parse(time.RFC3339, fullDate) 64 assert.Nil(t, err) 65 ts := newTimestamp(timeParsed.UnixNano()) 66 err = agg.addRow(ts, 1) 67 assert.Nil(t, err) 68 } 69 } 70 agg.buildPairsFromCounts() // needed to populate all required info 71 assert.Equal(t, DateYearMonthDayHourMinute+tt.expectedMedian+DateNanoSecondsTimeZone, agg.Median()) 72 if len(tt.expectedMode) > 0 { // if there is no value that appears more often than other values 73 assert.Equal(t, DateYearMonthDayHourMinute+tt.expectedMode+DateNanoSecondsTimeZone, agg.Mode()) 74 } 75 }) 76 } 77 } 78 }