Add CLI utility for testing

This commit is contained in:
2022-02-28 17:17:33 -08:00
parent 1f4eb80c24
commit d3667470c0
2 changed files with 73 additions and 6 deletions

2
.gitignore vendored
View File

@@ -1 +1,3 @@
main main
most-specific-period
tests/

77
main.go
View File

@@ -4,11 +4,11 @@ import (
"bufio" "bufio"
"flag" "flag"
"fmt" "fmt"
"log"
"os" "os"
) "time"
var addr = flag.String("addr", "0.0.0.0:8080", "http service address") "github.com/taigrr/most-specific-period/msp"
)
func init() { func init() {
flag.Usage = func() { flag.Usage = func() {
@@ -16,11 +16,76 @@ func init() {
flag.PrintDefaults() flag.PrintDefaults()
} }
} }
func warnMessage() {
fmt.Print("Please type your date formats as follows, hit return between each field (RFC 3339), and hit Control+D to signal you are complete: \nIdentifier: id\nStartTime: 2019-10-12T07:20:50.52Z\nEndTime: 2019-10-12T07:20:50.52Z\n")
}
func main() { func main() {
flag.Parse() flag.Parse()
s := bufio.NewScanner(os.Stdin) terminal := false
for s.Scan() { fi, _ := os.Stdin.Stat()
log.Println("line", s.Text()) if (fi.Mode() & os.ModeCharDevice) == 0 {
// this is a file being read in, no need to print the prompt just yet
} else {
// this is a terminal, let's help the user out
terminal = true
warnMessage()
} }
s := bufio.NewScanner(os.Stdin)
count := 1
if terminal {
fmt.Print("Identifier: ")
}
periods := []msp.Period{}
for s.Scan() {
input := s.Text()
if input == "" {
continue
}
if count%3 == 0 {
t, err := time.Parse(time.RFC3339, input)
if err != nil {
fmt.Printf("ERROR: Invalid timestamp: %v", t)
os.Exit(1)
}
periods[(count-1)/3].EndTime = t
if terminal {
fmt.Print("Identifier: ")
}
}
if count%3 == 1 {
periods = append(periods, msp.Period{Identifier: s.Text()})
if terminal {
fmt.Print("StartTime: ")
}
}
if count%3 == 2 {
t, err := time.Parse(time.RFC3339, input)
if err != nil {
fmt.Printf("ERROR: Invalid timestamp: %v", t)
os.Exit(1)
}
periods[(count-1)/3].StartTime = t
if terminal {
fmt.Print("EndTime: ")
}
}
count++
}
m, err := msp.MostSpecificPeriod(time.Now(), periods...)
if err != nil {
fmt.Printf("Error: %v\n", err)
os.Exit(1)
}
if terminal {
fmt.Printf("The MSP from the list was: ")
}
fmt.Printf("%s\n", m)
} }