gonum.org/v1/gonum@v0.14.0/cmplxs/cscalar/parse_test.go (about)

     1  // Copyright ©2020 The Gonum Authors. All rights reserved.
     2  // Use of this code is governed by a BSD-style
     3  // license that can be found in the LICENSE file
     4  
     5  package cscalar
     6  
     7  import (
     8  	"math"
     9  	"math/cmplx"
    10  	"testing"
    11  )
    12  
    13  var parseTests = []struct {
    14  	s       string
    15  	want    complex128
    16  	wantErr error
    17  }{
    18  	// Simple error states:
    19  	{s: "", wantErr: parseError{state: -1}},
    20  	{s: "()", wantErr: parseError{string: "()", state: -1}},
    21  	{s: "(1", wantErr: parseError{string: "(1", state: -1}},
    22  	{s: "1)", wantErr: parseError{string: "1)", state: -1}},
    23  
    24  	// Ambiguous parse error states:
    25  	{s: "1+2i+3i", wantErr: parseError{string: "1+2i+3i", state: -1}},
    26  	{s: "1e-4i+", wantErr: parseError{string: "1e-4i+", state: -1}},
    27  	{s: "1e-4i-", wantErr: parseError{string: "1e-4i-", state: -1}},
    28  
    29  	// Valid input:
    30  	{s: "1+4i", want: 1 + 4i},
    31  	{s: "4i+1", want: 1 + 4i},
    32  	{s: "+1+4i", want: 1 + 4i},
    33  	{s: "+4i+1", want: 1 + 4i},
    34  	{s: ".1+.4i", want: 0.1 + 0.4i},
    35  	{s: ".4i+.1", want: 0.1 + 0.4i},
    36  	{s: "+.1+.4i", want: 0.1 + 0.4i},
    37  	{s: "+.4i+.1", want: 0.1 + 0.4i},
    38  	{s: "1.+4.i", want: 1 + 4i},
    39  	{s: "4.i+1.", want: 1 + 4i},
    40  	{s: "+1.+4.i", want: 1 + 4i},
    41  	{s: "+4.i+1.", want: 1 + 4i},
    42  	{s: "1.0+4.0i", want: 1 + 4i},
    43  	{s: "4.0i+1.0", want: 1 + 4i},
    44  	{s: "+1.0+4.0i", want: 1 + 4i},
    45  	{s: "+4.0i+1.0", want: 1 + 4i},
    46  	{s: "1.0e-4+1i", want: 1e-4 + 1i},
    47  	{s: "1.0e-4+i", want: 1e-4 + 1i},
    48  	{s: "1.0e-4-i", want: 1e-4 - 1i},
    49  	{s: "1.0e-4i-1", want: -1 + 1e-4i},
    50  	{s: "1.0e-4i+1", want: 1 + 1e-4i},
    51  	{s: "1e-4+1i", want: 1e-4 + 1i},
    52  	{s: "1e-4+i", want: 1e-4 + 1i},
    53  	{s: "1e-4-i", want: 1e-4 - 1i},
    54  	{s: "1e-4i-1", want: -1 + 1e-4i},
    55  	{s: "1e-4i+1", want: 1 + 1e-4i},
    56  	{s: "(1+4i)", want: 1 + 4i},
    57  	{s: "(4i+1)", want: 1 + 4i},
    58  	{s: "(+1+4i)", want: 1 + 4i},
    59  	{s: "(+4i+1)", want: 1 + 4i},
    60  	{s: "(1e-4+1i)", want: 1e-4 + 1i},
    61  	{s: "(1e-4+i)", want: 1e-4 + 1i},
    62  	{s: "(1e-4-i)", want: 1e-4 - 1i},
    63  	{s: "(1e-4i-1)", want: -1 + 1e-4i},
    64  	{s: "(1e-4i+1)", want: 1 + 1e-4i},
    65  	{s: "NaN", want: cmplx.NaN()},
    66  	{s: "nan", want: cmplx.NaN()},
    67  	{s: "Inf", want: cmplx.Inf()},
    68  	{s: "inf", want: cmplx.Inf()},
    69  	{s: "(Inf+Infi)", want: complex(math.Inf(1), math.Inf(1))},
    70  	{s: "(-Inf+Infi)", want: complex(math.Inf(-1), math.Inf(1))},
    71  	{s: "(+Inf-Infi)", want: complex(math.Inf(1), math.Inf(-1))},
    72  	{s: "(inf+infi)", want: complex(math.Inf(1), math.Inf(1))},
    73  	{s: "(-inf+infi)", want: complex(math.Inf(-1), math.Inf(1))},
    74  	{s: "(+inf-infi)", want: complex(math.Inf(1), math.Inf(-1))},
    75  	{s: "(nan+nani)", want: complex(math.NaN(), math.NaN())},
    76  	{s: "(nan-nani)", want: complex(math.NaN(), math.NaN())},
    77  }
    78  
    79  func TestParse(t *testing.T) {
    80  	for _, test := range parseTests {
    81  		got, err := parse(test.s)
    82  		if err != test.wantErr {
    83  			t.Errorf("unexpected error for Parse(%q): got:%#v, want:%#v", test.s, err, test.wantErr)
    84  		}
    85  		if err != nil {
    86  			continue
    87  		}
    88  		if !Same(got, test.want) {
    89  			t.Errorf("unexpected result for Parse(%q): got:%v, want:%v", test.s, got, test.want)
    90  		}
    91  	}
    92  }