OSDN Git Service

Hulk did something
[bytom/vapor.git] / vendor / golang.org / x / text / currency / currency_test.go
diff --git a/vendor/golang.org/x/text/currency/currency_test.go b/vendor/golang.org/x/text/currency/currency_test.go
new file mode 100644 (file)
index 0000000..566a167
--- /dev/null
@@ -0,0 +1,171 @@
+// Copyright 2015 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 currency
+
+import (
+       "fmt"
+       "testing"
+
+       "golang.org/x/text/internal/testtext"
+       "golang.org/x/text/language"
+)
+
+var (
+       cup = MustParseISO("CUP")
+       czk = MustParseISO("CZK")
+       xcd = MustParseISO("XCD")
+       zwr = MustParseISO("ZWR")
+)
+
+func TestParseISO(t *testing.T) {
+       testCases := []struct {
+               in  string
+               out Unit
+               ok  bool
+       }{
+               {"USD", USD, true},
+               {"xxx", XXX, true},
+               {"xts", XTS, true},
+               {"XX", XXX, false},
+               {"XXXX", XXX, false},
+               {"", XXX, false},       // not well-formed
+               {"UUU", XXX, false},    // unknown
+               {"\u22A9", XXX, false}, // non-ASCII, printable
+
+               {"aaa", XXX, false},
+               {"zzz", XXX, false},
+               {"000", XXX, false},
+               {"999", XXX, false},
+               {"---", XXX, false},
+               {"\x00\x00\x00", XXX, false},
+               {"\xff\xff\xff", XXX, false},
+       }
+       for i, tc := range testCases {
+               if x, err := ParseISO(tc.in); x != tc.out || err == nil != tc.ok {
+                       t.Errorf("%d:%s: was %s, %v; want %s, %v", i, tc.in, x, err == nil, tc.out, tc.ok)
+               }
+       }
+}
+
+func TestFromRegion(t *testing.T) {
+       testCases := []struct {
+               region   string
+               currency Unit
+               ok       bool
+       }{
+               {"NL", EUR, true},
+               {"BE", EUR, true},
+               {"AG", xcd, true},
+               {"CH", CHF, true},
+               {"CU", cup, true},   // first of multiple
+               {"DG", USD, true},   // does not have M49 code
+               {"150", XXX, false}, // implicit false
+               {"CP", XXX, false},  // explicit false in CLDR
+               {"CS", XXX, false},  // all expired
+               {"ZZ", XXX, false},  // none match
+       }
+       for _, tc := range testCases {
+               cur, ok := FromRegion(language.MustParseRegion(tc.region))
+               if cur != tc.currency || ok != tc.ok {
+                       t.Errorf("%s: got %v, %v; want %v, %v", tc.region, cur, ok, tc.currency, tc.ok)
+               }
+       }
+}
+
+func TestFromTag(t *testing.T) {
+       testCases := []struct {
+               tag      string
+               currency Unit
+               conf     language.Confidence
+       }{
+               {"nl", EUR, language.Low},      // nl also spoken outside Euro land.
+               {"nl-BE", EUR, language.Exact}, // region is known
+               {"pt", BRL, language.Low},
+               {"en", USD, language.Low},
+               {"en-u-cu-eur", EUR, language.Exact},
+               {"tlh", XXX, language.No}, // Klingon has no country.
+               {"es-419", XXX, language.No},
+               {"und", USD, language.Low},
+       }
+       for _, tc := range testCases {
+               cur, conf := FromTag(language.MustParse(tc.tag))
+               if cur != tc.currency || conf != tc.conf {
+                       t.Errorf("%s: got %v, %v; want %v, %v", tc.tag, cur, conf, tc.currency, tc.conf)
+               }
+       }
+}
+
+func TestTable(t *testing.T) {
+       for i := 4; i < len(currency); i += 4 {
+               if a, b := currency[i-4:i-1], currency[i:i+3]; a >= b {
+                       t.Errorf("currency unordered at element %d: %s >= %s", i, a, b)
+               }
+       }
+       // First currency has index 1, last is numCurrencies.
+       if c := currency.Elem(1)[:3]; c != "ADP" {
+               t.Errorf("first was %c; want ADP", c)
+       }
+       if c := currency.Elem(numCurrencies)[:3]; c != "ZWR" {
+               t.Errorf("last was %c; want ZWR", c)
+       }
+}
+
+func TestKindRounding(t *testing.T) {
+       testCases := []struct {
+               kind  Kind
+               cur   Unit
+               scale int
+               inc   int
+       }{
+               {Standard, USD, 2, 1},
+               {Standard, CHF, 2, 1},
+               {Cash, CHF, 2, 5},
+               {Standard, TWD, 2, 1},
+               {Cash, TWD, 0, 1},
+               {Standard, czk, 2, 1},
+               {Cash, czk, 0, 1},
+               {Standard, zwr, 2, 1},
+               {Cash, zwr, 0, 1},
+               {Standard, KRW, 0, 1},
+               {Cash, KRW, 0, 1}, // Cash defaults to standard.
+       }
+       for i, tc := range testCases {
+               if scale, inc := tc.kind.Rounding(tc.cur); scale != tc.scale && inc != tc.inc {
+                       t.Errorf("%d: got %d, %d; want %d, %d", i, scale, inc, tc.scale, tc.inc)
+               }
+       }
+}
+
+const body = `package main
+import (
+       "fmt"
+       "golang.org/x/text/currency"
+)
+func main() {
+       %s
+}
+`
+
+func TestLinking(t *testing.T) {
+       base := getSize(t, `fmt.Print(currency.CLDRVersion)`)
+       symbols := getSize(t, `fmt.Print(currency.Symbol(currency.USD))`)
+       if d := symbols - base; d < 2*1024 {
+               t.Errorf("size(symbols)-size(base) was %d; want > 2K", d)
+       }
+}
+
+func getSize(t *testing.T, main string) int {
+       size, err := testtext.CodeSize(fmt.Sprintf(body, main))
+       if err != nil {
+               t.Skipf("skipping link size test; binary size could not be determined: %v", err)
+       }
+       return size
+}
+
+func BenchmarkString(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               USD.String()
+       }
+}