| // Copyright 2020 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 strconv_test | |
| import ( | |
| . "strconv" | |
| "testing" | |
| ) | |
| func TestFormatComplex(t *testing.T) { | |
| tests := []struct { | |
| c complex128 | |
| fmt byte | |
| prec int | |
| bitSize int | |
| out string | |
| }{ | |
| // a variety of signs | |
| {1 + 2i, 'g', -1, 128, "(1+2i)"}, | |
| {3 - 4i, 'g', -1, 128, "(3-4i)"}, | |
| {-5 + 6i, 'g', -1, 128, "(-5+6i)"}, | |
| {-7 - 8i, 'g', -1, 128, "(-7-8i)"}, | |
| // test that fmt and prec are working | |
| {3.14159 + 0.00123i, 'e', 3, 128, "(3.142e+00+1.230e-03i)"}, | |
| {3.14159 + 0.00123i, 'f', 3, 128, "(3.142+0.001i)"}, | |
| {3.14159 + 0.00123i, 'g', 3, 128, "(3.14+0.00123i)"}, | |
| // ensure bitSize rounding is working | |
| {1.2345678901234567 + 9.876543210987654i, 'f', -1, 128, "(1.2345678901234567+9.876543210987654i)"}, | |
| {1.2345678901234567 + 9.876543210987654i, 'f', -1, 64, "(1.2345679+9.876543i)"}, | |
| // other cases are handled by FormatFloat tests | |
| } | |
| for _, test := range tests { | |
| out := FormatComplex(test.c, test.fmt, test.prec, test.bitSize) | |
| if out != test.out { | |
| t.Fatalf("FormatComplex(%v, %q, %d, %d) = %q; want %q", | |
| test.c, test.fmt, test.prec, test.bitSize, out, test.out) | |
| } | |
| } | |
| } | |
| func TestFormatComplexInvalidBitSize(t *testing.T) { | |
| defer func() { | |
| if r := recover(); r == nil { | |
| t.Fatalf("expected panic due to invalid bitSize") | |
| } | |
| }() | |
| _ = FormatComplex(1+2i, 'g', -1, 100) | |
| } |