@@ -90,7 +90,7 @@ public void run() {
9090 LOG .info ("encodeDecodeTest: #{}/{}" , count , NUMBER_OF_POINTS );
9191 }
9292
93- try {
93+ {
9494 // Walk through the list in reverse order to get International first.
9595 for (final Territory territory : Territory .values ()) {
9696 final List <Mapcode > resultsLimited = MapcodeCodec .encode (latDeg , lonDeg , territory );
@@ -102,7 +102,16 @@ public void run() {
102102 // Check max distance at every nrDigits, and verify encode(decode(m))=m
103103 for (int nrDigits = 0 ; nrDigits <= 8 ; nrDigits ++) {
104104 final String codePrecision = mapcode .getCode (nrDigits );
105- final Point decodeLocation = MapcodeCodec .decode (codePrecision , territory );
105+ final Point decodeLocation ;
106+ try {
107+ decodeLocation = MapcodeCodec .decode (codePrecision , territory );
108+ } catch (final UnknownMapcodeException e ) {
109+ LOG .error ("FAILED {} Decode({} {}) generated from ({}, {}) in {}" , count , territory , codePrecision , latDeg , lonDeg );
110+ LOG .error ("encodeDecodeTest: Unknown mapcode exception" , e );
111+ errors .getAndIncrement ();
112+ continue ;
113+ }
114+
106115 final double distance = Point .distanceInMeters (encode , decodeLocation );
107116 if (distance >= Mapcode .getSafeMaxOffsetInMeters (nrDigits )) {
108117 LOG .error ("encodeDecodeTest: " + mapcode + " digits = " + nrDigits + " distance = " + distance + " >= " + Mapcode .getSafeMaxOffsetInMeters (nrDigits ));
@@ -119,31 +128,27 @@ public void run() {
119128 break ;
120129 }
121130 }
122- if (!found ) {
123- // perhaps it was inherited from the parent?
124- final Territory parentTerritory = territory .getParentTerritory ();
125- if (parentTerritory != null ) {
126- final List <Mapcode > recodedMapcodesFromParent = MapcodeCodec .encode (decodeLocation ,parentTerritory );
127- for (final Mapcode candidate : recodedMapcodesFromParent ) {
128- if (codePrecision .equals (candidate .getCode (nrDigits ))) {
129- found = true ;
130- break ;
131+ if (!found ) { // not found?
132+ if (MapcodeCodec .isFullyInsideTerritory (decodeLocation , territory )) { // but should be found!
133+ // perhaps it was inherited from the parent?
134+ final Territory parentTerritory = territory .getParentTerritory ();
135+ if (parentTerritory != null ) {
136+ final List <Mapcode > recodedMapcodesFromParent = MapcodeCodec .encode (decodeLocation ,parentTerritory );
137+ for (final Mapcode candidate : recodedMapcodesFromParent ) {
138+ if (codePrecision .equals (candidate .getCode (nrDigits ))) {
139+ found = true ;
140+ break ;
141+ }
131142 }
132143 }
133- if (!found ) { // provide parent info for error that will fire below
134- LOG .info ("Re-encode{} of {} failed for {} {} from ({},{})" , nrDigits , decodeLocation , parentTerritory , codePrecision , latDeg , lonDeg );
135- for (final Mapcode candidate : recodedMapcodesFromParent ) {
136- LOG .info (" * parent candidate: {}" , candidate .getCode (nrDigits ));
144+ if (!found ) {
145+ LOG .error ("Re-encode{} of {} failed for {} {} from ({},{})" , nrDigits , decodeLocation , territory , codePrecision , latDeg , lonDeg );
146+ errors .getAndIncrement ();
147+ for (final Mapcode candidate : recodedMapcodes ) {
148+ LOG .info (" * candidate: {}" , candidate .getCode (nrDigits ));
137149 }
138150 }
139151 }
140- if (!found ) {
141- LOG .error ("Re-encode{} of {} failed for {} {} from ({},{})" , nrDigits , decodeLocation , territory , codePrecision , latDeg , lonDeg );
142- errors .getAndIncrement ();
143- for (final Mapcode candidate : recodedMapcodes ) {
144- LOG .info (" * candidate: {}" , candidate .getCode (nrDigits ));
145- }
146- }
147152 }
148153 }
149154 }
@@ -161,9 +166,6 @@ public void run() {
161166 }
162167 }
163168 }
164- } catch (final UnknownMapcodeException e ) {
165- LOG .error ("encodeDecodeTest: Unknown mapcode exception" , e );
166- errors .getAndIncrement ();
167169 }
168170 }
169171 });
0 commit comments