Removed submodule maplibre-gl-js (#938)
This commit is contained in:
1
.github/workflows/android-ci-pull.yml
vendored
1
.github/workflows/android-ci-pull.yml
vendored
@@ -18,7 +18,6 @@ on:
|
||||
- "src/**"
|
||||
- "test/**"
|
||||
- "vendor/**"
|
||||
- maplibre-gl-js
|
||||
- ".gitmodules"
|
||||
- "!**/*.md"
|
||||
|
||||
|
||||
1
.github/workflows/android-ci.yml
vendored
1
.github/workflows/android-ci.yml
vendored
@@ -20,7 +20,6 @@ on:
|
||||
- "src/**"
|
||||
- "test/**"
|
||||
- "vendor/**"
|
||||
- maplibre-gl-js
|
||||
- ".gitmodules"
|
||||
- "!**/*.md"
|
||||
|
||||
|
||||
1
.github/workflows/core-build.yml
vendored
1
.github/workflows/core-build.yml
vendored
@@ -10,7 +10,6 @@ on:
|
||||
- "include/**"
|
||||
- "workflows/core-build.yml"
|
||||
- "vendor/**"
|
||||
- maplibre-gl-js
|
||||
- "CMakeLists.txt"
|
||||
|
||||
concurrency:
|
||||
|
||||
1
.github/workflows/ios-ci.yml
vendored
1
.github/workflows/ios-ci.yml
vendored
@@ -21,7 +21,6 @@ on:
|
||||
- "src/**"
|
||||
- "test/**"
|
||||
- "vendor/**"
|
||||
- maplibre-gl-js
|
||||
- ".gitmodules"
|
||||
- "!**/*.md"
|
||||
|
||||
|
||||
2
.github/workflows/macos-ci.yml
vendored
2
.github/workflows/macos-ci.yml
vendored
@@ -21,7 +21,6 @@ on:
|
||||
- "src/**"
|
||||
- "test/**"
|
||||
- "vendor/**"
|
||||
- maplibre-gl-js
|
||||
- ".gitmodules"
|
||||
- "!**/*.md"
|
||||
|
||||
@@ -42,7 +41,6 @@ on:
|
||||
- "src/**"
|
||||
- "test/**"
|
||||
- "vendor/**"
|
||||
- maplibre-gl-js
|
||||
- ".gitmodules"
|
||||
- "!**/*.md"
|
||||
|
||||
|
||||
2
.github/workflows/node-ci.yml
vendored
2
.github/workflows/node-ci.yml
vendored
@@ -25,7 +25,6 @@ on:
|
||||
- "src/**"
|
||||
- "test/**"
|
||||
- "vendor/**"
|
||||
- maplibre-gl-js
|
||||
- ".gitmodules"
|
||||
- "!**/*.md"
|
||||
|
||||
@@ -50,7 +49,6 @@ on:
|
||||
- "src/**"
|
||||
- "test/**"
|
||||
- "vendor/**"
|
||||
- maplibre-gl-js
|
||||
- ".gitmodules"
|
||||
- "!**/*.md"
|
||||
|
||||
|
||||
2
.github/workflows/qt-ci.yml
vendored
2
.github/workflows/qt-ci.yml
vendored
@@ -22,7 +22,6 @@ on:
|
||||
- "src/**"
|
||||
- "test/**"
|
||||
- "vendor/**"
|
||||
- maplibre-gl-js
|
||||
- ".gitmodules"
|
||||
- "!**/*.md"
|
||||
|
||||
@@ -44,7 +43,6 @@ on:
|
||||
- "src/**"
|
||||
- "test/**"
|
||||
- "vendor/**"
|
||||
- maplibre-gl-js
|
||||
- ".gitmodules"
|
||||
- "!**/*.md"
|
||||
|
||||
|
||||
56
.github/workflows/update-gl-js.yml
vendored
56
.github/workflows/update-gl-js.yml
vendored
@@ -1,56 +0,0 @@
|
||||
name: update-gl-js
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
commit:
|
||||
description: 'Commit'
|
||||
required: true
|
||||
default: '49bc4ca45'
|
||||
|
||||
jobs:
|
||||
update-gl-js:
|
||||
runs-on: macos-12
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
submodules: recursive
|
||||
fetch-depth: 0
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 10
|
||||
|
||||
- name: Setup git and create branch
|
||||
run: |
|
||||
git config --global user.email "mail@example.com"
|
||||
git config --global user.name "GitHub Action"
|
||||
git checkout -b update-gl-js-to-${{ github.event.inputs.commit }}
|
||||
|
||||
- name: Checkout MapLibre GL JS
|
||||
working-directory: maplibre-gl-js
|
||||
run: |
|
||||
git checkout ${{ github.event.inputs.commit }}
|
||||
yarn install
|
||||
|
||||
- name: Generate code for main repo
|
||||
run: |
|
||||
npm ci --ignore-scripts
|
||||
node scripts/generate-shaders.js
|
||||
|
||||
- name: Generate code for iOS
|
||||
working-directory: platform/ios
|
||||
run: |
|
||||
npm install --ignore-scripts
|
||||
node platform/darwin/scripts/generate-style-code.js
|
||||
node platform/darwin/scripts/update-examples.js
|
||||
|
||||
- name: Commit and push changes
|
||||
run: |
|
||||
git add -u
|
||||
git commit -m "Update MapLibre GL JS to ${{ github.event.inputs.commit }}"
|
||||
git push --set-upstream origin update-gl-js-to-${{ github.event.inputs.commit }}
|
||||
|
||||
- name: Create pull request
|
||||
run: gh pr create --base main --fill
|
||||
env:
|
||||
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
|
||||
3
.gitmodules
vendored
3
.gitmodules
vendored
@@ -46,9 +46,6 @@
|
||||
[submodule "platform/android/vendor/mapbox-gestures-android"]
|
||||
path = platform/android/vendor/mapbox-gestures-android
|
||||
url = https://github.com/mapbox/mapbox-gestures-android.git
|
||||
[submodule "maplibre-gl-js"]
|
||||
path = maplibre-gl-js
|
||||
url = https://github.com/maplibre/maplibre-gl-js.git
|
||||
[submodule "docs/doxygen/doxygen-awesome-css"]
|
||||
path = docs/doxygen/doxygen-awesome-css
|
||||
url = https://github.com/jothepro/doxygen-awesome-css.git
|
||||
|
||||
@@ -21,14 +21,6 @@ Code and build scripts belonging to platform SDKs are contained in the `platform
|
||||
- `platform/android` - Android SDK, forked from https://github.com/mapbox/mapbox-gl-native-android/commit/4c12fb2c.
|
||||
- `platform/glfw` - [GLFW](https://www.glfw.org) is library to support OpenGL development on the desktop. The code in this directory builds an executable application `mbgl-glfw` for demo/dev/local testing purposes.
|
||||
|
||||
## Maplibre-gl-js
|
||||
|
||||
`maplibre-gl-js` is added to this repostiory as a top-level submodule to provide
|
||||
|
||||
- Test cases and test data, e.g. all rendering test manifests json files under `render-test` load test cases from `maplibre-gl-js/test/*`.
|
||||
- Shader written in GLSL ES.
|
||||
- Style specification
|
||||
|
||||
## Other directories
|
||||
|
||||
- `benchmark` contains the performance tests built using https://github.com/google/benchmark/. The code under this directory builds the `mbgl-benchmark-test` executable to execute the benchmark tests.
|
||||
|
||||
@@ -7,14 +7,13 @@ To check that the output of the rendering is correct, we compare actual rendered
|
||||
The directory sturcture of the render tests looks like:
|
||||
|
||||
```
|
||||
maplibre-gl-js/
|
||||
test/
|
||||
integration/
|
||||
render-tests/
|
||||
<name-of-style-spec-feature>/
|
||||
<name-of-feature-value>/
|
||||
expected.png
|
||||
style.json
|
||||
maetrics/
|
||||
integration/
|
||||
render-tests/
|
||||
<name-of-style-spec-feature>/
|
||||
<name-of-feature-value>/
|
||||
expected.png
|
||||
style.json
|
||||
```
|
||||
|
||||
After the render test run, the folder will also contain an `actual.png` file and a `diff.png` which is the difference between the expected and the actual image. There is a pixel difference threshold value which is used to decide if a render test passed or failed.
|
||||
|
||||
@@ -342,7 +342,7 @@ std::tuple<filesystem::path, std::vector<filesystem::path>, bool, uint32_t> pars
|
||||
exit(2);
|
||||
}
|
||||
|
||||
filesystem::path rootPath {std::string(TEST_RUNNER_ROOT_PATH).append("/maplibre-gl-js/test/integration/expression-tests")};
|
||||
filesystem::path rootPath {std::string(TEST_RUNNER_ROOT_PATH).append("/metrics/integration/expression-tests")};
|
||||
if (!filesystem::exists(rootPath)) {
|
||||
Log::Error(Event::General, "Test path '" + rootPath.string() + "' does not exist.");
|
||||
exit(3);
|
||||
|
||||
Submodule maplibre-gl-js deleted from 9489d7654e
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"base_test_path": "../maplibre-gl-js/test/integration",
|
||||
"base_test_path": "integration",
|
||||
"cache_path": "cache-style.db",
|
||||
"expectation_paths": [
|
||||
"expectations/platform-all"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"base_test_path": "../maplibre-gl-js/test/integration",
|
||||
"base_test_path": "integration",
|
||||
"cache_path": "cache-style.db",
|
||||
"expectation_paths": [
|
||||
"expectations/platform-all",
|
||||
|
||||
157
metrics/integration/README.md
Normal file
157
metrics/integration/README.md
Normal file
@@ -0,0 +1,157 @@
|
||||
These integration tests verify the correctness and consistency of [mapbox-gl-js](https://github.com/mapbox/mapbox-gl-js) and
|
||||
[mapbox-gl-native](https://github.com/mapbox/mapbox-gl-native) rendering.
|
||||
|
||||
## Organization
|
||||
|
||||
Tests are contained in a directory tree, generally organized by [style specification](https://github.com/mapbox/mapbox-gl-style-spec)
|
||||
property: `background-color`, `line-width`, etc., with a second level of directories below that for individual tests. For example, the test for specifying a literal `circle-radius` value lives in [`test/integration/render-tests/circle-radius/literal/`](https://github.com/mapbox/mapbox-gl-js/tree/master/test/integration/render-tests/circle-radius/literal).
|
||||
|
||||
Within a leaf directory is a `style.json` file (e.g. [`circle-radius/literal/style.json`](https://github.com/mapbox/mapbox-gl-js/blob/master/test/integration/render-tests/circle-radius/literal/style.json)), which contains the minimal style needed for the given test case. The style can specify the map size, center, bearing, and pitch, and additional test metadata (e.g. output image dimensions).
|
||||
|
||||
The expected output for a given test case is in `expected.png`, e.g. [`circle-radius/literal/expected.png`](https://github.com/mapbox/mapbox-gl-js/blob/master/test/integration/render-tests/circle-radius/literal/expected.png).
|
||||
|
||||
Supporting files -- glyphs, sprites, and tiles -- live in their own respective subdirectories at the top level. The test
|
||||
harness sets up the environment such that requests for these resources are directed to the correct location.
|
||||
|
||||
The contents of vector tile fixtures can be read using the [`vt2geojson`](https://github.com/mapbox/vt2geojson) tool (see below).
|
||||
|
||||
## Running tests
|
||||
|
||||
To run the entire integration test suite (both render or query tests), from within the `mapbox-gl-js` directory run the command:
|
||||
```
|
||||
yarn run test-suite
|
||||
```
|
||||
|
||||
To run only the render/query tests:
|
||||
|
||||
```
|
||||
yarn run test-render
|
||||
```
|
||||
or
|
||||
```
|
||||
yarn run test-query-node
|
||||
```
|
||||
|
||||
### Running specific tests
|
||||
|
||||
To run a subset of tests or an individual test, you can pass a specific subdirectory to the `test-render` script. For example, to run all the tests for a given property, e.g. `circle-radius`:
|
||||
```
|
||||
$ yarn run test-render circle-radius
|
||||
...
|
||||
* passed circle-radius/antimeridian
|
||||
* passed circle-radius/default
|
||||
* passed circle-radius/function
|
||||
* passed circle-radius/literal
|
||||
* passed circle-radius/property-function
|
||||
* passed circle-radius/zoom-and-property-function
|
||||
6 passed (100.0%)
|
||||
Results at: ./test/integration/render-tests/index.html
|
||||
Done in 2.71s.
|
||||
```
|
||||
Or to run a single test:
|
||||
```
|
||||
$ yarn run test-render circle-radius/literal
|
||||
...
|
||||
* passed circle-radius/literal
|
||||
1 passed (100.0%)
|
||||
Results at: ./test/integration/render-tests/index.html
|
||||
Done in 2.32s.
|
||||
```
|
||||
|
||||
### Viewing test results
|
||||
|
||||
During a test run, the test harness will use GL-JS to create an `actual.png` image from the given `style.json`, and will then use [pixelmatch](https://github.com/mapbox/pixelmatch) to compare that image to `expected.png`, generating a `diff.png` highlighting the mismatching pixels (if any) in red.
|
||||
|
||||
After the test(s) have run, you can view the results graphically by opening the `index.html` file generated by the harness:
|
||||
|
||||
```
|
||||
open ./test/integration/render-tests/index.html
|
||||
```
|
||||
or
|
||||
```
|
||||
open ./test/integration/query-tests/index.html
|
||||
```
|
||||
|
||||
## Running tests in the browser
|
||||
|
||||
Query tests can be run in the browser, the server for serving up the test page and test fixtures starts when you run
|
||||
```
|
||||
yarn run start
|
||||
```
|
||||
OR
|
||||
```
|
||||
yarn run start-debug
|
||||
```
|
||||
|
||||
If you want to run only the test server run:
|
||||
```
|
||||
yarn run watch-query
|
||||
```
|
||||
|
||||
Then open the following url in the browser of your choice to start running the tests.
|
||||
```
|
||||
http://localhost:7357/
|
||||
```
|
||||
|
||||
### Running specific tests
|
||||
|
||||
A filter can be specified by using the `filter` query param in the url. E.g, adding
|
||||
```
|
||||
?filter=circle-pitch
|
||||
```
|
||||
to the end of the url will only run the tests that contain `circle-pitch` in the name.
|
||||
|
||||
### Build Notifications
|
||||
|
||||
The terminal window can be very noisy with both the build and the test servers running in the same session.
|
||||
So the server uses platform notifications to inform when the build has finished. If this behaviour is annoying, it can be disabled by setting the following env-var
|
||||
```
|
||||
DISABLE_BUILD_NOTIFICATIONS=true
|
||||
```
|
||||
|
||||
|
||||
## Writing new tests
|
||||
|
||||
_Note: Expected results are always generated with the **js** implementation. This is merely for consistency and does not
|
||||
imply that in the event of a rendering discrepancy, the js implementation is always correct._
|
||||
|
||||
To add a new render test:
|
||||
1. Create a new directory `test/integration/render-tests/<property-name>/<new-test-name>`
|
||||
|
||||
2. Create a new `style.json` file within that directory, specifying the map to load. Feel free to copy & modify one of the existing `style.json` files from the `render-tests` subdirectories.
|
||||
|
||||
3. Generate an `expected.png` image from the given style by running the new test with the `UPDATE` flag enabled:
|
||||
```
|
||||
$ UPDATE=1 yarn run test-render <property-name>/<new-test-name>
|
||||
```
|
||||
The test will appear to fail, but you'll now see a new `expected.png` in the test directory.
|
||||
|
||||
4. Manually inspect `expected.png` to verify it looks as expected, and optionally run the test again without the update flag (`yarn run test-render <property-name>/<new-test-name>`) to watch it pass (enjoy that dopamine kick!)
|
||||
|
||||
5. Commit the new `style.json` and `expected.png` :rocket:
|
||||
|
||||
|
||||
## Reading Vector Tile Fixtures
|
||||
|
||||
Install `vt2geojson`, a command line utility which turns vector tiles into geojson, and `harp`, a simple file server.
|
||||
|
||||
```
|
||||
npm install -g vt2geojson harp
|
||||
```
|
||||
|
||||
Start a static file server
|
||||
```
|
||||
harp server .
|
||||
```
|
||||
|
||||
Read the contents of an entire vector tile
|
||||
|
||||
```
|
||||
vt2geojson -z 14 -y 8803 -x 5374 http://localhost:9000/tiles/14-8803-5374.mvt
|
||||
```
|
||||
|
||||
Read the contents of a particular layer in a vector tile
|
||||
|
||||
```
|
||||
vt2geojson --layer poi_label -z 14 -y 8803 -x 5374 http://localhost:9000/tiles/14-8803-5374.mvt
|
||||
```
|
||||
123
metrics/integration/custom_layer_implementations.js
Normal file
123
metrics/integration/custom_layer_implementations.js
Normal file
@@ -0,0 +1,123 @@
|
||||
class NullIsland {
|
||||
constructor() {
|
||||
this.id = 'null-island';
|
||||
this.type = 'custom';
|
||||
this.renderingMode = '2d';
|
||||
}
|
||||
|
||||
onAdd(map, gl) {
|
||||
const vertexSource = `
|
||||
uniform mat4 u_matrix;
|
||||
void main() {
|
||||
gl_Position = u_matrix * vec4(0.5, 0.5, 0.0, 1.0);
|
||||
gl_PointSize = 20.0;
|
||||
}`;
|
||||
|
||||
const fragmentSource = `
|
||||
void main() {
|
||||
gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
|
||||
}`;
|
||||
|
||||
const vertexShader = gl.createShader(gl.VERTEX_SHADER);
|
||||
gl.shaderSource(vertexShader, vertexSource);
|
||||
gl.compileShader(vertexShader);
|
||||
const fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
|
||||
gl.shaderSource(fragmentShader, fragmentSource);
|
||||
gl.compileShader(fragmentShader);
|
||||
|
||||
this.program = gl.createProgram();
|
||||
gl.attachShader(this.program, vertexShader);
|
||||
gl.attachShader(this.program, fragmentShader);
|
||||
gl.linkProgram(this.program);
|
||||
}
|
||||
|
||||
render(gl, matrix) {
|
||||
gl.useProgram(this.program);
|
||||
gl.uniformMatrix4fv(gl.getUniformLocation(this.program, "u_matrix"), false, matrix);
|
||||
gl.drawArrays(gl.POINTS, 0, 1);
|
||||
}
|
||||
}
|
||||
|
||||
class Tent3D {
|
||||
constructor() {
|
||||
this.id = 'tent-3d';
|
||||
this.type = 'custom';
|
||||
this.renderingMode = '3d';
|
||||
}
|
||||
|
||||
onAdd(map, gl) {
|
||||
|
||||
const vertexSource = `
|
||||
|
||||
attribute vec3 aPos;
|
||||
uniform mat4 uMatrix;
|
||||
|
||||
void main() {
|
||||
gl_Position = uMatrix * vec4(aPos, 1.0);
|
||||
}
|
||||
`;
|
||||
|
||||
const fragmentSource = `
|
||||
void main() {
|
||||
gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
|
||||
}
|
||||
`;
|
||||
|
||||
const vertexShader = gl.createShader(gl.VERTEX_SHADER);
|
||||
gl.shaderSource(vertexShader, vertexSource);
|
||||
gl.compileShader(vertexShader);
|
||||
const fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
|
||||
gl.shaderSource(fragmentShader, fragmentSource);
|
||||
gl.compileShader(fragmentShader);
|
||||
|
||||
this.program = gl.createProgram();
|
||||
gl.attachShader(this.program, vertexShader);
|
||||
gl.attachShader(this.program, fragmentShader);
|
||||
gl.linkProgram(this.program);
|
||||
gl.validateProgram(this.program);
|
||||
|
||||
this.program.aPos = gl.getAttribLocation(this.program, "aPos");
|
||||
this.program.uMatrix = gl.getUniformLocation(this.program, "uMatrix");
|
||||
|
||||
const x = 0.5 - 0.015;
|
||||
const y = 0.5 - 0.01;
|
||||
const z = 0.01;
|
||||
const d = 0.01;
|
||||
|
||||
const vertexArray = new Float32Array([
|
||||
x, y, 0,
|
||||
x + d, y, 0,
|
||||
x, y + d, z,
|
||||
x + d, y + d, z,
|
||||
x, y + d + d, 0,
|
||||
x + d, y + d + d, 0]);
|
||||
const indexArray = new Uint16Array([
|
||||
0, 1, 2,
|
||||
1, 2, 3,
|
||||
2, 3, 4,
|
||||
3, 4, 5
|
||||
]);
|
||||
|
||||
this.vertexBuffer = gl.createBuffer();
|
||||
gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer);
|
||||
gl.bufferData(gl.ARRAY_BUFFER, vertexArray, gl.STATIC_DRAW);
|
||||
this.indexBuffer = gl.createBuffer();
|
||||
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer);
|
||||
gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, indexArray, gl.STATIC_DRAW);
|
||||
}
|
||||
|
||||
render(gl, matrix) {
|
||||
gl.useProgram(this.program);
|
||||
gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer);
|
||||
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer);
|
||||
gl.enableVertexAttribArray(this.program.a_pos);
|
||||
gl.vertexAttribPointer(this.program.aPos, 3, gl.FLOAT, false, 0, 0);
|
||||
gl.uniformMatrix4fv(this.program.uMatrix, false, matrix);
|
||||
gl.drawElements(gl.TRIANGLES, 12, gl.UNSIGNED_SHORT, 0);
|
||||
}
|
||||
}
|
||||
|
||||
export default {
|
||||
"tent-3d": Tent3D,
|
||||
"null-island": NullIsland
|
||||
};
|
||||
1457
metrics/integration/data/121points.geojson
Normal file
1457
metrics/integration/data/121points.geojson
Normal file
File diff suppressed because it is too large
Load Diff
1
metrics/integration/data/chinese.geojson
Normal file
1
metrics/integration/data/chinese.geojson
Normal file
File diff suppressed because one or more lines are too long
707
metrics/integration/data/feature.geojson
Normal file
707
metrics/integration/data/feature.geojson
Normal file
@@ -0,0 +1,707 @@
|
||||
{
|
||||
"type": "Feature",
|
||||
"geometry": {
|
||||
"type": "LineString",
|
||||
"coordinates": [
|
||||
[
|
||||
-77.066104,
|
||||
38.910203
|
||||
],
|
||||
[
|
||||
-77.066106,
|
||||
38.910321
|
||||
],
|
||||
[
|
||||
-77.066112,
|
||||
38.910758
|
||||
],
|
||||
[
|
||||
-77.065249,
|
||||
38.910775
|
||||
],
|
||||
[
|
||||
-77.065178,
|
||||
38.910793
|
||||
],
|
||||
[
|
||||
-77.065139,
|
||||
38.910804
|
||||
],
|
||||
[
|
||||
-77.064904,
|
||||
38.91036
|
||||
],
|
||||
[
|
||||
-77.064855,
|
||||
38.910268
|
||||
],
|
||||
[
|
||||
-77.064621,
|
||||
38.909825
|
||||
],
|
||||
[
|
||||
-77.06459,
|
||||
38.909766
|
||||
],
|
||||
[
|
||||
-77.064342,
|
||||
38.909298
|
||||
],
|
||||
[
|
||||
-77.064281,
|
||||
38.909182
|
||||
],
|
||||
[
|
||||
-77.064201,
|
||||
38.909226
|
||||
],
|
||||
[
|
||||
-77.064175,
|
||||
38.909235
|
||||
],
|
||||
[
|
||||
-77.064149,
|
||||
38.909241
|
||||
],
|
||||
[
|
||||
-77.064122,
|
||||
38.909244
|
||||
],
|
||||
[
|
||||
-77.06336,
|
||||
38.90926
|
||||
],
|
||||
[
|
||||
-77.061442,
|
||||
38.909288
|
||||
],
|
||||
[
|
||||
-77.060801,
|
||||
38.909297
|
||||
],
|
||||
[
|
||||
-77.059237,
|
||||
38.909315
|
||||
],
|
||||
[
|
||||
-77.058186,
|
||||
38.90933
|
||||
],
|
||||
[
|
||||
-77.057113,
|
||||
38.909343
|
||||
],
|
||||
[
|
||||
-77.055623,
|
||||
38.909368
|
||||
],
|
||||
[
|
||||
-77.054762,
|
||||
38.909377
|
||||
],
|
||||
[
|
||||
-77.053951,
|
||||
38.909389
|
||||
],
|
||||
[
|
||||
-77.053904,
|
||||
38.909393
|
||||
],
|
||||
[
|
||||
-77.053858,
|
||||
38.909399
|
||||
],
|
||||
[
|
||||
-77.053813,
|
||||
38.909408
|
||||
],
|
||||
[
|
||||
-77.052833,
|
||||
38.909635
|
||||
],
|
||||
[
|
||||
-77.052799,
|
||||
38.909642
|
||||
],
|
||||
[
|
||||
-77.052772,
|
||||
38.909645
|
||||
],
|
||||
[
|
||||
-77.052692,
|
||||
38.90965
|
||||
],
|
||||
[
|
||||
-77.052443,
|
||||
38.909649
|
||||
],
|
||||
[
|
||||
-77.05096,
|
||||
38.909639
|
||||
],
|
||||
[
|
||||
-77.050327,
|
||||
38.909634
|
||||
],
|
||||
[
|
||||
-77.049545,
|
||||
38.909631
|
||||
],
|
||||
[
|
||||
-77.049533,
|
||||
38.909635
|
||||
],
|
||||
[
|
||||
-77.049341,
|
||||
38.909635
|
||||
],
|
||||
[
|
||||
-77.048903,
|
||||
38.909635
|
||||
],
|
||||
[
|
||||
-77.048797,
|
||||
38.909634
|
||||
],
|
||||
[
|
||||
-77.04773,
|
||||
38.909639
|
||||
],
|
||||
[
|
||||
-77.046632,
|
||||
38.90964
|
||||
],
|
||||
[
|
||||
-77.045758,
|
||||
38.909641
|
||||
],
|
||||
[
|
||||
-77.044877,
|
||||
38.909643
|
||||
],
|
||||
[
|
||||
-77.044578,
|
||||
38.909641
|
||||
],
|
||||
[
|
||||
-77.044493,
|
||||
38.909635
|
||||
],
|
||||
[
|
||||
-77.04442,
|
||||
38.909626
|
||||
],
|
||||
[
|
||||
-77.044345,
|
||||
38.909608
|
||||
],
|
||||
[
|
||||
-77.044283,
|
||||
38.909578
|
||||
],
|
||||
[
|
||||
-77.044249,
|
||||
38.909541
|
||||
],
|
||||
[
|
||||
-77.044212,
|
||||
38.909496
|
||||
],
|
||||
[
|
||||
-77.044199,
|
||||
38.909458
|
||||
],
|
||||
[
|
||||
-77.044182,
|
||||
38.909421
|
||||
],
|
||||
[
|
||||
-77.044162,
|
||||
38.909385
|
||||
],
|
||||
[
|
||||
-77.04414,
|
||||
38.90935
|
||||
],
|
||||
[
|
||||
-77.044113,
|
||||
38.909313
|
||||
],
|
||||
[
|
||||
-77.044083,
|
||||
38.90928
|
||||
],
|
||||
[
|
||||
-77.044051,
|
||||
38.909247
|
||||
],
|
||||
[
|
||||
-77.044018,
|
||||
38.909165
|
||||
],
|
||||
[
|
||||
-77.044018,
|
||||
38.909117
|
||||
],
|
||||
[
|
||||
-77.044029,
|
||||
38.909071
|
||||
],
|
||||
[
|
||||
-77.044037,
|
||||
38.909038
|
||||
],
|
||||
[
|
||||
-77.044058,
|
||||
38.908981
|
||||
],
|
||||
[
|
||||
-77.043996,
|
||||
38.909021
|
||||
],
|
||||
[
|
||||
-77.043919,
|
||||
38.909052
|
||||
],
|
||||
[
|
||||
-77.043854,
|
||||
38.909067
|
||||
],
|
||||
[
|
||||
-77.043798,
|
||||
38.909073
|
||||
],
|
||||
[
|
||||
-77.043755,
|
||||
38.909075
|
||||
],
|
||||
[
|
||||
-77.043689,
|
||||
38.909056
|
||||
],
|
||||
[
|
||||
-77.043656,
|
||||
38.909048
|
||||
],
|
||||
[
|
||||
-77.04359,
|
||||
38.909036
|
||||
],
|
||||
[
|
||||
-77.043527,
|
||||
38.909028
|
||||
],
|
||||
[
|
||||
-77.043486,
|
||||
38.909026
|
||||
],
|
||||
[
|
||||
-77.043444,
|
||||
38.909025
|
||||
],
|
||||
[
|
||||
-77.043402,
|
||||
38.909026
|
||||
],
|
||||
[
|
||||
-77.043344,
|
||||
38.909029
|
||||
],
|
||||
[
|
||||
-77.043286,
|
||||
38.909037
|
||||
],
|
||||
[
|
||||
-77.043263,
|
||||
38.909041
|
||||
],
|
||||
[
|
||||
-77.04323,
|
||||
38.909047
|
||||
],
|
||||
[
|
||||
-77.043194,
|
||||
38.909056
|
||||
],
|
||||
[
|
||||
-77.043022,
|
||||
38.909118
|
||||
],
|
||||
[
|
||||
-77.042995,
|
||||
38.909132
|
||||
],
|
||||
[
|
||||
-77.04296,
|
||||
38.909151
|
||||
],
|
||||
[
|
||||
-77.042938,
|
||||
38.909165
|
||||
],
|
||||
[
|
||||
-77.042915,
|
||||
38.90918
|
||||
],
|
||||
[
|
||||
-77.042875,
|
||||
38.909209
|
||||
],
|
||||
[
|
||||
-77.04284,
|
||||
38.909239
|
||||
],
|
||||
[
|
||||
-77.042823,
|
||||
38.909255
|
||||
],
|
||||
[
|
||||
-77.042791,
|
||||
38.909288
|
||||
],
|
||||
[
|
||||
-77.042774,
|
||||
38.909307
|
||||
],
|
||||
[
|
||||
-77.042712,
|
||||
38.909315
|
||||
],
|
||||
[
|
||||
-77.042637,
|
||||
38.909322
|
||||
],
|
||||
[
|
||||
-77.042551,
|
||||
38.909317
|
||||
],
|
||||
[
|
||||
-77.042422,
|
||||
38.909299
|
||||
],
|
||||
[
|
||||
-77.041676,
|
||||
38.90903
|
||||
],
|
||||
[
|
||||
-77.039935,
|
||||
38.908425
|
||||
],
|
||||
[
|
||||
-77.038503,
|
||||
38.907925
|
||||
],
|
||||
[
|
||||
-77.037656,
|
||||
38.907632
|
||||
],
|
||||
[
|
||||
-77.037477,
|
||||
38.907534
|
||||
],
|
||||
[
|
||||
-77.037317,
|
||||
38.907438
|
||||
],
|
||||
[
|
||||
-77.037238,
|
||||
38.90739
|
||||
],
|
||||
[
|
||||
-77.037121,
|
||||
38.907315
|
||||
],
|
||||
[
|
||||
-77.036997,
|
||||
38.907233
|
||||
],
|
||||
[
|
||||
-77.036875,
|
||||
38.907137
|
||||
],
|
||||
[
|
||||
-77.036833,
|
||||
38.907094
|
||||
],
|
||||
[
|
||||
-77.036817,
|
||||
38.907081
|
||||
],
|
||||
[
|
||||
-77.036795,
|
||||
38.907068
|
||||
],
|
||||
[
|
||||
-77.036774,
|
||||
38.907058
|
||||
],
|
||||
[
|
||||
-77.036767,
|
||||
38.907052
|
||||
],
|
||||
[
|
||||
-77.036712,
|
||||
38.907034
|
||||
],
|
||||
[
|
||||
-77.03669,
|
||||
38.907028
|
||||
],
|
||||
[
|
||||
-77.036643,
|
||||
38.907022
|
||||
],
|
||||
[
|
||||
-77.03661,
|
||||
38.907021
|
||||
],
|
||||
[
|
||||
-77.03653,
|
||||
38.907021
|
||||
],
|
||||
[
|
||||
-77.036474,
|
||||
38.907021
|
||||
],
|
||||
[
|
||||
-77.03643,
|
||||
38.907025
|
||||
],
|
||||
[
|
||||
-77.03639,
|
||||
38.907033
|
||||
],
|
||||
[
|
||||
-77.036295,
|
||||
38.907058
|
||||
],
|
||||
[
|
||||
-77.036005,
|
||||
38.906995
|
||||
],
|
||||
[
|
||||
-77.035439,
|
||||
38.906869
|
||||
],
|
||||
[
|
||||
-77.035142,
|
||||
38.906757
|
||||
],
|
||||
[
|
||||
-77.035049,
|
||||
38.906725
|
||||
],
|
||||
[
|
||||
-77.0348,
|
||||
38.906641
|
||||
],
|
||||
[
|
||||
-77.034673,
|
||||
38.906594
|
||||
],
|
||||
[
|
||||
-77.034568,
|
||||
38.906558
|
||||
],
|
||||
[
|
||||
-77.034059,
|
||||
38.906382
|
||||
],
|
||||
[
|
||||
-77.033931,
|
||||
38.906338
|
||||
],
|
||||
[
|
||||
-77.032623,
|
||||
38.905883
|
||||
],
|
||||
[
|
||||
-77.03129,
|
||||
38.905426
|
||||
],
|
||||
[
|
||||
-77.030031,
|
||||
38.904982
|
||||
],
|
||||
[
|
||||
-77.029623,
|
||||
38.904835
|
||||
],
|
||||
[
|
||||
-77.028082,
|
||||
38.904304
|
||||
],
|
||||
[
|
||||
-77.027679,
|
||||
38.904167
|
||||
],
|
||||
[
|
||||
-77.02705,
|
||||
38.903949
|
||||
],
|
||||
[
|
||||
-77.026409,
|
||||
38.903729
|
||||
],
|
||||
[
|
||||
-77.025984,
|
||||
38.903579
|
||||
],
|
||||
[
|
||||
-77.024321,
|
||||
38.902997
|
||||
],
|
||||
[
|
||||
-77.024139,
|
||||
38.902954
|
||||
],
|
||||
[
|
||||
-77.023952,
|
||||
38.902954
|
||||
],
|
||||
[
|
||||
-77.023188,
|
||||
38.902956
|
||||
],
|
||||
[
|
||||
-77.022699,
|
||||
38.902958
|
||||
],
|
||||
[
|
||||
-77.021917,
|
||||
38.90296
|
||||
],
|
||||
[
|
||||
-77.021918,
|
||||
38.902902
|
||||
],
|
||||
[
|
||||
-77.021918,
|
||||
38.902521
|
||||
],
|
||||
[
|
||||
-77.019907,
|
||||
38.902521
|
||||
],
|
||||
[
|
||||
-77.018928,
|
||||
38.902521
|
||||
],
|
||||
[
|
||||
-77.016176,
|
||||
38.902519
|
||||
],
|
||||
[
|
||||
-77.015177,
|
||||
38.902518
|
||||
],
|
||||
[
|
||||
-77.013722,
|
||||
38.902514
|
||||
],
|
||||
[
|
||||
-77.012171,
|
||||
38.902516
|
||||
],
|
||||
[
|
||||
-77.011237,
|
||||
38.902516
|
||||
],
|
||||
[
|
||||
-77.009846,
|
||||
38.902515
|
||||
],
|
||||
[
|
||||
-77.009117,
|
||||
38.902514
|
||||
],
|
||||
[
|
||||
-77.009126,
|
||||
38.901346
|
||||
],
|
||||
[
|
||||
-77.00912,
|
||||
38.900203
|
||||
],
|
||||
[
|
||||
-77.009062,
|
||||
38.900203
|
||||
],
|
||||
[
|
||||
-77.008975,
|
||||
38.900203
|
||||
],
|
||||
[
|
||||
-77.008004,
|
||||
38.900198
|
||||
],
|
||||
[
|
||||
-77.00631,
|
||||
38.900193
|
||||
],
|
||||
[
|
||||
-77.005531,
|
||||
38.900197
|
||||
],
|
||||
[
|
||||
-77.002929,
|
||||
38.9002
|
||||
],
|
||||
[
|
||||
-77.002038,
|
||||
38.900203
|
||||
],
|
||||
[
|
||||
-77.001892,
|
||||
38.900203
|
||||
],
|
||||
[
|
||||
-77.000571,
|
||||
38.900205
|
||||
],
|
||||
[
|
||||
-76.999507,
|
||||
38.900204
|
||||
],
|
||||
[
|
||||
-76.998442,
|
||||
38.900204
|
||||
],
|
||||
[
|
||||
-76.998369,
|
||||
38.900204
|
||||
],
|
||||
[
|
||||
-76.996167,
|
||||
38.900205
|
||||
],
|
||||
[
|
||||
-76.994961,
|
||||
38.900203
|
||||
],
|
||||
[
|
||||
-76.994962,
|
||||
38.899748
|
||||
],
|
||||
[
|
||||
-76.994961,
|
||||
38.899626
|
||||
],
|
||||
[
|
||||
-76.994961,
|
||||
38.899367
|
||||
],
|
||||
[
|
||||
-76.994961,
|
||||
38.898908
|
||||
],
|
||||
[
|
||||
-76.994962,
|
||||
38.898447
|
||||
]
|
||||
]
|
||||
},
|
||||
"properties": {
|
||||
"name": "P Street Northwest - Massachusetts Avenue Northwest"
|
||||
}
|
||||
}
|
||||
1
metrics/integration/data/invalid.geojson
Normal file
1
metrics/integration/data/invalid.geojson
Normal file
@@ -0,0 +1 @@
|
||||
42
|
||||
701
metrics/integration/data/linestring.geojson
Normal file
701
metrics/integration/data/linestring.geojson
Normal file
@@ -0,0 +1,701 @@
|
||||
{
|
||||
"type": "LineString",
|
||||
"coordinates": [
|
||||
[
|
||||
-77.066104,
|
||||
38.910203
|
||||
],
|
||||
[
|
||||
-77.066106,
|
||||
38.910321
|
||||
],
|
||||
[
|
||||
-77.066112,
|
||||
38.910758
|
||||
],
|
||||
[
|
||||
-77.065249,
|
||||
38.910775
|
||||
],
|
||||
[
|
||||
-77.065178,
|
||||
38.910793
|
||||
],
|
||||
[
|
||||
-77.065139,
|
||||
38.910804
|
||||
],
|
||||
[
|
||||
-77.064904,
|
||||
38.91036
|
||||
],
|
||||
[
|
||||
-77.064855,
|
||||
38.910268
|
||||
],
|
||||
[
|
||||
-77.064621,
|
||||
38.909825
|
||||
],
|
||||
[
|
||||
-77.06459,
|
||||
38.909766
|
||||
],
|
||||
[
|
||||
-77.064342,
|
||||
38.909298
|
||||
],
|
||||
[
|
||||
-77.064281,
|
||||
38.909182
|
||||
],
|
||||
[
|
||||
-77.064201,
|
||||
38.909226
|
||||
],
|
||||
[
|
||||
-77.064175,
|
||||
38.909235
|
||||
],
|
||||
[
|
||||
-77.064149,
|
||||
38.909241
|
||||
],
|
||||
[
|
||||
-77.064122,
|
||||
38.909244
|
||||
],
|
||||
[
|
||||
-77.06336,
|
||||
38.90926
|
||||
],
|
||||
[
|
||||
-77.061442,
|
||||
38.909288
|
||||
],
|
||||
[
|
||||
-77.060801,
|
||||
38.909297
|
||||
],
|
||||
[
|
||||
-77.059237,
|
||||
38.909315
|
||||
],
|
||||
[
|
||||
-77.058186,
|
||||
38.90933
|
||||
],
|
||||
[
|
||||
-77.057113,
|
||||
38.909343
|
||||
],
|
||||
[
|
||||
-77.055623,
|
||||
38.909368
|
||||
],
|
||||
[
|
||||
-77.054762,
|
||||
38.909377
|
||||
],
|
||||
[
|
||||
-77.053951,
|
||||
38.909389
|
||||
],
|
||||
[
|
||||
-77.053904,
|
||||
38.909393
|
||||
],
|
||||
[
|
||||
-77.053858,
|
||||
38.909399
|
||||
],
|
||||
[
|
||||
-77.053813,
|
||||
38.909408
|
||||
],
|
||||
[
|
||||
-77.052833,
|
||||
38.909635
|
||||
],
|
||||
[
|
||||
-77.052799,
|
||||
38.909642
|
||||
],
|
||||
[
|
||||
-77.052772,
|
||||
38.909645
|
||||
],
|
||||
[
|
||||
-77.052692,
|
||||
38.90965
|
||||
],
|
||||
[
|
||||
-77.052443,
|
||||
38.909649
|
||||
],
|
||||
[
|
||||
-77.05096,
|
||||
38.909639
|
||||
],
|
||||
[
|
||||
-77.050327,
|
||||
38.909634
|
||||
],
|
||||
[
|
||||
-77.049545,
|
||||
38.909631
|
||||
],
|
||||
[
|
||||
-77.049533,
|
||||
38.909635
|
||||
],
|
||||
[
|
||||
-77.049341,
|
||||
38.909635
|
||||
],
|
||||
[
|
||||
-77.048903,
|
||||
38.909635
|
||||
],
|
||||
[
|
||||
-77.048797,
|
||||
38.909634
|
||||
],
|
||||
[
|
||||
-77.04773,
|
||||
38.909639
|
||||
],
|
||||
[
|
||||
-77.046632,
|
||||
38.90964
|
||||
],
|
||||
[
|
||||
-77.045758,
|
||||
38.909641
|
||||
],
|
||||
[
|
||||
-77.044877,
|
||||
38.909643
|
||||
],
|
||||
[
|
||||
-77.044578,
|
||||
38.909641
|
||||
],
|
||||
[
|
||||
-77.044493,
|
||||
38.909635
|
||||
],
|
||||
[
|
||||
-77.04442,
|
||||
38.909626
|
||||
],
|
||||
[
|
||||
-77.044345,
|
||||
38.909608
|
||||
],
|
||||
[
|
||||
-77.044283,
|
||||
38.909578
|
||||
],
|
||||
[
|
||||
-77.044249,
|
||||
38.909541
|
||||
],
|
||||
[
|
||||
-77.044212,
|
||||
38.909496
|
||||
],
|
||||
[
|
||||
-77.044199,
|
||||
38.909458
|
||||
],
|
||||
[
|
||||
-77.044182,
|
||||
38.909421
|
||||
],
|
||||
[
|
||||
-77.044162,
|
||||
38.909385
|
||||
],
|
||||
[
|
||||
-77.04414,
|
||||
38.90935
|
||||
],
|
||||
[
|
||||
-77.044113,
|
||||
38.909313
|
||||
],
|
||||
[
|
||||
-77.044083,
|
||||
38.90928
|
||||
],
|
||||
[
|
||||
-77.044051,
|
||||
38.909247
|
||||
],
|
||||
[
|
||||
-77.044018,
|
||||
38.909165
|
||||
],
|
||||
[
|
||||
-77.044018,
|
||||
38.909117
|
||||
],
|
||||
[
|
||||
-77.044029,
|
||||
38.909071
|
||||
],
|
||||
[
|
||||
-77.044037,
|
||||
38.909038
|
||||
],
|
||||
[
|
||||
-77.044058,
|
||||
38.908981
|
||||
],
|
||||
[
|
||||
-77.043996,
|
||||
38.909021
|
||||
],
|
||||
[
|
||||
-77.043919,
|
||||
38.909052
|
||||
],
|
||||
[
|
||||
-77.043854,
|
||||
38.909067
|
||||
],
|
||||
[
|
||||
-77.043798,
|
||||
38.909073
|
||||
],
|
||||
[
|
||||
-77.043755,
|
||||
38.909075
|
||||
],
|
||||
[
|
||||
-77.043689,
|
||||
38.909056
|
||||
],
|
||||
[
|
||||
-77.043656,
|
||||
38.909048
|
||||
],
|
||||
[
|
||||
-77.04359,
|
||||
38.909036
|
||||
],
|
||||
[
|
||||
-77.043527,
|
||||
38.909028
|
||||
],
|
||||
[
|
||||
-77.043486,
|
||||
38.909026
|
||||
],
|
||||
[
|
||||
-77.043444,
|
||||
38.909025
|
||||
],
|
||||
[
|
||||
-77.043402,
|
||||
38.909026
|
||||
],
|
||||
[
|
||||
-77.043344,
|
||||
38.909029
|
||||
],
|
||||
[
|
||||
-77.043286,
|
||||
38.909037
|
||||
],
|
||||
[
|
||||
-77.043263,
|
||||
38.909041
|
||||
],
|
||||
[
|
||||
-77.04323,
|
||||
38.909047
|
||||
],
|
||||
[
|
||||
-77.043194,
|
||||
38.909056
|
||||
],
|
||||
[
|
||||
-77.043022,
|
||||
38.909118
|
||||
],
|
||||
[
|
||||
-77.042995,
|
||||
38.909132
|
||||
],
|
||||
[
|
||||
-77.04296,
|
||||
38.909151
|
||||
],
|
||||
[
|
||||
-77.042938,
|
||||
38.909165
|
||||
],
|
||||
[
|
||||
-77.042915,
|
||||
38.90918
|
||||
],
|
||||
[
|
||||
-77.042875,
|
||||
38.909209
|
||||
],
|
||||
[
|
||||
-77.04284,
|
||||
38.909239
|
||||
],
|
||||
[
|
||||
-77.042823,
|
||||
38.909255
|
||||
],
|
||||
[
|
||||
-77.042791,
|
||||
38.909288
|
||||
],
|
||||
[
|
||||
-77.042774,
|
||||
38.909307
|
||||
],
|
||||
[
|
||||
-77.042712,
|
||||
38.909315
|
||||
],
|
||||
[
|
||||
-77.042637,
|
||||
38.909322
|
||||
],
|
||||
[
|
||||
-77.042551,
|
||||
38.909317
|
||||
],
|
||||
[
|
||||
-77.042422,
|
||||
38.909299
|
||||
],
|
||||
[
|
||||
-77.041676,
|
||||
38.90903
|
||||
],
|
||||
[
|
||||
-77.039935,
|
||||
38.908425
|
||||
],
|
||||
[
|
||||
-77.038503,
|
||||
38.907925
|
||||
],
|
||||
[
|
||||
-77.037656,
|
||||
38.907632
|
||||
],
|
||||
[
|
||||
-77.037477,
|
||||
38.907534
|
||||
],
|
||||
[
|
||||
-77.037317,
|
||||
38.907438
|
||||
],
|
||||
[
|
||||
-77.037238,
|
||||
38.90739
|
||||
],
|
||||
[
|
||||
-77.037121,
|
||||
38.907315
|
||||
],
|
||||
[
|
||||
-77.036997,
|
||||
38.907233
|
||||
],
|
||||
[
|
||||
-77.036875,
|
||||
38.907137
|
||||
],
|
||||
[
|
||||
-77.036833,
|
||||
38.907094
|
||||
],
|
||||
[
|
||||
-77.036817,
|
||||
38.907081
|
||||
],
|
||||
[
|
||||
-77.036795,
|
||||
38.907068
|
||||
],
|
||||
[
|
||||
-77.036774,
|
||||
38.907058
|
||||
],
|
||||
[
|
||||
-77.036767,
|
||||
38.907052
|
||||
],
|
||||
[
|
||||
-77.036712,
|
||||
38.907034
|
||||
],
|
||||
[
|
||||
-77.03669,
|
||||
38.907028
|
||||
],
|
||||
[
|
||||
-77.036643,
|
||||
38.907022
|
||||
],
|
||||
[
|
||||
-77.03661,
|
||||
38.907021
|
||||
],
|
||||
[
|
||||
-77.03653,
|
||||
38.907021
|
||||
],
|
||||
[
|
||||
-77.036474,
|
||||
38.907021
|
||||
],
|
||||
[
|
||||
-77.03643,
|
||||
38.907025
|
||||
],
|
||||
[
|
||||
-77.03639,
|
||||
38.907033
|
||||
],
|
||||
[
|
||||
-77.036295,
|
||||
38.907058
|
||||
],
|
||||
[
|
||||
-77.036005,
|
||||
38.906995
|
||||
],
|
||||
[
|
||||
-77.035439,
|
||||
38.906869
|
||||
],
|
||||
[
|
||||
-77.035142,
|
||||
38.906757
|
||||
],
|
||||
[
|
||||
-77.035049,
|
||||
38.906725
|
||||
],
|
||||
[
|
||||
-77.0348,
|
||||
38.906641
|
||||
],
|
||||
[
|
||||
-77.034673,
|
||||
38.906594
|
||||
],
|
||||
[
|
||||
-77.034568,
|
||||
38.906558
|
||||
],
|
||||
[
|
||||
-77.034059,
|
||||
38.906382
|
||||
],
|
||||
[
|
||||
-77.033931,
|
||||
38.906338
|
||||
],
|
||||
[
|
||||
-77.032623,
|
||||
38.905883
|
||||
],
|
||||
[
|
||||
-77.03129,
|
||||
38.905426
|
||||
],
|
||||
[
|
||||
-77.030031,
|
||||
38.904982
|
||||
],
|
||||
[
|
||||
-77.029623,
|
||||
38.904835
|
||||
],
|
||||
[
|
||||
-77.028082,
|
||||
38.904304
|
||||
],
|
||||
[
|
||||
-77.027679,
|
||||
38.904167
|
||||
],
|
||||
[
|
||||
-77.02705,
|
||||
38.903949
|
||||
],
|
||||
[
|
||||
-77.026409,
|
||||
38.903729
|
||||
],
|
||||
[
|
||||
-77.025984,
|
||||
38.903579
|
||||
],
|
||||
[
|
||||
-77.024321,
|
||||
38.902997
|
||||
],
|
||||
[
|
||||
-77.024139,
|
||||
38.902954
|
||||
],
|
||||
[
|
||||
-77.023952,
|
||||
38.902954
|
||||
],
|
||||
[
|
||||
-77.023188,
|
||||
38.902956
|
||||
],
|
||||
[
|
||||
-77.022699,
|
||||
38.902958
|
||||
],
|
||||
[
|
||||
-77.021917,
|
||||
38.90296
|
||||
],
|
||||
[
|
||||
-77.021918,
|
||||
38.902902
|
||||
],
|
||||
[
|
||||
-77.021918,
|
||||
38.902521
|
||||
],
|
||||
[
|
||||
-77.019907,
|
||||
38.902521
|
||||
],
|
||||
[
|
||||
-77.018928,
|
||||
38.902521
|
||||
],
|
||||
[
|
||||
-77.016176,
|
||||
38.902519
|
||||
],
|
||||
[
|
||||
-77.015177,
|
||||
38.902518
|
||||
],
|
||||
[
|
||||
-77.013722,
|
||||
38.902514
|
||||
],
|
||||
[
|
||||
-77.012171,
|
||||
38.902516
|
||||
],
|
||||
[
|
||||
-77.011237,
|
||||
38.902516
|
||||
],
|
||||
[
|
||||
-77.009846,
|
||||
38.902515
|
||||
],
|
||||
[
|
||||
-77.009117,
|
||||
38.902514
|
||||
],
|
||||
[
|
||||
-77.009126,
|
||||
38.901346
|
||||
],
|
||||
[
|
||||
-77.00912,
|
||||
38.900203
|
||||
],
|
||||
[
|
||||
-77.009062,
|
||||
38.900203
|
||||
],
|
||||
[
|
||||
-77.008975,
|
||||
38.900203
|
||||
],
|
||||
[
|
||||
-77.008004,
|
||||
38.900198
|
||||
],
|
||||
[
|
||||
-77.00631,
|
||||
38.900193
|
||||
],
|
||||
[
|
||||
-77.005531,
|
||||
38.900197
|
||||
],
|
||||
[
|
||||
-77.002929,
|
||||
38.9002
|
||||
],
|
||||
[
|
||||
-77.002038,
|
||||
38.900203
|
||||
],
|
||||
[
|
||||
-77.001892,
|
||||
38.900203
|
||||
],
|
||||
[
|
||||
-77.000571,
|
||||
38.900205
|
||||
],
|
||||
[
|
||||
-76.999507,
|
||||
38.900204
|
||||
],
|
||||
[
|
||||
-76.998442,
|
||||
38.900204
|
||||
],
|
||||
[
|
||||
-76.998369,
|
||||
38.900204
|
||||
],
|
||||
[
|
||||
-76.996167,
|
||||
38.900205
|
||||
],
|
||||
[
|
||||
-76.994961,
|
||||
38.900203
|
||||
],
|
||||
[
|
||||
-76.994962,
|
||||
38.899748
|
||||
],
|
||||
[
|
||||
-76.994961,
|
||||
38.899626
|
||||
],
|
||||
[
|
||||
-76.994961,
|
||||
38.899367
|
||||
],
|
||||
[
|
||||
-76.994961,
|
||||
38.898908
|
||||
],
|
||||
[
|
||||
-76.994962,
|
||||
38.898447
|
||||
]
|
||||
]
|
||||
}
|
||||
7
metrics/integration/data/malformed.geojson
Normal file
7
metrics/integration/data/malformed.geojson
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"type": "Model",
|
||||
"geometry": [ -77.050327, 38.909634 ],
|
||||
"properties": {
|
||||
"name": "P Street Northwest - Massachusetts Avenue Northwest"
|
||||
}
|
||||
}
|
||||
1
metrics/integration/data/places.geojson
Normal file
1
metrics/integration/data/places.geojson
Normal file
File diff suppressed because one or more lines are too long
1
metrics/integration/data/winding.geojson
Normal file
1
metrics/integration/data/winding.geojson
Normal file
@@ -0,0 +1 @@
|
||||
{"type":"FeatureCollection","features":[{"type":"Feature","id":"112025b24165963ca83d2b9e6e5943e3","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-48.51562499999926,44.08758502824452],[-48.86718749999943,1.7575368113081424],[5.9765624999998295,-2.2737367544323206e-13],[3.8671874999998295,44.5904671813081],[-48.51562499999926,44.08758502824452]]]}},{"type":"Feature","id":"c5aece77e9cb2eac3b1e3a146e9df170","properties":{},"geometry":{"type":"Polygon","coordinates":[[[29.531249999999517,15.623036831527799],[29.882812499999574,-27.994401411045992],[-17.57812499999983,-22.268764039073815],[-14.062499999999801,24.84656534821923],[29.531249999999517,15.623036831527799]]]}}]}
|
||||
0
metrics/integration/dist/.gitkeep
vendored
Normal file
0
metrics/integration/dist/.gitkeep
vendored
Normal file
18
metrics/integration/expression-tests/abs/basic/test.json
Normal file
18
metrics/integration/expression-tests/abs/basic/test.json
Normal file
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"expression": ["abs", ["get", "x"]],
|
||||
"inputs": [
|
||||
[{}, {"properties": {"x": -2}}],
|
||||
[{}, {"properties": {"x": 2}}],
|
||||
[{}, {"properties": {"x": -1.1}}]
|
||||
],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": false,
|
||||
"isZoomConstant": true,
|
||||
"type": "number"
|
||||
},
|
||||
"outputs": [2, 2, 1.1],
|
||||
"serialized": ["abs", ["number", ["get", "x"]]]
|
||||
}
|
||||
}
|
||||
14
metrics/integration/expression-tests/acos/basic/test.json
Normal file
14
metrics/integration/expression-tests/acos/basic/test.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"expression": ["acos", 0.5],
|
||||
"inputs": [[{}, {}]],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": true,
|
||||
"isZoomConstant": true,
|
||||
"type": "number"
|
||||
},
|
||||
"outputs": [1.04719],
|
||||
"serialized": 1.0471975511965979
|
||||
}
|
||||
}
|
||||
14
metrics/integration/expression-tests/all/arity-0/test.json
Normal file
14
metrics/integration/expression-tests/all/arity-0/test.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"expression": ["all"],
|
||||
"inputs": [[{}, {}]],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": true,
|
||||
"isZoomConstant": true,
|
||||
"type": "boolean"
|
||||
},
|
||||
"outputs": [true],
|
||||
"serialized": true
|
||||
}
|
||||
}
|
||||
14
metrics/integration/expression-tests/all/arity-1/test.json
Normal file
14
metrics/integration/expression-tests/all/arity-1/test.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"expression": ["all", false],
|
||||
"inputs": [[{}, {}]],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": true,
|
||||
"isZoomConstant": true,
|
||||
"type": "boolean"
|
||||
},
|
||||
"outputs": [false],
|
||||
"serialized": false
|
||||
}
|
||||
}
|
||||
17
metrics/integration/expression-tests/all/basic/test.json
Normal file
17
metrics/integration/expression-tests/all/basic/test.json
Normal file
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"expression": ["all", ["boolean", ["get", "x"]], ["boolean", ["get", "y"]]],
|
||||
"inputs": [
|
||||
[{}, {"properties": {"x": true, "y": false}}],
|
||||
[{}, {"properties": {"x": true, "y": true}}]
|
||||
],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": false,
|
||||
"isZoomConstant": true,
|
||||
"type": "boolean"
|
||||
},
|
||||
"outputs": [false, true],
|
||||
"serialized": ["all", ["boolean", ["get", "x"]], ["boolean", ["get", "y"]]]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"expression": ["all", false, ["error", "unreachable"]],
|
||||
"inputs": [[{}, {}]],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": true,
|
||||
"isZoomConstant": true,
|
||||
"type": "boolean"
|
||||
},
|
||||
"outputs": [false],
|
||||
"serialized": ["all", false, ["error", "unreachable"]]
|
||||
}
|
||||
}
|
||||
14
metrics/integration/expression-tests/any/arity-0/test.json
Normal file
14
metrics/integration/expression-tests/any/arity-0/test.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"expression": ["any"],
|
||||
"inputs": [[{}, {}]],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": true,
|
||||
"isZoomConstant": true,
|
||||
"type": "boolean"
|
||||
},
|
||||
"outputs": [false],
|
||||
"serialized": false
|
||||
}
|
||||
}
|
||||
14
metrics/integration/expression-tests/any/arity-1/test.json
Normal file
14
metrics/integration/expression-tests/any/arity-1/test.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"expression": ["any", false],
|
||||
"inputs": [[{}, {}]],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": true,
|
||||
"isZoomConstant": true,
|
||||
"type": "boolean"
|
||||
},
|
||||
"outputs": [false],
|
||||
"serialized": false
|
||||
}
|
||||
}
|
||||
19
metrics/integration/expression-tests/any/basic/test.json
Normal file
19
metrics/integration/expression-tests/any/basic/test.json
Normal file
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"expression": ["any", ["boolean", ["get", "x"]], ["boolean", ["get", "y"]]],
|
||||
"inputs": [
|
||||
[{}, {"properties": {"x": true, "y": true}}],
|
||||
[{}, {"properties": {"x": true, "y": false}}],
|
||||
[{}, {"properties": {"x": false, "y": true}}],
|
||||
[{}, {"properties": {"x": false, "y": false}}]
|
||||
],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": false,
|
||||
"isZoomConstant": true,
|
||||
"type": "boolean"
|
||||
},
|
||||
"outputs": [true, true, true, false],
|
||||
"serialized": ["any", ["boolean", ["get", "x"]], ["boolean", ["get", "y"]]]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"expression": ["any", true, ["error", "unreachable"]],
|
||||
"inputs": [[{}, {}]],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": true,
|
||||
"isZoomConstant": true,
|
||||
"type": "boolean"
|
||||
},
|
||||
"outputs": [true],
|
||||
"serialized": ["any", true, ["error", "unreachable"]]
|
||||
}
|
||||
}
|
||||
14
metrics/integration/expression-tests/array/basic/test.json
Normal file
14
metrics/integration/expression-tests/array/basic/test.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"expression": ["array", ["literal", [1, 2, 3]]],
|
||||
"inputs": [[{}, {}]],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": true,
|
||||
"isZoomConstant": true,
|
||||
"type": "array"
|
||||
},
|
||||
"outputs": [[1, 2, 3]],
|
||||
"serialized": ["literal", [1, 2, 3]]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"expression": ["array", "number", null, ["get", "x"], ["literal", [0]]],
|
||||
"inputs": [
|
||||
[{}, {}],
|
||||
[{}, {"properties": {"x": []}}],
|
||||
[{}, {"properties": {"x": ["1"]}}]
|
||||
],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": false,
|
||||
"isZoomConstant": true,
|
||||
"type": "array<number>"
|
||||
},
|
||||
"outputs": [
|
||||
[0],
|
||||
[],
|
||||
[0]
|
||||
],
|
||||
"serialized": ["array", "number", null, ["get", "x"], ["literal", [0]]]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"expression": ["at", 0, ["get", "array"]],
|
||||
"inputs": [
|
||||
[{}, {"properties": {"array": [0, 1, 2]}}],
|
||||
[{}, {"properties": {"array": "not"}}]
|
||||
],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": false,
|
||||
"isZoomConstant": true,
|
||||
"type": "value"
|
||||
},
|
||||
"outputs": [
|
||||
0,
|
||||
{"error": "Expected value to be of type array, but found string instead."}
|
||||
],
|
||||
"serialized": ["at", 0, ["array", ["get", "array"]]]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"propertySpec": {
|
||||
"type": "array",
|
||||
"value": "string",
|
||||
"property-type": "data-driven",
|
||||
"expression": {"parameters": ["zoom", "feature"]}
|
||||
},
|
||||
"expression": ["get", "array"],
|
||||
"inputs": [
|
||||
[{}, {"properties": {"array": ["a", "b"]}}],
|
||||
[{}, {"properties": {"array": [1, 2]}}],
|
||||
[{}, {"properties": {"array": "not"}}]
|
||||
],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": false,
|
||||
"isZoomConstant": true,
|
||||
"type": "array<string>"
|
||||
},
|
||||
"outputs": [
|
||||
["a", "b"],
|
||||
{
|
||||
"error": "Expected value to be of type array<string>, but found array<number, 2> instead."
|
||||
},
|
||||
{
|
||||
"error": "Expected value to be of type array<string>, but found string instead."
|
||||
}
|
||||
],
|
||||
"serialized": ["array", "string", ["get", "array"]]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"propertySpec": {
|
||||
"type": "array",
|
||||
"value": "number",
|
||||
"length": 2,
|
||||
"property-type": "data-driven",
|
||||
"expression": {"parameters": ["zoom", "feature"]}
|
||||
},
|
||||
"expression": ["get", "array"],
|
||||
"inputs": [
|
||||
[{}, {"properties": {"array": [1, 2]}}],
|
||||
[{}, {"properties": {"array": [1, 2, 3]}}],
|
||||
[{}, {"properties": {"array": "not"}}]
|
||||
],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": false,
|
||||
"isZoomConstant": true,
|
||||
"type": "array<number, 2>"
|
||||
},
|
||||
"outputs": [
|
||||
[1, 2],
|
||||
{
|
||||
"error": "Expected value to be of type array<number, 2>, but found array<number, 3> instead."
|
||||
},
|
||||
{
|
||||
"error": "Expected value to be of type array<number, 2>, but found string instead."
|
||||
}
|
||||
],
|
||||
"serialized": ["array", "number", 2, ["get", "array"]]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"expression": ["array", "number", 2, ["get", "x"]],
|
||||
"inputs": [
|
||||
[{}, {"properties": {"x": [1, 0]}}],
|
||||
[{}, {"properties": {"x": [0]}}],
|
||||
[{}, {"properties": {"x": [1, 2, 3]}}]
|
||||
],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": false,
|
||||
"isZoomConstant": true,
|
||||
"type": "array<number, 2>"
|
||||
},
|
||||
"outputs": [
|
||||
[1, 0],
|
||||
{
|
||||
"error": "Expected value to be of type array<number, 2>, but found array<number, 1> instead."
|
||||
},
|
||||
{
|
||||
"error": "Expected value to be of type array<number, 2>, but found array<number, 3> instead."
|
||||
}
|
||||
],
|
||||
"serialized": ["array", "number", 2, ["get", "x"]]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
{
|
||||
"expression": ["array", "string", ["get", "x"]],
|
||||
"inputs": [
|
||||
[{}, {"properties": {"x": ["a", "b"]}}],
|
||||
[{}, {"properties": {"x": [1, 2]}}],
|
||||
[{}, {"properties": {"x": [1, "b"]}}],
|
||||
[{}, {"properties": {"x": []}}]
|
||||
],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": false,
|
||||
"isZoomConstant": true,
|
||||
"type": "array<string>"
|
||||
},
|
||||
"outputs": [
|
||||
["a", "b"],
|
||||
{
|
||||
"error": "Expected value to be of type array<string>, but found array<number, 2> instead."
|
||||
},
|
||||
{
|
||||
"error": "Expected value to be of type array<string>, but found array<value, 2> instead."
|
||||
},
|
||||
[]
|
||||
],
|
||||
"serialized": ["array", "string", ["get", "x"]]
|
||||
}
|
||||
}
|
||||
14
metrics/integration/expression-tests/asin/basic/test.json
Normal file
14
metrics/integration/expression-tests/asin/basic/test.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"expression": ["asin", 0.5],
|
||||
"inputs": [[{}, {}]],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": true,
|
||||
"isZoomConstant": true,
|
||||
"type": "number"
|
||||
},
|
||||
"outputs": [0.523598],
|
||||
"serialized": 0.5235987755982989
|
||||
}
|
||||
}
|
||||
30
metrics/integration/expression-tests/at/basic/test.json
Normal file
30
metrics/integration/expression-tests/at/basic/test.json
Normal file
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"expression": [
|
||||
"number",
|
||||
["at", ["number", ["get", "i"]], ["array", ["get", "arr"]]]
|
||||
],
|
||||
"inputs": [
|
||||
[{}, {"properties": {"i": 1, "arr": [9, 8, 7]}}],
|
||||
[{}, {"properties": {"i": -1, "arr": [9, 8, 7]}}],
|
||||
[{}, {"properties": {"i": 4, "arr": [9, 8, 7]}}],
|
||||
[{}, {"properties": {"i": 1.5, "arr": [9, 8, 7]}}]
|
||||
],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": false,
|
||||
"isZoomConstant": true,
|
||||
"type": "number"
|
||||
},
|
||||
"outputs": [
|
||||
8,
|
||||
{"error": "Array index out of bounds: -1 < 0."},
|
||||
{"error": "Array index out of bounds: 4 > 2."},
|
||||
{"error": "Array index must be an integer, but found 1.5 instead."}
|
||||
],
|
||||
"serialized": [
|
||||
"number",
|
||||
["at", ["number", ["get", "i"]], ["array", ["get", "arr"]]]
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"propertySpec": {
|
||||
"type": "string",
|
||||
"property-type": "data-driven",
|
||||
"expression": {"parameters": ["zoom", "feature"]}
|
||||
},
|
||||
"expression": ["at", 1, ["literal", [1, 2, 3]]],
|
||||
"inputs": [],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "error",
|
||||
"errors": [
|
||||
{
|
||||
"key": "[2]",
|
||||
"error": "Expected array<string> but found array<number, 3> instead."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
14
metrics/integration/expression-tests/atan/basic/test.json
Normal file
14
metrics/integration/expression-tests/atan/basic/test.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"expression": ["atan", 1],
|
||||
"inputs": [[{}, {}]],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": true,
|
||||
"isZoomConstant": true,
|
||||
"type": "number"
|
||||
},
|
||||
"outputs": [0.785398],
|
||||
"serialized": 0.7853981633974483
|
||||
}
|
||||
}
|
||||
42
metrics/integration/expression-tests/boolean/basic/test.json
Normal file
42
metrics/integration/expression-tests/boolean/basic/test.json
Normal file
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"expression": ["boolean", ["get", "x"]],
|
||||
"inputs": [
|
||||
[{}, {}],
|
||||
[{}, {"properties": {"x": true}}],
|
||||
[{}, {"properties": {"x": false}}],
|
||||
[{}, {"properties": {"x": ""}}],
|
||||
[{}, {"properties": {"x": "false"}}],
|
||||
[{}, {"properties": {"x": 0}}],
|
||||
[{}, {"properties": {"x": 1}}],
|
||||
[{}, {"properties": {"x": null}}]
|
||||
],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": false,
|
||||
"isZoomConstant": true,
|
||||
"type": "boolean"
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"error": "Expected value to be of type boolean, but found null instead."
|
||||
},
|
||||
true,
|
||||
false,
|
||||
{
|
||||
"error": "Expected value to be of type boolean, but found string instead."
|
||||
},
|
||||
{
|
||||
"error": "Expected value to be of type boolean, but found string instead."
|
||||
},
|
||||
{
|
||||
"error": "Expected value to be of type boolean, but found number instead."
|
||||
},
|
||||
{
|
||||
"error": "Expected value to be of type boolean, but found number instead."
|
||||
},
|
||||
{"error": "Expected value to be of type boolean, but found null instead."}
|
||||
],
|
||||
"serialized": ["boolean", ["get", "x"]]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"expression": ["boolean", ["get", "x"], false],
|
||||
"inputs": [
|
||||
[{}, {}],
|
||||
[{}, {"properties": {"x": true}}],
|
||||
[{}, {"properties": {"x": false}}],
|
||||
[{}, {"properties": {"x": ""}}],
|
||||
[{}, {"properties": {"x": "false"}}],
|
||||
[{}, {"properties": {"x": 0}}],
|
||||
[{}, {"properties": {"x": 1}}],
|
||||
[{}, {"properties": {"x": null}}]
|
||||
],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": false,
|
||||
"isZoomConstant": true,
|
||||
"type": "boolean"
|
||||
},
|
||||
"outputs": [false, true, false, false, false, false, false, false],
|
||||
"serialized": ["boolean", ["get", "x"], false]
|
||||
}
|
||||
}
|
||||
40
metrics/integration/expression-tests/case/basic/test.json
Normal file
40
metrics/integration/expression-tests/case/basic/test.json
Normal file
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"propertySpec": {
|
||||
"type": "string",
|
||||
"property-type": "data-driven",
|
||||
"expression": {"parameters": ["zoom", "feature"]}
|
||||
},
|
||||
"expression": ["case", ["get", "x"], "x", ["get", "y"], "y", "otherwise"],
|
||||
"inputs": [
|
||||
[{}, {"properties": {"x": true, "y": true}}],
|
||||
[{}, {"properties": {"x": true, "y": false}}],
|
||||
[{}, {"properties": {"x": false, "y": true}}],
|
||||
[{}, {"properties": {"x": false, "y": false}}],
|
||||
[{}, {"properties": {"x": "false", "y": false}}]
|
||||
],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": false,
|
||||
"isZoomConstant": true,
|
||||
"type": "string"
|
||||
},
|
||||
"outputs": [
|
||||
"x",
|
||||
"x",
|
||||
"y",
|
||||
"otherwise",
|
||||
{
|
||||
"error": "Expected value to be of type boolean, but found string instead."
|
||||
}
|
||||
],
|
||||
"serialized": [
|
||||
"case",
|
||||
["boolean", ["get", "x"]],
|
||||
"x",
|
||||
["boolean", ["get", "y"]],
|
||||
"y",
|
||||
"otherwise"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"propertySpec": {
|
||||
"type": "array",
|
||||
"value": "string",
|
||||
"property-type": "data-driven",
|
||||
"expression": {"parameters": ["zoom", "feature"]}
|
||||
},
|
||||
"expression": [
|
||||
"case",
|
||||
["boolean", ["get", "x"]],
|
||||
["literal", ["one"]],
|
||||
["literal", ["one", "two"]]
|
||||
],
|
||||
"inputs": [],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": false,
|
||||
"isZoomConstant": true,
|
||||
"type": "array<string>"
|
||||
},
|
||||
"outputs": [],
|
||||
"serialized": [
|
||||
"case",
|
||||
["boolean", ["get", "x"]],
|
||||
["literal", ["one"]],
|
||||
["literal", ["one", "two"]]
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"expression": ["boolean", ["all", false, ["case", true, true, true]]],
|
||||
"inputs": [[{}, {}]],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": true,
|
||||
"isZoomConstant": true,
|
||||
"type": "boolean"
|
||||
},
|
||||
"outputs": [false],
|
||||
"serialized": false
|
||||
}
|
||||
}
|
||||
23
metrics/integration/expression-tests/ceil/basic/test.json
Normal file
23
metrics/integration/expression-tests/ceil/basic/test.json
Normal file
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"expression": ["ceil", ["get", "x"]],
|
||||
"inputs": [
|
||||
[{}, {"properties": {"x": -2.6}}],
|
||||
[{}, {"properties": {"x": -2.5}}],
|
||||
[{}, {"properties": {"x": -2.4}}],
|
||||
[{}, {"properties": {"x": -2}}],
|
||||
[{}, {"properties": {"x": 2.6}}],
|
||||
[{}, {"properties": {"x": 2.5}}],
|
||||
[{}, {"properties": {"x": 2.4}}],
|
||||
[{}, {"properties": {"x": 2}}]
|
||||
],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": false,
|
||||
"isZoomConstant": true,
|
||||
"type": "number"
|
||||
},
|
||||
"outputs": [-2, -2, -2, -2, 3, 3, 3, 2],
|
||||
"serialized": ["ceil", ["number", ["get", "x"]]]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"propertySpec": {"type": "string"},
|
||||
"expression": ["coalesce", ["get", "a"], 5],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "error",
|
||||
"errors": [
|
||||
{"key": "[2]", "error": "Expected string but found number instead."}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"expression": ["coalesce", ["get", "x"], ["get", "y"], ["get", "z"], 0],
|
||||
"inputs": [
|
||||
[{}, {"properties": {"x": 1}}],
|
||||
[{}, {"properties": {"x": 1, "y": 2, "z": 3}}],
|
||||
[{}, {"properties": {"y": 2}}],
|
||||
[{}, {"properties": {"z": 3}}],
|
||||
[{}, {}]
|
||||
],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": false,
|
||||
"isZoomConstant": true,
|
||||
"type": "value"
|
||||
},
|
||||
"outputs": [1, 1, 2, 3, 0],
|
||||
"serialized": ["coalesce", ["get", "x"], ["get", "y"], ["get", "z"], 0]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"expression": [
|
||||
"coalesce",
|
||||
["number", ["get", "x"]],
|
||||
["number", ["get", "y"]],
|
||||
["number", ["get", "z"]]
|
||||
],
|
||||
"inputs": [
|
||||
[{}, {"properties": {"x": 1}}],
|
||||
[{}, {"properties": {"x": 1, "y": 2, "z": 3}}],
|
||||
[{}, {"properties": {"y": 2}}],
|
||||
[{}, {"properties": {"z": 3}}],
|
||||
[{}, {}]
|
||||
],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": false,
|
||||
"isZoomConstant": true,
|
||||
"type": "number"
|
||||
},
|
||||
"outputs": [
|
||||
1,
|
||||
1,
|
||||
{"error": "Expected value to be of type number, but found null instead."},
|
||||
{"error": "Expected value to be of type number, but found null instead."},
|
||||
{"error": "Expected value to be of type number, but found null instead."}
|
||||
],
|
||||
"serialized": [
|
||||
"coalesce",
|
||||
["number", ["get", "x"]],
|
||||
["number", ["get", "y"]],
|
||||
["number", ["get", "z"]]
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"propertySpec": {
|
||||
"type": "array",
|
||||
"value": "string",
|
||||
"property-type": "data-driven",
|
||||
"expression": {"parameters": ["zoom", "feature"]}
|
||||
},
|
||||
"expression": [
|
||||
"coalesce",
|
||||
["literal", ["one"]],
|
||||
["literal", ["one", "two"]],
|
||||
null
|
||||
],
|
||||
"inputs": [],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "error",
|
||||
"errors": [
|
||||
{
|
||||
"key": "[3]",
|
||||
"error": "Expected array<string> but found null instead."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"propertySpec": {"type": "string"},
|
||||
"expression": ["coalesce", ["get", "a"], ["get", "b"]],
|
||||
"inputs": [
|
||||
[{}, {"properties": {"a": "one"}}],
|
||||
[{}, {"properties": {"b": "two"}}],
|
||||
[{}, {"properties": {"b": 5}}],
|
||||
[{}, {"properties": {}}]
|
||||
],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": false,
|
||||
"isZoomConstant": true,
|
||||
"type": "string"
|
||||
},
|
||||
"outputs": [
|
||||
"one",
|
||||
"two",
|
||||
"5",
|
||||
""
|
||||
],
|
||||
"serialized": ["to-string", ["coalesce", ["get", "a"], ["get", "b"]]]
|
||||
}
|
||||
}
|
||||
15
metrics/integration/expression-tests/coalesce/null/test.json
Normal file
15
metrics/integration/expression-tests/coalesce/null/test.json
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"expectExpressionType": null,
|
||||
"expression": ["coalesce", ["get", "z"], 0],
|
||||
"inputs": [[{}, {"properties": {"z": 1}}], [{}, {"properties": {"z": null}}]],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": false,
|
||||
"isZoomConstant": true,
|
||||
"type": "value"
|
||||
},
|
||||
"outputs": [1, 0],
|
||||
"serialized": ["coalesce", ["get", "z"], 0]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
{
|
||||
"expression": [
|
||||
"case",
|
||||
[
|
||||
"==",
|
||||
[
|
||||
"resolved-locale",
|
||||
[
|
||||
"collator",
|
||||
{"case-sensitive": true, "diacritic-sensitive": false, "locale": "de"}
|
||||
]
|
||||
],
|
||||
"de"
|
||||
],
|
||||
[
|
||||
"==",
|
||||
["string", ["get", "lhs"]],
|
||||
["get", "rhs"],
|
||||
[
|
||||
"collator",
|
||||
{"case-sensitive": true, "diacritic-sensitive": false, "locale": "de"}
|
||||
]
|
||||
],
|
||||
["case", ["==", ["get", "rhs"], "ue"], true, false]
|
||||
],
|
||||
"inputs": [
|
||||
[{}, {"properties": {"lhs": "ü", "rhs": "ue"}}],
|
||||
[{}, {"properties": {"lhs": "ü", "rhs": "u"}}]
|
||||
],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": false,
|
||||
"isZoomConstant": true,
|
||||
"type": "boolean"
|
||||
},
|
||||
"outputs": [true, false],
|
||||
"serialized": [
|
||||
"case",
|
||||
[
|
||||
"==",
|
||||
[
|
||||
"resolved-locale",
|
||||
[
|
||||
"collator",
|
||||
{
|
||||
"case-sensitive": true,
|
||||
"diacritic-sensitive": false,
|
||||
"locale": "de"
|
||||
}
|
||||
]
|
||||
],
|
||||
"de"
|
||||
],
|
||||
[
|
||||
"==",
|
||||
["string", ["get", "lhs"]],
|
||||
["get", "rhs"],
|
||||
[
|
||||
"collator",
|
||||
{"case-sensitive": true, "diacritic-sensitive": false, "locale": "de"}
|
||||
]
|
||||
],
|
||||
["case", ["==", ["get", "rhs"], "ue"], true, false]
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"expression": [
|
||||
"<",
|
||||
["string", ["get", "lhs"]],
|
||||
["get", "rhs"],
|
||||
[
|
||||
"collator",
|
||||
{"case-sensitive": true, "diacritic-sensitive": false, "locale": "en"}
|
||||
]
|
||||
],
|
||||
"inputs": [
|
||||
[{}, {"properties": {"lhs": "a", "rhs": "ä"}}],
|
||||
[{}, {"properties": {"lhs": "a", "rhs": "A"}}],
|
||||
[{}, {"properties": {"lhs": "ä", "rhs": "b"}}]
|
||||
],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": false,
|
||||
"isZoomConstant": true,
|
||||
"type": "boolean"
|
||||
},
|
||||
"outputs": [false, true, true],
|
||||
"serialized": [
|
||||
"<",
|
||||
["string", ["get", "lhs"]],
|
||||
["string", ["get", "rhs"]],
|
||||
[
|
||||
"collator",
|
||||
{"case-sensitive": true, "diacritic-sensitive": false, "locale": "en"}
|
||||
]
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"expression": [
|
||||
"!",
|
||||
[
|
||||
"!=",
|
||||
["string", ["get", "lhs"]],
|
||||
["get", "rhs"],
|
||||
[
|
||||
"collator",
|
||||
{"case-sensitive": true, "diacritic-sensitive": false, "locale": "en"}
|
||||
]
|
||||
]
|
||||
],
|
||||
"inputs": [
|
||||
[{}, {"properties": {"lhs": "a", "rhs": "ä"}}],
|
||||
[{}, {"properties": {"lhs": "a", "rhs": "A"}}],
|
||||
[{}, {"properties": {"lhs": "b", "rhs": "ä"}}]
|
||||
],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": false,
|
||||
"isZoomConstant": true,
|
||||
"type": "boolean"
|
||||
},
|
||||
"outputs": [true, false, false],
|
||||
"serialized": [
|
||||
"!",
|
||||
[
|
||||
"!=",
|
||||
["string", ["get", "lhs"]],
|
||||
["get", "rhs"],
|
||||
[
|
||||
"collator",
|
||||
{"case-sensitive": true, "diacritic-sensitive": false, "locale": "en"}
|
||||
]
|
||||
]
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
{
|
||||
"expression": [
|
||||
"==",
|
||||
["string", ["get", "lhs"]],
|
||||
["get", "rhs"],
|
||||
["collator", {"case-sensitive": false, "diacritic-sensitive": false}]
|
||||
],
|
||||
"inputs": [
|
||||
[{}, {"properties": {"lhs": "a", "rhs": "a"}}],
|
||||
[{}, {"properties": {"lhs": "A", "rhs": "A"}}],
|
||||
[{}, {"properties": {"lhs": "b", "rhs": "a"}}]
|
||||
],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": false,
|
||||
"isZoomConstant": true,
|
||||
"type": "boolean"
|
||||
},
|
||||
"outputs": [true, true, false],
|
||||
"serialized": [
|
||||
"==",
|
||||
["string", ["get", "lhs"]],
|
||||
["get", "rhs"],
|
||||
["collator", {"case-sensitive": false, "diacritic-sensitive": false}]
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"expression": [
|
||||
"==",
|
||||
["string", ["get", "lhs"]],
|
||||
["get", "rhs"],
|
||||
[
|
||||
"collator",
|
||||
{"case-sensitive": false, "diacritic-sensitive": false, "locale": "en"}
|
||||
]
|
||||
],
|
||||
"inputs": [
|
||||
[{}, {"properties": {"lhs": "a", "rhs": "ä"}}],
|
||||
[{}, {"properties": {"lhs": "a", "rhs": "A"}}],
|
||||
[{}, {"properties": {"lhs": "b", "rhs": "ä"}}]
|
||||
],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": false,
|
||||
"isZoomConstant": true,
|
||||
"type": "boolean"
|
||||
},
|
||||
"outputs": [true, true, false],
|
||||
"serialized": [
|
||||
"==",
|
||||
["string", ["get", "lhs"]],
|
||||
["get", "rhs"],
|
||||
[
|
||||
"collator",
|
||||
{"case-sensitive": false, "diacritic-sensitive": false, "locale": "en"}
|
||||
]
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"expression": [
|
||||
">",
|
||||
["string", ["get", "lhs"]],
|
||||
["get", "rhs"],
|
||||
[
|
||||
"collator",
|
||||
{"case-sensitive": false, "diacritic-sensitive": false, "locale": "en"}
|
||||
]
|
||||
],
|
||||
"inputs": [
|
||||
[{}, {"properties": {"lhs": "a", "rhs": "ä"}}],
|
||||
[{}, {"properties": {"lhs": "a", "rhs": "A"}}],
|
||||
[{}, {"properties": {"lhs": "b", "rhs": "ä"}}]
|
||||
],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": false,
|
||||
"isZoomConstant": true,
|
||||
"type": "boolean"
|
||||
},
|
||||
"outputs": [false, false, true],
|
||||
"serialized": [
|
||||
">",
|
||||
["string", ["get", "lhs"]],
|
||||
["string", ["get", "rhs"]],
|
||||
[
|
||||
"collator",
|
||||
{"case-sensitive": false, "diacritic-sensitive": false, "locale": "en"}
|
||||
]
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"expression": [
|
||||
"<=",
|
||||
["string", ["get", "lhs"]],
|
||||
["get", "rhs"],
|
||||
[
|
||||
"collator",
|
||||
{"case-sensitive": false, "diacritic-sensitive": true, "locale": "en"}
|
||||
]
|
||||
],
|
||||
"inputs": [
|
||||
[{}, {"properties": {"lhs": "ä", "rhs": "a"}}],
|
||||
[{}, {"properties": {"lhs": "A", "rhs": "a"}}],
|
||||
[{}, {"properties": {"lhs": "a", "rhs": "a"}}],
|
||||
[{}, {"properties": {"lhs": "ä", "rhs": "b"}}]
|
||||
],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": false,
|
||||
"isZoomConstant": true,
|
||||
"type": "boolean"
|
||||
},
|
||||
"outputs": [false, true, true, true],
|
||||
"serialized": [
|
||||
"<=",
|
||||
["string", ["get", "lhs"]],
|
||||
["string", ["get", "rhs"]],
|
||||
[
|
||||
"collator",
|
||||
{"case-sensitive": false, "diacritic-sensitive": true, "locale": "en"}
|
||||
]
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"expression": [
|
||||
"!",
|
||||
[
|
||||
"!=",
|
||||
["string", ["get", "lhs"]],
|
||||
["get", "rhs"],
|
||||
[
|
||||
"collator",
|
||||
{"case-sensitive": false, "diacritic-sensitive": true, "locale": "en"}
|
||||
]
|
||||
]
|
||||
],
|
||||
"inputs": [
|
||||
[{}, {"properties": {"lhs": "a", "rhs": "ä"}}],
|
||||
[{}, {"properties": {"lhs": "a", "rhs": "A"}}],
|
||||
[{}, {"properties": {"lhs": "b", "rhs": "ä"}}]
|
||||
],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": false,
|
||||
"isZoomConstant": true,
|
||||
"type": "boolean"
|
||||
},
|
||||
"outputs": [false, true, false],
|
||||
"serialized": [
|
||||
"!",
|
||||
[
|
||||
"!=",
|
||||
["string", ["get", "lhs"]],
|
||||
["get", "rhs"],
|
||||
[
|
||||
"collator",
|
||||
{"case-sensitive": false, "diacritic-sensitive": true, "locale": "en"}
|
||||
]
|
||||
]
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"expression": [
|
||||
"==",
|
||||
["string", ["get", "lhs"]],
|
||||
["get", "rhs"],
|
||||
["collator", {"diacritic-sensitive": true, "locale": "en"}]
|
||||
],
|
||||
"inputs": [
|
||||
[{}, {"properties": {"lhs": "ä", "rhs": "a"}}],
|
||||
[{}, {"properties": {"lhs": "A", "rhs": "a"}}],
|
||||
[{}, {"properties": {"lhs": "a", "rhs": "a"}}],
|
||||
[{}, {"properties": {"lhs": "ä", "rhs": "b"}}]
|
||||
],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": false,
|
||||
"isZoomConstant": true,
|
||||
"type": "boolean"
|
||||
},
|
||||
"outputs": [false, true, true, false],
|
||||
"serialized": [
|
||||
"==",
|
||||
["string", ["get", "lhs"]],
|
||||
["get", "rhs"],
|
||||
[
|
||||
"collator",
|
||||
{"case-sensitive": false, "diacritic-sensitive": true, "locale": "en"}
|
||||
]
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"expression": [
|
||||
"<",
|
||||
1,
|
||||
2,
|
||||
["collator", {"case-sensitive": false, "diacritic-sensitive": false}]
|
||||
],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "error",
|
||||
"errors": [
|
||||
{"key": "", "error": "Cannot use collator to compare non-string types."}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"expression": [
|
||||
"<",
|
||||
["string", ["get", "lhs"]],
|
||||
["get", "rhs"],
|
||||
["collator", {"case-sensitive": ["==", 1, 1], "locale": "en"}]
|
||||
],
|
||||
"inputs": [
|
||||
[{}, {"properties": {"lhs": "a", "rhs": "ä"}}],
|
||||
[{}, {"properties": {"lhs": "a", "rhs": "A"}}],
|
||||
[{}, {"properties": {"lhs": "ä", "rhs": "b"}}]
|
||||
],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": false,
|
||||
"isZoomConstant": true,
|
||||
"type": "boolean"
|
||||
},
|
||||
"outputs": [false, true, true],
|
||||
"serialized": [
|
||||
"<",
|
||||
["string", ["get", "lhs"]],
|
||||
["string", ["get", "rhs"]],
|
||||
[
|
||||
"collator",
|
||||
{"case-sensitive": true, "diacritic-sensitive": false, "locale": "en"}
|
||||
]
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"expression": [
|
||||
"==",
|
||||
1,
|
||||
2,
|
||||
["collator", {"case-sensitive": false, "diacritic-sensitive": false}]
|
||||
],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "error",
|
||||
"errors": [
|
||||
{"key": "", "error": "Cannot use collator to compare non-string types."}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"expression": ["==", "foo", "bar", ["collator", ["subexpression"]]],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "error",
|
||||
"errors": [
|
||||
{"key": "[3]", "error": "Collator options argument must be an object."}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"expression": [
|
||||
"==",
|
||||
["string", ["get", "lhs"]],
|
||||
["get", "rhs"],
|
||||
[
|
||||
"collator",
|
||||
{"case-sensitive": true, "diacritic-sensitive": true, "locale": "en"}
|
||||
]
|
||||
],
|
||||
"inputs": [
|
||||
[{}, {"properties": {"lhs": "a", "rhs": "ä"}}],
|
||||
[{}, {"properties": {"lhs": "a", "rhs": "A"}}],
|
||||
[{}, {"properties": {"lhs": "b", "rhs": "ä"}}]
|
||||
],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": false,
|
||||
"isZoomConstant": true,
|
||||
"type": "boolean"
|
||||
},
|
||||
"outputs": [false, false, false],
|
||||
"serialized": [
|
||||
"==",
|
||||
["string", ["get", "lhs"]],
|
||||
["get", "rhs"],
|
||||
[
|
||||
"collator",
|
||||
{"case-sensitive": true, "diacritic-sensitive": true, "locale": "en"}
|
||||
]
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"expression": [
|
||||
">=",
|
||||
["string", ["get", "lhs"]],
|
||||
["get", "rhs"],
|
||||
[
|
||||
"collator",
|
||||
{"case-sensitive": true, "diacritic-sensitive": true, "locale": "en"}
|
||||
]
|
||||
],
|
||||
"inputs": [
|
||||
[{}, {"properties": {"lhs": "a", "rhs": "ä"}}],
|
||||
[{}, {"properties": {"lhs": "a", "rhs": "A"}}],
|
||||
[{}, {"properties": {"lhs": "a", "rhs": "a"}}],
|
||||
[{}, {"properties": {"lhs": "b", "rhs": "ä"}}]
|
||||
],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": false,
|
||||
"isZoomConstant": true,
|
||||
"type": "boolean"
|
||||
},
|
||||
"outputs": [false, false, true, true],
|
||||
"serialized": [
|
||||
">=",
|
||||
["string", ["get", "lhs"]],
|
||||
["string", ["get", "rhs"]],
|
||||
[
|
||||
"collator",
|
||||
{"case-sensitive": true, "diacritic-sensitive": true, "locale": "en"}
|
||||
]
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"expression": ["concat"],
|
||||
"inputs": [[{}, {}]],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": true,
|
||||
"isZoomConstant": true,
|
||||
"type": "string"
|
||||
},
|
||||
"outputs": [""],
|
||||
"serialized": ""
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"expression": ["concat", "foo"],
|
||||
"inputs": [[{}, {}]],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": true,
|
||||
"isZoomConstant": true,
|
||||
"type": "string"
|
||||
},
|
||||
"outputs": ["foo"],
|
||||
"serialized": "foo"
|
||||
}
|
||||
}
|
||||
14
metrics/integration/expression-tests/concat/basic/test.json
Normal file
14
metrics/integration/expression-tests/concat/basic/test.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"expression": ["concat", "a", "b", "c"],
|
||||
"inputs": [[{}, {}]],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": true,
|
||||
"isZoomConstant": true,
|
||||
"type": "string"
|
||||
},
|
||||
"outputs": ["abc"],
|
||||
"serialized": "abc"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"expression": ["concat", ["get", "a"], ["get", "1"], ["get", "true"]],
|
||||
"inputs": [[{}, {"properties": {"a": "a", "1": 1, "true": true}}]],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": false,
|
||||
"isZoomConstant": true,
|
||||
"type": "string"
|
||||
},
|
||||
"outputs": ["a1true"],
|
||||
"serialized": ["concat", ["get", "a"], ["get", "1"], ["get", "true"]]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"propertySpec": {
|
||||
"type": "color",
|
||||
"property-type": "data-driven",
|
||||
"expression": {"parameters": ["zoom", "feature"]}
|
||||
},
|
||||
"expression": ["step", ["get", "x"], "black", 0, "invalid", 10, "blue"],
|
||||
"inputs": [
|
||||
[{}, {"properties": {"x": -1}}],
|
||||
[{}, {"properties": {"x": 0}}],
|
||||
[{}, {"properties": {"x": 5}}],
|
||||
[{}, {"properties": {"x": 10}}],
|
||||
[{}, {"properties": {"x": 11}}]
|
||||
],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "error",
|
||||
"errors": [
|
||||
{"key": "[4]", "error": "Could not parse color from value 'invalid'"}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"propertySpec": {"type": "color"},
|
||||
"expression": "red",
|
||||
"inputs": [[{}, {}]],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": true,
|
||||
"isZoomConstant": true,
|
||||
"type": "color"
|
||||
},
|
||||
"outputs": [[1, 0, 0, 1]],
|
||||
"serialized": ["rgba", 255, 0, 0, 1]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"expression": ["to-color", "red"],
|
||||
"inputs": [[{}, {}]],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": true,
|
||||
"isZoomConstant": true,
|
||||
"type": "color"
|
||||
},
|
||||
"outputs": [[1, 0, 0, 1]],
|
||||
"serialized": ["rgba", 255, 0, 0, 1]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"expression": [
|
||||
"let",
|
||||
"a",
|
||||
1,
|
||||
"b",
|
||||
2,
|
||||
["+", ["+", ["var", "a"], ["var", "b"]], ["var", "a"]]
|
||||
],
|
||||
"inputs": [[{}, {}]],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": true,
|
||||
"isZoomConstant": true,
|
||||
"type": "number"
|
||||
},
|
||||
"outputs": [4],
|
||||
"serialized": 4
|
||||
}
|
||||
}
|
||||
14
metrics/integration/expression-tests/cos/basic/test.json
Normal file
14
metrics/integration/expression-tests/cos/basic/test.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"expression": ["cos", 0],
|
||||
"inputs": [[{}, {}]],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": true,
|
||||
"isZoomConstant": true,
|
||||
"type": "number"
|
||||
},
|
||||
"outputs": [1],
|
||||
"serialized": 1
|
||||
}
|
||||
}
|
||||
14
metrics/integration/expression-tests/divide/basic/test.json
Normal file
14
metrics/integration/expression-tests/divide/basic/test.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"expression": ["/", 10, 5],
|
||||
"inputs": [[{}, {}]],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": true,
|
||||
"isZoomConstant": true,
|
||||
"type": "number"
|
||||
},
|
||||
"outputs": [2],
|
||||
"serialized": 2
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"expression": ["downcase", "StRiNg"],
|
||||
"inputs": [[{}, {}]],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": true,
|
||||
"isZoomConstant": true,
|
||||
"type": "string"
|
||||
},
|
||||
"outputs": ["string"],
|
||||
"serialized": "string"
|
||||
}
|
||||
}
|
||||
14
metrics/integration/expression-tests/e/basic/test.json
Normal file
14
metrics/integration/expression-tests/e/basic/test.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"expression": ["e"],
|
||||
"inputs": [[{}, {}]],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": true,
|
||||
"isZoomConstant": true,
|
||||
"type": "number"
|
||||
},
|
||||
"outputs": [2.71828],
|
||||
"serialized": 2.718281828459045
|
||||
}
|
||||
}
|
||||
14
metrics/integration/expression-tests/equal/array/test.json
Normal file
14
metrics/integration/expression-tests/equal/array/test.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"expression": ["==", ["get", "x"], ["literal", [1]]],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "error",
|
||||
"errors": [
|
||||
{
|
||||
"key": "[2]",
|
||||
"error": "\"==\" comparisons are not supported for type 'array<number, 1>'."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"expression": [
|
||||
"==",
|
||||
["get", "x"],
|
||||
["get", "y"],
|
||||
["collator", {"case-sensitive": false, "diacritic-sensitive": false}]
|
||||
],
|
||||
"inputs": [
|
||||
[{}, {"properties": {"x": "a", "y": "A"}}],
|
||||
[{}, {"properties": {"x": "1", "y": "2"}}],
|
||||
[{}, {"properties": {"x": "1", "y": null}}],
|
||||
[{}, {"properties": {"x": null, "y": null}}],
|
||||
[{}, {"properties": {"x": 1, "y": "1"}}],
|
||||
[{}, {"properties": {"x": 1, "y": 1}}]
|
||||
],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": false,
|
||||
"isZoomConstant": true,
|
||||
"type": "boolean"
|
||||
},
|
||||
"outputs": [true, false, false, true, false, true],
|
||||
"serialized": [
|
||||
"==",
|
||||
["get", "x"],
|
||||
["get", "y"],
|
||||
["collator", {"case-sensitive": false, "diacritic-sensitive": false}]
|
||||
]
|
||||
}
|
||||
}
|
||||
14
metrics/integration/expression-tests/equal/color/test.json
Normal file
14
metrics/integration/expression-tests/equal/color/test.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"expression": ["==", ["get", "x"], ["to-color", "red"]],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "error",
|
||||
"errors": [
|
||||
{
|
||||
"key": "[2]",
|
||||
"error": "\"==\" comparisons are not supported for type 'color'."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"expression": ["==", ["string", ["get", "x"]], ["number", ["get", "y"]]],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "error",
|
||||
"errors": [
|
||||
{"key": "", "error": "Cannot compare types 'string' and 'number'."}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"expression": ["==", null, ["get", "x"]],
|
||||
"inputs": [[{}, {"properties": {}}], [{}, {"properties": {"x": 1}}]],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": false,
|
||||
"isZoomConstant": true,
|
||||
"type": "boolean"
|
||||
},
|
||||
"outputs": [true, false],
|
||||
"serialized": ["==", null, ["get", "x"]]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"expression": ["==", null, ["get", "x"]],
|
||||
"inputs": [[{}, {"properties": {}}], [{}, {"properties": {"x": 1}}]],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": false,
|
||||
"isZoomConstant": true,
|
||||
"type": "boolean"
|
||||
},
|
||||
"outputs": [true, false],
|
||||
"serialized": ["==", null, ["get", "x"]]
|
||||
}
|
||||
}
|
||||
18
metrics/integration/expression-tests/equal/number/test.json
Normal file
18
metrics/integration/expression-tests/equal/number/test.json
Normal file
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"expression": ["==", ["number", ["get", "x"]], ["get", "y"]],
|
||||
"inputs": [
|
||||
[{}, {"properties": {"x": 1, "y": 1}}],
|
||||
[{}, {"properties": {"x": 1, "y": 2}}],
|
||||
[{}, {"properties": {"x": 1, "y": "1"}}]
|
||||
],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": false,
|
||||
"isZoomConstant": true,
|
||||
"type": "boolean"
|
||||
},
|
||||
"outputs": [true, false, false],
|
||||
"serialized": ["==", ["number", ["get", "x"]], ["get", "y"]]
|
||||
}
|
||||
}
|
||||
14
metrics/integration/expression-tests/equal/object/test.json
Normal file
14
metrics/integration/expression-tests/equal/object/test.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"expression": ["==", ["get", "x"], ["literal", {}]],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "error",
|
||||
"errors": [
|
||||
{
|
||||
"key": "[2]",
|
||||
"error": "\"==\" comparisons are not supported for type 'object'."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
18
metrics/integration/expression-tests/equal/string/test.json
Normal file
18
metrics/integration/expression-tests/equal/string/test.json
Normal file
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"expression": ["==", ["string", ["get", "x"]], ["get", "y"]],
|
||||
"inputs": [
|
||||
[{}, {"properties": {"x": "1", "y": "1"}}],
|
||||
[{}, {"properties": {"x": "1", "y": 2}}],
|
||||
[{}, {"properties": {"x": "1", "y": 1}}]
|
||||
],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": false,
|
||||
"isZoomConstant": true,
|
||||
"type": "boolean"
|
||||
},
|
||||
"outputs": [true, false, false],
|
||||
"serialized": ["==", ["string", ["get", "x"]], ["get", "y"]]
|
||||
}
|
||||
}
|
||||
21
metrics/integration/expression-tests/equal/value/test.json
Normal file
21
metrics/integration/expression-tests/equal/value/test.json
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"expression": ["==", ["get", "x"], ["get", "y"]],
|
||||
"inputs": [
|
||||
[{}, {"properties": {"x": 0, "y": 0}}],
|
||||
[{}, {"properties": {"x": "0", "y": "0"}}],
|
||||
[{}, {"properties": {"x": 0, "y": false}}],
|
||||
[{}, {"properties": {"x": 0, "y": "0"}}],
|
||||
[{}, {"properties": {"x": 0, "y": null}}],
|
||||
[{}, {"properties": {"x": "0", "y": null}}]
|
||||
],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": false,
|
||||
"isZoomConstant": true,
|
||||
"type": "boolean"
|
||||
},
|
||||
"outputs": [true, true, false, false, false, false],
|
||||
"serialized": ["==", ["get", "x"], ["get", "y"]]
|
||||
}
|
||||
}
|
||||
23
metrics/integration/expression-tests/floor/basic/test.json
Normal file
23
metrics/integration/expression-tests/floor/basic/test.json
Normal file
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"expression": ["floor", ["get", "x"]],
|
||||
"inputs": [
|
||||
[{}, {"properties": {"x": -2.6}}],
|
||||
[{}, {"properties": {"x": -2.5}}],
|
||||
[{}, {"properties": {"x": -2.4}}],
|
||||
[{}, {"properties": {"x": -2}}],
|
||||
[{}, {"properties": {"x": 2.6}}],
|
||||
[{}, {"properties": {"x": 2.5}}],
|
||||
[{}, {"properties": {"x": 2.4}}],
|
||||
[{}, {"properties": {"x": 2}}]
|
||||
],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": false,
|
||||
"isZoomConstant": true,
|
||||
"type": "number"
|
||||
},
|
||||
"outputs": [-3, -3, -3, -2, 2, 2, 2, 2],
|
||||
"serialized": ["floor", ["number", ["get", "x"]]]
|
||||
}
|
||||
}
|
||||
96
metrics/integration/expression-tests/format/basic/test.json
Normal file
96
metrics/integration/expression-tests/format/basic/test.json
Normal file
@@ -0,0 +1,96 @@
|
||||
{
|
||||
"expression": [
|
||||
"format",
|
||||
"a",
|
||||
{},
|
||||
"b",
|
||||
{
|
||||
"font-scale": 2
|
||||
},
|
||||
"c",
|
||||
{
|
||||
"text-font": [
|
||||
"literal",
|
||||
[
|
||||
"a",
|
||||
"b"
|
||||
]
|
||||
]
|
||||
},
|
||||
"d",
|
||||
{
|
||||
"text-color": "rgb(0, 255, 0)"
|
||||
}
|
||||
],
|
||||
"inputs": [
|
||||
[
|
||||
{},
|
||||
{}
|
||||
]
|
||||
],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": true,
|
||||
"isZoomConstant": true,
|
||||
"type": "formatted"
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"sections": [
|
||||
{
|
||||
"text": "a",
|
||||
"image": null,
|
||||
"scale": null,
|
||||
"fontStack": null,
|
||||
"textColor": null
|
||||
},
|
||||
{
|
||||
"text": "b",
|
||||
"image": null,
|
||||
"scale": 2,
|
||||
"fontStack": null,
|
||||
"textColor": null
|
||||
},
|
||||
{
|
||||
"text": "c",
|
||||
"image": null,
|
||||
"scale": null,
|
||||
"fontStack": "a,b",
|
||||
"textColor": null
|
||||
},
|
||||
{
|
||||
"text": "d",
|
||||
"image": null,
|
||||
"scale": null,
|
||||
"fontStack": null,
|
||||
"textColor": {"r":0,"g":1,"b":0,"a":1}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"serialized": [
|
||||
"format",
|
||||
"a",
|
||||
{},
|
||||
"b",
|
||||
{
|
||||
"font-scale": 2
|
||||
},
|
||||
"c",
|
||||
{
|
||||
"text-font": [
|
||||
"literal",
|
||||
[
|
||||
"a",
|
||||
"b"
|
||||
]
|
||||
]
|
||||
},
|
||||
"d",
|
||||
{
|
||||
"text-color": ["rgba", 0, 255, 0, 1]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
{
|
||||
"expression": [
|
||||
"format",
|
||||
["get", "a"],
|
||||
{},
|
||||
["get", "1"],
|
||||
{},
|
||||
["get", "true"],
|
||||
{}
|
||||
],
|
||||
"inputs": [[{}, {"properties": {"a": "a", "1": 1, "true": true}}]],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": false,
|
||||
"isZoomConstant": true,
|
||||
"type": "formatted"
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"sections": [
|
||||
{
|
||||
"text": "a",
|
||||
"image": null,
|
||||
"scale": null,
|
||||
"fontStack": null,
|
||||
"textColor": null
|
||||
},
|
||||
{
|
||||
"text": "1",
|
||||
"image": null,
|
||||
"scale": null,
|
||||
"fontStack": null,
|
||||
"textColor": null
|
||||
},
|
||||
{
|
||||
"text": "true",
|
||||
"image": null,
|
||||
"scale": null,
|
||||
"fontStack": null,
|
||||
"textColor": null
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"serialized": [
|
||||
"format",
|
||||
["get", "a"],
|
||||
{},
|
||||
["get", "1"],
|
||||
{},
|
||||
["get", "true"],
|
||||
{}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
{
|
||||
"expression": [
|
||||
"format",
|
||||
"a",
|
||||
{
|
||||
"font-scale": ["get", "font-scale"]
|
||||
}
|
||||
],
|
||||
"inputs": [
|
||||
[{}, {"properties": {"font-scale": 1.5}}],
|
||||
[{}, {"properties": {"font-scale": 0.5}}]
|
||||
],
|
||||
"expected": {
|
||||
"compiled": {
|
||||
"result": "success",
|
||||
"isFeatureConstant": false,
|
||||
"isZoomConstant": true,
|
||||
"type": "formatted"
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"sections": [
|
||||
{
|
||||
"text": "a",
|
||||
"image": null,
|
||||
"scale": 1.5,
|
||||
"fontStack": null,
|
||||
"textColor": null
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"sections": [
|
||||
{
|
||||
"text": "a",
|
||||
"image": null,
|
||||
"scale": 0.5,
|
||||
"fontStack": null,
|
||||
"textColor": null
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"serialized": [
|
||||
"format",
|
||||
"a",
|
||||
{
|
||||
"font-scale": ["number", ["get", "font-scale"]]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user