2017-01-31 02:41:12 +03:00
|
|
|
package tests
|
|
|
|
|
2018-10-26 02:37:06 +03:00
|
|
|
import (
|
2019-03-01 16:55:26 +03:00
|
|
|
"fmt"
|
2020-04-08 21:36:37 +03:00
|
|
|
"math/rand"
|
2019-03-01 16:55:26 +03:00
|
|
|
"sort"
|
2018-10-26 02:37:06 +03:00
|
|
|
"testing"
|
|
|
|
)
|
2017-01-31 02:41:12 +03:00
|
|
|
|
|
|
|
func subTestSearch(t *testing.T, mc *mockServer) {
|
|
|
|
runStep(t, mc, "KNN", keys_KNN_test)
|
2018-11-01 08:00:09 +03:00
|
|
|
runStep(t, mc, "KNN_CURSOR", keys_KNN_cursor_test)
|
2018-05-04 21:42:35 +03:00
|
|
|
runStep(t, mc, "WITHIN_CIRCLE", keys_WITHIN_CIRCLE_test)
|
2018-05-04 23:45:51 +03:00
|
|
|
runStep(t, mc, "INTERSECTS_CIRCLE", keys_INTERSECTS_CIRCLE_test)
|
2018-10-17 04:17:59 +03:00
|
|
|
runStep(t, mc, "WITHIN", keys_WITHIN_test)
|
2018-11-01 08:00:09 +03:00
|
|
|
runStep(t, mc, "WITHIN_CURSOR", keys_WITHIN_CURSOR_test)
|
2020-03-20 08:09:24 +03:00
|
|
|
runStep(t, mc, "WITHIN_CLIPBY", keys_WITHIN_CLIPBY_test)
|
2018-10-17 04:17:59 +03:00
|
|
|
runStep(t, mc, "INTERSECTS", keys_INTERSECTS_test)
|
2018-11-01 08:00:09 +03:00
|
|
|
runStep(t, mc, "INTERSECTS_CURSOR", keys_INTERSECTS_CURSOR_test)
|
2020-03-20 08:09:24 +03:00
|
|
|
runStep(t, mc, "INTERSECTS_CLIPBY", keys_INTERSECTS_CLIPBY_test)
|
2018-11-01 08:00:09 +03:00
|
|
|
runStep(t, mc, "SCAN_CURSOR", keys_SCAN_CURSOR_test)
|
|
|
|
runStep(t, mc, "SEARCH_CURSOR", keys_SEARCH_CURSOR_test)
|
2019-03-01 16:55:26 +03:00
|
|
|
runStep(t, mc, "MATCH", keys_MATCH_test)
|
2019-05-28 21:44:39 +03:00
|
|
|
runStep(t, mc, "FIELDS", keys_FIELDS_search_test)
|
2017-01-31 02:41:12 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
func keys_KNN_test(mc *mockServer) error {
|
|
|
|
return mc.DoBatch([][]interface{}{
|
|
|
|
{"SET", "mykey", "1", "POINT", 5, 5}, {"OK"},
|
|
|
|
{"SET", "mykey", "2", "POINT", 19, 19}, {"OK"},
|
|
|
|
{"SET", "mykey", "3", "POINT", 12, 19}, {"OK"},
|
|
|
|
{"SET", "mykey", "4", "POINT", -5, 5}, {"OK"},
|
|
|
|
{"SET", "mykey", "5", "POINT", 33, 21}, {"OK"},
|
2021-03-19 11:42:38 +03:00
|
|
|
{"SET", "mykey", "6", "POINT", 52, 13}, {"OK"},
|
2018-10-26 02:37:06 +03:00
|
|
|
{"NEARBY", "mykey", "LIMIT", 10, "POINTS", "POINT", 20, 20}, {
|
2021-03-19 11:42:38 +03:00
|
|
|
"[0 [[2 [19 19]] [3 [12 19]] [5 [33 21]] [1 [5 5]] [4 [-5 5]] [6 [52 13]]]]"},
|
|
|
|
{"NEARBY", "mykey", "LIMIT", 10, "IDS", "POINT", 20, 20, 4000000}, {"[0 [2 3 5 1 4 6]]"},
|
2018-10-26 02:37:06 +03:00
|
|
|
{"NEARBY", "mykey", "LIMIT", 10, "IDS", "POINT", 20, 20, 1500000}, {"[0 [2 3 5]]"},
|
2021-03-19 11:42:38 +03:00
|
|
|
{"NEARBY", "mykey", "LIMIT", 10, "DISTANCE", "POINT", 52, 13, 100}, {`[0 [[6 {"type":"Point","coordinates":[13,52]} 0]]]`},
|
|
|
|
{"NEARBY", "mykey", "LIMIT", 10, "DISTANCE", "POINT", 52.1, 13.1, 100000}, {`[0 [[6 {"type":"Point","coordinates":[13,52]} 13053.885940801563]]]`},
|
2017-01-31 02:41:12 +03:00
|
|
|
})
|
|
|
|
}
|
2018-05-04 21:42:35 +03:00
|
|
|
|
2018-11-01 08:00:09 +03:00
|
|
|
func keys_KNN_cursor_test(mc *mockServer) error {
|
|
|
|
return mc.DoBatch([][]interface{}{
|
|
|
|
{"SET", "mykey", "1", "FIELD", "foo", 5.5, "POINT", 5, 5}, {"OK"},
|
2019-03-01 16:55:26 +03:00
|
|
|
{"SET", "mykey", "2", "FIELD", "foo", 19.19, "POINT", 19, 19}, {"OK"},
|
2018-11-01 08:00:09 +03:00
|
|
|
{"SET", "mykey", "3", "FIELD", "foo", 12.19, "POINT", 12, 19}, {"OK"},
|
|
|
|
{"SET", "mykey", "4", "FIELD", "foo", -5.5, "POINT", -5, 5}, {"OK"},
|
|
|
|
{"SET", "mykey", "5", "FIELD", "foo", 13.21, "POINT", 33, 21}, {"OK"},
|
|
|
|
{"NEARBY", "mykey", "LIMIT", 2, "POINTS", "POINT", 20, 20}, {
|
|
|
|
"[2 [[2 [19 19] [foo 19.19]] [3 [12 19] [foo 12.19]]]]"},
|
|
|
|
{"NEARBY", "mykey", "CURSOR", 2, "LIMIT", 1, "POINTS", "POINT", 20, 20}, {
|
|
|
|
"[3 [[5 [33 21] [foo 13.21]]]]"},
|
|
|
|
{"NEARBY", "mykey", "LIMIT", 2, "WHERE", "foo", -10, 15, "POINTS", "POINT", 20, 20}, {
|
|
|
|
"[3 [[3 [12 19] [foo 12.19]] [5 [33 21] [foo 13.21]]]]"},
|
|
|
|
{"NEARBY", "mykey", "CURSOR", 3, "LIMIT", 1, "WHERE", "foo", -10, 15, "POINTS", "POINT", 20, 20}, {
|
|
|
|
"[4 [[1 [5 5] [foo 5.5]]]]"},
|
|
|
|
{"NEARBY", "mykey", "CURSOR", 4, "LIMIT", 1, "WHERE", "foo", -10, 15, "POINTS", "POINT", 20, 20}, {
|
|
|
|
"[5 [[4 [-5 5] [foo -5.5]]]]"},
|
|
|
|
{"NEARBY", "mykey", "CURSOR", 4, "LIMIT", 10, "WHERE", "foo", -10, 15, "POINTS", "POINT", 20, 20}, {
|
|
|
|
"[0 [[4 [-5 5] [foo -5.5]]]]"},
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2018-10-17 04:17:59 +03:00
|
|
|
func keys_WITHIN_test(mc *mockServer) error {
|
|
|
|
return mc.DoBatch([][]interface{}{
|
|
|
|
{"SET", "mykey", "point1", "POINT", 37.7335, -122.4412}, {"OK"},
|
|
|
|
{"SET", "mykey", "point2", "POINT", 37.7335, -122.44121}, {"OK"},
|
|
|
|
{"SET", "mykey", "line3", "OBJECT", `{"type":"LineString","coordinates":[[-122.4408378,37.7341129],[-122.4408378,37.733]]}`}, {"OK"},
|
|
|
|
{"SET", "mykey", "poly4", "OBJECT", `{"type":"Polygon","coordinates":[[[-122.4408378,37.7341129],[-122.4408378,37.733],[-122.44,37.733],[-122.44,37.7341129],[-122.4408378,37.7341129]]]}`}, {"OK"},
|
|
|
|
{"SET", "mykey", "multipoly5", "OBJECT", `{"type":"MultiPolygon","coordinates":[[[[-122.4408378,37.7341129],[-122.4408378,37.733],[-122.44,37.733],[-122.44,37.7341129],[-122.4408378,37.7341129]]],[[[-122.44091033935547,37.731981251280985],[-122.43994474411011,37.731981251280985],[-122.43994474411011,37.73254976045042],[-122.44091033935547,37.73254976045042],[-122.44091033935547,37.731981251280985]]]]}`}, {"OK"},
|
|
|
|
{"SET", "mykey", "point6", "POINT", -5, 5}, {"OK"},
|
|
|
|
{"SET", "mykey", "point7", "POINT", 33, 21}, {"OK"},
|
|
|
|
{"SET", "mykey", "poly8", "OBJECT", `{"type":"Polygon","coordinates":[[[-122.4408378,37.7341129],[-122.4408378,37.733],[-122.44,37.733],[-122.44,37.7341129],[-122.4408378,37.7341129]],[[-122.44060993194579,37.73345766902749],[-122.44044363498686,37.73345766902749],[-122.44044363498686,37.73355524732416],[-122.44060993194579,37.73355524732416],[-122.44060993194579,37.73345766902749]],[[-122.44060724973677,37.7336888869566],[-122.4402102828026,37.7336888869566],[-122.4402102828026,37.7339752567853],[-122.44060724973677,37.7339752567853],[-122.44060724973677,37.7336888869566]]]}`}, {"OK"},
|
|
|
|
{"WITHIN", "mykey", "IDS", "OBJECT",
|
|
|
|
`{
|
|
|
|
"type": "Polygon",
|
|
|
|
"coordinates": [
|
|
|
|
[
|
|
|
|
[-122.44126439094543,37.72906137107],
|
|
|
|
[-122.43980526924135,37.72906137107],
|
|
|
|
[-122.43980526924135,37.73421283683962],
|
|
|
|
[-122.44126439094543,37.73421283683962],
|
|
|
|
[-122.44126439094543,37.72906137107]
|
|
|
|
]
|
|
|
|
]
|
|
|
|
}`}, {"[0 [point1 point2 line3 poly4 multipoly5 poly8]]"},
|
|
|
|
|
|
|
|
{"SET", "key2", "poly9", "OBJECT", `{"type":"Polygon","coordinates":[[[-122.44037926197052,37.73313523548048],[-122.44017541408539,37.73313523548048],[-122.44017541408539,37.73336857568778],[-122.44037926197052,37.73336857568778],[-122.44037926197052,37.73313523548048]]]}`}, {"OK"},
|
|
|
|
{"SET", "key2", "poly10", "OBJECT", `{"type":"Polygon","coordinates":[[[-122.44040071964262,37.73359343010089],[-122.4402666091919,37.73359343010089],[-122.4402666091919,37.73373767596864],[-122.44040071964262,37.73373767596864],[-122.44040071964262,37.73359343010089]]]}`}, {"OK"},
|
|
|
|
{"WITHIN", "key2", "IDS", "GET", "mykey", "poly8"}, {"[0 [poly9]]"},
|
|
|
|
|
|
|
|
{"SET", "key3", "poly11", "OBJECT", `{"type":"Polygon","coordinates":[[[-122.44059920310973,37.733279482240874],[-122.4402344226837,37.733279482240874],[-122.4402344226837,37.73375464605226],[-122.44059920310973,37.73375464605226],[-122.44059920310973,37.733279482240874]]]}`}, {"OK"},
|
|
|
|
{"SET", "key3", "poly12", "OBJECT", `{"type":"Polygon","coordinates":[[[-122.44060993194579,37.73238005667773],[-122.44013786315918,37.73238005667773],[-122.44013786315918,37.73316917591997],[-122.44060993194579,37.73316917591997],[-122.44060993194579,37.73238005667773]]]}`}, {"OK"},
|
|
|
|
{"WITHIN", "key3", "IDS", "GET", "mykey", "multipoly5"}, {"[0 [poly11]]"},
|
|
|
|
|
|
|
|
{"SET", "key5", "poly13", "OBJECT", `{"type":"Polygon","coordinates":[[[-122.44073867797852,37.733211601447465],[-122.44011640548705,37.733211601447465],[-122.44011640548705,37.7340516218859],[-122.44073867797852,37.7340516218859],[-122.44073867797852,37.733211601447465]],[[-122.44060993194579,37.73345766902749],[-122.44060993194579,37.73355524732416],[-122.44044363498686,37.73355524732416],[-122.44044363498686,37.73345766902749],[-122.44060993194579,37.73345766902749]],[[-122.44060724973677,37.7336888869566],[-122.44060724973677,37.7339752567853],[-122.4402102828026,37.7339752567853],[-122.4402102828026,37.7336888869566],[-122.44060724973677,37.7336888869566]]]}`}, {"OK"},
|
|
|
|
{"SET", "key5", "poly14", "OBJECT", `{"type":"Polygon","coordinates":[[[-122.44154334068298,37.73179457567642],[-122.43935465812682,37.73179457567642],[-122.43935465812682,37.7343740514423],[-122.44154334068298,37.7343740514423],[-122.44154334068298,37.73179457567642]],[[-122.44104981422423,37.73286371140448],[-122.44104981422423,37.73424677678513],[-122.43990182876587,37.73424677678513],[-122.43990182876587,37.73286371140448],[-122.44104981422423,37.73286371140448]],[[-122.44109272956847,37.731870943026074],[-122.43976235389708,37.731870943026074],[-122.43976235389708,37.7326855231885],[-122.44109272956847,37.7326855231885],[-122.44109272956847,37.731870943026074]]]}`}, {"OK"},
|
|
|
|
{"WITHIN", "key5", "IDS", "GET", "mykey", "multipoly5"}, {"[0 [poly13]]"},
|
|
|
|
|
|
|
|
{"SET", "key6", "multipoly5", "OBJECT", `{"type":"MultiPolygon","coordinates":[[[[-122.4408378,37.7341129],[-122.4408378,37.733],[-122.44,37.733],[-122.44,37.7341129],[-122.4408378,37.7341129]]],[[[-122.44091033935547,37.731981251280985],[-122.43994474411011,37.731981251280985],[-122.43994474411011,37.73254976045042],[-122.44091033935547,37.73254976045042],[-122.44091033935547,37.731981251280985]]]]}`}, {"OK"},
|
|
|
|
{"SET", "key6", "poly13", "OBJECT", `{"type":"Polygon","coordinates":[[[-122.44073867797852,37.733211601447465],[-122.44011640548705,37.733211601447465],[-122.44011640548705,37.7340516218859],[-122.44073867797852,37.7340516218859],[-122.44073867797852,37.733211601447465]],[[-122.44060993194579,37.73345766902749],[-122.44060993194579,37.73355524732416],[-122.44044363498686,37.73355524732416],[-122.44044363498686,37.73345766902749],[-122.44060993194579,37.73345766902749]],[[-122.44060724973677,37.7336888869566],[-122.44060724973677,37.7339752567853],[-122.4402102828026,37.7339752567853],[-122.4402102828026,37.7336888869566],[-122.44060724973677,37.7336888869566]]]}`}, {"OK"},
|
|
|
|
{"WITHIN", "key6", "IDS", "GET", "key5", "poly14"}, {"[0 []]"},
|
|
|
|
|
|
|
|
{"SET", "key7", "multipoly15", "OBJECT", `{"type":"MultiPolygon","coordinates":[[[[-122.44056701660155,37.7332964524295],[-122.44029879570007,37.7332964524295],[-122.44029879570007,37.73375464605226],[-122.44056701660155,37.73375464605226],[-122.44056701660155,37.7332964524295]]],[[[-122.44067430496216,37.73217641163713],[-122.44034171104431,37.73217641163713],[-122.44034171104431,37.732430967850384],[-122.44067430496216,37.732430967850384],[-122.44067430496216,37.73217641163713]]]]}`}, {"OK"},
|
|
|
|
{"SET", "key7", "multipoly16", "OBJECT", `{"type":"MultiPolygon","coordinates":[[[[-122.44056701660155,37.7332964524295],[-122.44029879570007,37.7332964524295],[-122.44029879570007,37.73375464605226],[-122.44056701660155,37.73375464605226],[-122.44056701660155,37.7332964524295]]],[[[-122.4402666091919,37.733109780140644],[-122.4401271343231,37.733109780140644],[-122.4401271343231,37.73323705675229],[-122.4402666091919,37.73323705675229],[-122.4402666091919,37.733109780140644]]]]}`}, {"OK"},
|
|
|
|
{"SET", "key7", "multipoly17", "OBJECT", `{"type":"MultiPolygon","coordinates":[[[[-122.44056701660155,37.7332964524295],[-122.44029879570007,37.7332964524295],[-122.44029879570007,37.73375464605226],[-122.44056701660155,37.73375464605226],[-122.44056701660155,37.7332964524295]]],[[[-122.44032025337218,37.73267703802467],[-122.44013786315918,37.73267703802467],[-122.44013786315918,37.732838255971316],[-122.44032025337218,37.732838255971316],[-122.44032025337218,37.73267703802467]]]]}`}, {"OK"},
|
|
|
|
{"WITHIN", "key7", "IDS", "GET", "mykey", "multipoly5"}, {"[0 [multipoly15 multipoly16]]"},
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2018-11-01 08:00:09 +03:00
|
|
|
func keys_WITHIN_CURSOR_test(mc *mockServer) error {
|
|
|
|
testArea := `{
|
|
|
|
"type": "Polygon",
|
|
|
|
"coordinates": [
|
|
|
|
[
|
|
|
|
[-122.44126439094543,37.72906137107],
|
|
|
|
[-122.43980526924135,37.72906137107],
|
|
|
|
[-122.43980526924135,37.73421283683962],
|
|
|
|
[-122.44126439094543,37.73421283683962],
|
|
|
|
[-122.44126439094543,37.72906137107]
|
|
|
|
]
|
|
|
|
]
|
|
|
|
}`
|
|
|
|
return mc.DoBatch([][]interface{}{
|
|
|
|
{"SET", "mykey", "point1", "FIELD", "foo", 1, "POINT", 37.7335, -122.4412}, {"OK"},
|
|
|
|
{"SET", "mykey", "point2", "FIELD", "foo", 2, "POINT", 37.7335, -122.44121}, {"OK"},
|
|
|
|
{"SET", "mykey", "line3", "FIELD", "foo", 3, "OBJECT", `{"type":"LineString","coordinates":[[-122.4408378,37.7341129],[-122.4408378,37.733]]}`}, {"OK"},
|
|
|
|
{"SET", "mykey", "poly4", "FIELD", "foo", 4, "OBJECT", `{"type":"Polygon","coordinates":[[[-122.4408378,37.7341129],[-122.4408378,37.733],[-122.44,37.733],[-122.44,37.7341129],[-122.4408378,37.7341129]]]}`}, {"OK"},
|
2019-03-01 16:55:26 +03:00
|
|
|
{"SET", "mykey", "multipoly5", "FIELD", "foo", 5, "OBJECT", `{"type":"MultiPolygon","coordinates":[[[[-122.4408378,37.7341129],[-122.4408378,37.733],[-122.44,37.733],[-122.44,37.7341129],[-122.4408378,37.7341129]]],[[[-122.44091033935547,37.731981251280985],[-122.43994474411011,37.731981251280985],[-122.43994474411011,37.73254976045042],[-122.44091033935547,37.73254976045042],[-122.44091033935547,37.731981251280985]]]]}`}, {"OK"},
|
2018-11-01 08:00:09 +03:00
|
|
|
{"SET", "mykey", "point6", "FIELD", "foo", 6, "POINT", -5, 5}, {"OK"},
|
|
|
|
{"SET", "mykey", "point7", "FIELD", "foo", 7, "POINT", 33, 21}, {"OK"},
|
|
|
|
{"SET", "mykey", "poly8", "FIELD", "foo", 8, "OBJECT", `{"type":"Polygon","coordinates":[[[-122.4408378,37.7341129],[-122.4408378,37.733],[-122.44,37.733],[-122.44,37.7341129],[-122.4408378,37.7341129]],[[-122.44060993194579,37.73345766902749],[-122.44044363498686,37.73345766902749],[-122.44044363498686,37.73355524732416],[-122.44060993194579,37.73355524732416],[-122.44060993194579,37.73345766902749]],[[-122.44060724973677,37.7336888869566],[-122.4402102828026,37.7336888869566],[-122.4402102828026,37.7339752567853],[-122.44060724973677,37.7339752567853],[-122.44060724973677,37.7336888869566]]]}`}, {"OK"},
|
|
|
|
{"SET", "mykey", "point9", "FIELD", "foo", 9, "POINT", 37.7335, -122.4412}, {"OK"},
|
|
|
|
{"WITHIN", "mykey", "LIMIT", 3, "IDS", "OBJECT", testArea}, {
|
|
|
|
"[3 [point1 point2 line3]]"},
|
|
|
|
{"WITHIN", "mykey", "CURSOR", 3, "LIMIT", 3, "IDS", "OBJECT", testArea}, {
|
|
|
|
"[6 [poly4 multipoly5 poly8]]"},
|
|
|
|
{"WITHIN", "mykey", "WHERE", "foo", 3, 5, "IDS", "OBJECT", testArea}, {
|
|
|
|
"[0 [line3 poly4 multipoly5]]"},
|
|
|
|
{"WITHIN", "mykey", "LIMIT", 1, "WHERE", "foo", 3, 5, "IDS", "OBJECT", testArea}, {
|
|
|
|
"[3 [line3]]"},
|
|
|
|
{"WITHIN", "mykey", "CURSOR", 3, "LIMIT", 1, "WHERE", "foo", 8, 9, "IDS", "OBJECT", testArea}, {
|
|
|
|
"[6 [poly8]]"},
|
|
|
|
{"WITHIN", "mykey", "CURSOR", 6, "LIMIT", 1, "WHERE", "foo", 8, 9, "IDS", "OBJECT", testArea}, {
|
|
|
|
"[7 [point9]]"},
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2020-03-20 08:09:24 +03:00
|
|
|
func keys_WITHIN_CLIPBY_test(mc *mockServer) error {
|
|
|
|
jagged := `{
|
|
|
|
"type":"Polygon",
|
|
|
|
"coordinates":[[
|
|
|
|
[-122.47781753540039,37.74655746554895],
|
|
|
|
[-122.48777389526366,37.7355619376922],
|
|
|
|
[-122.4707794189453,37.73271097867418],
|
|
|
|
[-122.46528625488281,37.735969208590504],
|
|
|
|
[-122.45189666748047,37.73922729512254],
|
|
|
|
[-122.4565315246582,37.75008654795525],
|
|
|
|
[-122.46683120727538,37.75307256315459],
|
|
|
|
[-122.47781753540039,37.74655746554895]
|
|
|
|
]]
|
|
|
|
}`
|
|
|
|
|
|
|
|
return mc.DoBatch([][]interface{}{
|
|
|
|
{"SET", "mykey", "point1", "FIELD", "foo", 1, "POINT", 37.73963454585715, -122.4810791015625}, {"OK"},
|
|
|
|
{"SET", "mykey", "point2", "FIELD", "foo", 2, "POINT", 37.75130811419222, -122.47438430786133}, {"OK"},
|
|
|
|
{"SET", "mykey", "point3", "FIELD", "foo", 1, "POINT", 37.74816932695052, -122.47713088989258}, {"OK"},
|
|
|
|
{"SET", "mykey", "point4", "FIELD", "foo", 2, "POINT", 37.74503040657439, -122.47571468353271}, {"OK"},
|
|
|
|
{"SET", "other", "jagged", "OBJECT", jagged}, {"OK"},
|
|
|
|
|
|
|
|
{"WITHIN", "mykey", "IDS", "GET", "other", "jagged"}, {"[0 [point1 point4]]"},
|
|
|
|
{"WITHIN", "mykey", "IDS", "BOUNDS",
|
|
|
|
37.737734023260884, -122.47816085815431, 37.74886496155229, -122.45464324951172,
|
|
|
|
}, {"[0 [point3 point4]]"},
|
|
|
|
{"WITHIN", "mykey", "IDS", "GET", "other", "jagged", "CLIPBY", "BOUNDS",
|
|
|
|
37.737734023260884, -122.47816085815431, 37.74886496155229, -122.45464324951172,
|
|
|
|
}, {"[0 [point4]]"},
|
|
|
|
{"WITHIN", "mykey", "IDS", "BOUNDS",
|
|
|
|
37.74411415606583, -122.48034954071045, 37.7536833241461, -122.47163772583008,
|
|
|
|
}, {"[0 [point2 point3 point4]]"},
|
|
|
|
{"WITHIN", "mykey", "IDS", "GET", "other", "jagged", "CLIPBY", "BOUNDS",
|
|
|
|
37.74411415606583, -122.48034954071045, 37.7536833241461, -122.47163772583008,
|
|
|
|
}, {"[0 [point4]]"},
|
|
|
|
{"WITHIN", "mykey", "IDS", "GET", "other", "jagged",
|
|
|
|
"CLIPBY", "BOUNDS",
|
|
|
|
37.74411415606583, -122.48034954071045, 37.7536833241461, -122.47163772583008,
|
|
|
|
"CLIPBY", "BOUNDS",
|
|
|
|
37.737734023260884, -122.47816085815431, 37.74886496155229, -122.45464324951172,
|
|
|
|
}, {"[0 [point4]]"},
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2018-10-17 04:17:59 +03:00
|
|
|
func keys_INTERSECTS_test(mc *mockServer) error {
|
|
|
|
return mc.DoBatch([][]interface{}{
|
|
|
|
{"SET", "mykey", "point1", "POINT", 37.7335, -122.4412}, {"OK"},
|
|
|
|
{"SET", "mykey", "point2", "POINT", 37.7335, -122.44121}, {"OK"},
|
|
|
|
{"SET", "mykey", "line3", "OBJECT", `{"type":"LineString","coordinates":[[-122.4408378,37.7341129],[-122.4408378,37.733]]}`}, {"OK"},
|
|
|
|
{"SET", "mykey", "poly4", "OBJECT", `{"type":"Polygon","coordinates":[[[-122.4408378,37.7341129],[-122.4408378,37.733],[-122.44,37.733],[-122.44,37.7341129],[-122.4408378,37.7341129]]]}`}, {"OK"},
|
|
|
|
{"SET", "mykey", "multipoly5", "OBJECT", `{"type":"MultiPolygon","coordinates":[[[[-122.4408378,37.7341129],[-122.4408378,37.733],[-122.44,37.733],[-122.44,37.7341129],[-122.4408378,37.7341129]]],[[[-122.44091033935547,37.731981251280985],[-122.43994474411011,37.731981251280985],[-122.43994474411011,37.73254976045042],[-122.44091033935547,37.73254976045042],[-122.44091033935547,37.731981251280985]]]]}`}, {"OK"},
|
|
|
|
{"SET", "mykey", "point6", "POINT", -5, 5}, {"OK"},
|
|
|
|
{"SET", "mykey", "point7", "POINT", 33, 21}, {"OK"},
|
|
|
|
{"SET", "mykey", "poly8", "OBJECT", `{"type":"Polygon","coordinates":[[[-122.4408378,37.7341129],[-122.4408378,37.733],[-122.44,37.733],[-122.44,37.7341129],[-122.4408378,37.7341129]],[[-122.44060993194579,37.73345766902749],[-122.44044363498686,37.73345766902749],[-122.44044363498686,37.73355524732416],[-122.44060993194579,37.73355524732416],[-122.44060993194579,37.73345766902749]],[[-122.44060724973677,37.7336888869566],[-122.4402102828026,37.7336888869566],[-122.4402102828026,37.7339752567853],[-122.44060724973677,37.7339752567853],[-122.44060724973677,37.7336888869566]]]}`}, {"OK"},
|
|
|
|
{"INTERSECTS", "mykey", "IDS", "OBJECT",
|
|
|
|
`{
|
|
|
|
"type": "Polygon",
|
|
|
|
"coordinates": [
|
|
|
|
[
|
|
|
|
[-122.44126439094543,37.732906137107],
|
|
|
|
[-122.43980526924135,37.732906137107],
|
|
|
|
[-122.43980526924135,37.73421283683962],
|
|
|
|
[-122.44126439094543,37.73421283683962],
|
|
|
|
[-122.44126439094543,37.732906137107]
|
|
|
|
]
|
|
|
|
]
|
|
|
|
}`}, {"[0 [point1 point2 line3 poly4 multipoly5 poly8]]"},
|
|
|
|
|
|
|
|
{"SET", "key2", "poly9", "OBJECT", `{"type": "Polygon","coordinates": [[[-122.44037926197052,37.73313523548048],[-122.44017541408539,37.73313523548048],[-122.44017541408539,37.73336857568778],[-122.44037926197052,37.73336857568778],[-122.44037926197052,37.73313523548048]]]}`}, {"OK"},
|
|
|
|
{"SET", "key2", "poly10", "OBJECT", `{"type": "Polygon","coordinates": [[[-122.44040071964262,37.73359343010089],[-122.4402666091919,37.73359343010089],[-122.4402666091919,37.73373767596864],[-122.44040071964262,37.73373767596864],[-122.44040071964262,37.73359343010089]]]}`}, {"OK"},
|
|
|
|
{"SET", "key2", "poly10.1", "OBJECT", `{"type":"Polygon","coordinates":[[[-122.44051605463028,37.73375464605226],[-122.44028002023695,37.73375464605226],[-122.44028002023695,37.733903134117966],[-122.44051605463028,37.733903134117966],[-122.44051605463028,37.73375464605226]]]}`}, {"OK"},
|
|
|
|
{"INTERSECTS", "key2", "IDS", "GET", "mykey", "poly8"}, {"[0 [poly9 poly10]]"},
|
|
|
|
|
|
|
|
{"SET", "key3", "poly11", "OBJECT", `{"type":"Polygon","coordinates":[[[-122.44059920310973,37.733279482240874],[-122.4402344226837,37.733279482240874],[-122.4402344226837,37.73375464605226],[-122.44059920310973,37.73375464605226],[-122.44059920310973,37.733279482240874]]]}`}, {"OK"},
|
|
|
|
{"SET", "key3", "poly12", "OBJECT", `{"type":"Polygon","coordinates":[[[-122.44060993194579,37.73238005667773],[-122.44013786315918,37.73238005667773],[-122.44013786315918,37.73316917591997],[-122.44060993194579,37.73316917591997],[-122.44060993194579,37.73238005667773]]]}`}, {"OK"},
|
|
|
|
{"SET", "key3", "poly12.1", "OBJECT", `{"type":"Polygon","coordinates":[[[-122.44074940681458,37.73270249351328],[-122.44008421897887,37.73270249351328],[-122.44008421897887,37.732872196546936],[-122.44074940681458,37.732872196546936],[-122.44074940681458,37.73270249351328]]]}`}, {"OK"},
|
|
|
|
{"INTERSECTS", "key3", "IDS", "GET", "mykey", "multipoly5"}, {"[0 [poly11 poly12]]"},
|
|
|
|
|
|
|
|
{"SET", "key5", "poly13", "OBJECT", `{"type":"Polygon","coordinates":[[[-122.44073867797852,37.733211601447465],[-122.44011640548705,37.733211601447465],[-122.44011640548705,37.7340516218859],[-122.44073867797852,37.7340516218859],[-122.44073867797852,37.733211601447465]],[[-122.44060993194579,37.73345766902749],[-122.44060993194579,37.73355524732416],[-122.44044363498686,37.73355524732416],[-122.44044363498686,37.73345766902749],[-122.44060993194579,37.73345766902749]],[[-122.44060724973677,37.7336888869566],[-122.44060724973677,37.7339752567853],[-122.4402102828026,37.7339752567853],[-122.4402102828026,37.7336888869566],[-122.44060724973677,37.7336888869566]]]}`}, {"OK"},
|
|
|
|
{"SET", "key5", "poly14", "OBJECT", `{"type":"Polygon","coordinates":[[[-122.44154334068298,37.73179457567642],[-122.43935465812682,37.73179457567642],[-122.43935465812682,37.7343740514423],[-122.44154334068298,37.7343740514423],[-122.44154334068298,37.73179457567642]],[[-122.44104981422423,37.73286371140448],[-122.44104981422423,37.73424677678513],[-122.43990182876587,37.73424677678513],[-122.43990182876587,37.73286371140448],[-122.44104981422423,37.73286371140448]],[[-122.44109272956847,37.731870943026074],[-122.43976235389708,37.731870943026074],[-122.43976235389708,37.7326855231885],[-122.44109272956847,37.7326855231885],[-122.44109272956847,37.731870943026074]]]}`}, {"OK"},
|
2018-10-18 16:28:31 +03:00
|
|
|
{"INTERSECTS", "key5", "IDS", "GET", "mykey", "multipoly5"}, {"[0 [poly13]]"},
|
2018-10-17 04:17:59 +03:00
|
|
|
|
|
|
|
{"SET", "key6", "multipoly5", "OBJECT", `{"type":"MultiPolygon","coordinates":[[[[-122.4408378,37.7341129],[-122.4408378,37.733],[-122.44,37.733],[-122.44,37.7341129],[-122.4408378,37.7341129]]],[[[-122.44091033935547,37.731981251280985],[-122.43994474411011,37.731981251280985],[-122.43994474411011,37.73254976045042],[-122.44091033935547,37.73254976045042],[-122.44091033935547,37.731981251280985]]]]}`}, {"OK"},
|
|
|
|
{"SET", "key6", "poly13", "OBJECT", `{"type":"Polygon","coordinates":[[[-122.44073867797852,37.733211601447465],[-122.44011640548705,37.733211601447465],[-122.44011640548705,37.7340516218859],[-122.44073867797852,37.7340516218859],[-122.44073867797852,37.733211601447465]],[[-122.44060993194579,37.73345766902749],[-122.44060993194579,37.73355524732416],[-122.44044363498686,37.73355524732416],[-122.44044363498686,37.73345766902749],[-122.44060993194579,37.73345766902749]],[[-122.44060724973677,37.7336888869566],[-122.44060724973677,37.7339752567853],[-122.4402102828026,37.7339752567853],[-122.4402102828026,37.7336888869566],[-122.44060724973677,37.7336888869566]]]}`}, {"OK"},
|
|
|
|
{"INTERSECTS", "key6", "IDS", "GET", "key5", "poly14"}, {"[0 []]"},
|
|
|
|
|
|
|
|
{"SET", "key7", "multipoly15", "OBJECT", `{"type":"MultiPolygon","coordinates":[[[[-122.44056701660155,37.7332964524295],[-122.44029879570007,37.7332964524295],[-122.44029879570007,37.73375464605226],[-122.44056701660155,37.73375464605226],[-122.44056701660155,37.7332964524295]]],[[[-122.44067430496216,37.73217641163713],[-122.44034171104431,37.73217641163713],[-122.44034171104431,37.732430967850384],[-122.44067430496216,37.732430967850384],[-122.44067430496216,37.73217641163713]]]]}`}, {"OK"},
|
|
|
|
{"SET", "key7", "multipoly16", "OBJECT", `{"type":"MultiPolygon","coordinates":[[[[-122.44056701660155,37.7332964524295],[-122.44029879570007,37.7332964524295],[-122.44029879570007,37.73375464605226],[-122.44056701660155,37.73375464605226],[-122.44056701660155,37.7332964524295]]],[[[-122.4402666091919,37.733109780140644],[-122.4401271343231,37.733109780140644],[-122.4401271343231,37.73323705675229],[-122.4402666091919,37.73323705675229],[-122.4402666091919,37.733109780140644]]]]}`}, {"OK"},
|
|
|
|
{"SET", "key7", "multipoly17", "OBJECT", `{"type":"MultiPolygon","coordinates":[[[[-122.44056701660155,37.7332964524295],[-122.44029879570007,37.7332964524295],[-122.44029879570007,37.73375464605226],[-122.44056701660155,37.73375464605226],[-122.44056701660155,37.7332964524295]]],[[[-122.44032025337218,37.73267703802467],[-122.44013786315918,37.73267703802467],[-122.44013786315918,37.732838255971316],[-122.44032025337218,37.732838255971316],[-122.44032025337218,37.73267703802467]]]]}`}, {"OK"},
|
|
|
|
{"SET", "key7", "multipoly17.1", "OBJECT", `{"type":"MultiPolygon","coordinates":[[[[-122.4407172203064,37.73270249351328],[-122.44049191474916,37.73270249351328],[-122.44049191474916,37.73286371140448],[-122.4407172203064,37.73286371140448],[-122.4407172203064,37.73270249351328]]],[[[-122.44032025337218,37.73267703802467],[-122.44013786315918,37.73267703802467],[-122.44013786315918,37.732838255971316],[-122.44032025337218,37.732838255971316],[-122.44032025337218,37.73267703802467]]]]}`}, {"OK"},
|
|
|
|
{"INTERSECTS", "key7", "IDS", "GET", "mykey", "multipoly5"}, {"[0 [multipoly15 multipoly16 multipoly17]]"},
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2020-03-20 08:09:24 +03:00
|
|
|
func keys_INTERSECTS_CLIPBY_test(mc *mockServer) error {
|
|
|
|
jagged := `{
|
|
|
|
"type":"Polygon",
|
|
|
|
"coordinates":[[
|
|
|
|
[-122.47781753540039,37.74655746554895],
|
|
|
|
[-122.48777389526366,37.7355619376922],
|
|
|
|
[-122.4707794189453,37.73271097867418],
|
|
|
|
[-122.46528625488281,37.735969208590504],
|
|
|
|
[-122.45189666748047,37.73922729512254],
|
|
|
|
[-122.4565315246582,37.75008654795525],
|
|
|
|
[-122.46683120727538,37.75307256315459],
|
|
|
|
[-122.47781753540039,37.74655746554895]
|
|
|
|
]]
|
|
|
|
}`
|
|
|
|
|
|
|
|
return mc.DoBatch([][]interface{}{
|
|
|
|
{"SET", "mykey", "point1", "FIELD", "foo", 1, "POINT", 37.73963454585715, -122.4810791015625}, {"OK"},
|
|
|
|
{"SET", "mykey", "point2", "FIELD", "foo", 2, "POINT", 37.75130811419222, -122.47438430786133}, {"OK"},
|
|
|
|
{"SET", "mykey", "point3", "FIELD", "foo", 1, "POINT", 37.74816932695052, -122.47713088989258}, {"OK"},
|
|
|
|
{"SET", "mykey", "point4", "FIELD", "foo", 2, "POINT", 37.74503040657439, -122.47571468353271}, {"OK"},
|
|
|
|
{"SET", "other", "jagged", "OBJECT", jagged}, {"OK"},
|
|
|
|
|
|
|
|
{"INTERSECTS", "mykey", "IDS", "GET", "other", "jagged"}, {"[0 [point1 point4]]"},
|
|
|
|
{"INTERSECTS", "mykey", "IDS", "BOUNDS",
|
|
|
|
37.737734023260884, -122.47816085815431, 37.74886496155229, -122.45464324951172,
|
|
|
|
}, {"[0 [point3 point4]]"},
|
|
|
|
{"INTERSECTS", "mykey", "IDS", "GET", "other", "jagged", "CLIPBY", "BOUNDS",
|
|
|
|
37.737734023260884, -122.47816085815431, 37.74886496155229, -122.45464324951172,
|
|
|
|
}, {"[0 [point4]]"},
|
|
|
|
{"INTERSECTS", "mykey", "IDS", "BOUNDS",
|
|
|
|
37.74411415606583, -122.48034954071045, 37.7536833241461, -122.47163772583008,
|
|
|
|
}, {"[0 [point2 point3 point4]]"},
|
|
|
|
{"INTERSECTS", "mykey", "IDS", "GET", "other", "jagged", "CLIPBY", "BOUNDS",
|
|
|
|
37.74411415606583, -122.48034954071045, 37.7536833241461, -122.47163772583008,
|
|
|
|
}, {"[0 [point4]]"},
|
|
|
|
{"INTERSECTS", "mykey", "IDS", "GET", "other", "jagged",
|
|
|
|
"CLIPBY", "BOUNDS",
|
|
|
|
37.74411415606583, -122.48034954071045, 37.7536833241461, -122.47163772583008,
|
|
|
|
"CLIPBY", "BOUNDS",
|
|
|
|
37.737734023260884, -122.47816085815431, 37.74886496155229, -122.45464324951172,
|
|
|
|
}, {"[0 [point4]]"},
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2018-11-01 08:00:09 +03:00
|
|
|
func keys_INTERSECTS_CURSOR_test(mc *mockServer) error {
|
|
|
|
testArea := `{
|
|
|
|
"type": "Polygon",
|
|
|
|
"coordinates": [
|
|
|
|
[
|
|
|
|
[-122.44126439094543,37.732906137107],
|
|
|
|
[-122.43980526924135,37.732906137107],
|
|
|
|
[-122.43980526924135,37.73421283683962],
|
|
|
|
[-122.44126439094543,37.73421283683962],
|
|
|
|
[-122.44126439094543,37.732906137107]
|
|
|
|
]
|
|
|
|
]
|
|
|
|
}`
|
|
|
|
return mc.DoBatch([][]interface{}{
|
|
|
|
{"SET", "mykey", "point1", "FIELD", "foo", 1, "POINT", 37.7335, -122.4412}, {"OK"},
|
|
|
|
{"SET", "mykey", "point2", "FIELD", "foo", 2, "POINT", 37.7335, -122.44121}, {"OK"},
|
|
|
|
{"SET", "mykey", "line3", "FIELD", "foo", 3, "OBJECT", `{"type":"LineString","coordinates":[[-122.4408378,37.7341129],[-122.4408378,37.733]]}`}, {"OK"},
|
|
|
|
{"SET", "mykey", "poly4", "FIELD", "foo", 4, "OBJECT", `{"type":"Polygon","coordinates":[[[-122.4408378,37.7341129],[-122.4408378,37.733],[-122.44,37.733],[-122.44,37.7341129],[-122.4408378,37.7341129]]]}`}, {"OK"},
|
|
|
|
{"SET", "mykey", "multipoly5", "FIELD", "foo", 5, "OBJECT", `{"type":"MultiPolygon","coordinates":[[[[-122.4408378,37.7341129],[-122.4408378,37.733],[-122.44,37.733],[-122.44,37.7341129],[-122.4408378,37.7341129]]],[[[-122.44091033935547,37.731981251280985],[-122.43994474411011,37.731981251280985],[-122.43994474411011,37.73254976045042],[-122.44091033935547,37.73254976045042],[-122.44091033935547,37.731981251280985]]]]}`}, {"OK"},
|
|
|
|
{"SET", "mykey", "point6", "FIELD", "foo", 6, "POINT", -5, 5}, {"OK"},
|
|
|
|
{"SET", "mykey", "point7", "FIELD", "foo", 7, "POINT", 33, 21}, {"OK"},
|
|
|
|
{"SET", "mykey", "poly8", "FIELD", "foo", 8, "OBJECT", `{"type":"Polygon","coordinates":[[[-122.4408378,37.7341129],[-122.4408378,37.733],[-122.44,37.733],[-122.44,37.7341129],[-122.4408378,37.7341129]],[[-122.44060993194579,37.73345766902749],[-122.44044363498686,37.73345766902749],[-122.44044363498686,37.73355524732416],[-122.44060993194579,37.73355524732416],[-122.44060993194579,37.73345766902749]],[[-122.44060724973677,37.7336888869566],[-122.4402102828026,37.7336888869566],[-122.4402102828026,37.7339752567853],[-122.44060724973677,37.7339752567853],[-122.44060724973677,37.7336888869566]]]}`}, {"OK"},
|
|
|
|
{"SET", "mykey", "point9", "FIELD", "foo", 9, "POINT", 37.7335, -122.4412}, {"OK"},
|
|
|
|
{"INTERSECTS", "mykey", "LIMIT", 3, "IDS", "OBJECT", testArea}, {
|
|
|
|
"[3 [point1 point2 line3]]"},
|
|
|
|
{"INTERSECTS", "mykey", "CURSOR", 3, "LIMIT", 3, "IDS", "OBJECT", testArea}, {
|
|
|
|
"[6 [poly4 multipoly5 poly8]]"},
|
|
|
|
{"INTERSECTS", "mykey", "WHERE", "foo", 3, 5, "IDS", "OBJECT", testArea}, {
|
|
|
|
"[0 [line3 poly4 multipoly5]]"},
|
|
|
|
{"INTERSECTS", "mykey", "LIMIT", 1, "WHERE", "foo", 3, 5, "IDS", "OBJECT", testArea}, {
|
|
|
|
"[3 [line3]]"},
|
|
|
|
{"INTERSECTS", "mykey", "CURSOR", 3, "LIMIT", 1, "WHERE", "foo", 8, 9, "IDS", "OBJECT", testArea}, {
|
|
|
|
"[6 [poly8]]"},
|
|
|
|
{"INTERSECTS", "mykey", "CURSOR", 6, "LIMIT", 1, "WHERE", "foo", 8, 9, "IDS", "OBJECT", testArea}, {
|
|
|
|
"[7 [point9]]"},
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2018-05-04 21:42:35 +03:00
|
|
|
func keys_WITHIN_CIRCLE_test(mc *mockServer) error {
|
|
|
|
return mc.DoBatch([][]interface{}{
|
|
|
|
{"SET", "mykey", "1", "POINT", 37.7335, -122.4412}, {"OK"},
|
|
|
|
{"SET", "mykey", "2", "POINT", 37.7335, -122.44121}, {"OK"},
|
|
|
|
{"SET", "mykey", "3", "OBJECT", `{"type":"LineString","coordinates":[[-122.4408378,37.7341129],[-122.4408378,37.733]]}`}, {"OK"},
|
|
|
|
{"SET", "mykey", "4", "OBJECT", `{"type":"Polygon","coordinates":[[[-122.4408378,37.7341129],[-122.4408378,37.733],[-122.44,37.733],[-122.44,37.7341129],[-122.4408378,37.7341129]]]}`}, {"OK"},
|
|
|
|
{"SET", "mykey", "5", "OBJECT", `{"type":"MultiPolygon","coordinates":[[[[-122.4408378,37.7341129],[-122.4408378,37.733],[-122.44,37.733],[-122.44,37.7341129],[-122.4408378,37.7341129]]]]}`}, {"OK"},
|
|
|
|
{"SET", "mykey", "6", "POINT", -5, 5}, {"OK"},
|
|
|
|
{"SET", "mykey", "7", "POINT", 33, 21}, {"OK"},
|
|
|
|
{"WITHIN", "mykey", "IDS", "CIRCLE", 37.7335, -122.4412, 1000}, {
|
|
|
|
"[0 [1 2 3 4 5]]"},
|
|
|
|
{"WITHIN", "mykey", "IDS", "CIRCLE", 37.7335, -122.4412, 10}, {
|
|
|
|
"[0 [1 2]]"},
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2018-05-04 23:45:51 +03:00
|
|
|
func keys_INTERSECTS_CIRCLE_test(mc *mockServer) error {
|
2018-05-04 21:42:35 +03:00
|
|
|
return mc.DoBatch([][]interface{}{
|
|
|
|
{"SET", "mykey", "1", "POINT", 37.7335, -122.4412}, {"OK"},
|
|
|
|
{"SET", "mykey", "2", "POINT", 37.7335, -122.44121}, {"OK"},
|
|
|
|
{"SET", "mykey", "3", "OBJECT", `{"type":"LineString","coordinates":[[-122.4408378,37.7341129],[-122.4408378,37.733]]}`}, {"OK"},
|
|
|
|
{"SET", "mykey", "4", "OBJECT", `{"type":"Polygon","coordinates":[[[-122.4408378,37.7341129],[-122.4408378,37.733],[-122.44,37.733],[-122.44,37.7341129],[-122.4408378,37.7341129]]]}`}, {"OK"},
|
|
|
|
{"SET", "mykey", "5", "OBJECT", `{"type":"MultiPolygon","coordinates":[[[[-122.4408378,37.7341129],[-122.4408378,37.733],[-122.44,37.733],[-122.44,37.7341129],[-122.4408378,37.7341129]]]]}`}, {"OK"},
|
|
|
|
{"SET", "mykey", "6", "POINT", -5, 5}, {"OK"},
|
|
|
|
{"SET", "mykey", "7", "POINT", 33, 21}, {"OK"},
|
|
|
|
{"INTERSECTS", "mykey", "IDS", "CIRCLE", 37.7335, -122.4412, 70}, {
|
|
|
|
"[0 [1 2 3 4 5]]"},
|
|
|
|
{"INTERSECTS", "mykey", "IDS", "CIRCLE", 37.7335, -122.4412, 10}, {
|
|
|
|
"[0 [1 2]]"},
|
|
|
|
})
|
|
|
|
}
|
2018-11-01 08:00:09 +03:00
|
|
|
|
|
|
|
func keys_SCAN_CURSOR_test(mc *mockServer) error {
|
|
|
|
return mc.DoBatch([][]interface{}{
|
|
|
|
{"SET", "mykey", "id1", "FIELD", "foo", 1, "STRING", "bar1"}, {"OK"},
|
|
|
|
{"SET", "mykey", "id2", "FIELD", "foo", 2, "STRING", "bar2"}, {"OK"},
|
|
|
|
{"SET", "mykey", "id3", "FIELD", "foo", 3, "STRING", "bar3"}, {"OK"},
|
|
|
|
{"SET", "mykey", "id4", "FIELD", "foo", 4, "STRING", "bar4"}, {"OK"},
|
|
|
|
{"SET", "mykey", "id5", "FIELD", "foo", 5, "STRING", "bar5"}, {"OK"},
|
|
|
|
{"SET", "mykey", "id6", "FIELD", "foo", 6, "STRING", "bar6"}, {"OK"},
|
|
|
|
{"SET", "mykey", "id7", "FIELD", "foo", 7, "STRING", "bar7"}, {"OK"},
|
|
|
|
{"SET", "mykey", "id8", "FIELD", "foo", 8, "STRING", "bar8"}, {"OK"},
|
|
|
|
{"SET", "mykey", "id9", "FIELD", "foo", 9, "STRING", "bar9"}, {"OK"},
|
|
|
|
{"SCAN", "mykey", "LIMIT", 3, "IDS"}, {"[3 [id1 id2 id3]]"},
|
|
|
|
{"SCAN", "mykey", "CURSOR", 3, "LIMIT", 3, "IDS"}, {"[6 [id4 id5 id6]]"},
|
|
|
|
{"SCAN", "mykey", "WHERE", "foo", 3, 5, "IDS"}, {"[0 [id3 id4 id5]]"},
|
|
|
|
{"SCAN", "mykey", "LIMIT", 1, "WHERE", "foo", 3, 5, "IDS"}, {"[3 [id3]]"},
|
|
|
|
{"SCAN", "mykey", "CURSOR", 3, "LIMIT", 1, "WHERE", "foo", 8, 9, "IDS"}, {
|
|
|
|
"[8 [id8]]"},
|
|
|
|
{"SCAN", "mykey", "CURSOR", 6, "LIMIT", 1, "WHERE", "foo", 8, 9, "IDS"}, {
|
|
|
|
"[8 [id8]]"},
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func keys_SEARCH_CURSOR_test(mc *mockServer) error {
|
|
|
|
return mc.DoBatch([][]interface{}{
|
|
|
|
{"SET", "mykey", "id1", "FIELD", "foo", 1, "STRING", "bar1"}, {"OK"},
|
|
|
|
{"SET", "mykey", "id2", "FIELD", "foo", 2, "STRING", "bar2"}, {"OK"},
|
|
|
|
{"SET", "mykey", "id3", "FIELD", "foo", 3, "STRING", "bar3"}, {"OK"},
|
|
|
|
{"SET", "mykey", "id4", "FIELD", "foo", 4, "STRING", "bar4"}, {"OK"},
|
|
|
|
{"SET", "mykey", "id5", "FIELD", "foo", 5, "STRING", "bar5"}, {"OK"},
|
|
|
|
{"SET", "mykey", "id6", "FIELD", "foo", 6, "STRING", "bar6"}, {"OK"},
|
|
|
|
{"SET", "mykey", "id7", "FIELD", "foo", 7, "STRING", "bar7"}, {"OK"},
|
|
|
|
{"SET", "mykey", "id8", "FIELD", "foo", 8, "STRING", "bar8"}, {"OK"},
|
|
|
|
{"SET", "mykey", "id9", "FIELD", "foo", 9, "STRING", "bar9"}, {"OK"},
|
|
|
|
{"SEARCH", "mykey", "LIMIT", 3, "IDS"}, {"[3 [id1 id2 id3]]"},
|
|
|
|
{"SEARCH", "mykey", "CURSOR", 3, "LIMIT", 3, "IDS"}, {"[6 [id4 id5 id6]]"},
|
|
|
|
{"SEARCH", "mykey", "WHERE", "foo", 3, 5, "IDS"}, {"[0 [id3 id4 id5]]"},
|
|
|
|
{"SEARCH", "mykey", "LIMIT", 1, "WHERE", "foo", 3, 5, "IDS"}, {"[3 [id3]]"},
|
|
|
|
{"SEARCH", "mykey", "CURSOR", 3, "LIMIT", 1, "WHERE", "foo", 8, 9, "IDS"}, {
|
|
|
|
"[8 [id8]]"},
|
|
|
|
{"SEARCH", "mykey", "CURSOR", 6, "LIMIT", 1, "WHERE", "foo", 8, 9, "IDS"}, {
|
|
|
|
"[8 [id8]]"},
|
|
|
|
{"SEARCH", "mykey", "LIMIT", 3, "DESC", "IDS"}, {"[3 [id9 id8 id7]]"},
|
|
|
|
})
|
|
|
|
}
|
2019-03-01 16:55:26 +03:00
|
|
|
|
|
|
|
func keys_MATCH_test(mc *mockServer) error {
|
|
|
|
return mc.DoBatch([][]interface{}{
|
|
|
|
{"SET", "fleet", "truck1", "POINT", "33.0001", "-112.0001"}, {"OK"},
|
|
|
|
{"SET", "fleet", "truck2", "POINT", "33.0002", "-112.0002"}, {"OK"},
|
|
|
|
{"SET", "fleet", "luck1", "POINT", "33.0003", "-112.0003"}, {"OK"},
|
|
|
|
{"SET", "fleet", "luck2", "POINT", "33.0004", "-112.0004"}, {"OK"},
|
|
|
|
|
|
|
|
{"SCAN", "fleet", "IDS"}, {"[0 [luck1 luck2 truck1 truck2]]"},
|
|
|
|
{"SCAN", "fleet", "MATCH", "*", "IDS"}, {"[0 [luck1 luck2 truck1 truck2]]"},
|
|
|
|
{"SCAN", "fleet", "MATCH", "truck*", "IDS"}, {"[0 [truck1 truck2]]"},
|
|
|
|
{"SCAN", "fleet", "MATCH", "luck*", "IDS"}, {"[0 [luck1 luck2]]"},
|
|
|
|
{"SCAN", "fleet", "MATCH", "*2", "IDS"}, {"[0 [luck2 truck2]]"},
|
|
|
|
{"SCAN", "fleet", "MATCH", "*2*", "IDS"}, {"[0 [luck2 truck2]]"},
|
|
|
|
{"SCAN", "fleet", "MATCH", "*u*", "IDS"}, {"[0 [luck1 luck2 truck1 truck2]]"},
|
|
|
|
|
|
|
|
{"NEARBY", "fleet", "IDS", "POINT", 33.00005, -112.00005, 100000}, {
|
|
|
|
match("[0 [luck1 luck2 truck1 truck2]]"),
|
|
|
|
},
|
|
|
|
{"NEARBY", "fleet", "MATCH", "*", "IDS", "POINT", 33.00005, -112.00005, 100000}, {
|
|
|
|
match("[0 [luck1 luck2 truck1 truck2]]"),
|
|
|
|
},
|
|
|
|
{"NEARBY", "fleet", "MATCH", "t*", "IDS", "POINT", 33.00005, -112.00005, 100000}, {
|
|
|
|
match("[0 [truck1 truck2]]"),
|
|
|
|
},
|
|
|
|
{"NEARBY", "fleet", "MATCH", "t*2", "IDS", "POINT", 33.00005, -112.00005, 100000}, {
|
|
|
|
match("[0 [truck2]]"),
|
|
|
|
},
|
|
|
|
{"NEARBY", "fleet", "MATCH", "*2", "IDS", "POINT", 33.00005, -112.00005, 100000}, {
|
|
|
|
match("[0 [luck2 truck2]]"),
|
|
|
|
},
|
|
|
|
|
|
|
|
{"INTERSECTS", "fleet", "IDS", "BOUNDS", 33, -113, 34, -112}, {
|
|
|
|
match("[0 [luck1 luck2 truck1 truck2]]"),
|
|
|
|
},
|
|
|
|
{"INTERSECTS", "fleet", "MATCH", "*", "IDS", "BOUNDS", 33, -113, 34, -112}, {
|
|
|
|
match("[0 [luck1 luck2 truck1 truck2]]"),
|
|
|
|
},
|
|
|
|
{"INTERSECTS", "fleet", "MATCH", "t*", "IDS", "BOUNDS", 33, -113, 34, -112}, {
|
|
|
|
match("[0 [truck1 truck2]]"),
|
|
|
|
},
|
|
|
|
{"INTERSECTS", "fleet", "MATCH", "t*2", "IDS", "BOUNDS", 33, -113, 34, -112}, {
|
|
|
|
match("[0 [truck2]]"),
|
|
|
|
},
|
|
|
|
{"INTERSECTS", "fleet", "MATCH", "*2", "IDS", "BOUNDS", 33, -113, 34, -112}, {
|
|
|
|
match("[0 [luck2 truck2]]"),
|
|
|
|
},
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2019-05-28 21:44:39 +03:00
|
|
|
func keys_FIELDS_search_test(mc *mockServer) error {
|
|
|
|
return mc.DoBatch([][]interface{}{
|
|
|
|
{"SET", "mykey", "1", "FIELD", "field1", 10, "FIELD", "field2", 11 /* field3 undefined */, "OBJECT", `{"type":"Point","coordinates":[-112.2791,33.5220]}`}, {"OK"},
|
|
|
|
{"SET", "mykey", "2", "FIELD", "field1", 20, "FIELD", "field2", 10 /* field3 undefined */, "OBJECT", `{"type":"Point","coordinates":[-112.2793,33.5222]}`}, {"OK"},
|
|
|
|
{"SET", "mykey", "3", "FIELD", "field1", 30, "FIELD", "field2", 13 /* field3 undefined */, "OBJECT", `{"type":"Point","coordinates":[-112.2795,33.5224]}`}, {"OK"},
|
|
|
|
{"SET", "mykey", "4", "FIELD", "field1", 40, "FIELD", "field2", 14 /* field3 undefined */, "OBJECT", `{"type":"Point","coordinates":[-112.2797,33.5226]}`}, {"OK"},
|
|
|
|
{"SET", "mykey", "5" /* field1 undefined */, "FIELD", "field2", 15, "FIELD", "field3", 28, "OBJECT", `{"type":"Point","coordinates":[-112.2799,33.5228]}`}, {"OK"},
|
|
|
|
{"SET", "mykey", "6" /* field1 & field2 undefined */, "FIELD", "field3", 29, "OBJECT", `{"type":"Point","coordinates":[-112.2801,33.5230]}`}, {"OK"},
|
|
|
|
{"SET", "mykey", "7" /* field1, field2, & field3 undefined */, "OBJECT", `{"type":"Point","coordinates":[-112.2803,33.5232]}`}, {"OK"},
|
2019-06-04 20:43:32 +03:00
|
|
|
|
|
|
|
// test RESP output
|
|
|
|
{"NEARBY", "mykey", "WHERE", "field2", 11, "+inf", "POINT", 33.462, -112.268, 60000}, {
|
|
|
|
`[0 [` +
|
|
|
|
`[1 {"type":"Point","coordinates":[-112.2791,33.522]} [field1 10 field2 11]] ` +
|
|
|
|
`[3 {"type":"Point","coordinates":[-112.2795,33.5224]} [field1 30 field2 13]] ` +
|
|
|
|
`[4 {"type":"Point","coordinates":[-112.2797,33.5226]} [field1 40 field2 14]] ` +
|
|
|
|
`[5 {"type":"Point","coordinates":[-112.2799,33.5228]} [field2 15 field3 28]]]]`},
|
|
|
|
{"NEARBY", "mykey", "WHERE", "field2", 0, 2, "POINT", 33.462, -112.268, 60000}, {
|
|
|
|
`[0 [` +
|
|
|
|
`[6 {"type":"Point","coordinates":[-112.2801,33.523]} [field3 29]] ` +
|
|
|
|
`[7 {"type":"Point","coordinates":[-112.2803,33.5232]}]]]`},
|
|
|
|
|
|
|
|
{"WITHIN", "mykey", "WHERE", "field2", 11, "+inf", "CIRCLE", 33.462, -112.268, 60000}, {
|
|
|
|
`[0 [` +
|
|
|
|
`[1 {"type":"Point","coordinates":[-112.2791,33.522]} [field1 10 field2 11]] ` +
|
|
|
|
`[3 {"type":"Point","coordinates":[-112.2795,33.5224]} [field1 30 field2 13]] ` +
|
|
|
|
`[4 {"type":"Point","coordinates":[-112.2797,33.5226]} [field1 40 field2 14]] ` +
|
|
|
|
`[5 {"type":"Point","coordinates":[-112.2799,33.5228]} [field2 15 field3 28]]]]`},
|
|
|
|
{"WITHIN", "mykey", "WHERE", "field2", 0, 2, "CIRCLE", 33.462, -112.268, 60000}, {
|
|
|
|
`[0 [` +
|
|
|
|
`[6 {"type":"Point","coordinates":[-112.2801,33.523]} [field3 29]] ` +
|
|
|
|
`[7 {"type":"Point","coordinates":[-112.2803,33.5232]}]]]`},
|
|
|
|
|
|
|
|
// test JSON output
|
2019-05-28 21:44:39 +03:00
|
|
|
{"OUTPUT", "json"}, {`{"ok":true}`},
|
|
|
|
{"NEARBY", "mykey", "WHERE", "field2", 11, "+inf", "POINT", 33.462, -112.268, 60000}, {
|
|
|
|
`{"ok":true,"fields":["field1","field2","field3"],"objects":[` +
|
|
|
|
`{"id":"1","object":{"type":"Point","coordinates":[-112.2791,33.522]},"fields":[10,11,0]},` +
|
|
|
|
`{"id":"3","object":{"type":"Point","coordinates":[-112.2795,33.5224]},"fields":[30,13,0]},` +
|
|
|
|
`{"id":"4","object":{"type":"Point","coordinates":[-112.2797,33.5226]},"fields":[40,14,0]},` +
|
|
|
|
`{"id":"5","object":{"type":"Point","coordinates":[-112.2799,33.5228]},"fields":[0,15,28]}` +
|
|
|
|
`],"count":4,"cursor":0}`},
|
|
|
|
{"NEARBY", "mykey", "WHERE", "field2", 0, 2, "POINT", 33.462, -112.268, 60000}, {
|
|
|
|
`{"ok":true,"fields":["field1","field2","field3"],"objects":[` +
|
|
|
|
`{"id":"6","object":{"type":"Point","coordinates":[-112.2801,33.523]},"fields":[0,0,29]},` +
|
|
|
|
`{"id":"7","object":{"type":"Point","coordinates":[-112.2803,33.5232]},"fields":[0,0,0]}` +
|
|
|
|
`],"count":2,"cursor":0}`},
|
|
|
|
|
|
|
|
{"WITHIN", "mykey", "WHERE", "field2", 11, "+inf", "CIRCLE", 33.462, -112.268, 60000}, {
|
|
|
|
`{"ok":true,"fields":["field1","field2","field3"],"objects":[` +
|
|
|
|
`{"id":"1","object":{"type":"Point","coordinates":[-112.2791,33.522]},"fields":[10,11,0]},` +
|
|
|
|
`{"id":"3","object":{"type":"Point","coordinates":[-112.2795,33.5224]},"fields":[30,13,0]},` +
|
|
|
|
`{"id":"4","object":{"type":"Point","coordinates":[-112.2797,33.5226]},"fields":[40,14,0]},` +
|
|
|
|
`{"id":"5","object":{"type":"Point","coordinates":[-112.2799,33.5228]},"fields":[0,15,28]}` +
|
|
|
|
`],"count":4,"cursor":0}`},
|
|
|
|
{"WITHIN", "mykey", "WHERE", "field2", 0, 2, "CIRCLE", 33.462, -112.268, 60000}, {
|
|
|
|
`{"ok":true,"fields":["field1","field2","field3"],"objects":[` +
|
|
|
|
`{"id":"6","object":{"type":"Point","coordinates":[-112.2801,33.523]},"fields":[0,0,29]},` +
|
|
|
|
`{"id":"7","object":{"type":"Point","coordinates":[-112.2803,33.5232]},"fields":[0,0,0]}` +
|
|
|
|
`],"count":2,"cursor":0}`},
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2019-03-01 16:55:26 +03:00
|
|
|
// match sorts the response and compares to the expected input
|
|
|
|
func match(expectIn string) func(org, v interface{}) (resp, expect interface{}) {
|
|
|
|
return func(v, org interface{}) (resp, expect interface{}) {
|
|
|
|
sort.Slice(org.([]interface{})[1], func(i, j int) bool {
|
|
|
|
return org.([]interface{})[1].([]interface{})[i].(string) <
|
|
|
|
org.([]interface{})[1].([]interface{})[j].(string)
|
|
|
|
})
|
|
|
|
return fmt.Sprintf("%v", org), expectIn
|
|
|
|
}
|
|
|
|
}
|
2020-04-08 21:36:37 +03:00
|
|
|
|
|
|
|
func subBenchSearch(b *testing.B, mc *mockServer) {
|
|
|
|
runBenchStep(b, mc, "KNN", keys_KNN_bench)
|
|
|
|
}
|
|
|
|
|
|
|
|
func keys_KNN_bench(mc *mockServer) error {
|
|
|
|
lat := rand.Float64()*180 - 90
|
|
|
|
lon := rand.Float64()*360 - 180
|
|
|
|
_, err := mc.conn.Do("NEARBY",
|
|
|
|
"mykey",
|
|
|
|
"LIMIT", 50,
|
|
|
|
"DISTANCE",
|
|
|
|
"POINTS",
|
|
|
|
"POINT", lat, lon)
|
|
|
|
return err
|
|
|
|
}
|