@@ -77,6 +77,12 @@ func TestConvert(t *testing.T) {
7777 outputB , err := proj .Convert (tc .dest , inputB )
7878 assert .NoError (err )
7979
80+ invA , err := proj .Inverse (tc .dest , tc .expectedA )
81+ assert .NoError (err )
82+
83+ invB , err := proj .Inverse (tc .dest , tc .expectedB )
84+ assert .NoError (err )
85+
8086 const tol = 1.0e-2
8187
8288 for i := range tc .expectedA {
@@ -89,6 +95,77 @@ func TestConvert(t *testing.T) {
8995 assert .InDelta (tc .expectedB [i ], outputB [i ], tol , tag )
9096 assert .InDelta (tc .expectedB [i ], outputB [i ], tol , tag )
9197 }
98+
99+ for i := range tc .expectedA {
100+ tag := fmt .Sprintf ("inverse: epsg:%d, input=A.%d" , int (tc .dest ), i )
101+ assert .InDelta (invA [i ], inputA [i ], tol , tag )
102+ }
103+
104+ for i := range tc .expectedB {
105+ tag := fmt .Sprintf ("inverse: epsg:%d, input=B.%d" , int (tc .dest ), i )
106+ assert .InDelta (invB [i ], inputB [i ], tol , tag )
107+ }
108+ }
109+ }
110+
111+ func TestEnsureRaisedError (t * testing.T ) {
112+ type testcase struct {
113+ op string
114+ pt []float64
115+ expectedErr string
116+ srid proj.EPSGCode
117+ }
118+
119+ fn := func (tc testcase ) func (t * testing.T ) {
120+ return func (t * testing.T ) {
121+ var err error
122+
123+ if tc .op == "convert" {
124+ _ , err = proj .Convert (proj .EPSGCode (tc .srid ), tc .pt )
125+ } else {
126+ _ , err = proj .Inverse (proj .EPSGCode (tc .srid ), tc .pt )
127+ }
128+
129+ if err == nil {
130+ t .Errorf ("didn't get expected error: %v" , tc .expectedErr )
131+ return
132+ }
133+
134+ if err .Error () != tc .expectedErr {
135+ t .Errorf ("error: %v not equal to expected error: %v" , err .Error (), tc .expectedErr )
136+ }
137+ }
138+ }
139+
140+ tests := map [string ]testcase {
141+ "3857 out of bounds WGS84" : {
142+ op : "convert" ,
143+ srid : proj .WebMercator ,
144+ pt : []float64 {- 180.0 , 90.0 },
145+ expectedErr : "tolerance condition error" ,
146+ },
147+ "4326 not supported as source srid" : {
148+ op : "convert" ,
149+ srid : proj .EPSG4326 ,
150+ pt : []float64 {0 , 0 },
151+ expectedErr : "epsg code is not a supported projection" ,
152+ },
153+ "convert bad point count" : {
154+ op : "convert" ,
155+ srid : proj .WorldMercator ,
156+ pt : []float64 {- 180.0 , 90.0 , 11.0 },
157+ expectedErr : "input array of lon/lat values must be an even number" ,
158+ },
159+ "inverse bad point count" : {
160+ op : "inverse" ,
161+ srid : proj .WorldMercator ,
162+ pt : []float64 {- 180.0 , 90.0 , 11.0 },
163+ expectedErr : "input array of x/y values must be an even number" ,
164+ },
165+ }
166+
167+ for name , tc := range tests {
168+ t .Run (name , fn (tc ))
92169 }
93170}
94171
0 commit comments