You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: number_test.go
    path of file: ./repos/minicron/client/vendor/golang.org/x/text/number
    
    the code of the file until where you have to start completion: // Copyright 2017 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package number

import (
	"strings"
	"testing"

	"golang.org/x/text/language"
	"golang.org/x/text/message"
)

func TestFormatter(t *testing.T) {
	overrides := map[string]string{
		"en": "*e#######0",
		"nl": "*n#######0",
	}
	testCases := []struct {
		desc string
		tag  string
		f    Formatter
		want string
	}{{
		desc: "decimal",
		f:    Decimal(3),
		want: "3",
	}, {
		desc: "decimal fraction",
		f:    Decimal(0.123),
		want: "0.123",
	}, {
		desc: "separators",
		f:    Decimal(1234.567),
		want: "1,234.567",
	}, {
		desc: "no separators",
		f:    Decimal(1234.567, NoSeparator()),
		want: "1234.567",
	}, {
		desc: "max integer",
		f:    Decimal(1973, MaxIntegerDigits(2)),
		want: "73",
	}, {
		desc: "max integer overflow",
		f:    Decimal(1973, MaxIntegerDigits(1000)),
		want: "1,973",
	}, {
		desc: "min integer",
		f:    Decimal(12, MinIntegerDigits(5)),
		want: "00,012",
	}, {
		desc: "max fraction zero",
		f:    Decimal(0.12345, MaxFractionDigits(0)),
		want: "0",
	}, {
		desc: "max fraction 2",
		f:    Decimal(0.12, MaxFractionDigits(2)),
		want: "0.12",
	}, {
		desc: "min fraction 2",
		f:    Decimal(0.12, MaxFractionDigits(2)),
		want: "0.12",
	}, {
		desc: "max fraction overflow",
		f:    Decimal(0.125, MaxFractionDigits(1e6)),
		want: "0.125",
	}, {
		desc: "min integer overflow",
		f:    Decimal(0, MinIntegerDigits(1e6)),
		want: strings.Repeat("000,", 255/3-1) + "000",
	}, {
		desc: "min fraction overflow",
		f:    Decimal(0, MinFractionDigits(1e6)),
		want: "0." + strings.Repeat("0", 255), // TODO: fraction separators
	}, {
		desc: "format width",
		f:    Decimal(123, FormatWidth(10)),
		want: "       123",
	}, {
		desc: "format width pad option before",
		f:    Decimal(123, Pad('*'), FormatWidth(10)),
		want: "*******123",
	}, {
		desc: "format width pad option after",
		f:    Decimal(123, FormatWidth(10), Pad('*')),
		want: "*******123",
	}, {
		desc: "format width illegal",
		f:    Decimal(123, FormatWidth(-1)),
		want: "123",
	}, {
		desc: "increment",
		f:    Decimal(10.33, IncrementString("0.5")),
		want: "10.5",
	}, {
		desc: "increment",
		f:    Decimal(10, IncrementString("ppp")),
		want: "10",
	}, {
		desc: "increment and scale",
		f:    Decimal(10.33, IncrementString("0.5"), Scale(2)),
		want: "10.50",
	}, {
		desc: "pattern overrides en",
		tag:  "en",
		f:    Decimal(101, PatternOverrides(overrides)),
		want: "eeeee101",
	}, {
		desc: "pattern overrides nl",
		tag:  "nl",
		f:    Decimal(101, PatternOverrides(overrides)),
		want: "nnnnn101",
	}, {
		desc: "pattern overrides de",
		tag:  "de",
		f:    Decimal(101, PatternOverrides(overrides)),
		want: "101",
	}, {
		desc: "language selection",
		tag:  "bn",
		f:    Decimal(123456.78, Scale(2)),
		want: "১,২৩,৪৫৬.৭৮",
	}, {
		desc: "scale",
		f:    Decimal(1234.567, Scale(2)),
		want: "1,234.57",
	}, {
		desc: "scientific",
		f:    Scientific(3.00),
    
func TestFormatter(t *testing.T) {
	overrides := map[string]string{
		"en": "*e#######0",
		"nl": "*n#######0",
	}
	testCases := []struct {
		desc string
		tag  string
		f    Formatter
		want string
	}{{
		desc: "decimal",
		f:    Decimal(3),
		want: "3",
	}, {
		desc: "decimal fraction",
		f:    Decimal(0.123),
		want: "0.123",
	}, {
		desc: "separators",
		f:    Decimal(1234.567),
		want: "1,234.567",
	}, {
		desc: "no separators",
		f:    Decimal(1234.567, NoSeparator()),
		want: "1234.567",
	}, {
		desc: "max integer",
		f:    Decimal(1973, MaxIntegerDigits(2)),
		want: "73",
	}, {
		desc: "max integer overflow",
		f:    Decimal(1973, MaxIntegerDigits(1000)),
		want: "1,973",
	}, {
		desc: "min integer",
		f:    Decimal(12, MinIntegerDigits(5)),
		want: "00,012",
	}, {
		desc: "max fraction zero",
		f:    Decimal(0.12345, MaxFractionDigits(0)),
		want: "0",
	}, {
		desc: "max fraction 2",
		f:    Decimal(0.12, MaxFractionDigits(2)),
		want: "0.12",
	}, {
		desc: "min fraction 2",
		f:    Decimal(0.12, MaxFractionDigits(2)),
		want: "0.12",
	}, {
		desc: "max fraction overflow",
		f:    Decimal(0.125, MaxFractionDigits(1e6)),
		want: "0.125",
	}, {
		desc: "min integer overflow",
		f:    Decimal(0, MinIntegerDigits(1e6)),
		want: strings.Repeat("000,", 255/3-1) + "000",
	}, {
		desc: "min fraction overflow",
		f:    Decimal(0, MinFractionDigits(1e6)),
		want: "0." + strings.Repeat("0", 255), // TODO: fraction separators
	}, {
		desc: "format width",
		f:    Decimal(123, FormatWidth(10)),
		want: "       123",
	}, {
		desc: "format width pad option before",
		f:    Decimal(123, Pad('*'), FormatWidth(10)),
		want: "*******123",
	}, {
		desc: "format width pad option after",
		f:    Decimal(123, FormatWidth(10), Pad('*')),
		want: "*******123",
	}, {
		desc: "format width illegal",
		f:    Decimal(123, FormatWidth(-1)),
		want: "123",
	}, {
		desc: "increment",
		f:    Decimal(10.33, IncrementString("0.5")),
		want: "10.5",
	}, {
		desc: "increment",
		f:    Decimal(10, IncrementString("ppp")),
		want: "10",
	}, {
		desc: "increment and scale",
		f:    Decimal(10.33, IncrementString("0.5"), Scale(2)),
		want: "10.50",
	}, {
		desc: "pattern overrides en",
		tag:  "en",
		f:    Decimal(101, PatternOverrides(overrides)),
		want: "eeeee101",
	}, {
		desc: "pattern overrides nl",
		tag:  "nl",
		f:    Decimal(101, PatternOverrides(overrides)),
		want: "nnnnn101",
	}, {
		desc: "pattern overrides de",
		tag:  "de",
		f:    Decimal(101, PatternOverrides(overrides)),
		want: "101",
	}, {
		desc: "language selection",
		tag:  "bn",
		f:    Decimal(123456.78, Scale(2)),
		want: "১,২৩,৪৫৬.৭৮",
	}, {
		desc: "scale",
		f:    Decimal(1234.567, Scale(2)),
		want: "1,234.57",
	}, {
		desc: "scientific",
		f:    Scientific(3.00),
		want: "3\u202f×\u202f10⁰",
	}, {
		desc: "scientific",
		f:    Scientific(1234),
		want: "1.234\u202f×\u202f10³",
	}, {
		desc: "scientific",
		f:    Scientific(1234, Scale(2)),
		want: "1.23\u202f×\u202f10³",
	}, {
		desc: "engineering",
		f:    Engineering(12345),
		want: "12.345\u202f×\u202f10³",
	}, {
		desc: "engineering scale",
		f:    Engineering(12345, Scale(2)),
		want: "12.34\u202f×\u202f10³",
	}, {
		desc: "engineering precision(4)",
		f:    Engineering(12345, Precision(4)),
		want: "12.34\u202f×\u202f10³",
	}, {
		desc: "engineering precision(2)",
		f:    Engineering(1234.5, Precision(2)),
		want: "1.2\u202f×\u202f10³",
	}, {
		desc: "percent",
		f:    Percent(0.12),
		want: "12%",
	}, {
		desc: "permille",
		f:    PerMille(0.123),
		want: "123‰",
	}, {
		desc: "percent rounding",
		f:    PerMille(0.12345),
		want: "123‰",
	}, {
		desc: "percent fraction",
		f:    PerMille(0.12345, Scale(2)),
		want: "123.45‰",
	}, {
		desc: "percent fraction",
		f:    PerMille(0.12344, Scale(1)),
		want: "123.4‰",
	}}
	for _, tc := range testCases {
		t.Run(tc.desc, func(t *testing.T) {
			tag := language.Und
			if tc.tag != "" {
				tag = language.MustParse(tc.tag)
			}
			got := message.NewPrinter(tag).Sprint(tc.f)
			if got != tc.want {
				t.Errorf("got %q; want %q", got, tc.want)
			}
		})
	}
}