Top.Mail.Ru
Ответы

Программирование и тестинг на GO

Написать программу:

Функция GetUTFLength(input []byte) (int, error) возвращает длину строки UTF8 и ошибку ErrInvalidUTF8 (в случае возникновения). Напишите тест, который бы проверял возвращаемые функцией значения.

var ErrInvalidUTF8 = errors.New ("invalid utf8")

func GetUTFLength(input []byte) (int, error) {
 if !utf8.Valid(input) {
  return 0, ErrInvalidUTF8
 }

 return utf8.RuneCount(input), nil
}

Примечания
Функцию GetUTFLength реализовывать не нужно.

По дате
По рейтингу
Аватар пользователя
Ученик
8мес
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
 package main 
 
import ( 
	"errors" 
	"testing" 
	"unicode/utf8" 
) 
 
// ErrInvalidUTF8 представляет ошибку, указывающую на некорректные данные UTF-8. 
var ErrInvalidUTF8 = errors.New("invalid utf8") 
 
// GetUTFLength возвращает длину строки UTF8 и ошибку ErrInvalidUTF8 (в случае возникновения). 
func GetUTFLength(input []byte) (int, error) { 
	if !utf8.Valid(input) { 
		return 0, ErrInvalidUTF8 
	} 
 
	return utf8.RuneCount(input), nil 
} 
 
// TestGetUTFLength проверяет возвращаемые значения функции GetUTFLength. 
func TestGetUTFLength(t *testing.T) { 
	tests := []struct { 
		input    []byte 
		expected int 
		err      error 
	}{ 
		// Тест с корректной строкой UTF-8. 
		{input: []byte("Hello, 世界"), expected: 9, err: nil}, 
 
		// Тест с некорректной строкой UTF-8. 
		{input: []byte{0x80}), expected: 0, err: ErrInvalidUTF8}, 
 
		// Тест с пустой строкой. 
		{input: []byte{}, expected: 0, err: nil}, 
 
		// Тест с одной руной UTF-8. 
		{input: []byte("你"), expected: 1, err: nil}, 
	} 
 
	for _, tt := range tests { 
		got, err := GetUTFLength(tt.input) 
		if got != tt.expected { 
			t.Errorf("GetUTFLength() got = %v, expected = %v", got, tt.expected) 
		} 
		if err != tt.err { 
			t.Errorf("GetUTFLength() error = %v, expected = %v", err, tt.err) 
		} 
	} 
} 
 
func main() { 
	// Тесты будут выполнены автоматически при запуске программы. 
	// Для выполнения тестов вручную можно использовать команду: 
	// go test -v 
}