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 }