Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Solution: implement wc

TODO: finish this

package main

import (
	"bufio"
	"fmt"
	"io"
	"os"
	"strings"
)

func main() {
	fmt.Println(os.Args)
	wc(os.Args[1:])
}

func wc(filenames []string) (int, int, int) {
	rows := 0
	words := 0
	chars := 0
	filename := filenames[0]
	fh, err := os.Open(filename)
	if err != nil {
		os.Exit(1)
	}
	reader := bufio.NewReader(fh)
	for {
		line, err := reader.ReadString('\n')
		if err != nil {
			if err != io.EOF {
				fmt.Println(err)
			}
			break
		}
		rows++
		words += len(strings.Fields(line))
		chars += len(line)
	}
	return rows, words, chars
}
package main

import (
	"testing"
)

// var expected map[string]

func TestWCa(t *testing.T) {
	files := []string{"one.txt"}
	rows, words, chars := wc(files)
	if rows != 2 {
		t.Errorf("Expected rows: 2, actual rows %v\n", rows)
	}
	if words != 5 {
		t.Errorf("Expected words: 5, actual words %v\n", words)
	}
	if chars != 24 {
		t.Errorf("Expected chars: 24, actual chars %v\n", chars)
	}
}

func TestWCb(t *testing.T) {
	files := []string{"two.txt"}
	rows, words, chars := wc(files)
	if rows != 3 {
		t.Errorf("Expected rows: 3, actual rows %v\n", rows)
	}
	if words != 11 {
		t.Errorf("Expected words: 11, actual words %v\n", words)
	}
	if chars != 100 {
		t.Errorf("Expected chars: 100, actual chars %v\n", chars)
	}
}