github.com/liucxer/courier@v1.7.1/h3/coordijk_test.go (about)

     1  package h3
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/require"
     7  )
     8  
     9  func Test_CoordIJK(t *testing.T) {
    10  	t.Run("_unitIjkToDigit", func(t *testing.T) {
    11  		zero := CoordIJK{}
    12  		i := CoordIJK{1, 0, 0}
    13  		outOfRange := CoordIJK{2, 0, 0}
    14  		unnormalizedZero := CoordIJK{2, 2, 2}
    15  		require.True(t, _unitIjkToDigit(&zero) == CENTER_DIGIT, "Unit IJK to zero")
    16  		require.True(t, _unitIjkToDigit(&i) == I_AXES_DIGIT, "Unit IJK to I axis")
    17  		require.True(t, _unitIjkToDigit(&outOfRange) == INVALID_DIGIT, "Unit IJK out of range")
    18  		require.True(t, _unitIjkToDigit(&unnormalizedZero) == CENTER_DIGIT, "Unnormalized unit IJK to zero")
    19  	})
    20  
    21  	t.Run("_neighbor", func(t *testing.T) {
    22  		ijk := CoordIJK{}
    23  		zero := CoordIJK{}
    24  		i := CoordIJK{1, 0, 0}
    25  		_neighbor(&ijk, CENTER_DIGIT)
    26  		require.True(t, _ijkMatches(&ijk, &zero), "Center neighbor is self")
    27  		_neighbor(&ijk, I_AXES_DIGIT)
    28  		require.True(t, _ijkMatches(&ijk, &i), "I neighbor as expected")
    29  		_neighbor(&ijk, INVALID_DIGIT)
    30  		require.True(t, _ijkMatches(&ijk, &i), "Invalid neighbor is self")
    31  	})
    32  }
    33  
    34  func Test_CoordIJ(t *testing.T) {
    35  	t.Run("ijkToIj_zero", func(t *testing.T) {
    36  		ijk := CoordIJK{}
    37  		ij := CoordIJ{}
    38  		ijkToIj(&ijk, &ij)
    39  		require.True(t, ij.i == 0, "ij.i zero")
    40  		require.True(t, ij.j == 0, "ij.j zero")
    41  		ijToIjk(&ij, &ijk)
    42  		require.True(t, ijk.i == 0, "ijk.i zero")
    43  		require.True(t, ijk.j == 0, "ijk.j zero")
    44  		require.True(t, ijk.k == 0, "ijk.k zero")
    45  	})
    46  
    47  	t.Run("ijkToIj_roundtrip", func(t *testing.T) {
    48  		for dir := CENTER_DIGIT; dir < NUM_DIGITS; dir++ {
    49  			ijk := CoordIJK{}
    50  			_neighbor(&ijk, dir)
    51  			ij := CoordIJ{}
    52  			ijkToIj(&ijk, &ij)
    53  			recovered := CoordIJK{}
    54  			ijToIjk(&ij, &recovered)
    55  			require.True(t, _ijkMatches(&ijk, &recovered), "got same ijk coordinates back")
    56  		}
    57  	})
    58  
    59  	t.Run("ijkToCube_roundtrip", func(t *testing.T) {
    60  		for dir := CENTER_DIGIT; dir < NUM_DIGITS; dir++ {
    61  			ijk := CoordIJK{}
    62  			_neighbor(&ijk, dir)
    63  			original := CoordIJK{ijk.i, ijk.j, ijk.k}
    64  
    65  			ijkToCube(&ijk)
    66  			cubeToIjk(&ijk)
    67  			require.True(t, _ijkMatches(&ijk, &original), "got same ijk coordinates back")
    68  		}
    69  	})
    70  }