| // 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) |
| } |