Dmitry Telenkov hace 2 días
padre
commit
664a2ea86f

+ 6 - 0
go/stepik/course_3/base/example/data_map.txt

@@ -0,0 +1,6 @@
+1
+2
+3
+3
+3
+4

+ 52 - 0
go/stepik/course_3/base/example/main.go

@@ -0,0 +1,52 @@
+package main
+
+import (
+	"bufio"
+	"fmt"
+	"io"
+	"os"
+)
+
+func uniq(input io.Reader, output io.Writer) error {
+	in := bufio.NewScanner(input)
+	var prev string
+	for in.Scan() {
+		txt := in.Text()
+
+		if txt == prev {
+			continue
+		}
+
+		if txt < prev {
+			return fmt.Errorf("file not sorted")
+		}
+
+		prev = txt
+		fmt.Fprintln(output, txt)
+	}
+	return nil
+}
+
+func main() {
+	err := uniq(os.Stdin, os.Stdout)
+	if err != nil {
+		panic(err.Error())
+	}
+
+	/*
+		// Вариант с map плох для больших объемов данных
+		in := bufio.NewScanner(os.Stdin)
+		alreadySeen := make(map[string]bool)
+		for in.Scan() {
+			txt := in.Text()
+
+			if _, found := alreadySeen[txt]; found {
+				continue
+			}
+
+			alreadySeen[txt] = true
+
+			fmt.Println(txt)
+		}
+	*/
+}

+ 49 - 0
go/stepik/course_3/base/example/main_test.go

@@ -0,0 +1,49 @@
+package main
+
+import (
+	"bufio"
+	"bytes"
+	"strings"
+	"testing"
+)
+
+var testOk = `1
+2
+3
+3
+4
+5`
+
+var testOkResult = `1
+2
+3
+4
+5
+`
+
+func TestOk(t *testing.T) {
+
+	in := bufio.NewReader(strings.NewReader(testOk))
+	out := new(bytes.Buffer)
+	err := uniq(in, out)
+	if err != nil {
+		t.Errorf("test for OK Failed - error")
+	}
+	if out.String() != testOkResult {
+		t.Errorf("test for OK Failed - results not match")
+	}
+}
+
+var testFail = `1
+2
+1`
+
+func TestForError(t *testing.T) {
+
+	in := bufio.NewReader(strings.NewReader(testFail))
+	out := new(bytes.Buffer)
+	err := uniq(in, out)
+	if err == nil {
+		t.Errorf("test for Error Failed - error")
+	}
+}