public void Test_S2PointRegionTest_DecodeUnitLength()
        {
            // Ensure that we have the right format for the next test.
            Encoder encoder = new();

            encoder.Ensure(1 + 3 * 8);

            encoder.Put8(1);  // version number
            encoder.PutDouble(1.0);
            encoder.PutDouble(0.0);
            encoder.PutDouble(0.0);

            var decoder = encoder.Decoder();

            // S2PointRegion r = new S2PointRegion(new S2Point(-1, 0, 0));
            var(success, _) = S2PointRegion.Decode(decoder);
            Assert.True(success);
        }
        public void Test_S2PointRegionTest_DecodeNonUnitLength()
        {
            // Ensure that a decode of a non-unit length vector returns false,
            // rather than S2_DCHECK fails.
            Encoder encoder = new();

            encoder.Ensure(1 + 3 * 8);

            encoder.Put8(1);  // version number
            encoder.PutDouble(1.0);
            encoder.PutDouble(1.0);
            encoder.PutDouble(1.0);

            var decoder = encoder.Decoder();

            // S2PointRegion r = new(new S2Point(-1, 0, 0));
            var(success, _) = S2PointRegion.Decode(decoder);
            Assert.False(success);
        }
        public void Test_S2PointRegionTest_EncodeAndDecode()
        {
            S2Point       p = new(0.6, 0.8, 0);
            S2PointRegion r = new(p);

            Encoder encoder = new();

            r.Encode(encoder);

            var decoder = encoder.Decoder();

            // S2PointRegion decoded_r = new S2PointRegion(new S2Point(1, 0, 0));
            var(_, decoded_r) = S2PointRegion.Decode(decoder);
            S2Point decoded_p = decoded_r !.Value.Point;

            Assert.Equal(0.6, decoded_p[0]);
            Assert.Equal(0.8, decoded_p[1]);
            Assert.Equal(0.0, decoded_p[2]);
        }