-- Tags: no-fasttest
-- Tag no-fasttest: needs s2

DROP TABLE IF EXISTS s2_indexes;

CREATE TABLE s2_indexes (s2_index UInt64, longitude Float64, latitude Float64) ENGINE = Memory;

-- Random geo coordinates were generated using S2Testing::RandomPoint() method from s2 API.

INSERT INTO s2_indexes VALUES (3814912406305146967, 125.938503, 25.519362);
INSERT INTO s2_indexes VALUES (10654167528317613967, -64.364998, -13.206226);
INSERT INTO s2_indexes VALUES (1913723177026859705, 8.774109, -3.271374);
INSERT INTO s2_indexes VALUES (13606307743304496111, -89.810962, -57.013984);
INSERT INTO s2_indexes VALUES (8094352344009072761,-170.423649, -10.102188);
INSERT INTO s2_indexes VALUES (2414200527355011659, 54.724353, -19.210608);
INSERT INTO s2_indexes VALUES (4590287096029015693, 51.390374, 29.368252);
INSERT INTO s2_indexes VALUES (10173921221664598133, 5.161979, -46.718242);
INSERT INTO s2_indexes VALUES (525948609053546189, -41.564128, -16.777073);
INSERT INTO s2_indexes VALUES (2446780491369950853, 49.94229, -18.633856);
INSERT INTO s2_indexes VALUES (1723620528513492581, 40.768274, 2.853563);
INSERT INTO s2_indexes VALUES (8295275405228383207, -168.258979, -38.271170);
INSERT INTO s2_indexes VALUES (7280210779810727639, 170.145748, 7.606449);
INSERT INTO s2_indexes VALUES (10670400906708524495, -61.761938, -24.969589);
INSERT INTO s2_indexes VALUES (10868726821406046149, -79.245460, -22.940849);
INSERT INTO s2_indexes VALUES (13202270384266773545, 10.610774, -64.184103);
INSERT INTO s2_indexes VALUES (145638248314527629, -19.826140, -41.192912);
INSERT INTO s2_indexes VALUES (12793606480989360601, 74.006104, -68.321240);
INSERT INTO s2_indexes VALUES (6317132534461540391, -165.907973, 54.205178);
INSERT INTO s2_indexes VALUES (6944470717485986643, 140.428834, 28.399755);

SELECT 'Checking s2 index generation.';

SELECT s2ToGeo(s2_index), geoToS2(longitude, latitude) FROM s2_indexes ORDER BY s2_index;

SELECT first, second, result FROM (
    SELECT
        s2ToGeo(geoToS2(longitude, latitude)) AS output_geo,
        tuple(roundBankers(longitude, 5), roundBankers(latitude, 5)) AS first,
        tuple(roundBankers(output_geo.1, 5), roundBankers(output_geo.2, 5)) AS second,
        if(first = second, 'ok', 'fail') AS result
    FROM s2_indexes
    ORDER BY s2_index
 );

SELECT s2ToGeo(toUInt64(-1)); -- { serverError BAD_ARGUMENTS }
SELECT s2ToGeo(nan); -- { serverError ILLEGAL_TYPE_OF_ARGUMENT }
SELECT geoToS2(toFloat64(toUInt64(-1)), toFloat64(toUInt64(-1))); -- { serverError BAD_ARGUMENTS }
SELECT geoToS2(nan, nan); -- { serverError ILLEGAL_TYPE_OF_ARGUMENT }
SELECT geoToS2(-inf, 1.1754943508222875e-38); -- { serverError ILLEGAL_TYPE_OF_ARGUMENT }



DROP TABLE IF EXISTS s2_indexes;
