Repository: developmentseed/cql2-rs (language: python)

Issue:
Invalid parse while combining AND and OR clauses
Hi, thanks a lot for this project.

I try using it, but I'm stuck with what I think is an invalid parsing.

Here is a minimal example: 

```rust
use cql2::Expr;

pub fn main() {
    let s = "(floors>5 AND material='brick') OR swimming_pool=true";

    let query = s.parse::<Expr>().expect("should be valid query");

    assert_eq!(
        query.to_text().unwrap(),
        r#"(("floors" > 5) AND ("material" = 'brick')) OR ("swimming_pool" = true)"#
    );
}

```

```
thread 'main' panicked at examples/test.rs:8:5:
assertion `left == right` failed
  left: "((\"floors\" > 5) AND (\"material\" = 'brick') AND (\"swimming_pool\" = true))"
 right: "((\"floors\" > 5) AND (\"material\" = 'brick')) OR (\"swimming_pool\" = true)"
 ```

The `AND`/`OR` combination becomes only 2 `AND`.

The example is from `fixtures/test/example17.txt`: `(floors>5 AND material='brick') OR swimming_pool=true`, but strangely it's not the same as the  `tests/expected/text/example17.txt` (and I think it's because this file is generated).

Invalid parse while combining AND and OR clauses
Hi, thanks a lot for this project.

I try using it, but I'm stuck with what I think is an invalid parsing.

Here is a minimal example: 

```rust
use cql2::Expr;

pub fn main() {
    let s = "(floors>5 AND material='brick') OR swimming_pool=true";

    let query = s.parse::<Expr>().expect("should be valid query");

    assert_eq!(
        query.to_text().unwrap(),
        r#"(("floors" > 5) AND ("material" = 'brick')) OR ("swimming_pool" = true)"#
    );
}

```

```
thread 'main' panicked at examples/test.rs:8:5:
assertion `left == right` failed
  left: "((\"floors\" > 5) AND (\"material\" = 'brick') AND (\"swimming_pool\" = true))"
 right: "((\"floors\" > 5) AND (\"material\" = 'brick')) OR (\"swimming_pool\" = true)"
 ```

The `AND`/`OR` combination becomes only 2 `AND`.

The example is from `fixtures/test/example17.txt`: `(floors>5 AND material='brick') OR swimming_pool=true`, but strangely it's not the same as the  `tests/expected/text/example17.txt` (and I think it's because this file is generated).

Failing test for #44



Discussion / hints:
@bitner I took a stab but I don't grok the parser well enough ATM, so I'm unassigning myself. I put a failing test up in https://github.com/developmentseed/cql2-rs/pull/45.
@bitner I took a stab but I don't grok the parser well enough ATM, so I'm unassigning myself. I put a failing test up in https://github.com/developmentseed/cql2-rs/pull/45.


Fix patch:
diff --git a/Cargo.lock b/Cargo.lock
index 4d05406..508dbb5 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -224,6 +224,7 @@ dependencies = [
  "lazy_static",
  "pest",
  "pest_derive",
+ "pg_escape",
  "rstest",
  "serde",
  "serde_derive",
@@ -612,6 +613,57 @@ dependencies = [
  "sha2",
 ]
 
+[[package]]
+name = "pg_escape"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44c7bc82ccbe2c7ef7ceed38dcac90d7ff46681e061e9d7310cbcd409113e303"
+dependencies = [
+ "phf",
+]
+
+[[package]]
+name = "phf"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc"
+dependencies = [
+ "phf_macros",
+ "phf_shared",
+]
+
+[[package]]
+name = "phf_generator"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0"
+dependencies = [
+ "phf_shared",
+ "rand",
+]
+
+[[package]]
+name = "phf_macros"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b"
+dependencies = [
+ "phf_generator",
+ "phf_shared",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b"
+dependencies = [
+ "siphasher",
+]
+
 [[package]]
 name = "pin-project-lite"
 version = "0.2.14"
@@ -730,6 +782,21 @@ dependencies = [
  "proc-macro2",
 ]
 
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+
 [[package]]
 name = "regex"
 version = "1.11.0"
@@ -860,6 +927,12 @@ dependencies = [
  "digest",
 ]
 
+[[package]]
+name = "siphasher"
+version = "0.3.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d"
+
 [[package]]
 name = "slab"
 version = "0.4.9"
diff --git a/Cargo.toml b/Cargo.toml
index d490993..3980d47 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -30,6 +30,7 @@ geozero = "0.14.0"
 lazy_static = "1.5"
 pest = "2.7"
 pest_derive = { version = "2.7", features = ["grammar-extras"] }
+pg_escape = "0.1.1"
 serde = "1.0"
 serde_derive = "1.0"
 serde_json = { version = "1.0", features = ["preserve_order"] }
diff --git a/fixtures/json/clause6_01.json b/examples/json/clause6_01.json
similarity index 100%
rename from fixtures/json/clause6_01.json
rename to examples/json/clause6_01.json
diff --git a/fixtures/json/clause6_02a.json b/examples/json/clause6_02a.json
similarity index 100%
rename from fixtures/json/clause6_02a.json
rename to examples/json/clause6_02a.json
diff --git a/fixtures/json/clause6_02b.json b/examples/json/clause6_02b.json
similarity index 100%
rename from fixtures/json/clause6_02b.json
rename to examples/json/clause6_02b.json
diff --git a/fixtures/json/clause6_02c.json b/examples/json/clause6_02c.json
similarity index 100%
rename from fixtures/json/clause6_02c.json
rename to examples/json/clause6_02c.json
diff --git a/fixtures/json/clause6_02d.json b/examples/json/clause6_02d.json
similarity index 100%
rename from fixtures/json/clause6_02d.json
rename to examples/json/clause6_02d.json
diff --git a/fixtures/json/clause6_03.json b/examples/json/clause6_03.json
similarity index 100%
rename from fixtures/json/clause6_03.json
rename to examples/json/clause6_03.json
diff --git a/fixtures/json/clause7_01.json b/examples/json/clause7_01.json
similarity index 100%
rename from fixtures/json/clause7_01.json
rename to examples/json/clause7_01.json
diff --git a/fixtures/json/clause7_02.json b/examples/json/clause7_02.json
similarity index 100%
rename from fixtures/json/clause7_02.json
rename to examples/json/clause7_02.json
diff --git a/fixtures/json/clause7_03a.json b/examples/json/clause7_03a.json
similarity index 100%
rename from fixtures/json/clause7_03a.json
rename to examples/json/clause7_03a.json
diff --git a/fixtures/json/clause7_03b.json b/examples/json/clause7_03b.json
similarity index 100%
rename from fixtures/json/clause7_03b.json
rename to examples/json/clause7_03b.json
diff --git a/fixtures/json/clause7_04.json b/examples/json/clause7_04.json
similarity index 100%
rename from fixtures/json/clause7_04.json
rename to examples/json/clause7_04.json
diff --git a/fixtures/json/clause7_05.json b/examples/json/clause7_05.json
similarity index 100%
rename from fixtures/json/clause7_05.json
rename to examples/json/clause7_05.json
diff --git a/fixtures/json/clause7_07.json b/examples/json/clause7_07.json
similarity index 100%
rename from fixtures/json/clause7_07.json
rename to examples/json/clause7_07.json
diff --git a/fixtures/json/clause7_10.json b/examples/json/clause7_10.json
similarity index 100%
rename from fixtures/json/clause7_10.json
rename to examples/json/clause7_10.json
diff --git a/fixtures/json/clause7_12.json b/examples/json/clause7_12.json
similarity index 100%
rename from fixtures/json/clause7_12.json
rename to examples/json/clause7_12.json
diff --git a/fixtures/json/clause7_13.json b/examples/json/clause7_13.json
similarity index 100%
rename from fixtures/json/clause7_13.json
rename to examples/json/clause7_13.json
diff --git a/fixtures/json/clause7_15.json b/examples/json/clause7_15.json
similarity index 100%
rename from fixtures/json/clause7_15.json
rename to examples/json/clause7_15.json
diff --git a/fixtures/json/clause7_16.json b/examples/json/clause7_16.json
similarity index 100%
rename from fixtures/json/clause7_16.json
rename to examples/json/clause7_16.json
diff --git a/fixtures/json/clause7_17.json b/examples/json/clause7_17.json
similarity index 100%
rename from fixtures/json/clause7_17.json
rename to examples/json/clause7_17.json
diff --git a/fixtures/json/clause7_18.json b/examples/json/clause7_18.json
similarity index 100%
rename from fixtures/json/clause7_18.json
rename to examples/json/clause7_18.json
diff --git a/fixtures/json/clause7_19.json b/examples/json/clause7_19.json
similarity index 100%
rename from fixtures/json/clause7_19.json
rename to examples/json/clause7_19.json
diff --git a/fixtures/json/example01.json b/examples/json/example01.json
similarity index 100%
rename from fixtures/json/example01.json
rename to examples/json/example01.json
diff --git a/fixtures/json/example02.json b/examples/json/example02.json
similarity index 100%
rename from fixtures/json/example02.json
rename to examples/json/example02.json
diff --git a/fixtures/json/example03.json b/examples/json/example03.json
similarity index 100%
rename from fixtures/json/example03.json
rename to examples/json/example03.json
diff --git a/fixtures/json/example04.json b/examples/json/example04.json
similarity index 100%
rename from fixtures/json/example04.json
rename to examples/json/example04.json
diff --git a/fixtures/json/example05a.json b/examples/json/example05a.json
similarity index 100%
rename from fixtures/json/example05a.json
rename to examples/json/example05a.json
diff --git a/fixtures/json/example05b.json b/examples/json/example05b.json
similarity index 100%
rename from fixtures/json/example05b.json
rename to examples/json/example05b.json
diff --git a/fixtures/json/example06a.json b/examples/json/example06a.json
similarity index 100%
rename from fixtures/json/example06a.json
rename to examples/json/example06a.json
diff --git a/fixtures/json/example06b.json b/examples/json/example06b.json
similarity index 100%
rename from fixtures/json/example06b.json
rename to examples/json/example06b.json
diff --git a/fixtures/json/example07.json b/examples/json/example07.json
similarity index 100%
rename from fixtures/json/example07.json
rename to examples/json/example07.json
diff --git a/fixtures/json/example08.json b/examples/json/example08.json
similarity index 100%
rename from fixtures/json/example08.json
rename to examples/json/example08.json
diff --git a/fixtures/json/example09.json b/examples/json/example09.json
similarity index 100%
rename from fixtures/json/example09.json
rename to examples/json/example09.json
diff --git a/fixtures/json/example10.json b/examples/json/example10.json
similarity index 100%
rename from fixtures/json/example10.json
rename to examples/json/example10.json
diff --git a/fixtures/json/example11.json b/examples/json/example11.json
similarity index 100%
rename from fixtures/json/example11.json
rename to examples/json/example11.json
diff --git a/fixtures/json/example12.json b/examples/json/example12.json
similarity index 100%
rename from fixtures/json/example12.json
rename to examples/json/example12.json
diff --git a/fixtures/json/example13.json b/examples/json/example13.json
similarity index 100%
rename from fixtures/json/example13.json
rename to examples/json/example13.json
diff --git a/fixtures/json/example14.json b/examples/json/example14.json
similarity index 100%
rename from fixtures/json/example14.json
rename to examples/json/example14.json
diff --git a/fixtures/json/example15.json b/examples/json/example15.json
similarity index 100%
rename from fixtures/json/example15.json
rename to examples/json/example15.json
diff --git a/fixtures/json/example16.json b/examples/json/example16.json
similarity index 100%
rename from fixtures/json/example16.json
rename to examples/json/example16.json
diff --git a/fixtures/json/example17.json b/examples/json/example17.json
similarity index 100%
rename from fixtures/json/example17.json
rename to examples/json/example17.json
diff --git a/fixtures/json/example18.json b/examples/json/example18.json
similarity index 100%
rename from fixtures/json/example18.json
rename to examples/json/example18.json
diff --git a/fixtures/json/example19.json b/examples/json/example19.json
similarity index 100%
rename from fixtures/json/example19.json
rename to examples/json/example19.json
diff --git a/fixtures/json/example20.json b/examples/json/example20.json
similarity index 100%
rename from fixtures/json/example20.json
rename to examples/json/example20.json
diff --git a/fixtures/json/example21.json b/examples/json/example21.json
similarity index 100%
rename from fixtures/json/example21.json
rename to examples/json/example21.json
diff --git a/fixtures/json/example22.json b/examples/json/example22.json
similarity index 100%
rename from fixtures/json/example22.json
rename to examples/json/example22.json
diff --git a/fixtures/json/example23.json b/examples/json/example23.json
similarity index 100%
rename from fixtures/json/example23.json
rename to examples/json/example23.json
diff --git a/fixtures/json/example24.json b/examples/json/example24.json
similarity index 100%
rename from fixtures/json/example24.json
rename to examples/json/example24.json
diff --git a/fixtures/json/example25.json b/examples/json/example25.json
similarity index 100%
rename from fixtures/json/example25.json
rename to examples/json/example25.json
diff --git a/fixtures/json/example26.json b/examples/json/example26.json
similarity index 100%
rename from fixtures/json/example26.json
rename to examples/json/example26.json
diff --git a/fixtures/json/example27.json b/examples/json/example27.json
similarity index 100%
rename from fixtures/json/example27.json
rename to examples/json/example27.json
diff --git a/fixtures/json/example28.json b/examples/json/example28.json
similarity index 100%
rename from fixtures/json/example28.json
rename to examples/json/example28.json
diff --git a/fixtures/json/example29.json b/examples/json/example29.json
similarity index 100%
rename from fixtures/json/example29.json
rename to examples/json/example29.json
diff --git a/fixtures/json/example30.json b/examples/json/example30.json
similarity index 100%
rename from fixtures/json/example30.json
rename to examples/json/example30.json
diff --git a/fixtures/json/example31.json b/examples/json/example31.json
similarity index 100%
rename from fixtures/json/example31.json
rename to examples/json/example31.json
diff --git a/fixtures/json/example32.json b/examples/json/example32.json
similarity index 100%
rename from fixtures/json/example32.json
rename to examples/json/example32.json
diff --git a/fixtures/json/example33.json b/examples/json/example33.json
similarity index 100%
rename from fixtures/json/example33.json
rename to examples/json/example33.json
diff --git a/fixtures/json/example34.json b/examples/json/example34.json
similarity index 100%
rename from fixtures/json/example34.json
rename to examples/json/example34.json
diff --git a/fixtures/json/example35.json b/examples/json/example35.json
similarity index 100%
rename from fixtures/json/example35.json
rename to examples/json/example35.json
diff --git a/fixtures/json/example36.json b/examples/json/example36.json
similarity index 100%
rename from fixtures/json/example36.json
rename to examples/json/example36.json
diff --git a/fixtures/json/example37.json b/examples/json/example37.json
similarity index 100%
rename from fixtures/json/example37.json
rename to examples/json/example37.json
diff --git a/fixtures/json/example38.json b/examples/json/example38.json
similarity index 100%
rename from fixtures/json/example38.json
rename to examples/json/example38.json
diff --git a/fixtures/json/example39.json b/examples/json/example39.json
similarity index 100%
rename from fixtures/json/example39.json
rename to examples/json/example39.json
diff --git a/fixtures/json/example40.json b/examples/json/example40.json
similarity index 100%
rename from fixtures/json/example40.json
rename to examples/json/example40.json
diff --git a/fixtures/json/example41.json b/examples/json/example41.json
similarity index 100%
rename from fixtures/json/example41.json
rename to examples/json/example41.json
diff --git a/fixtures/json/example42.json b/examples/json/example42.json
similarity index 100%
rename from fixtures/json/example42.json
rename to examples/json/example42.json
diff --git a/fixtures/json/example43.json b/examples/json/example43.json
similarity index 100%
rename from fixtures/json/example43.json
rename to examples/json/example43.json
diff --git a/fixtures/json/example44.json b/examples/json/example44.json
similarity index 100%
rename from fixtures/json/example44.json
rename to examples/json/example44.json
diff --git a/fixtures/json/example45.json b/examples/json/example45.json
similarity index 100%
rename from fixtures/json/example45.json
rename to examples/json/example45.json
diff --git a/fixtures/json/example46.json b/examples/json/example46.json
similarity index 100%
rename from fixtures/json/example46.json
rename to examples/json/example46.json
diff --git a/fixtures/json/example47.json b/examples/json/example47.json
similarity index 100%
rename from fixtures/json/example47.json
rename to examples/json/example47.json
diff --git a/fixtures/json/example48.json b/examples/json/example48.json
similarity index 100%
rename from fixtures/json/example48.json
rename to examples/json/example48.json
diff --git a/fixtures/json/example49.json b/examples/json/example49.json
similarity index 100%
rename from fixtures/json/example49.json
rename to examples/json/example49.json
diff --git a/fixtures/json/example50.json b/examples/json/example50.json
similarity index 100%
rename from fixtures/json/example50.json
rename to examples/json/example50.json
diff --git a/fixtures/json/example51.json b/examples/json/example51.json
similarity index 100%
rename from fixtures/json/example51.json
rename to examples/json/example51.json
diff --git a/fixtures/json/example52.json b/examples/json/example52.json
similarity index 100%
rename from fixtures/json/example52.json
rename to examples/json/example52.json
diff --git a/fixtures/json/example53.json b/examples/json/example53.json
similarity index 100%
rename from fixtures/json/example53.json
rename to examples/json/example53.json
diff --git a/fixtures/json/example54.json b/examples/json/example54.json
similarity index 100%
rename from fixtures/json/example54.json
rename to examples/json/example54.json
diff --git a/fixtures/json/example55.json b/examples/json/example55.json
similarity index 100%
rename from fixtures/json/example55.json
rename to examples/json/example55.json
diff --git a/fixtures/json/example56.json b/examples/json/example56.json
similarity index 100%
rename from fixtures/json/example56.json
rename to examples/json/example56.json
diff --git a/fixtures/json/example57.json b/examples/json/example57.json
similarity index 100%
rename from fixtures/json/example57.json
rename to examples/json/example57.json
diff --git a/fixtures/json/example58.json b/examples/json/example58.json
similarity index 100%
rename from fixtures/json/example58.json
rename to examples/json/example58.json
diff --git a/fixtures/json/example59.json b/examples/json/example59.json
similarity index 100%
rename from fixtures/json/example59.json
rename to examples/json/example59.json
diff --git a/fixtures/json/example60.json b/examples/json/example60.json
similarity index 100%
rename from fixtures/json/example60.json
rename to examples/json/example60.json
diff --git a/fixtures/json/example61.json b/examples/json/example61.json
similarity index 100%
rename from fixtures/json/example61.json
rename to examples/json/example61.json
diff --git a/fixtures/json/example62.json b/examples/json/example62.json
similarity index 100%
rename from fixtures/json/example62.json
rename to examples/json/example62.json
diff --git a/fixtures/json/example63.json b/examples/json/example63.json
similarity index 100%
rename from fixtures/json/example63.json
rename to examples/json/example63.json
diff --git a/fixtures/json/example64.json b/examples/json/example64.json
similarity index 100%
rename from fixtures/json/example64.json
rename to examples/json/example64.json
diff --git a/fixtures/json/example65.json b/examples/json/example65.json
similarity index 100%
rename from fixtures/json/example65.json
rename to examples/json/example65.json
diff --git a/fixtures/json/example66.json b/examples/json/example66.json
similarity index 100%
rename from fixtures/json/example66.json
rename to examples/json/example66.json
diff --git a/fixtures/json/example67.json b/examples/json/example67.json
similarity index 100%
rename from fixtures/json/example67.json
rename to examples/json/example67.json
diff --git a/fixtures/json/example68.json b/examples/json/example68.json
similarity index 100%
rename from fixtures/json/example68.json
rename to examples/json/example68.json
diff --git a/fixtures/json/example69.json b/examples/json/example69.json
similarity index 100%
rename from fixtures/json/example69.json
rename to examples/json/example69.json
diff --git a/fixtures/json/example70.json b/examples/json/example70.json
similarity index 100%
rename from fixtures/json/example70.json
rename to examples/json/example70.json
diff --git a/fixtures/json/example71.json b/examples/json/example71.json
similarity index 100%
rename from fixtures/json/example71.json
rename to examples/json/example71.json
diff --git a/fixtures/json/example72.json b/examples/json/example72.json
similarity index 100%
rename from fixtures/json/example72.json
rename to examples/json/example72.json
diff --git a/fixtures/json/example73.json b/examples/json/example73.json
similarity index 100%
rename from fixtures/json/example73.json
rename to examples/json/example73.json
diff --git a/fixtures/json/example74.json b/examples/json/example74.json
similarity index 100%
rename from fixtures/json/example74.json
rename to examples/json/example74.json
diff --git a/fixtures/json/example75.json b/examples/json/example75.json
similarity index 100%
rename from fixtures/json/example75.json
rename to examples/json/example75.json
diff --git a/fixtures/json/example76.json b/examples/json/example76.json
similarity index 100%
rename from fixtures/json/example76.json
rename to examples/json/example76.json
diff --git a/fixtures/json/example77.json b/examples/json/example77.json
similarity index 100%
rename from fixtures/json/example77.json
rename to examples/json/example77.json
diff --git a/fixtures/json/example78.json b/examples/json/example78.json
similarity index 100%
rename from fixtures/json/example78.json
rename to examples/json/example78.json
diff --git a/fixtures/json/example79.json b/examples/json/example79.json
similarity index 100%
rename from fixtures/json/example79.json
rename to examples/json/example79.json
diff --git a/fixtures/json/example80.json b/examples/json/example80.json
similarity index 100%
rename from fixtures/json/example80.json
rename to examples/json/example80.json
diff --git a/fixtures/json/example81.json b/examples/json/example81.json
similarity index 100%
rename from fixtures/json/example81.json
rename to examples/json/example81.json
diff --git a/fixtures/json/example82.json b/examples/json/example82.json
similarity index 100%
rename from fixtures/json/example82.json
rename to examples/json/example82.json
diff --git a/fixtures/json/example83.json b/examples/json/example83.json
similarity index 100%
rename from fixtures/json/example83.json
rename to examples/json/example83.json
diff --git a/fixtures/json/example84.json b/examples/json/example84.json
similarity index 100%
rename from fixtures/json/example84.json
rename to examples/json/example84.json
diff --git a/fixtures/json/example85.json b/examples/json/example85.json
similarity index 100%
rename from fixtures/json/example85.json
rename to examples/json/example85.json
diff --git a/fixtures/json/example86.json b/examples/json/example86.json
similarity index 100%
rename from fixtures/json/example86.json
rename to examples/json/example86.json
diff --git a/fixtures/json/validate.sh b/examples/json/validate.sh
similarity index 100%
rename from fixtures/json/validate.sh
rename to examples/json/validate.sh
diff --git a/fixtures/text/clause6_01.txt b/examples/text/clause6_01.txt
similarity index 100%
rename from fixtures/text/clause6_01.txt
rename to examples/text/clause6_01.txt
diff --git a/fixtures/text/clause6_02a.txt b/examples/text/clause6_02a.txt
similarity index 100%
rename from fixtures/text/clause6_02a.txt
rename to examples/text/clause6_02a.txt
diff --git a/fixtures/text/clause6_02b.txt b/examples/text/clause6_02b.txt
similarity index 100%
rename from fixtures/text/clause6_02b.txt
rename to examples/text/clause6_02b.txt
diff --git a/fixtures/text/clause6_02c.txt b/examples/text/clause6_02c.txt
similarity index 100%
rename from fixtures/text/clause6_02c.txt
rename to examples/text/clause6_02c.txt
diff --git a/fixtures/text/clause6_02d.txt b/examples/text/clause6_02d.txt
similarity index 100%
rename from fixtures/text/clause6_02d.txt
rename to examples/text/clause6_02d.txt
diff --git a/fixtures/text/clause6_03.txt b/examples/text/clause6_03.txt
similarity index 100%
rename from fixtures/text/clause6_03.txt
rename to examples/text/clause6_03.txt
diff --git a/fixtures/text/clause7_01.txt b/examples/text/clause7_01.txt
similarity index 100%
rename from fixtures/text/clause7_01.txt
rename to examples/text/clause7_01.txt
diff --git a/fixtures/text/clause7_02.txt b/examples/text/clause7_02.txt
similarity index 100%
rename from fixtures/text/clause7_02.txt
rename to examples/text/clause7_02.txt
diff --git a/fixtures/text/clause7_03a.txt b/examples/text/clause7_03a.txt
similarity index 100%
rename from fixtures/text/clause7_03a.txt
rename to examples/text/clause7_03a.txt
diff --git a/fixtures/text/clause7_03b.txt b/examples/text/clause7_03b.txt
similarity index 100%
rename from fixtures/text/clause7_03b.txt
rename to examples/text/clause7_03b.txt
diff --git a/fixtures/text/clause7_04.txt b/examples/text/clause7_04.txt
similarity index 100%
rename from fixtures/text/clause7_04.txt
rename to examples/text/clause7_04.txt
diff --git a/fixtures/text/clause7_05.txt b/examples/text/clause7_05.txt
similarity index 100%
rename from fixtures/text/clause7_05.txt
rename to examples/text/clause7_05.txt
diff --git a/fixtures/text/clause7_07.txt b/examples/text/clause7_07.txt
similarity index 100%
rename from fixtures/text/clause7_07.txt
rename to examples/text/clause7_07.txt
diff --git a/fixtures/text/clause7_10.txt b/examples/text/clause7_10.txt
similarity index 100%
rename from fixtures/text/clause7_10.txt
rename to examples/text/clause7_10.txt
diff --git a/fixtures/text/clause7_12.txt b/examples/text/clause7_12.txt
similarity index 100%
rename from fixtures/text/clause7_12.txt
rename to examples/text/clause7_12.txt
diff --git a/fixtures/text/clause7_13.txt b/examples/text/clause7_13.txt
similarity index 100%
rename from fixtures/text/clause7_13.txt
rename to examples/text/clause7_13.txt
diff --git a/fixtures/text/clause7_15.txt b/examples/text/clause7_15.txt
similarity index 100%
rename from fixtures/text/clause7_15.txt
rename to examples/text/clause7_15.txt
diff --git a/fixtures/text/clause7_16.txt b/examples/text/clause7_16.txt
similarity index 100%
rename from fixtures/text/clause7_16.txt
rename to examples/text/clause7_16.txt
diff --git a/fixtures/text/clause7_17.txt b/examples/text/clause7_17.txt
similarity index 100%
rename from fixtures/text/clause7_17.txt
rename to examples/text/clause7_17.txt
diff --git a/fixtures/text/clause7_18.txt b/examples/text/clause7_18.txt
similarity index 100%
rename from fixtures/text/clause7_18.txt
rename to examples/text/clause7_18.txt
diff --git a/fixtures/text/clause7_19.txt b/examples/text/clause7_19.txt
similarity index 100%
rename from fixtures/text/clause7_19.txt
rename to examples/text/clause7_19.txt
diff --git a/fixtures/text/example01.txt b/examples/text/example01.txt
similarity index 100%
rename from fixtures/text/example01.txt
rename to examples/text/example01.txt
diff --git a/fixtures/text/example02.txt b/examples/text/example02.txt
similarity index 100%
rename from fixtures/text/example02.txt
rename to examples/text/example02.txt
diff --git a/fixtures/text/example03.txt b/examples/text/example03.txt
similarity index 100%
rename from fixtures/text/example03.txt
rename to examples/text/example03.txt
diff --git a/fixtures/text/example04.txt b/examples/text/example04.txt
similarity index 100%
rename from fixtures/text/example04.txt
rename to examples/text/example04.txt
diff --git a/fixtures/text/example05a.txt b/examples/text/example05a.txt
similarity index 100%
rename from fixtures/text/example05a.txt
rename to examples/text/example05a.txt
diff --git a/fixtures/text/example05b.txt b/examples/text/example05b.txt
similarity index 100%
rename from fixtures/text/example05b.txt
rename to examples/text/example05b.txt
diff --git a/fixtures/text/example06a.txt b/examples/text/example06a.txt
similarity index 100%
rename from fixtures/text/example06a.txt
rename to examples/text/example06a.txt
diff --git a/fixtures/text/example06b.txt b/examples/text/example06b.txt
similarity index 100%
rename from fixtures/text/example06b.txt
rename to examples/text/example06b.txt
diff --git a/fixtures/text/example07.txt b/examples/text/example07.txt
similarity index 100%
rename from fixtures/text/example07.txt
rename to examples/text/example07.txt
diff --git a/fixtures/text/example08.txt b/examples/text/example08.txt
similarity index 100%
rename from fixtures/text/example08.txt
rename to examples/text/example08.txt
diff --git a/fixtures/text/example09.txt b/examples/text/example09.txt
similarity index 100%
rename from fixtures/text/example09.txt
rename to examples/text/example09.txt
diff --git a/fixtures/text/example10.txt b/examples/text/example10.txt
similarity index 100%
rename from fixtures/text/example10.txt
rename to examples/text/example10.txt
diff --git a/fixtures/text/example11.txt b/examples/text/example11.txt
similarity index 100%
rename from fixtures/text/example11.txt
rename to examples/text/example11.txt
diff --git a/fixtures/text/example12.txt b/examples/text/example12.txt
similarity index 100%
rename from fixtures/text/example12.txt
rename to examples/text/example12.txt
diff --git a/fixtures/text/example13.txt b/examples/text/example13.txt
similarity index 100%
rename from fixtures/text/example13.txt
rename to examples/text/example13.txt
diff --git a/fixtures/text/example14.txt b/examples/text/example14.txt
similarity index 100%
rename from fixtures/text/example14.txt
rename to examples/text/example14.txt
diff --git a/fixtures/text/example15.txt b/examples/text/example15.txt
similarity index 100%
rename from fixtures/text/example15.txt
rename to examples/text/example15.txt
diff --git a/fixtures/text/example16.txt b/examples/text/example16.txt
similarity index 100%
rename from fixtures/text/example16.txt
rename to examples/text/example16.txt
diff --git a/fixtures/text/example17.txt b/examples/text/example17.txt
similarity index 100%
rename from fixtures/text/example17.txt
rename to examples/text/example17.txt
diff --git a/fixtures/text/example18.txt b/examples/text/example18.txt
similarity index 100%
rename from fixtures/text/example18.txt
rename to examples/text/example18.txt
diff --git a/fixtures/text/example19.txt b/examples/text/example19.txt
similarity index 100%
rename from fixtures/text/example19.txt
rename to examples/text/example19.txt
diff --git a/fixtures/text/example20.txt b/examples/text/example20.txt
similarity index 100%
rename from fixtures/text/example20.txt
rename to examples/text/example20.txt
diff --git a/fixtures/text/example21.txt b/examples/text/example21.txt
similarity index 100%
rename from fixtures/text/example21.txt
rename to examples/text/example21.txt
diff --git a/fixtures/text/example22.txt b/examples/text/example22.txt
similarity index 100%
rename from fixtures/text/example22.txt
rename to examples/text/example22.txt
diff --git a/fixtures/text/example23.txt b/examples/text/example23.txt
similarity index 100%
rename from fixtures/text/example23.txt
rename to examples/text/example23.txt
diff --git a/fixtures/text/example24.txt b/examples/text/example24.txt
similarity index 100%
rename from fixtures/text/example24.txt
rename to examples/text/example24.txt
diff --git a/fixtures/text/example25.txt b/examples/text/example25.txt
similarity index 100%
rename from fixtures/text/example25.txt
rename to examples/text/example25.txt
diff --git a/fixtures/text/example26.txt b/examples/text/example26.txt
similarity index 100%
rename from fixtures/text/example26.txt
rename to examples/text/example26.txt
diff --git a/fixtures/text/example27.txt b/examples/text/example27.txt
similarity index 100%
rename from fixtures/text/example27.txt
rename to examples/text/example27.txt
diff --git a/fixtures/text/example28.txt b/examples/text/example28.txt
similarity index 100%
rename from fixtures/text/example28.txt
rename to examples/text/example28.txt
diff --git a/fixtures/text/example29.txt b/examples/text/example29.txt
similarity index 100%
rename from fixtures/text/example29.txt
rename to examples/text/example29.txt
diff --git a/fixtures/text/example30.txt b/examples/text/example30.txt
similarity index 100%
rename from fixtures/text/example30.txt
rename to examples/text/example30.txt
diff --git a/fixtures/text/example31.txt b/examples/text/example31.txt
similarity index 100%
rename from fixtures/text/example31.txt
rename to examples/text/example31.txt
diff --git a/fixtures/text/example32.txt b/examples/text/example32.txt
similarity index 100%
rename from fixtures/text/example32.txt
rename to examples/text/example32.txt
diff --git a/fixtures/text/example33.txt b/examples/text/example33.txt
similarity index 100%
rename from fixtures/text/example33.txt
rename to examples/text/example33.txt
diff --git a/fixtures/text/example34.txt b/examples/text/example34.txt
similarity index 100%
rename from fixtures/text/example34.txt
rename to examples/text/example34.txt
diff --git a/fixtures/text/example35.txt b/examples/text/example35.txt
similarity index 100%
rename from fixtures/text/example35.txt
rename to examples/text/example35.txt
diff --git a/fixtures/text/example36-alt01.txt b/examples/text/example36-alt01.txt
similarity index 100%
rename from fixtures/text/example36-alt01.txt
rename to examples/text/example36-alt01.txt
diff --git a/fixtures/text/example36.txt b/examples/text/example36.txt
similarity index 100%
rename from fixtures/text/example36.txt
rename to examples/text/example36.txt
diff --git a/fixtures/text/example37.txt b/examples/text/example37.txt
similarity index 100%
rename from fixtures/text/example37.txt
rename to examples/text/example37.txt
diff --git a/fixtures/text/example38-alt01.txt b/examples/text/example38-alt01.txt
similarity index 100%
rename from fixtures/text/example38-alt01.txt
rename to examples/text/example38-alt01.txt
diff --git a/fixtures/text/example38.txt b/examples/text/example38.txt
similarity index 100%
rename from fixtures/text/example38.txt
rename to examples/text/example38.txt
diff --git a/fixtures/text/example39.txt b/examples/text/example39.txt
similarity index 100%
rename from fixtures/text/example39.txt
rename to examples/text/example39.txt
diff --git a/fixtures/text/example40-alt01.txt b/examples/text/example40-alt01.txt
similarity index 100%
rename from fixtures/text/example40-alt01.txt
rename to examples/text/example40-alt01.txt
diff --git a/fixtures/text/example40.txt b/examples/text/example40.txt
similarity index 100%
rename from fixtures/text/example40.txt
rename to examples/text/example40.txt
diff --git a/fixtures/text/example41.txt b/examples/text/example41.txt
similarity index 100%
rename from fixtures/text/example41.txt
rename to examples/text/example41.txt
diff --git a/fixtures/text/example42-alt01.txt b/examples/text/example42-alt01.txt
similarity index 100%
rename from fixtures/text/example42-alt01.txt
rename to examples/text/example42-alt01.txt
diff --git a/fixtures/text/example42.txt b/examples/text/example42.txt
similarity index 100%
rename from fixtures/text/example42.txt
rename to examples/text/example42.txt
diff --git a/fixtures/text/example43-alt01.txt b/examples/text/example43-alt01.txt
similarity index 100%
rename from fixtures/text/example43-alt01.txt
rename to examples/text/example43-alt01.txt
diff --git a/fixtures/text/example43.txt b/examples/text/example43.txt
similarity index 100%
rename from fixtures/text/example43.txt
rename to examples/text/example43.txt
diff --git a/fixtures/text/example44-alt01.txt b/examples/text/example44-alt01.txt
similarity index 100%
rename from fixtures/text/example44-alt01.txt
rename to examples/text/example44-alt01.txt
diff --git a/fixtures/text/example44.txt b/examples/text/example44.txt
similarity index 100%
rename from fixtures/text/example44.txt
rename to examples/text/example44.txt
diff --git a/fixtures/text/example45.txt b/examples/text/example45.txt
similarity index 100%
rename from fixtures/text/example45.txt
rename to examples/text/example45.txt
diff --git a/fixtures/text/example46-alt01.txt b/examples/text/example46-alt01.txt
similarity index 100%
rename from fixtures/text/example46-alt01.txt
rename to examples/text/example46-alt01.txt
diff --git a/fixtures/text/example46.txt b/examples/text/example46.txt
similarity index 100%
rename from fixtures/text/example46.txt
rename to examples/text/example46.txt
diff --git a/fixtures/text/example47.txt b/examples/text/example47.txt
similarity index 100%
rename from fixtures/text/example47.txt
rename to examples/text/example47.txt
diff --git a/fixtures/text/example48.txt b/examples/text/example48.txt
similarity index 100%
rename from fixtures/text/example48.txt
rename to examples/text/example48.txt
diff --git a/fixtures/text/example49-alt01.txt b/examples/text/example49-alt01.txt
similarity index 100%
rename from fixtures/text/example49-alt01.txt
rename to examples/text/example49-alt01.txt
diff --git a/fixtures/text/example49.txt b/examples/text/example49.txt
similarity index 100%
rename from fixtures/text/example49.txt
rename to examples/text/example49.txt
diff --git a/fixtures/text/example50.txt b/examples/text/example50.txt
similarity index 100%
rename from fixtures/text/example50.txt
rename to examples/text/example50.txt
diff --git a/fixtures/text/example51.txt b/examples/text/example51.txt
similarity index 100%
rename from fixtures/text/example51.txt
rename to examples/text/example51.txt
diff --git a/fixtures/text/example52.txt b/examples/text/example52.txt
similarity index 100%
rename from fixtures/text/example52.txt
rename to examples/text/example52.txt
diff --git a/fixtures/text/example53.txt b/examples/text/example53.txt
similarity index 100%
rename from fixtures/text/example53.txt
rename to examples/text/example53.txt
diff --git a/fixtures/text/example54-alt01.txt b/examples/text/example54-alt01.txt
similarity index 100%
rename from fixtures/text/example54-alt01.txt
rename to examples/text/example54-alt01.txt
diff --git a/fixtures/text/example54.txt b/examples/text/example54.txt
similarity index 100%
rename from fixtures/text/example54.txt
rename to examples/text/example54.txt
diff --git a/fixtures/text/example55-alt01.txt b/examples/text/example55-alt01.txt
similarity index 100%
rename from fixtures/text/example55-alt01.txt
rename to examples/text/example55-alt01.txt
diff --git a/fixtures/text/example55.txt b/examples/text/example55.txt
similarity index 100%
rename from fixtures/text/example55.txt
rename to examples/text/example55.txt
diff --git a/fixtures/text/example56.txt b/examples/text/example56.txt
similarity index 100%
rename from fixtures/text/example56.txt
rename to examples/text/example56.txt
diff --git a/fixtures/text/example57.txt b/examples/text/example57.txt
similarity index 100%
rename from fixtures/text/example57.txt
rename to examples/text/example57.txt
diff --git a/fixtures/text/example58.txt b/examples/text/example58.txt
similarity index 100%
rename from fixtures/text/example58.txt
rename to examples/text/example58.txt
diff --git a/fixtures/text/example59.txt b/examples/text/example59.txt
similarity index 100%
rename from fixtures/text/example59.txt
rename to examples/text/example59.txt
diff --git a/fixtures/text/example60.txt b/examples/text/example60.txt
similarity index 100%
rename from fixtures/text/example60.txt
rename to examples/text/example60.txt
diff --git a/fixtures/text/example61.txt b/examples/text/example61.txt
similarity index 100%
rename from fixtures/text/example61.txt
rename to examples/text/example61.txt
diff --git a/fixtures/text/example62.txt b/examples/text/example62.txt
similarity index 100%
rename from fixtures/text/example62.txt
rename to examples/text/example62.txt
diff --git a/fixtures/text/example63.txt b/examples/text/example63.txt
similarity index 100%
rename from fixtures/text/example63.txt
rename to examples/text/example63.txt
diff --git a/fixtures/text/example64.txt b/examples/text/example64.txt
similarity index 100%
rename from fixtures/text/example64.txt
rename to examples/text/example64.txt
diff --git a/fixtures/text/example65.txt b/examples/text/example65.txt
similarity index 100%
rename from fixtures/text/example65.txt
rename to examples/text/example65.txt
diff --git a/fixtures/text/example66.txt b/examples/text/example66.txt
similarity index 100%
rename from fixtures/text/example66.txt
rename to examples/text/example66.txt
diff --git a/fixtures/text/example67.txt b/examples/text/example67.txt
similarity index 100%
rename from fixtures/text/example67.txt
rename to examples/text/example67.txt
diff --git a/fixtures/text/example68.txt b/examples/text/example68.txt
similarity index 100%
rename from fixtures/text/example68.txt
rename to examples/text/example68.txt
diff --git a/fixtures/text/example69.txt b/examples/text/example69.txt
similarity index 100%
rename from fixtures/text/example69.txt
rename to examples/text/example69.txt
diff --git a/fixtures/text/example70.txt b/examples/text/example70.txt
similarity index 100%
rename from fixtures/text/example70.txt
rename to examples/text/example70.txt
diff --git a/fixtures/text/example71.txt b/examples/text/example71.txt
similarity index 100%
rename from fixtures/text/example71.txt
rename to examples/text/example71.txt
diff --git a/fixtures/text/example72.txt b/examples/text/example72.txt
similarity index 100%
rename from fixtures/text/example72.txt
rename to examples/text/example72.txt
diff --git a/fixtures/text/example73.txt b/examples/text/example73.txt
similarity index 100%
rename from fixtures/text/example73.txt
rename to examples/text/example73.txt
diff --git a/fixtures/text/example74.txt b/examples/text/example74.txt
similarity index 100%
rename from fixtures/text/example74.txt
rename to examples/text/example74.txt
diff --git a/fixtures/text/example75.txt b/examples/text/example75.txt
similarity index 100%
rename from fixtures/text/example75.txt
rename to examples/text/example75.txt
diff --git a/fixtures/text/example76.txt b/examples/text/example76.txt
similarity index 100%
rename from fixtures/text/example76.txt
rename to examples/text/example76.txt
diff --git a/fixtures/text/example77.txt b/examples/text/example77.txt
similarity index 100%
rename from fixtures/text/example77.txt
rename to examples/text/example77.txt
diff --git a/fixtures/text/example78.txt b/examples/text/example78.txt
similarity index 100%
rename from fixtures/text/example78.txt
rename to examples/text/example78.txt
diff --git a/fixtures/text/example79.txt b/examples/text/example79.txt
similarity index 100%
rename from fixtures/text/example79.txt
rename to examples/text/example79.txt
diff --git a/fixtures/text/example80.txt b/examples/text/example80.txt
similarity index 100%
rename from fixtures/text/example80.txt
rename to examples/text/example80.txt
diff --git a/fixtures/text/example81.txt b/examples/text/example81.txt
similarity index 100%
rename from fixtures/text/example81.txt
rename to examples/text/example81.txt
diff --git a/fixtures/text/example82.txt b/examples/text/example82.txt
similarity index 100%
rename from fixtures/text/example82.txt
rename to examples/text/example82.txt
diff --git a/fixtures/text/example83.txt b/examples/text/example83.txt
similarity index 100%
rename from fixtures/text/example83.txt
rename to examples/text/example83.txt
diff --git a/fixtures/text/example84.txt b/examples/text/example84.txt
similarity index 100%
rename from fixtures/text/example84.txt
rename to examples/text/example84.txt
diff --git a/fixtures/text/example85-alt01.txt b/examples/text/example85-alt01.txt
similarity index 100%
rename from fixtures/text/example85-alt01.txt
rename to examples/text/example85-alt01.txt
diff --git a/fixtures/text/example85.txt b/examples/text/example85.txt
similarity index 100%
rename from fixtures/text/example85.txt
rename to examples/text/example85.txt
diff --git a/fixtures/text/example86.txt b/examples/text/example86.txt
similarity index 100%
rename from fixtures/text/example86.txt
rename to examples/text/example86.txt
diff --git a/src/expr.rs b/src/expr.rs
index b490715..390ba9a 100644
--- a/src/expr.rs
+++ b/src/expr.rs
@@ -1,4 +1,5 @@
 use crate::{Error, Geometry, SqlQuery, Validator};
+use pg_escape::{quote_identifier, quote_literal};
 use serde::{Deserialize, Serialize};
 use serde_json::Value;
 use std::str::FromStr;
@@ -63,8 +64,8 @@ impl Expr {
         match self {
             Expr::Bool(v) => Ok(v.to_string()),
             Expr::Float(v) => Ok(v.to_string()),
-            Expr::Literal(v) => Ok(format!("'{}'", v)),
-            Expr::Property { property } => Ok(format!("\"{property}\"")),
+            Expr::Literal(v) => Ok(quote_literal(v).to_string()),
+            Expr::Property { property } => Ok(quote_identifier(property).to_string()),
             Expr::Interval { interval } => {
                 check_len!(
                     "interval",
@@ -90,6 +91,8 @@ impl Expr {
                 match op.as_str() {
                     "and" => Ok(format!("({})", a.join(" AND "))),
                     "or" => Ok(format!("({})", a.join(" OR "))),
+                    "like" => Ok(format!("({} LIKE {})", a[0], a[1])),
+                    "in" => Ok(format!("({} IN {})", a[0], a[1])),
                     "between" => {
                         check_len!(
                             "between",
@@ -101,13 +104,17 @@ impl Expr {
                     "not" => {
                         check_len!("not", a, 1, format!("(NOT {})", a[0]))
                     }
-                    "is null" => {
+                    "isNull" => {
                         check_len!("is null", a, 1, format!("({} IS NULL)", a[0]))
                     }
-                    "+" | "-" | "*" | "/" | "%" | "^" | "=" | "<=" | "<" | "<>" | ">" | ">=" => {
+                    "+" | "-" | "*" | "/" | "%" => {
+                        let paddedop = format!(" {} ", op);
+                        Ok(a.join(&paddedop).to_string())
+                    }
+                    "^" | "=" | "<=" | "<" | "<>" | ">" | ">=" => {
                         check_len!(op, a, 2, format!("({} {} {})", a[0], op, a[1]))
                     }
-                    _ => Ok(format!("{}({})", op, a.join(", "))),
+                    _ => Ok(format!("{}({})", quote_identifier(op), a.join(", "))),
                 }
             }
             Expr::BBox { bbox } => {
diff --git a/src/lib.rs b/src/lib.rs
index af56901..d630014 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -59,7 +59,7 @@ pub struct SqlQuery {
 /// # Examples
 ///
 /// ```
-/// let s = include_str!("../fixtures/json/example01.json");
+/// let s = include_str!("../examples/json/example01.json");
 /// let expr = cql2::parse_json(s);
 /// ```
 pub fn parse_json(s: &str) -> Result<Expr, serde_json::Error> {
@@ -71,7 +71,7 @@ pub fn parse_json(s: &str) -> Result<Expr, serde_json::Error> {
 /// # Examples
 ///
 /// ```no_run
-/// let expr = cql2::parse_file("tests/fixtures/json/example01.json");
+/// let expr = cql2::parse_file("tests/examples/json/example01.json");
 /// ```
 pub fn parse_file(path: impl AsRef<Path>) -> Result<Expr, Error> {
     let s = fs::read_to_string(path)?;
diff --git a/src/parser.rs b/src/parser.rs
index d162cd2..c896ada 100644
--- a/src/parser.rs
+++ b/src/parser.rs
@@ -256,13 +256,13 @@ fn parse_expr(expression_pairs: Pairs<'_, Rule>) -> Result<Expr, Error> {
                 let mut outargs: Vec<Box<Expr>> = Vec::new();
 
                 match lhsclone {
-                    Expr::Operation { ref op, ref args } if op == "and" => {
+                    Expr::Operation { ref op, ref args } if op == "and" && op == &opstring => {
                         for arg in args.iter() {
                             outargs.push(arg.clone());
                         }
                         outargs.push(Box::new(rhsclone));
                         return Ok(Expr::Operation {
-                            op: "and".to_string(),
+                            op: opstring,
                             args: outargs,
                         });
                     }
@@ -298,13 +298,21 @@ fn parse_expr(expression_pairs: Pairs<'_, Rule>) -> Result<Expr, Error> {
         })
         .map_postfix(|child, op| {
             let child = child?;
-            match op.as_rule() {
-                Rule::IsNullPostfix => Ok(Expr::Operation {
+            let notflag = &op.clone().into_inner().next().is_some();
+            let retexpr = match op.as_rule() {
+                Rule::IsNullPostfix => Expr::Operation {
                     op: "isNull".to_string(),
                     args: vec![Box::new(child)],
-                }),
+                },
                 rule => unreachable!("Expr::parse expected postfix operator, found {:?}", rule),
-            }
+            };
+            if *notflag {
+                return Ok(Expr::Operation {
+                    op: "not".to_string(),
+                    args: vec![Box::new(retexpr)],
+                });
+            };
+            Ok(retexpr)
         })
         .parse(expression_pairs)
 }


Test patch:
diff --git a/tests/README.md b/tests/README.md
index 8e00407..eb012dd 100644
--- a/tests/README.md
+++ b/tests/README.md
@@ -4,7 +4,9 @@ The top level `examples` directory is copied directly from <https://github.com/o
 
 ## Expected test output
 
-To generate:
+Expected files should end with ".out". The first line of each test should be the input in either CQL2 Text or CQL2 JSON. The second line is the expected output in CQL2 Text. The third line is the expected output in CQL2 JSON. All input should be formatted to fit in a single line.
+
+To generate expected files using the ogc examples:
 
 ```shell
 tests/generate-expected
diff --git a/tests/expected/clause6_01.json.out b/tests/expected/clause6_01.json.out
new file mode 100644
index 0000000..e52ee5d
--- /dev/null
+++ b/tests/expected/clause6_01.json.out
@@ -0,0 +1,3 @@
+{"op":"avg","args":[{"property":"windSpeed"}]}
+avg("windSpeed")
+{"op":"avg","args":[{"property":"windSpeed"}]}
diff --git a/tests/expected/json/clause6_01.json b/tests/expected/clause6_01.txt.out
similarity index 58%
rename from tests/expected/json/clause6_01.json
rename to tests/expected/clause6_01.txt.out
index fe3290a..a7e9dae 100644
--- a/tests/expected/json/clause6_01.json
+++ b/tests/expected/clause6_01.txt.out
@@ -1,1 +1,3 @@
+avg(windSpeed) 
+avg("windSpeed")
 {"op":"avg","args":[{"property":"windSpeed"}]}
diff --git a/tests/expected/clause6_02a.json.out b/tests/expected/clause6_02a.json.out
new file mode 100644
index 0000000..98442c7
--- /dev/null
+++ b/tests/expected/clause6_02a.json.out
@@ -0,0 +1,3 @@
+{"op":"=","args":[{"property":"city"},"Toronto"]}
+(city = 'Toronto')
+{"op":"=","args":[{"property":"city"},"Toronto"]}
diff --git a/tests/expected/text/clause6_02a.json b/tests/expected/clause6_02a.txt.out
similarity index 58%
rename from tests/expected/text/clause6_02a.json
rename to tests/expected/clause6_02a.txt.out
index 21be46c..4a3a09a 100644
--- a/tests/expected/text/clause6_02a.json
+++ b/tests/expected/clause6_02a.txt.out
@@ -1,1 +1,3 @@
+city='Toronto' 
+(city = 'Toronto')
 {"op":"=","args":[{"property":"city"},"Toronto"]}
diff --git a/tests/expected/clause6_02b.json.out b/tests/expected/clause6_02b.json.out
new file mode 100644
index 0000000..6f98fac
--- /dev/null
+++ b/tests/expected/clause6_02b.json.out
@@ -0,0 +1,3 @@
+{"op":"<","args":[{"op":"avg","args":[{"property":"windSpeed"}]},4]}
+(avg("windSpeed") < 4)
+{"op":"<","args":[{"op":"avg","args":[{"property":"windSpeed"}]},4.0]}
diff --git a/tests/expected/json/clause6_02b.json b/tests/expected/clause6_02b.txt.out
similarity index 62%
rename from tests/expected/json/clause6_02b.json
rename to tests/expected/clause6_02b.txt.out
index 7f5a3ea..4b6d055 100644
--- a/tests/expected/json/clause6_02b.json
+++ b/tests/expected/clause6_02b.txt.out
@@ -1,1 +1,3 @@
+avg(windSpeed) < 4 
+(avg("windSpeed") < 4)
 {"op":"<","args":[{"op":"avg","args":[{"property":"windSpeed"}]},4.0]}
diff --git a/tests/expected/clause6_02c.json.out b/tests/expected/clause6_02c.json.out
new file mode 100644
index 0000000..809d14c
--- /dev/null
+++ b/tests/expected/clause6_02c.json.out
@@ -0,0 +1,3 @@
+{"op":">","args":[{"op":"-","args":[{"property":"balance"},150.0]},0]}
+(balance - 150 > 0)
+{"op":">","args":[{"op":"-","args":[{"property":"balance"},150.0]},0.0]}
diff --git a/tests/expected/json/clause6_02c.json b/tests/expected/clause6_02c.txt.out
similarity index 65%
rename from tests/expected/json/clause6_02c.json
rename to tests/expected/clause6_02c.txt.out
index 9f04c8b..39c1520 100644
--- a/tests/expected/json/clause6_02c.json
+++ b/tests/expected/clause6_02c.txt.out
@@ -1,1 +1,3 @@
+balance-150.0 > 0 
+(balance - 150 > 0)
 {"op":">","args":[{"op":"-","args":[{"property":"balance"},150.0]},0.0]}
diff --git a/tests/expected/clause6_02d.json.out b/tests/expected/clause6_02d.json.out
new file mode 100644
index 0000000..c19c067
--- /dev/null
+++ b/tests/expected/clause6_02d.json.out
@@ -0,0 +1,3 @@
+{"op":">=","args":[{"property":"updated"},{"date":"1970-01-01"}]}
+(updated >= DATE('1970-01-01'))
+{"op":">=","args":[{"property":"updated"},{"date":"1970-01-01"}]}
diff --git a/tests/expected/json/clause6_02d.json b/tests/expected/clause6_02d.txt.out
similarity index 51%
rename from tests/expected/json/clause6_02d.json
rename to tests/expected/clause6_02d.txt.out
index 87d2bd3..9ce34af 100644
--- a/tests/expected/json/clause6_02d.json
+++ b/tests/expected/clause6_02d.txt.out
@@ -1,1 +1,3 @@
+updated >= date('1970-01-01') 
+(updated >= DATE('1970-01-01'))
 {"op":">=","args":[{"property":"updated"},{"date":"1970-01-01"}]}
diff --git a/tests/expected/clause6_03.json.out b/tests/expected/clause6_03.json.out
new file mode 100644
index 0000000..f118ac2
--- /dev/null
+++ b/tests/expected/clause6_03.json.out
@@ -0,0 +1,3 @@
+{"op":"not","args":[{"op":"isNull","args":[{"property":"geometry"}]}]}
+(NOT (geometry IS NULL))
+{"op":"not","args":[{"op":"isNull","args":[{"property":"geometry"}]}]}
diff --git a/tests/expected/json/clause6_03.json b/tests/expected/clause6_03.txt.out
similarity index 60%
rename from tests/expected/json/clause6_03.json
rename to tests/expected/clause6_03.txt.out
index a5410f8..6496f88 100644
--- a/tests/expected/json/clause6_03.json
+++ b/tests/expected/clause6_03.txt.out
@@ -1,1 +1,3 @@
+geometry IS NOT NULL 
+(NOT (geometry IS NULL))
 {"op":"not","args":[{"op":"isNull","args":[{"property":"geometry"}]}]}
diff --git a/tests/expected/clause7_01.json.out b/tests/expected/clause7_01.json.out
new file mode 100644
index 0000000..8a09d36
--- /dev/null
+++ b/tests/expected/clause7_01.json.out
@@ -0,0 +1,3 @@
+{"op":"like","args":[{"property":"name"},"Smith%"]}
+(name LIKE 'Smith%')
+{"op":"like","args":[{"property":"name"},"Smith%"]}
diff --git a/tests/expected/json/clause7_01.json b/tests/expected/clause7_01.txt.out
similarity index 55%
rename from tests/expected/json/clause7_01.json
rename to tests/expected/clause7_01.txt.out
index 2b121e5..920aacf 100644
--- a/tests/expected/json/clause7_01.json
+++ b/tests/expected/clause7_01.txt.out
@@ -1,1 +1,3 @@
+name LIKE 'Smith%' 
+(name LIKE 'Smith%')
 {"op":"like","args":[{"property":"name"},"Smith%"]}
diff --git a/tests/expected/clause7_02.json.out b/tests/expected/clause7_02.json.out
new file mode 100644
index 0000000..73910d8
--- /dev/null
+++ b/tests/expected/clause7_02.json.out
@@ -0,0 +1,3 @@
+{"op":"between","args":[{"property":"depth"},100.0,150.0]}
+(depth BETWEEN 100 AND 150)
+{"op":"between","args":[{"property":"depth"},100.0,150.0]}
diff --git a/tests/expected/json/clause7_02.json b/tests/expected/clause7_02.txt.out
similarity index 50%
rename from tests/expected/json/clause7_02.json
rename to tests/expected/clause7_02.txt.out
index 1493b69..19a889d 100644
--- a/tests/expected/json/clause7_02.json
+++ b/tests/expected/clause7_02.txt.out
@@ -1,1 +1,3 @@
+depth BETWEEN 100.0 and 150.0 
+(depth BETWEEN 100 AND 150)
 {"op":"between","args":[{"property":"depth"},100.0,150.0]}
diff --git a/tests/expected/clause7_03a.json.out b/tests/expected/clause7_03a.json.out
new file mode 100644
index 0000000..c462538
--- /dev/null
+++ b/tests/expected/clause7_03a.json.out
@@ -0,0 +1,3 @@
+{"op":"in","args":[{"property":"cityName"},["Toronto","Frankfurt","Tokyo","New York"]]}
+("cityName" IN ('Toronto', 'Frankfurt', 'Tokyo', 'New York'))
+{"op":"in","args":[{"property":"cityName"},["Toronto","Frankfurt","Tokyo","New York"]]}
diff --git a/tests/expected/clause7_03a.txt.out b/tests/expected/clause7_03a.txt.out
new file mode 100644
index 0000000..b441fc9
--- /dev/null
+++ b/tests/expected/clause7_03a.txt.out
@@ -0,0 +1,3 @@
+cityName IN ('Toronto','Frankfurt','Tokyo','New York') 
+("cityName" IN ('Toronto', 'Frankfurt', 'Tokyo', 'New York'))
+{"op":"in","args":[{"property":"cityName"},["Toronto","Frankfurt","Tokyo","New York"]]}
diff --git a/tests/expected/clause7_03b.json.out b/tests/expected/clause7_03b.json.out
new file mode 100644
index 0000000..311bbba
--- /dev/null
+++ b/tests/expected/clause7_03b.json.out
@@ -0,0 +1,3 @@
+{"op":"not","args":[{"op":"in","args":[{"property":"category"},[1,2,3,4]]}]}
+(NOT (category IN (1, 2, 3, 4)))
+{"op":"not","args":[{"op":"in","args":[{"property":"category"},[1.0,2.0,3.0,4.0]]}]}
diff --git a/tests/expected/json/clause7_03b.json b/tests/expected/clause7_03b.txt.out
similarity index 58%
rename from tests/expected/json/clause7_03b.json
rename to tests/expected/clause7_03b.txt.out
index 9bda911..0481bd5 100644
--- a/tests/expected/json/clause7_03b.json
+++ b/tests/expected/clause7_03b.txt.out
@@ -1,1 +1,3 @@
+category NOT IN (1,2,3,4) 
+(NOT (category IN (1, 2, 3, 4)))
 {"op":"not","args":[{"op":"in","args":[{"property":"category"},[1.0,2.0,3.0,4.0]]}]}
diff --git a/tests/expected/clause7_04.json.out b/tests/expected/clause7_04.json.out
new file mode 100644
index 0000000..6123371
--- /dev/null
+++ b/tests/expected/clause7_04.json.out
@@ -0,0 +1,3 @@
+{"op":"in","args":[{"op":"casei","args":[{"property":"road_class"}]},[{"op":"casei","args":["Οδος"]},{"op":"casei","args":["Straße"]}]]}
+(casei(road_class) IN (casei('Οδος'), casei('Straße')))
+{"op":"in","args":[{"op":"casei","args":[{"property":"road_class"}]},[{"op":"casei","args":["Οδος"]},{"op":"casei","args":["Straße"]}]]}
diff --git a/tests/expected/json/clause7_04.json b/tests/expected/clause7_04.txt.out
similarity index 54%
rename from tests/expected/json/clause7_04.json
rename to tests/expected/clause7_04.txt.out
index 918f401..92e453c 100644
--- a/tests/expected/json/clause7_04.json
+++ b/tests/expected/clause7_04.txt.out
@@ -1,1 +1,3 @@
+CASEI(road_class) IN (CASEI('Οδος'),CASEI('Straße')) 
+(casei(road_class) IN (casei('Οδος'), casei('Straße')))
 {"op":"in","args":[{"op":"casei","args":[{"property":"road_class"}]},[{"op":"casei","args":["Οδος"]},{"op":"casei","args":["Straße"]}]]}
diff --git a/tests/expected/clause7_05.json.out b/tests/expected/clause7_05.json.out
new file mode 100644
index 0000000..a373b93
--- /dev/null
+++ b/tests/expected/clause7_05.json.out
@@ -0,0 +1,3 @@
+{"op":"=","args":[{"op":"accenti","args":[{"property":"etat_vol"}]},{"op":"accenti","args":["débárquér"]}]}
+(accenti(etat_vol) = accenti('débárquér'))
+{"op":"=","args":[{"op":"accenti","args":[{"property":"etat_vol"}]},{"op":"accenti","args":["débárquér"]}]}
diff --git a/tests/expected/json/clause7_05.json b/tests/expected/clause7_05.txt.out
similarity index 54%
rename from tests/expected/json/clause7_05.json
rename to tests/expected/clause7_05.txt.out
index 5903327..d83d567 100644
--- a/tests/expected/json/clause7_05.json
+++ b/tests/expected/clause7_05.txt.out
@@ -1,1 +1,3 @@
+ACCENTI(etat_vol) = ACCENTI('débárquér') 
+(accenti(etat_vol) = accenti('débárquér'))
 {"op":"=","args":[{"op":"accenti","args":[{"property":"etat_vol"}]},{"op":"accenti","args":["débárquér"]}]}
diff --git a/tests/expected/clause7_07.json.out b/tests/expected/clause7_07.json.out
new file mode 100644
index 0000000..3661d7f
--- /dev/null
+++ b/tests/expected/clause7_07.json.out
@@ -0,0 +1,3 @@
+{"op":"s_intersects","args":[{"property":"geometry"},{"type":"Point","coordinates":[36.319836,32.288087]}]}
+s_intersects(geometry, POINT(36.319836 32.288087))
+{"op":"s_intersects","args":[{"property":"geometry"},{"type":"Point","coordinates":[36.319836,32.288087]}]}
diff --git a/tests/expected/json/clause7_07.json b/tests/expected/clause7_07.txt.out
similarity index 51%
rename from tests/expected/json/clause7_07.json
rename to tests/expected/clause7_07.txt.out
index 466c96e..e1bbc63 100644
--- a/tests/expected/json/clause7_07.json
+++ b/tests/expected/clause7_07.txt.out
@@ -1,1 +1,3 @@
+S_INTERSECTS(geometry,POINT(36.319836 32.288087)) 
+s_intersects(geometry, POINT(36.319836 32.288087))
 {"op":"s_intersects","args":[{"property":"geometry"},{"type":"Point","coordinates":[36.319836,32.288087]}]}
diff --git a/tests/expected/clause7_10.json.out b/tests/expected/clause7_10.json.out
new file mode 100644
index 0000000..f72d7b4
--- /dev/null
+++ b/tests/expected/clause7_10.json.out
@@ -0,0 +1,3 @@
+{"op":"s_crosses","args":[{"property":"road"},{"type":"Polygon","coordinates":[[[43.7286,-79.2986],[43.7311,-79.2996],[43.7323,-79.2972],[43.7326,-79.2971],[43.7350,-79.2981],[43.7350,-79.2982],[43.7352,-79.2982],[43.7357,-79.2956],[43.7337,-79.2948],[43.7343,-79.2933],[43.7339,-79.2923],[43.7327,-79.2947],[43.7320,-79.2942],[43.7322,-79.2937],[43.7306,-79.2930],[43.7303,-79.2930],[43.7299,-79.2928],[43.7286,-79.2986]]]}]}
+s_crosses(road, POLYGON((43.7286 -79.2986,43.7311 -79.2996,43.7323 -79.2972,43.7326 -79.2971,43.735 -79.2981,43.735 -79.2982,43.7352 -79.2982,43.7357 -79.2956,43.7337 -79.2948,43.7343 -79.2933,43.7339 -79.2923,43.7327 -79.2947,43.732 -79.2942,43.7322 -79.2937,43.7306 -79.293,43.7303 -79.293,43.7299 -79.2928,43.7286 -79.2986)))
+{"op":"s_crosses","args":[{"property":"road"},{"type":"Polygon","coordinates":[[[43.7286,-79.2986],[43.7311,-79.2996],[43.7323,-79.2972],[43.7326,-79.2971],[43.735,-79.2981],[43.735,-79.2982],[43.7352,-79.2982],[43.7357,-79.2956],[43.7337,-79.2948],[43.7343,-79.2933],[43.7339,-79.2923],[43.7327,-79.2947],[43.732,-79.2942],[43.7322,-79.2937],[43.7306,-79.293],[43.7303,-79.293],[43.7299,-79.2928],[43.7286,-79.2986]]]}]}
diff --git a/tests/expected/clause7_10.txt.out b/tests/expected/clause7_10.txt.out
new file mode 100644
index 0000000..15587a8
--- /dev/null
+++ b/tests/expected/clause7_10.txt.out
@@ -0,0 +1,3 @@
+S_CROSSES(road,POLYGON((43.7286 -79.2986, 43.7311 -79.2996, 43.7323 -79.2972,                         43.7326 -79.2971, 43.7350 -79.2981, 43.7350 -79.2982,                         43.7352 -79.2982, 43.7357 -79.2956, 43.7337 -79.2948,                         43.7343 -79.2933, 43.7339 -79.2923, 43.7327 -79.2947,                         43.7320 -79.2942, 43.7322 -79.2937, 43.7306 -79.2930,                         43.7303 -79.2930, 43.7299 -79.2928, 43.7286 -79.2986))) 
+s_crosses(road, POLYGON((43.7286 -79.2986, 43.7311 -79.2996, 43.7323 -79.2972,                         43.7326 -79.2971, 43.7350 -79.2981, 43.7350 -79.2982,                         43.7352 -79.2982, 43.7357 -79.2956, 43.7337 -79.2948,                         43.7343 -79.2933, 43.7339 -79.2923, 43.7327 -79.2947,                         43.7320 -79.2942, 43.7322 -79.2937, 43.7306 -79.2930,                         43.7303 -79.2930, 43.7299 -79.2928, 43.7286 -79.2986)))
+{"op":"s_crosses","args":[{"property":"road"},{"type":"Polygon","coordinates":[[[43.7286,-79.2986],[43.7311,-79.2996],[43.7323,-79.2972],[43.7326,-79.2971],[43.735,-79.2981],[43.735,-79.2982],[43.7352,-79.2982],[43.7357,-79.2956],[43.7337,-79.2948],[43.7343,-79.2933],[43.7339,-79.2923],[43.7327,-79.2947],[43.732,-79.2942],[43.7322,-79.2937],[43.7306,-79.293],[43.7303,-79.293],[43.7299,-79.2928],[43.7286,-79.2986]]]}]}
diff --git a/tests/expected/clause7_12.json.out b/tests/expected/clause7_12.json.out
new file mode 100644
index 0000000..0eed006
--- /dev/null
+++ b/tests/expected/clause7_12.json.out
@@ -0,0 +1,3 @@
+{"op":"t_intersects","args":[{"property":"event_time"},{"interval":["1969-07-16T05:32:00Z","1969-07-24T16:50:35Z"]}]}
+t_intersects(event_time, INTERVAL('1969-07-16T05:32:00Z','1969-07-24T16:50:35Z'))
+{"op":"t_intersects","args":[{"property":"event_time"},{"interval":["1969-07-16T05:32:00Z","1969-07-24T16:50:35Z"]}]}
diff --git a/tests/expected/clause7_12.txt.out b/tests/expected/clause7_12.txt.out
new file mode 100644
index 0000000..3f8bc24
--- /dev/null
+++ b/tests/expected/clause7_12.txt.out
@@ -0,0 +1,3 @@
+T_INTERSECTS(event_time, INTERVAL('1969-07-16T05:32:00Z', '1969-07-24T16:50:35Z')) 
+t_intersects(event_time, INTERVAL('1969-07-16T05:32:00Z','1969-07-24T16:50:35Z'))
+{"op":"t_intersects","args":[{"property":"event_time"},{"interval":["1969-07-16T05:32:00Z","1969-07-24T16:50:35Z"]}]}
diff --git a/tests/expected/clause7_13.json.out b/tests/expected/clause7_13.json.out
new file mode 100644
index 0000000..381c3d4
--- /dev/null
+++ b/tests/expected/clause7_13.json.out
@@ -0,0 +1,3 @@
+{"op":"t_during","args":[{"interval":[{"property":"touchdown"},{"property":"liftOff"}]},{"interval":["1969-07-16T13:32:00Z","1969-07-24T16:50:35Z"]}]}
+t_during(INTERVAL(touchdown,"liftOff"), INTERVAL('1969-07-16T13:32:00Z','1969-07-24T16:50:35Z'))
+{"op":"t_during","args":[{"interval":[{"property":"touchdown"},{"property":"liftOff"}]},{"interval":["1969-07-16T13:32:00Z","1969-07-24T16:50:35Z"]}]}
diff --git a/tests/expected/clause7_13.txt.out b/tests/expected/clause7_13.txt.out
new file mode 100644
index 0000000..0d9f872
--- /dev/null
+++ b/tests/expected/clause7_13.txt.out
@@ -0,0 +1,3 @@
+T_DURING(INTERVAL(touchdown, liftOff), INTERVAL('1969-07-16T13:32:00Z', '1969-07-24T16:50:35Z')) 
+t_during(INTERVAL(touchdown,"liftOff"), INTERVAL('1969-07-16T13:32:00Z','1969-07-24T16:50:35Z'))
+{"op":"t_during","args":[{"interval":[{"property":"touchdown"},{"property":"liftOff"}]},{"interval":["1969-07-16T13:32:00Z","1969-07-24T16:50:35Z"]}]}
diff --git a/tests/expected/clause7_15.json.out b/tests/expected/clause7_15.json.out
new file mode 100644
index 0000000..449d611
--- /dev/null
+++ b/tests/expected/clause7_15.json.out
@@ -0,0 +1,3 @@
+{"op":"a_contains","args":[{"property":"layer:ids"},["layers-ca","layers-us"]]}
+a_contains("layer:ids", ('layers-ca', 'layers-us'))
+{"op":"a_contains","args":[{"property":"layer:ids"},["layers-ca","layers-us"]]}
diff --git a/tests/expected/clause7_15.txt.out b/tests/expected/clause7_15.txt.out
new file mode 100644
index 0000000..472a868
--- /dev/null
+++ b/tests/expected/clause7_15.txt.out
@@ -0,0 +1,3 @@
+A_CONTAINS(layer:ids, ('layers-ca','layers-us')) 
+a_contains("layer:ids", ('layers-ca', 'layers-us'))
+{"op":"a_contains","args":[{"property":"layer:ids"},["layers-ca","layers-us"]]}
diff --git a/tests/expected/clause7_16.json.out b/tests/expected/clause7_16.json.out
new file mode 100644
index 0000000..a61c572
--- /dev/null
+++ b/tests/expected/clause7_16.json.out
@@ -0,0 +1,3 @@
+{"op":"s_crosses","args":[{"type":"LineString","coordinates":[[43.72992,-79.2998],[43.73005,-79.2991],[43.73006,-79.2984],[43.73140,-79.2956],[43.73259,-79.2950],[43.73266,-79.2945],[43.73320,-79.2936],[43.73378,-79.2936],[43.73486,-79.2917]]},{"type":"Polygon","coordinates":[[[43.7286,-79.2986],[43.7311,-79.2996],[43.7323,-79.2972],[43.7326,-79.2971],[43.7350,-79.2981],[43.7350,-79.2982],[43.7352,-79.2982],[43.7357,-79.2956],[43.7337,-79.2948],[43.7343,-79.2933],[43.7339,-79.2923],[43.7327,-79.2947],[43.7320,-79.2942],[43.7322,-79.2937],[43.7306,-79.2930],[43.7303,-79.2930],[43.7299,-79.2928],[43.7286,-79.2986]]]}]}
+s_crosses(LINESTRING(43.72992 -79.2998,43.73005 -79.2991,43.73006 -79.2984,43.7314 -79.2956,43.73259 -79.295,43.73266 -79.2945,43.7332 -79.2936,43.73378 -79.2936,43.73486 -79.2917), POLYGON((43.7286 -79.2986,43.7311 -79.2996,43.7323 -79.2972,43.7326 -79.2971,43.735 -79.2981,43.735 -79.2982,43.7352 -79.2982,43.7357 -79.2956,43.7337 -79.2948,43.7343 -79.2933,43.7339 -79.2923,43.7327 -79.2947,43.732 -79.2942,43.7322 -79.2937,43.7306 -79.293,43.7303 -79.293,43.7299 -79.2928,43.7286 -79.2986)))
+{"op":"s_crosses","args":[{"type":"LineString","coordinates":[[43.72992,-79.2998],[43.73005,-79.2991],[43.73006,-79.2984],[43.7314,-79.2956],[43.73259,-79.295],[43.73266,-79.2945],[43.7332,-79.2936],[43.73378,-79.2936],[43.73486,-79.2917]]},{"type":"Polygon","coordinates":[[[43.7286,-79.2986],[43.7311,-79.2996],[43.7323,-79.2972],[43.7326,-79.2971],[43.735,-79.2981],[43.735,-79.2982],[43.7352,-79.2982],[43.7357,-79.2956],[43.7337,-79.2948],[43.7343,-79.2933],[43.7339,-79.2923],[43.7327,-79.2947],[43.732,-79.2942],[43.7322,-79.2937],[43.7306,-79.293],[43.7303,-79.293],[43.7299,-79.2928],[43.7286,-79.2986]]]}]}
diff --git a/tests/expected/clause7_16.txt.out b/tests/expected/clause7_16.txt.out
new file mode 100644
index 0000000..831b80c
--- /dev/null
+++ b/tests/expected/clause7_16.txt.out
@@ -0,0 +1,3 @@
+S_CROSSES(LINESTRING(43.72992 -79.2998, 43.73005 -79.2991, 43.73006 -79.2984,                      43.73140 -79.2956, 43.73259 -79.2950, 43.73266 -79.2945,                      43.73320 -79.2936, 43.73378 -79.2936, 43.73486 -79.2917),         POLYGON((43.7286 -79.2986, 43.7311 -79.2996, 43.7323 -79.2972, 43.7326 -79.2971,                  43.7350 -79.2981, 43.7350 -79.2982, 43.7352 -79.2982, 43.7357 -79.2956,                  43.7337 -79.2948, 43.7343 -79.2933, 43.7339 -79.2923, 43.7327 -79.2947,                  43.7320 -79.2942, 43.7322 -79.2937, 43.7306 -79.2930, 43.7303 -79.2930,                  43.7299 -79.2928, 43.7286 -79.2986))) 
+s_crosses(LINESTRING(43.72992 -79.2998, 43.73005 -79.2991, 43.73006 -79.2984,                      43.73140 -79.2956, 43.73259 -79.2950, 43.73266 -79.2945,                      43.73320 -79.2936, 43.73378 -79.2936, 43.73486 -79.2917), POLYGON((43.7286 -79.2986, 43.7311 -79.2996, 43.7323 -79.2972, 43.7326 -79.2971,                  43.7350 -79.2981, 43.7350 -79.2982, 43.7352 -79.2982, 43.7357 -79.2956,                  43.7337 -79.2948, 43.7343 -79.2933, 43.7339 -79.2923, 43.7327 -79.2947,                  43.7320 -79.2942, 43.7322 -79.2937, 43.7306 -79.2930, 43.7303 -79.2930,                  43.7299 -79.2928, 43.7286 -79.2986)))
+{"op":"s_crosses","args":[{"type":"LineString","coordinates":[[43.72992,-79.2998],[43.73005,-79.2991],[43.73006,-79.2984],[43.7314,-79.2956],[43.73259,-79.295],[43.73266,-79.2945],[43.7332,-79.2936],[43.73378,-79.2936],[43.73486,-79.2917]]},{"type":"Polygon","coordinates":[[[43.7286,-79.2986],[43.7311,-79.2996],[43.7323,-79.2972],[43.7326,-79.2971],[43.735,-79.2981],[43.735,-79.2982],[43.7352,-79.2982],[43.7357,-79.2956],[43.7337,-79.2948],[43.7343,-79.2933],[43.7339,-79.2923],[43.7327,-79.2947],[43.732,-79.2942],[43.7322,-79.2937],[43.7306,-79.293],[43.7303,-79.293],[43.7299,-79.2928],[43.7286,-79.2986]]]}]}
diff --git a/tests/expected/clause7_17.json.out b/tests/expected/clause7_17.json.out
new file mode 100644
index 0000000..5299718
--- /dev/null
+++ b/tests/expected/clause7_17.json.out
@@ -0,0 +1,3 @@
+{"op":"t_during","args":[{"interval":["1969-07-20T20:17:40Z","1969-07-21T17:54:00Z"]},{"interval":["1969-07-16T13:32:00Z","1969-07-24T16:50:35Z"]}]}
+t_during(INTERVAL('1969-07-20T20:17:40Z','1969-07-21T17:54:00Z'), INTERVAL('1969-07-16T13:32:00Z','1969-07-24T16:50:35Z'))
+{"op":"t_during","args":[{"interval":["1969-07-20T20:17:40Z","1969-07-21T17:54:00Z"]},{"interval":["1969-07-16T13:32:00Z","1969-07-24T16:50:35Z"]}]}
diff --git a/tests/expected/clause7_17.txt.out b/tests/expected/clause7_17.txt.out
new file mode 100644
index 0000000..8a6ca03
--- /dev/null
+++ b/tests/expected/clause7_17.txt.out
@@ -0,0 +1,3 @@
+T_DURING(INTERVAL('1969-07-20T20:17:40Z', '1969-07-21T17:54:00Z'), INTERVAL('1969-07-16T13:32:00Z', '1969-07-24T16:50:35Z')) 
+t_during(INTERVAL('1969-07-20T20:17:40Z','1969-07-21T17:54:00Z'), INTERVAL('1969-07-16T13:32:00Z','1969-07-24T16:50:35Z'))
+{"op":"t_during","args":[{"interval":["1969-07-20T20:17:40Z","1969-07-21T17:54:00Z"]},{"interval":["1969-07-16T13:32:00Z","1969-07-24T16:50:35Z"]}]}
diff --git a/tests/expected/clause7_18.json.out b/tests/expected/clause7_18.json.out
new file mode 100644
index 0000000..6f898af
--- /dev/null
+++ b/tests/expected/clause7_18.json.out
@@ -0,0 +1,3 @@
+{"op":"s_within","args":[{"property":"road"},{"op":"Buffer","args":[{"property":"geometry"},10,"m"]}]}
+s_within(road, "Buffer"(geometry, 10, 'm'))
+{"op":"s_within","args":[{"property":"road"},{"op":"Buffer","args":[{"property":"geometry"},10.0,"m"]}]}
diff --git a/tests/expected/text/clause7_18.json b/tests/expected/clause7_18.txt.out
similarity index 56%
rename from tests/expected/text/clause7_18.json
rename to tests/expected/clause7_18.txt.out
index 022648d..465f452 100644
--- a/tests/expected/text/clause7_18.json
+++ b/tests/expected/clause7_18.txt.out
@@ -1,1 +1,3 @@
+S_WITHIN(road,Buffer(geometry,10,'m')) 
+s_within(road, buffer(geometry, 10, 'm'))
 {"op":"s_within","args":[{"property":"road"},{"op":"buffer","args":[{"property":"geometry"},10.0,"m"]}]}
diff --git a/tests/expected/clause7_19.json.out b/tests/expected/clause7_19.json.out
new file mode 100644
index 0000000..a155219
--- /dev/null
+++ b/tests/expected/clause7_19.json.out
@@ -0,0 +1,3 @@
+{"op":">","args":[{"property":"vehicle_height"},{"op":"-","args":[{"property":"bridge_clearance"},1]}]}
+(vehicle_height > bridge_clearance - 1)
+{"op":">","args":[{"property":"vehicle_height"},{"op":"-","args":[{"property":"bridge_clearance"},1.0]}]}
diff --git a/tests/expected/json/clause7_19.json b/tests/expected/clause7_19.txt.out
similarity index 57%
rename from tests/expected/json/clause7_19.json
rename to tests/expected/clause7_19.txt.out
index a07993f..b90632f 100644
--- a/tests/expected/json/clause7_19.json
+++ b/tests/expected/clause7_19.txt.out
@@ -1,1 +1,3 @@
+vehicle_height > (bridge_clearance-1) 
+(vehicle_height > bridge_clearance - 1)
 {"op":">","args":[{"property":"vehicle_height"},{"op":"-","args":[{"property":"bridge_clearance"},1.0]}]}
diff --git a/tests/expected/example01.json.out b/tests/expected/example01.json.out
new file mode 100644
index 0000000..5c807b1
--- /dev/null
+++ b/tests/expected/example01.json.out
@@ -0,0 +1,3 @@
+{"op":"=","args":[{"property":"landsat:scene_id"},"LC82030282019133LGN00"]}
+("landsat:scene_id" = 'LC82030282019133LGN00')
+{"op":"=","args":[{"property":"landsat:scene_id"},"LC82030282019133LGN00"]}
diff --git a/tests/expected/example01.txt.out b/tests/expected/example01.txt.out
new file mode 100644
index 0000000..aab0e11
--- /dev/null
+++ b/tests/expected/example01.txt.out
@@ -0,0 +1,3 @@
+landsat:scene_id = 'LC82030282019133LGN00' 
+("landsat:scene_id" = 'LC82030282019133LGN00')
+{"op":"=","args":[{"property":"landsat:scene_id"},"LC82030282019133LGN00"]}
diff --git a/tests/expected/example02.json.out b/tests/expected/example02.json.out
new file mode 100644
index 0000000..254c1d5
--- /dev/null
+++ b/tests/expected/example02.json.out
@@ -0,0 +1,3 @@
+{"op":"like","args":[{"property":"eo:instrument"},"OLI%"]}
+("eo:instrument" LIKE 'OLI%')
+{"op":"like","args":[{"property":"eo:instrument"},"OLI%"]}
diff --git a/tests/expected/json/example02.json b/tests/expected/example02.txt.out
similarity index 50%
rename from tests/expected/json/example02.json
rename to tests/expected/example02.txt.out
index 001ff68..a55ec31 100644
--- a/tests/expected/json/example02.json
+++ b/tests/expected/example02.txt.out
@@ -1,1 +1,3 @@
+eo:instrument LIKE 'OLI%' 
+("eo:instrument" LIKE 'OLI%')
 {"op":"like","args":[{"property":"eo:instrument"},"OLI%"]}
diff --git a/tests/expected/example03.json.out b/tests/expected/example03.json.out
new file mode 100644
index 0000000..395b989
--- /dev/null
+++ b/tests/expected/example03.json.out
@@ -0,0 +1,3 @@
+{"op":"in","args":[{"property":"landsat:wrs_path"},["153","154","15X"]]}
+("landsat:wrs_path" IN ('153', '154', '15X'))
+{"op":"in","args":[{"property":"landsat:wrs_path"},["153","154","15X"]]}
diff --git a/tests/expected/example03.txt.out b/tests/expected/example03.txt.out
new file mode 100644
index 0000000..abbd075
--- /dev/null
+++ b/tests/expected/example03.txt.out
@@ -0,0 +1,3 @@
+landsat:wrs_path IN ('153','154','15X') 
+("landsat:wrs_path" IN ('153', '154', '15X'))
+{"op":"in","args":[{"property":"landsat:wrs_path"},["153","154","15X"]]}
diff --git a/tests/expected/example04.json.out b/tests/expected/example04.json.out
new file mode 100644
index 0000000..46c0d50
--- /dev/null
+++ b/tests/expected/example04.json.out
@@ -0,0 +1,3 @@
+{"op":"and","args":[{"op":"<","args":[{"property":"eo:cloud_cover"},0.1]},{"op":"=","args":[{"property":"landsat:wrs_row"},28]},{"op":"=","args":[{"property":"landsat:wrs_path"},203]}]}
+(("eo:cloud_cover" < 0.1) AND ("landsat:wrs_row" = 28) AND ("landsat:wrs_path" = 203))
+{"op":"and","args":[{"op":"<","args":[{"property":"eo:cloud_cover"},0.1]},{"op":"=","args":[{"property":"landsat:wrs_row"},28.0]},{"op":"=","args":[{"property":"landsat:wrs_path"},203.0]}]}
diff --git a/tests/expected/json/example04.json b/tests/expected/example04.txt.out
similarity index 54%
rename from tests/expected/json/example04.json
rename to tests/expected/example04.txt.out
index f2df389..218d934 100644
--- a/tests/expected/json/example04.json
+++ b/tests/expected/example04.txt.out
@@ -1,1 +1,3 @@
+eo:cloud_cover < 0.1 AND landsat:wrs_row=28 AND landsat:wrs_path=203 
+(("eo:cloud_cover" < 0.1) AND ("landsat:wrs_row" = 28) AND ("landsat:wrs_path" = 203))
 {"op":"and","args":[{"op":"<","args":[{"property":"eo:cloud_cover"},0.1]},{"op":"=","args":[{"property":"landsat:wrs_row"},28.0]},{"op":"=","args":[{"property":"landsat:wrs_path"},203.0]}]}
diff --git a/tests/expected/example05a.json.out b/tests/expected/example05a.json.out
new file mode 100644
index 0000000..4275327
--- /dev/null
+++ b/tests/expected/example05a.json.out
@@ -0,0 +1,3 @@
+{"op":"or","args":[{"op":"=","args":[{"property":"eo:cloud_cover"},0.1]},{"op":"=","args":[{"property":"eo:cloud_cover"},0.2]}]}
+(("eo:cloud_cover" = 0.1) OR ("eo:cloud_cover" = 0.2))
+{"op":"or","args":[{"op":"=","args":[{"property":"eo:cloud_cover"},0.1]},{"op":"=","args":[{"property":"eo:cloud_cover"},0.2]}]}
diff --git a/tests/expected/json/example05a.json b/tests/expected/example05a.txt.out
similarity index 57%
rename from tests/expected/json/example05a.json
rename to tests/expected/example05a.txt.out
index 29e996b..c1e34bf 100644
--- a/tests/expected/json/example05a.json
+++ b/tests/expected/example05a.txt.out
@@ -1,1 +1,3 @@
+eo:cloud_cover=0.1 OR eo:cloud_cover=0.2 
+(("eo:cloud_cover" = 0.1) OR ("eo:cloud_cover" = 0.2))
 {"op":"or","args":[{"op":"=","args":[{"property":"eo:cloud_cover"},0.1]},{"op":"=","args":[{"property":"eo:cloud_cover"},0.2]}]}
diff --git a/tests/expected/example05b.json.out b/tests/expected/example05b.json.out
new file mode 100644
index 0000000..b782057
--- /dev/null
+++ b/tests/expected/example05b.json.out
@@ -0,0 +1,3 @@
+{"op":"in","args":[{"property":"eo:cloud_cover"},[0.1,0.2]]}
+("eo:cloud_cover" IN (0.1, 0.2))
+{"op":"in","args":[{"property":"eo:cloud_cover"},[0.1,0.2]]}
diff --git a/tests/expected/example05b.txt.out b/tests/expected/example05b.txt.out
new file mode 100644
index 0000000..c681b44
--- /dev/null
+++ b/tests/expected/example05b.txt.out
@@ -0,0 +1,3 @@
+eo:cloud_cover IN (0.1,0.2) 
+("eo:cloud_cover" IN (0.1, 0.2))
+{"op":"in","args":[{"property":"eo:cloud_cover"},[0.1,0.2]]}
diff --git a/tests/expected/example06a.json.out b/tests/expected/example06a.json.out
new file mode 100644
index 0000000..520e284
--- /dev/null
+++ b/tests/expected/example06a.json.out
@@ -0,0 +1,3 @@
+{"op":"and","args":[{"op":"between","args":[{"property":"eo:cloud_cover"},0.1,0.2]},{"op":"=","args":[{"property":"landsat:wrs_row"},28]},{"op":"=","args":[{"property":"landsat:wrs_path"},203]}]}
+(("eo:cloud_cover" BETWEEN 0.1 AND 0.2) AND ("landsat:wrs_row" = 28) AND ("landsat:wrs_path" = 203))
+{"op":"and","args":[{"op":"between","args":[{"property":"eo:cloud_cover"},0.1,0.2]},{"op":"=","args":[{"property":"landsat:wrs_row"},28.0]},{"op":"=","args":[{"property":"landsat:wrs_path"},203.0]}]}
diff --git a/tests/expected/example06a.txt.out b/tests/expected/example06a.txt.out
new file mode 100644
index 0000000..d6a67d3
--- /dev/null
+++ b/tests/expected/example06a.txt.out
@@ -0,0 +1,3 @@
+    eo:cloud_cover BETWEEN 0.1 AND 0.2 AND landsat:wrs_row=28 AND landsat:wrs_path=203 
+("eo:cloud_cover" BETWEEN 0.1 AND 0.2)
+{"op":"between","args":[{"property":"eo:cloud_cover"},0.1,0.2]}
diff --git a/tests/expected/example06b.json.out b/tests/expected/example06b.json.out
new file mode 100644
index 0000000..48c3b79
--- /dev/null
+++ b/tests/expected/example06b.json.out
@@ -0,0 +1,3 @@
+{"op":"and","args":[{"op":">=","args":[{"property":"eo:cloud_cover"},0.1]},{"op":"<=","args":[{"property":"eo:cloud_cover"},0.2]},{"op":"=","args":[{"property":"landsat:wrs_row"},28]},{"op":"=","args":[{"property":"landsat:wrs_path"},203]}]}
+(("eo:cloud_cover" >= 0.1) AND ("eo:cloud_cover" <= 0.2) AND ("landsat:wrs_row" = 28) AND ("landsat:wrs_path" = 203))
+{"op":"and","args":[{"op":">=","args":[{"property":"eo:cloud_cover"},0.1]},{"op":"<=","args":[{"property":"eo:cloud_cover"},0.2]},{"op":"=","args":[{"property":"landsat:wrs_row"},28.0]},{"op":"=","args":[{"property":"landsat:wrs_path"},203.0]}]}
diff --git a/tests/expected/json/example06b.json b/tests/expected/example06b.txt.out
similarity index 52%
rename from tests/expected/json/example06b.json
rename to tests/expected/example06b.txt.out
index f986256..80ed259 100644
--- a/tests/expected/json/example06b.json
+++ b/tests/expected/example06b.txt.out
@@ -1,1 +1,3 @@
+    eo:cloud_cover >= 0.1 AND eo:cloud_cover <= 0.2 AND landsat:wrs_row=28 AND landsat:wrs_path=203 
+(("eo:cloud_cover" >= 0.1) AND ("eo:cloud_cover" <= 0.2) AND ("landsat:wrs_row" = 28) AND ("landsat:wrs_path" = 203))
 {"op":"and","args":[{"op":">=","args":[{"property":"eo:cloud_cover"},0.1]},{"op":"<=","args":[{"property":"eo:cloud_cover"},0.2]},{"op":"=","args":[{"property":"landsat:wrs_row"},28.0]},{"op":"=","args":[{"property":"landsat:wrs_path"},203.0]}]}
diff --git a/tests/expected/example07.json.out b/tests/expected/example07.json.out
new file mode 100644
index 0000000..d491101
--- /dev/null
+++ b/tests/expected/example07.json.out
@@ -0,0 +1,3 @@
+{"op":"and","args":[{"op":"like","args":[{"property":"eo:instrument"},"OLI%"]},{"op":"s_intersects","args":[{"property":"footprint"},{"type":"Polygon","coordinates":[[[43.5845,-79.5442],[43.6079,-79.4893],[43.5677,-79.4632],[43.6129,-79.3925],[43.6223,-79.3238],[43.6576,-79.3163],[43.7945,-79.1178],[43.8144,-79.1542],[43.8555,-79.1714],[43.7509,-79.639],[43.5845,-79.5442]]]}]}]}
+(("eo:instrument" LIKE 'OLI%') AND s_intersects(footprint, POLYGON((43.5845 -79.5442,43.6079 -79.4893,43.5677 -79.4632,43.6129 -79.3925,43.6223 -79.3238,43.6576 -79.3163,43.7945 -79.1178,43.8144 -79.1542,43.8555 -79.1714,43.7509 -79.639,43.5845 -79.5442))))
+{"op":"and","args":[{"op":"like","args":[{"property":"eo:instrument"},"OLI%"]},{"op":"s_intersects","args":[{"property":"footprint"},{"type":"Polygon","coordinates":[[[43.5845,-79.5442],[43.6079,-79.4893],[43.5677,-79.4632],[43.6129,-79.3925],[43.6223,-79.3238],[43.6576,-79.3163],[43.7945,-79.1178],[43.8144,-79.1542],[43.8555,-79.1714],[43.7509,-79.639],[43.5845,-79.5442]]]}]}]}
diff --git a/tests/expected/example07.txt.out b/tests/expected/example07.txt.out
new file mode 100644
index 0000000..734073b
--- /dev/null
+++ b/tests/expected/example07.txt.out
@@ -0,0 +1,3 @@
+eo:instrument LIKE 'OLI%'                 AND S_INTERSECTS(footprint,POLYGON((43.5845 -79.5442,                                                     43.6079 -79.4893,                                                     43.5677 -79.4632,                                                     43.6129 -79.3925,                                                     43.6223 -79.3238,                                                     43.6576 -79.3163,                                                     43.7945 -79.1178,                                                     43.8144 -79.1542,                                                     43.8555 -79.1714,                                                     43.7509 -79.6390,                                                     43.5845 -79.5442))) 
+(("eo:instrument" LIKE 'OLI%') AND s_intersects(footprint, POLYGON((43.5845 -79.5442,                                                     43.6079 -79.4893,                                                     43.5677 -79.4632,                                                     43.6129 -79.3925,                                                     43.6223 -79.3238,                                                     43.6576 -79.3163,                                                     43.7945 -79.1178,                                                     43.8144 -79.1542,                                                     43.8555 -79.1714,                                                     43.7509 -79.6390,                                                     43.5845 -79.5442))))
+{"op":"and","args":[{"op":"like","args":[{"property":"eo:instrument"},"OLI%"]},{"op":"s_intersects","args":[{"property":"footprint"},{"type":"Polygon","coordinates":[[[43.5845,-79.5442],[43.6079,-79.4893],[43.5677,-79.4632],[43.6129,-79.3925],[43.6223,-79.3238],[43.6576,-79.3163],[43.7945,-79.1178],[43.8144,-79.1542],[43.8555,-79.1714],[43.7509,-79.639],[43.5845,-79.5442]]]}]}]}
diff --git a/tests/expected/example08.json.out b/tests/expected/example08.json.out
new file mode 100644
index 0000000..04af767
--- /dev/null
+++ b/tests/expected/example08.json.out
@@ -0,0 +1,3 @@
+{"op":"and","args":[{"op":"=","args":[{"property":"beamMode"},"ScanSAR Narrow"]},{"op":"=","args":[{"property":"swathDirection"},"ascending"]},{"op":"=","args":[{"property":"polarization"},"HH+VV+HV+VH"]},{"op":"s_intersects","args":[{"property":"footprint"},{"type":"Polygon","coordinates":[[[-77.117938,38.936860],[-77.040604,39.995648],[-76.910536,38.892912],[-77.039359,38.791753],[-77.047906,38.841462],[-77.034183,38.840655],[-77.033142,38.857490],[-77.117938,38.936860]]]}]}]}
+(("beamMode" = 'ScanSAR Narrow') AND ("swathDirection" = 'ascending') AND (polarization = 'HH+VV+HV+VH') AND s_intersects(footprint, POLYGON((-77.117938 38.93686,-77.040604 39.995648,-76.910536 38.892912,-77.039359 38.791753,-77.047906 38.841462,-77.034183 38.840655,-77.033142 38.85749,-77.117938 38.93686))))
+{"op":"and","args":[{"op":"=","args":[{"property":"beamMode"},"ScanSAR Narrow"]},{"op":"=","args":[{"property":"swathDirection"},"ascending"]},{"op":"=","args":[{"property":"polarization"},"HH+VV+HV+VH"]},{"op":"s_intersects","args":[{"property":"footprint"},{"type":"Polygon","coordinates":[[[-77.117938,38.93686],[-77.040604,39.995648],[-76.910536,38.892912],[-77.039359,38.791753],[-77.047906,38.841462],[-77.034183,38.840655],[-77.033142,38.85749],[-77.117938,38.93686]]]}]}]}
diff --git a/tests/expected/example08.txt.out b/tests/expected/example08.txt.out
new file mode 100644
index 0000000..b62ec24
--- /dev/null
+++ b/tests/expected/example08.txt.out
@@ -0,0 +1,3 @@
+    beamMode='ScanSAR Narrow' AND swathDirection='ascending' AND polarization='HH+VV+HV+VH' AND s_intersects(footprint,POLYGON((-77.117938 38.936860,                                     -77.040604 39.995648,                                     -76.910536 38.892912,                                     -77.039359 38.791753,                                     -77.047906 38.841462,                                     -77.034183 38.840655,                                     -77.033142 38.857490,                                     -77.117938 38.936860))) 
+(("beamMode" = 'ScanSAR Narrow') AND ("swathDirection" = 'ascending') AND (polarization = 'HH+VV+HV+VH') AND s_intersects(footprint, POLYGON((-77.117938 38.936860,                                     -77.040604 39.995648,                                     -76.910536 38.892912,                                     -77.039359 38.791753,                                     -77.047906 38.841462,                                     -77.034183 38.840655,                                     -77.033142 38.857490,                                     -77.117938 38.936860))))
+{"op":"and","args":[{"op":"=","args":[{"property":"beamMode"},"ScanSAR Narrow"]},{"op":"=","args":[{"property":"swathDirection"},"ascending"]},{"op":"=","args":[{"property":"polarization"},"HH+VV+HV+VH"]},{"op":"s_intersects","args":[{"property":"footprint"},{"type":"Polygon","coordinates":[[[-77.117938,38.93686],[-77.040604,39.995648],[-76.910536,38.892912],[-77.039359,38.791753],[-77.047906,38.841462],[-77.034183,38.840655],[-77.033142,38.85749],[-77.117938,38.93686]]]}]}]}
diff --git a/tests/expected/example09.json.out b/tests/expected/example09.json.out
new file mode 100644
index 0000000..9272299
--- /dev/null
+++ b/tests/expected/example09.json.out
@@ -0,0 +1,3 @@
+{"op":">","args":[{"property":"floors"},5]}
+(floors > 5)
+{"op":">","args":[{"property":"floors"},5.0]}
diff --git a/tests/expected/json/example09.json b/tests/expected/example09.txt.out
similarity index 66%
rename from tests/expected/json/example09.json
rename to tests/expected/example09.txt.out
index 9fc6caa..e1f0889 100644
--- a/tests/expected/json/example09.json
+++ b/tests/expected/example09.txt.out
@@ -1,1 +1,3 @@
+floors>5 
+(floors > 5)
 {"op":">","args":[{"property":"floors"},5.0]}
diff --git a/tests/expected/example10.json.out b/tests/expected/example10.json.out
new file mode 100644
index 0000000..cba53fa
--- /dev/null
+++ b/tests/expected/example10.json.out
@@ -0,0 +1,3 @@
+{"op":"<=","args":[{"property":"taxes"},500]}
+(taxes <= 500)
+{"op":"<=","args":[{"property":"taxes"},500.0]}
diff --git a/tests/expected/json/example10.json b/tests/expected/example10.txt.out
similarity index 62%
rename from tests/expected/json/example10.json
rename to tests/expected/example10.txt.out
index 1dd499d..00af75d 100644
--- a/tests/expected/json/example10.json
+++ b/tests/expected/example10.txt.out
@@ -1,1 +1,3 @@
+taxes <= 500 
+(taxes <= 500)
 {"op":"<=","args":[{"property":"taxes"},500.0]}
diff --git a/tests/expected/example11.json.out b/tests/expected/example11.json.out
new file mode 100644
index 0000000..ce56404
--- /dev/null
+++ b/tests/expected/example11.json.out
@@ -0,0 +1,3 @@
+{"op":"like","args":[{"property":"owner"},"%Jones%"]}
+(owner LIKE '%Jones%')
+{"op":"like","args":[{"property":"owner"},"%Jones%"]}
diff --git a/tests/expected/json/example11.json b/tests/expected/example11.txt.out
similarity index 54%
rename from tests/expected/json/example11.json
rename to tests/expected/example11.txt.out
index c690b9a..3f3c05c 100644
--- a/tests/expected/json/example11.json
+++ b/tests/expected/example11.txt.out
@@ -1,1 +1,3 @@
+owner LIKE '%Jones%' 
+(owner LIKE '%Jones%')
 {"op":"like","args":[{"property":"owner"},"%Jones%"]}
diff --git a/tests/expected/example12.json.out b/tests/expected/example12.json.out
new file mode 100644
index 0000000..7f3581f
--- /dev/null
+++ b/tests/expected/example12.json.out
@@ -0,0 +1,3 @@
+{"op":"like","args":[{"property":"owner"},"Mike%"]}
+(owner LIKE 'Mike%')
+{"op":"like","args":[{"property":"owner"},"Mike%"]}
diff --git a/tests/expected/json/example12.json b/tests/expected/example12.txt.out
similarity index 55%
rename from tests/expected/json/example12.json
rename to tests/expected/example12.txt.out
index a52bf05..cdd03c2 100644
--- a/tests/expected/json/example12.json
+++ b/tests/expected/example12.txt.out
@@ -1,1 +1,3 @@
+owner LIKE 'Mike%' 
+(owner LIKE 'Mike%')
 {"op":"like","args":[{"property":"owner"},"Mike%"]}
diff --git a/tests/expected/example13.json.out b/tests/expected/example13.json.out
new file mode 100644
index 0000000..e73a4e7
--- /dev/null
+++ b/tests/expected/example13.json.out
@@ -0,0 +1,3 @@
+{"op":"not","args":[{"op":"like","args":[{"property":"owner"},"%Mike%"]}]}
+(NOT (owner LIKE '%Mike%'))
+{"op":"not","args":[{"op":"like","args":[{"property":"owner"},"%Mike%"]}]}
diff --git a/tests/expected/json/example13.json b/tests/expected/example13.txt.out
similarity index 58%
rename from tests/expected/json/example13.json
rename to tests/expected/example13.txt.out
index 7395264..bfb5fff 100644
--- a/tests/expected/json/example13.json
+++ b/tests/expected/example13.txt.out
@@ -1,1 +1,3 @@
+owner NOT LIKE '%Mike%' 
+(NOT (owner LIKE '%Mike%'))
 {"op":"not","args":[{"op":"like","args":[{"property":"owner"},"%Mike%"]}]}
diff --git a/tests/expected/example14.json.out b/tests/expected/example14.json.out
new file mode 100644
index 0000000..a2d9f93
--- /dev/null
+++ b/tests/expected/example14.json.out
@@ -0,0 +1,3 @@
+{"op":"=","args":[{"property":"swimming_pool"},true]}
+(swimming_pool = true)
+{"op":"=","args":[{"property":"swimming_pool"},true]}
diff --git a/tests/expected/json/example14.json b/tests/expected/example14.txt.out
similarity index 54%
rename from tests/expected/json/example14.json
rename to tests/expected/example14.txt.out
index ca167d2..24f65f9 100644
--- a/tests/expected/json/example14.json
+++ b/tests/expected/example14.txt.out
@@ -1,1 +1,3 @@
+swimming_pool = true 
+(swimming_pool = true)
 {"op":"=","args":[{"property":"swimming_pool"},true]}
diff --git a/tests/expected/example15.json.out b/tests/expected/example15.json.out
new file mode 100644
index 0000000..ae2a1aa
--- /dev/null
+++ b/tests/expected/example15.json.out
@@ -0,0 +1,3 @@
+{"op":"and","args":[{"op":">","args":[{"property":"floors"},5]},{"op":"=","args":[{"property":"swimming_pool"},true]}]}
+((floors > 5) AND (swimming_pool = true))
+{"op":"and","args":[{"op":">","args":[{"property":"floors"},5.0]},{"op":"=","args":[{"property":"swimming_pool"},true]}]}
diff --git a/tests/expected/json/example15.json b/tests/expected/example15.txt.out
similarity index 61%
rename from tests/expected/json/example15.json
rename to tests/expected/example15.txt.out
index 97d1cd3..507164d 100644
--- a/tests/expected/json/example15.json
+++ b/tests/expected/example15.txt.out
@@ -1,1 +1,3 @@
+floors>5 AND swimming_pool=true 
+((floors > 5) AND (swimming_pool = true))
 {"op":"and","args":[{"op":">","args":[{"property":"floors"},5.0]},{"op":"=","args":[{"property":"swimming_pool"},true]}]}
diff --git a/tests/expected/example16.json.out b/tests/expected/example16.json.out
new file mode 100644
index 0000000..36e3ee8
--- /dev/null
+++ b/tests/expected/example16.json.out
@@ -0,0 +1,3 @@
+{"op":"and","args":[{"op":"=","args":[{"property":"swimming_pool"},true]},{"op":"or","args":[{"op":">","args":[{"property":"floors"},5]},{"op":"like","args":[{"property":"material"},"brick%"]},{"op":"like","args":[{"property":"material"},"%brick"]}]}]}
+((swimming_pool = true) AND ((floors > 5) OR (material LIKE 'brick%') OR (material LIKE '%brick')))
+{"op":"and","args":[{"op":"=","args":[{"property":"swimming_pool"},true]},{"op":"or","args":[{"op":">","args":[{"property":"floors"},5.0]},{"op":"like","args":[{"property":"material"},"brick%"]},{"op":"like","args":[{"property":"material"},"%brick"]}]}]}
diff --git a/tests/expected/text/example16.json b/tests/expected/example16.txt.out
similarity index 54%
rename from tests/expected/text/example16.json
rename to tests/expected/example16.txt.out
index 399cd34..b51a5b2 100644
--- a/tests/expected/text/example16.json
+++ b/tests/expected/example16.txt.out
@@ -1,1 +1,3 @@
+swimming_pool=true AND (floors>5                      OR  material LIKE 'brick%'                     OR  material LIKE '%brick') 
+((swimming_pool = true) AND (((floors > 5) OR (material LIKE 'brick%')) OR (material LIKE '%brick')))
 {"op":"and","args":[{"op":"=","args":[{"property":"swimming_pool"},true]},{"op":"or","args":[{"op":"or","args":[{"op":">","args":[{"property":"floors"},5.0]},{"op":"like","args":[{"property":"material"},"brick%"]}]},{"op":"like","args":[{"property":"material"},"%brick"]}]}]}
diff --git a/tests/expected/example17.json.out b/tests/expected/example17.json.out
new file mode 100644
index 0000000..b10fb21
--- /dev/null
+++ b/tests/expected/example17.json.out
@@ -0,0 +1,3 @@
+{"op":"or","args":[{"op":"and","args":[{"op":">","args":[{"property":"floors"},5]},{"op":"=","args":[{"property":"material"},"brick"]}]},{"op":"=","args":[{"property":"swimming_pool"},true]}]}
+(((floors > 5) AND (material = 'brick')) OR (swimming_pool = true))
+{"op":"or","args":[{"op":"and","args":[{"op":">","args":[{"property":"floors"},5.0]},{"op":"=","args":[{"property":"material"},"brick"]}]},{"op":"=","args":[{"property":"swimming_pool"},true]}]}
diff --git a/tests/expected/json/example17.json b/tests/expected/example17.txt.out
similarity index 61%
rename from tests/expected/json/example17.json
rename to tests/expected/example17.txt.out
index 22df770..36618be 100644
--- a/tests/expected/json/example17.json
+++ b/tests/expected/example17.txt.out
@@ -1,1 +1,3 @@
+(floors>5 AND material='brick') OR swimming_pool=true 
+(((floors > 5) AND (material = 'brick')) OR (swimming_pool = true))
 {"op":"or","args":[{"op":"and","args":[{"op":">","args":[{"property":"floors"},5.0]},{"op":"=","args":[{"property":"material"},"brick"]}]},{"op":"=","args":[{"property":"swimming_pool"},true]}]}
diff --git a/tests/expected/example18.json.out b/tests/expected/example18.json.out
new file mode 100644
index 0000000..4d176d8
--- /dev/null
+++ b/tests/expected/example18.json.out
@@ -0,0 +1,3 @@
+{"op":"or","args":[{"op":"not","args":[{"op":"<","args":[{"property":"floors"},5]}]},{"op":"=","args":[{"property":"swimming_pool"},true]}]}
+((NOT (floors < 5)) OR (swimming_pool = true))
+{"op":"or","args":[{"op":"not","args":[{"op":"<","args":[{"property":"floors"},5.0]}]},{"op":"=","args":[{"property":"swimming_pool"},true]}]}
diff --git a/tests/expected/json/example18.json b/tests/expected/example18.txt.out
similarity index 62%
rename from tests/expected/json/example18.json
rename to tests/expected/example18.txt.out
index 79a847a..d587902 100644
--- a/tests/expected/json/example18.json
+++ b/tests/expected/example18.txt.out
@@ -1,1 +1,3 @@
+NOT (floors<5) OR swimming_pool=true 
+((NOT (floors < 5)) OR (swimming_pool = true))
 {"op":"or","args":[{"op":"not","args":[{"op":"<","args":[{"property":"floors"},5.0]}]},{"op":"=","args":[{"property":"swimming_pool"},true]}]}
diff --git a/tests/expected/example19.json.out b/tests/expected/example19.json.out
new file mode 100644
index 0000000..12b96e6
--- /dev/null
+++ b/tests/expected/example19.json.out
@@ -0,0 +1,3 @@
+{"op":"and","args":[{"op":"or","args":[{"op":"like","args":[{"property":"owner"},"mike%"]},{"op":"like","args":[{"property":"owner"},"Mike%"]}]},{"op":"<","args":[{"property":"floors"},4]}]}
+(((owner LIKE 'mike%') OR (owner LIKE 'Mike%')) AND (floors < 4))
+{"op":"and","args":[{"op":"or","args":[{"op":"like","args":[{"property":"owner"},"mike%"]},{"op":"like","args":[{"property":"owner"},"Mike%"]}]},{"op":"<","args":[{"property":"floors"},4.0]}]}
diff --git a/tests/expected/json/example19.json b/tests/expected/example19.txt.out
similarity index 61%
rename from tests/expected/json/example19.json
rename to tests/expected/example19.txt.out
index b619042..1be1884 100644
--- a/tests/expected/json/example19.json
+++ b/tests/expected/example19.txt.out
@@ -1,1 +1,3 @@
+(owner LIKE 'mike%' OR owner LIKE 'Mike%') AND floors<4 
+(((owner LIKE 'mike%') OR (owner LIKE 'Mike%')) AND (floors < 4))
 {"op":"and","args":[{"op":"or","args":[{"op":"like","args":[{"property":"owner"},"mike%"]},{"op":"like","args":[{"property":"owner"},"Mike%"]}]},{"op":"<","args":[{"property":"floors"},4.0]}]}
diff --git a/tests/expected/example20.json.out b/tests/expected/example20.json.out
new file mode 100644
index 0000000..73d477c
--- /dev/null
+++ b/tests/expected/example20.json.out
@@ -0,0 +1,3 @@
+{"op":"t_before","args":[{"property":"built"},{"date":"2015-01-01"}]}
+t_before(built, DATE('2015-01-01'))
+{"op":"t_before","args":[{"property":"built"},{"date":"2015-01-01"}]}
diff --git a/tests/expected/example20.txt.out b/tests/expected/example20.txt.out
new file mode 100644
index 0000000..4a148d3
--- /dev/null
+++ b/tests/expected/example20.txt.out
@@ -0,0 +1,3 @@
+T_BEFORE(built, DATE('2015-01-01')) 
+t_before(built, DATE('2015-01-01'))
+{"op":"t_before","args":[{"property":"built"},{"date":"2015-01-01"}]}
diff --git a/tests/expected/example21.json.out b/tests/expected/example21.json.out
new file mode 100644
index 0000000..53bf701
--- /dev/null
+++ b/tests/expected/example21.json.out
@@ -0,0 +1,3 @@
+{"op":"t_after","args":[{"property":"built"},{"date":"2012-06-05"}]}
+t_after(built, DATE('2012-06-05'))
+{"op":"t_after","args":[{"property":"built"},{"date":"2012-06-05"}]}
diff --git a/tests/expected/example21.txt.out b/tests/expected/example21.txt.out
new file mode 100644
index 0000000..98f9d07
--- /dev/null
+++ b/tests/expected/example21.txt.out
@@ -0,0 +1,3 @@
+T_AFTER(built,DATE('2012-06-05')) 
+t_after(built, DATE('2012-06-05'))
+{"op":"t_after","args":[{"property":"built"},{"date":"2012-06-05"}]}
diff --git a/tests/expected/example22.json.out b/tests/expected/example22.json.out
new file mode 100644
index 0000000..94920a8
--- /dev/null
+++ b/tests/expected/example22.json.out
@@ -0,0 +1,3 @@
+{"op":"t_during","args":[{"interval":[{"property":"starts_at"},{"property":"ends_at"}]},{"interval":["2017-06-10T07:30:00Z","2017-06-11T10:30:00Z"]}]}
+t_during(INTERVAL(starts_at,ends_at), INTERVAL('2017-06-10T07:30:00Z','2017-06-11T10:30:00Z'))
+{"op":"t_during","args":[{"interval":[{"property":"starts_at"},{"property":"ends_at"}]},{"interval":["2017-06-10T07:30:00Z","2017-06-11T10:30:00Z"]}]}
diff --git a/tests/expected/example22.txt.out b/tests/expected/example22.txt.out
new file mode 100644
index 0000000..f871890
--- /dev/null
+++ b/tests/expected/example22.txt.out
@@ -0,0 +1,3 @@
+T_DURING(INTERVAL(starts_at, ends_at), INTERVAL('2017-06-10T07:30:00Z', '2017-06-11T10:30:00Z')) 
+t_during(INTERVAL(starts_at,ends_at), INTERVAL('2017-06-10T07:30:00Z','2017-06-11T10:30:00Z'))
+{"op":"t_during","args":[{"interval":[{"property":"starts_at"},{"property":"ends_at"}]},{"interval":["2017-06-10T07:30:00Z","2017-06-11T10:30:00Z"]}]}
diff --git a/tests/expected/example23.json.out b/tests/expected/example23.json.out
new file mode 100644
index 0000000..d899660
--- /dev/null
+++ b/tests/expected/example23.json.out
@@ -0,0 +1,3 @@
+{"op":"s_within","args":[{"property":"location"},{"bbox":[-118,33.8,-117.9,34]}]}
+s_within(location, BBOX(-118, 33.8, -117.9, 34))
+{"op":"s_within","args":[{"property":"location"},{"bbox":[-118.0,33.8,-117.9,34.0]}]}
diff --git a/tests/expected/text/example23.json b/tests/expected/example23.txt.out
similarity index 58%
rename from tests/expected/text/example23.json
rename to tests/expected/example23.txt.out
index fdffec9..e99aef6 100644
--- a/tests/expected/text/example23.json
+++ b/tests/expected/example23.txt.out
@@ -1,1 +1,3 @@
+S_WITHIN(location,BBOX(-118,33.8,-117.9,34)) 
+s_within(location, bbox(-1 * 118, 33.8, -1 * 117.9, 34))
 {"op":"s_within","args":[{"property":"location"},{"op":"bbox","args":[{"op":"*","args":[-1.0,118.0]},33.8,{"op":"*","args":[-1.0,117.9]},34.0]}]}
diff --git a/tests/expected/example24.json.out b/tests/expected/example24.json.out
new file mode 100644
index 0000000..1c6df83
--- /dev/null
+++ b/tests/expected/example24.json.out
@@ -0,0 +1,3 @@
+{"op":"s_intersects","args":[{"property":"geometry"},{"type":"Polygon","coordinates":[[[-10,-10],[10,-10],[10,10],[-10,-10]]]}]}
+s_intersects(geometry, POLYGON((-10 -10,10 -10,10 10,-10 -10)))
+{"op":"s_intersects","args":[{"property":"geometry"},{"type":"Polygon","coordinates":[[[-10.0,-10.0],[10.0,-10.0],[10.0,10.0],[-10.0,-10.0]]]}]}
diff --git a/tests/expected/example24.txt.out b/tests/expected/example24.txt.out
new file mode 100644
index 0000000..0251cfa
--- /dev/null
+++ b/tests/expected/example24.txt.out
@@ -0,0 +1,3 @@
+S_INTERSECTS(geometry,POLYGON((-10.0 -10.0,10.0 -10.0,10.0 10.0,-10.0 -10.0))) 
+s_intersects(geometry, POLYGON((-10.0 -10.0,10.0 -10.0,10.0 10.0,-10.0 -10.0)))
+{"op":"s_intersects","args":[{"property":"geometry"},{"type":"Polygon","coordinates":[[[-10.0,-10.0],[10.0,-10.0],[10.0,10.0],[-10.0,-10.0]]]}]}
diff --git a/tests/expected/example25.json.out b/tests/expected/example25.json.out
new file mode 100644
index 0000000..4c59ad1
--- /dev/null
+++ b/tests/expected/example25.json.out
@@ -0,0 +1,3 @@
+{"op":"and","args":[{"op":">","args":[{"property":"floors"},5]},{"op":"s_within","args":[{"property":"geometry"},{"bbox":[-118,33.8,-117.9,34]}]}]}
+((floors > 5) AND s_within(geometry, BBOX(-118, 33.8, -117.9, 34)))
+{"op":"and","args":[{"op":">","args":[{"property":"floors"},5.0]},{"op":"s_within","args":[{"property":"geometry"},{"bbox":[-118.0,33.8,-117.9,34.0]}]}]}
diff --git a/tests/expected/text/example25.json b/tests/expected/example25.txt.out
similarity index 61%
rename from tests/expected/text/example25.json
rename to tests/expected/example25.txt.out
index e6c01d2..3f0713d 100644
--- a/tests/expected/text/example25.json
+++ b/tests/expected/example25.txt.out
@@ -1,1 +1,3 @@
+floors>5 AND S_WITHIN(geometry,BBOX(-118,33.8,-117.9,34)) 
+((floors > 5) AND s_within(geometry, bbox(-1 * 118, 33.8, -1 * 117.9, 34)))
 {"op":"and","args":[{"op":">","args":[{"property":"floors"},5.0]},{"op":"s_within","args":[{"property":"geometry"},{"op":"bbox","args":[{"op":"*","args":[-1.0,118.0]},33.8,{"op":"*","args":[-1.0,117.9]},34.0]}]}]}
diff --git a/tests/expected/example26.json.out b/tests/expected/example26.json.out
new file mode 100644
index 0000000..6123371
--- /dev/null
+++ b/tests/expected/example26.json.out
@@ -0,0 +1,3 @@
+{"op":"in","args":[{"op":"casei","args":[{"property":"road_class"}]},[{"op":"casei","args":["Οδος"]},{"op":"casei","args":["Straße"]}]]}
+(casei(road_class) IN (casei('Οδος'), casei('Straße')))
+{"op":"in","args":[{"op":"casei","args":[{"property":"road_class"}]},[{"op":"casei","args":["Οδος"]},{"op":"casei","args":["Straße"]}]]}
diff --git a/tests/expected/json/example26.json b/tests/expected/example26.txt.out
similarity index 54%
rename from tests/expected/json/example26.json
rename to tests/expected/example26.txt.out
index 918f401..92e453c 100644
--- a/tests/expected/json/example26.json
+++ b/tests/expected/example26.txt.out
@@ -1,1 +1,3 @@
+CASEI(road_class) IN (CASEI('Οδος'),CASEI('Straße')) 
+(casei(road_class) IN (casei('Οδος'), casei('Straße')))
 {"op":"in","args":[{"op":"casei","args":[{"property":"road_class"}]},[{"op":"casei","args":["Οδος"]},{"op":"casei","args":["Straße"]}]]}
diff --git a/tests/expected/example27.json.out b/tests/expected/example27.json.out
new file mode 100644
index 0000000..a373b93
--- /dev/null
+++ b/tests/expected/example27.json.out
@@ -0,0 +1,3 @@
+{"op":"=","args":[{"op":"accenti","args":[{"property":"etat_vol"}]},{"op":"accenti","args":["débárquér"]}]}
+(accenti(etat_vol) = accenti('débárquér'))
+{"op":"=","args":[{"op":"accenti","args":[{"property":"etat_vol"}]},{"op":"accenti","args":["débárquér"]}]}
diff --git a/tests/expected/json/example27.json b/tests/expected/example27.txt.out
similarity index 54%
rename from tests/expected/json/example27.json
rename to tests/expected/example27.txt.out
index 5903327..d83d567 100644
--- a/tests/expected/json/example27.json
+++ b/tests/expected/example27.txt.out
@@ -1,1 +1,3 @@
+ACCENTI(etat_vol) = ACCENTI('débárquér') 
+(accenti(etat_vol) = accenti('débárquér'))
 {"op":"=","args":[{"op":"accenti","args":[{"property":"etat_vol"}]},{"op":"accenti","args":["débárquér"]}]}
diff --git a/tests/expected/example28.json.out b/tests/expected/example28.json.out
new file mode 100644
index 0000000..b8775fe
--- /dev/null
+++ b/tests/expected/example28.json.out
@@ -0,0 +1,3 @@
+{"op":"like","args":[{"op":"casei","args":[{"property":"geophys:SURVEY_NAME"}]},{"op":"casei","args":["%calcutta%"]}]}
+(casei("geophys:SURVEY_NAME") LIKE casei('%calcutta%'))
+{"op":"like","args":[{"op":"casei","args":[{"property":"geophys:SURVEY_NAME"}]},{"op":"casei","args":["%calcutta%"]}]}
diff --git a/tests/expected/text/example28.json b/tests/expected/example28.txt.out
similarity index 52%
rename from tests/expected/text/example28.json
rename to tests/expected/example28.txt.out
index cf06616..fc9ec07 100644
--- a/tests/expected/text/example28.json
+++ b/tests/expected/example28.txt.out
@@ -1,1 +1,3 @@
+CASEI(geophys:SURVEY_NAME) LIKE CASEI('%calcutta%') 
+(casei("geophys:SURVEY_NAME") LIKE casei('%calcutta%'))
 {"op":"like","args":[{"op":"casei","args":[{"property":"geophys:SURVEY_NAME"}]},{"op":"casei","args":["%calcutta%"]}]}
diff --git a/tests/expected/example29.json.out b/tests/expected/example29.json.out
new file mode 100644
index 0000000..7a9f062
--- /dev/null
+++ b/tests/expected/example29.json.out
@@ -0,0 +1,3 @@
+{"op":"=","args":[{"property":"id"},"fa7e1920-9107-422d-a3db-c468cbc5d6df"]}
+(id = 'fa7e1920-9107-422d-a3db-c468cbc5d6df')
+{"op":"=","args":[{"property":"id"},"fa7e1920-9107-422d-a3db-c468cbc5d6df"]}
diff --git a/tests/expected/example29.txt.out b/tests/expected/example29.txt.out
new file mode 100644
index 0000000..3e07749
--- /dev/null
+++ b/tests/expected/example29.txt.out
@@ -0,0 +1,3 @@
+"id" = 'fa7e1920-9107-422d-a3db-c468cbc5d6df' 
+(id = 'fa7e1920-9107-422d-a3db-c468cbc5d6df')
+{"op":"=","args":[{"property":"id"},"fa7e1920-9107-422d-a3db-c468cbc5d6df"]}
diff --git a/tests/expected/example30.json.out b/tests/expected/example30.json.out
new file mode 100644
index 0000000..d436bd7
--- /dev/null
+++ b/tests/expected/example30.json.out
@@ -0,0 +1,3 @@
+{"op":"<>","args":[{"property":"id"},"fa7e1920-9107-422d-a3db-c468cbc5d6df"]}
+(id <> 'fa7e1920-9107-422d-a3db-c468cbc5d6df')
+{"op":"<>","args":[{"property":"id"},"fa7e1920-9107-422d-a3db-c468cbc5d6df"]}
diff --git a/tests/expected/example30.txt.out b/tests/expected/example30.txt.out
new file mode 100644
index 0000000..87c9a8a
--- /dev/null
+++ b/tests/expected/example30.txt.out
@@ -0,0 +1,3 @@
+"id" <> 'fa7e1920-9107-422d-a3db-c468cbc5d6df' 
+(id <> 'fa7e1920-9107-422d-a3db-c468cbc5d6df')
+{"op":"<>","args":[{"property":"id"},"fa7e1920-9107-422d-a3db-c468cbc5d6df"]}
diff --git a/tests/expected/example31.json.out b/tests/expected/example31.json.out
new file mode 100644
index 0000000..660074a
--- /dev/null
+++ b/tests/expected/example31.json.out
@@ -0,0 +1,3 @@
+{"op":"<","args":[{"property":"value"},10]}
+(value < 10)
+{"op":"<","args":[{"property":"value"},10.0]}
diff --git a/tests/expected/json/example31.json b/tests/expected/example31.txt.out
similarity index 63%
rename from tests/expected/json/example31.json
rename to tests/expected/example31.txt.out
index c0ace76..642bb3e 100644
--- a/tests/expected/json/example31.json
+++ b/tests/expected/example31.txt.out
@@ -1,1 +1,3 @@
+"value" < 10 
+(value < 10)
 {"op":"<","args":[{"property":"value"},10.0]}
diff --git a/tests/expected/example32.json.out b/tests/expected/example32.json.out
new file mode 100644
index 0000000..8b35809
--- /dev/null
+++ b/tests/expected/example32.json.out
@@ -0,0 +1,3 @@
+{"op":">","args":[{"property":"value"},10]}
+(value > 10)
+{"op":">","args":[{"property":"value"},10.0]}
diff --git a/tests/expected/json/example32.json b/tests/expected/example32.txt.out
similarity index 63%
rename from tests/expected/json/example32.json
rename to tests/expected/example32.txt.out
index 7246dea..f85cf95 100644
--- a/tests/expected/json/example32.json
+++ b/tests/expected/example32.txt.out
@@ -1,1 +1,3 @@
+"value" > 10 
+(value > 10)
 {"op":">","args":[{"property":"value"},10.0]}
diff --git a/tests/expected/example33.json.out b/tests/expected/example33.json.out
new file mode 100644
index 0000000..6529085
--- /dev/null
+++ b/tests/expected/example33.json.out
@@ -0,0 +1,3 @@
+{"op":"<=","args":[{"property":"value"},10]}
+(value <= 10)
+{"op":"<=","args":[{"property":"value"},10.0]}
diff --git a/tests/expected/json/example33.json b/tests/expected/example33.txt.out
similarity index 61%
rename from tests/expected/json/example33.json
rename to tests/expected/example33.txt.out
index cce72a7..5cd36e9 100644
--- a/tests/expected/json/example33.json
+++ b/tests/expected/example33.txt.out
@@ -1,1 +1,3 @@
+"value" <= 10 
+(value <= 10)
 {"op":"<=","args":[{"property":"value"},10.0]}
diff --git a/tests/expected/example34.json.out b/tests/expected/example34.json.out
new file mode 100644
index 0000000..32603bb
--- /dev/null
+++ b/tests/expected/example34.json.out
@@ -0,0 +1,3 @@
+{"op":">=","args":[{"property":"value"},10]}
+(value >= 10)
+{"op":">=","args":[{"property":"value"},10.0]}
diff --git a/tests/expected/json/example34.json b/tests/expected/example34.txt.out
similarity index 61%
rename from tests/expected/json/example34.json
rename to tests/expected/example34.txt.out
index 0039003..5fd6a61 100644
--- a/tests/expected/json/example34.json
+++ b/tests/expected/example34.txt.out
@@ -1,1 +1,3 @@
+"value" >= 10 
+(value >= 10)
 {"op":">=","args":[{"property":"value"},10.0]}
diff --git a/tests/expected/example35.json.out b/tests/expected/example35.json.out
new file mode 100644
index 0000000..7d6a2df
--- /dev/null
+++ b/tests/expected/example35.json.out
@@ -0,0 +1,3 @@
+{"op":"like","args":[{"property":"name"},"foo%"]}
+(name LIKE 'foo%')
+{"op":"like","args":[{"property":"name"},"foo%"]}
diff --git a/tests/expected/json/example35.json b/tests/expected/example35.txt.out
similarity index 56%
rename from tests/expected/json/example35.json
rename to tests/expected/example35.txt.out
index 3f84e73..a954314 100644
--- a/tests/expected/json/example35.json
+++ b/tests/expected/example35.txt.out
@@ -1,1 +1,3 @@
+"name" LIKE 'foo%' 
+(name LIKE 'foo%')
 {"op":"like","args":[{"property":"name"},"foo%"]}
diff --git a/tests/expected/json/example36-alt01.json b/tests/expected/example36-alt01.txt.out
similarity index 59%
rename from tests/expected/json/example36-alt01.json
rename to tests/expected/example36-alt01.txt.out
index d2fa835..e345974 100644
--- a/tests/expected/json/example36-alt01.json
+++ b/tests/expected/example36-alt01.txt.out
@@ -1,1 +1,3 @@
+"name" NOT LIKE 'foo%' 
+(NOT (name LIKE 'foo%'))
 {"op":"not","args":[{"op":"like","args":[{"property":"name"},"foo%"]}]}
diff --git a/tests/expected/example36.json.out b/tests/expected/example36.json.out
new file mode 100644
index 0000000..a649084
--- /dev/null
+++ b/tests/expected/example36.json.out
@@ -0,0 +1,3 @@
+{"op":"not","args":[{"op":"like","args":[{"property":"name"},"foo%"]}]}
+(NOT (name LIKE 'foo%'))
+{"op":"not","args":[{"op":"like","args":[{"property":"name"},"foo%"]}]}
diff --git a/tests/expected/json/example36.json b/tests/expected/example36.txt.out
similarity index 59%
rename from tests/expected/json/example36.json
rename to tests/expected/example36.txt.out
index d2fa835..48a4fff 100644
--- a/tests/expected/json/example36.json
+++ b/tests/expected/example36.txt.out
@@ -1,1 +1,3 @@
+NOT "name" LIKE 'foo%' 
+(NOT (name LIKE 'foo%'))
 {"op":"not","args":[{"op":"like","args":[{"property":"name"},"foo%"]}]}
diff --git a/tests/expected/example37.json.out b/tests/expected/example37.json.out
new file mode 100644
index 0000000..592cf84
--- /dev/null
+++ b/tests/expected/example37.json.out
@@ -0,0 +1,3 @@
+{"op":"between","args":[{"property":"value"},10,20]}
+(value BETWEEN 10 AND 20)
+{"op":"between","args":[{"property":"value"},10.0,20.0]}
diff --git a/tests/expected/json/example37.json b/tests/expected/example37.txt.out
similarity index 51%
rename from tests/expected/json/example37.json
rename to tests/expected/example37.txt.out
index 2f6a943..5d0da7d 100644
--- a/tests/expected/json/example37.json
+++ b/tests/expected/example37.txt.out
@@ -1,1 +1,3 @@
+"value" BETWEEN 10 AND 20 
+(value BETWEEN 10 AND 20)
 {"op":"between","args":[{"property":"value"},10.0,20.0]}
diff --git a/tests/expected/json/example38-alt01.json b/tests/expected/example38-alt01.txt.out
similarity index 55%
rename from tests/expected/json/example38-alt01.json
rename to tests/expected/example38-alt01.txt.out
index c7399bf..f2927fa 100644
--- a/tests/expected/json/example38-alt01.json
+++ b/tests/expected/example38-alt01.txt.out
@@ -1,1 +1,3 @@
+"value" NOT BETWEEN 10 AND 20 
+(NOT (value BETWEEN 10 AND 20))
 {"op":"not","args":[{"op":"between","args":[{"property":"value"},10.0,20.0]}]}
diff --git a/tests/expected/example38.json.out b/tests/expected/example38.json.out
new file mode 100644
index 0000000..ecc6b44
--- /dev/null
+++ b/tests/expected/example38.json.out
@@ -0,0 +1,3 @@
+{"op":"not","args":[{"op":"between","args":[{"property":"value"},10,20]}]}
+(NOT (value BETWEEN 10 AND 20))
+{"op":"not","args":[{"op":"between","args":[{"property":"value"},10.0,20.0]}]}
diff --git a/tests/expected/json/example38.json b/tests/expected/example38.txt.out
similarity index 55%
rename from tests/expected/json/example38.json
rename to tests/expected/example38.txt.out
index c7399bf..c529c88 100644
--- a/tests/expected/json/example38.json
+++ b/tests/expected/example38.txt.out
@@ -1,1 +1,3 @@
+NOT "value" BETWEEN 10 AND 20 
+(NOT (value BETWEEN 10 AND 20))
 {"op":"not","args":[{"op":"between","args":[{"property":"value"},10.0,20.0]}]}
diff --git a/tests/expected/example39.json.out b/tests/expected/example39.json.out
new file mode 100644
index 0000000..4f96db7
--- /dev/null
+++ b/tests/expected/example39.json.out
@@ -0,0 +1,3 @@
+{"op":"in","args":[{"property":"value"},[1.0,2.0,3.0]]}
+(value IN (1, 2, 3))
+{"op":"in","args":[{"property":"value"},[1.0,2.0,3.0]]}
diff --git a/tests/expected/json/example39.json b/tests/expected/example39.txt.out
similarity index 53%
rename from tests/expected/json/example39.json
rename to tests/expected/example39.txt.out
index 2ae873d..35827ce 100644
--- a/tests/expected/json/example39.json
+++ b/tests/expected/example39.txt.out
@@ -1,1 +1,3 @@
+"value" IN (1.0, 2.0, 3.0) 
+(value IN (1, 2, 3))
 {"op":"in","args":[{"property":"value"},[1.0,2.0,3.0]]}
diff --git a/tests/expected/json/example40-alt01.json b/tests/expected/example40-alt01.txt.out
similarity index 54%
rename from tests/expected/json/example40-alt01.json
rename to tests/expected/example40-alt01.txt.out
index 6332a99..08bac97 100644
--- a/tests/expected/json/example40-alt01.json
+++ b/tests/expected/example40-alt01.txt.out
@@ -1,1 +1,3 @@
+"value" NOT IN ('a', 'b', 'c') 
+(NOT (value IN ('a', 'b', 'c')))
 {"op":"not","args":[{"op":"in","args":[{"property":"value"},["a","b","c"]]}]}
diff --git a/tests/expected/example40.json.out b/tests/expected/example40.json.out
new file mode 100644
index 0000000..cb10229
--- /dev/null
+++ b/tests/expected/example40.json.out
@@ -0,0 +1,3 @@
+{"op":"not","args":[{"op":"in","args":[{"property":"value"},["a","b","c"]]}]}
+(NOT (value IN ('a', 'b', 'c')))
+{"op":"not","args":[{"op":"in","args":[{"property":"value"},["a","b","c"]]}]}
diff --git a/tests/expected/json/example40.json b/tests/expected/example40.txt.out
similarity index 54%
rename from tests/expected/json/example40.json
rename to tests/expected/example40.txt.out
index 6332a99..7594aa2 100644
--- a/tests/expected/json/example40.json
+++ b/tests/expected/example40.txt.out
@@ -1,1 +1,3 @@
+NOT "value" IN ('a', 'b', 'c') 
+(NOT (value IN ('a', 'b', 'c')))
 {"op":"not","args":[{"op":"in","args":[{"property":"value"},["a","b","c"]]}]}
diff --git a/tests/expected/example41.json.out b/tests/expected/example41.json.out
new file mode 100644
index 0000000..789a53d
--- /dev/null
+++ b/tests/expected/example41.json.out
@@ -0,0 +1,3 @@
+{"op":"isNull","args":[{"property":"value"}]}
+(value IS NULL)
+{"op":"isNull","args":[{"property":"value"}]}
diff --git a/tests/expected/json/example41.json b/tests/expected/example41.txt.out
similarity index 58%
rename from tests/expected/json/example41.json
rename to tests/expected/example41.txt.out
index 565934d..101177b 100644
--- a/tests/expected/json/example41.json
+++ b/tests/expected/example41.txt.out
@@ -1,1 +1,3 @@
+"value" IS NULL 
+(value IS NULL)
 {"op":"isNull","args":[{"property":"value"}]}
diff --git a/tests/expected/json/example42.json b/tests/expected/example42-alt01.txt.out
similarity index 61%
rename from tests/expected/json/example42.json
rename to tests/expected/example42-alt01.txt.out
index aeb39ba..4937c8d 100644
--- a/tests/expected/json/example42.json
+++ b/tests/expected/example42-alt01.txt.out
@@ -1,1 +1,3 @@
+"value" IS NOT NULL 
+(NOT (value IS NULL))
 {"op":"not","args":[{"op":"isNull","args":[{"property":"value"}]}]}
diff --git a/tests/expected/example42.json.out b/tests/expected/example42.json.out
new file mode 100644
index 0000000..caaba77
--- /dev/null
+++ b/tests/expected/example42.json.out
@@ -0,0 +1,3 @@
+{"op":"not","args":[{"op":"isNull","args":[{"property":"value"}]}]}
+(NOT (value IS NULL))
+{"op":"not","args":[{"op":"isNull","args":[{"property":"value"}]}]}
diff --git a/tests/expected/text/example42.json b/tests/expected/example42.txt.out
similarity index 61%
rename from tests/expected/text/example42.json
rename to tests/expected/example42.txt.out
index aeb39ba..8560c7e 100644
--- a/tests/expected/text/example42.json
+++ b/tests/expected/example42.txt.out
@@ -1,1 +1,3 @@
+NOT "value" IS NULL 
+(NOT (value IS NULL))
 {"op":"not","args":[{"op":"isNull","args":[{"property":"value"}]}]}
diff --git a/tests/expected/json/example43-alt01.json b/tests/expected/example43-alt01.txt.out
similarity index 62%
rename from tests/expected/json/example43-alt01.json
rename to tests/expected/example43-alt01.txt.out
index 8fcc319..a29becc 100644
--- a/tests/expected/json/example43-alt01.json
+++ b/tests/expected/example43-alt01.txt.out
@@ -1,1 +1,3 @@
+"name" NOT LIKE 'foo%' AND "value" > 10 
+((NOT (name LIKE 'foo%')) AND (value > 10))
 {"op":"and","args":[{"op":"not","args":[{"op":"like","args":[{"property":"name"},"foo%"]}]},{"op":">","args":[{"property":"value"},10.0]}]}
diff --git a/tests/expected/example43.json.out b/tests/expected/example43.json.out
new file mode 100644
index 0000000..839e8e4
--- /dev/null
+++ b/tests/expected/example43.json.out
@@ -0,0 +1,3 @@
+{"op":"and","args":[{"op":"not","args":[{"op":"like","args":[{"property":"name"},"foo%"]}]},{"op":">","args":[{"property":"value"},10]}]}
+((NOT (name LIKE 'foo%')) AND (value > 10))
+{"op":"and","args":[{"op":"not","args":[{"op":"like","args":[{"property":"name"},"foo%"]}]},{"op":">","args":[{"property":"value"},10.0]}]}
diff --git a/tests/expected/json/example43.json b/tests/expected/example43.txt.out
similarity index 61%
rename from tests/expected/json/example43.json
rename to tests/expected/example43.txt.out
index 8fcc319..ca67b2a 100644
--- a/tests/expected/json/example43.json
+++ b/tests/expected/example43.txt.out
@@ -1,1 +1,3 @@
+(NOT "name" LIKE 'foo%' AND "value" > 10) 
+((NOT (name LIKE 'foo%')) AND (value > 10))
 {"op":"and","args":[{"op":"not","args":[{"op":"like","args":[{"property":"name"},"foo%"]}]},{"op":">","args":[{"property":"value"},10.0]}]}
diff --git a/tests/expected/json/example44-alt01.json b/tests/expected/example44-alt01.txt.out
similarity index 57%
rename from tests/expected/json/example44-alt01.json
rename to tests/expected/example44-alt01.txt.out
index 37bc6b3..b39f0b0 100644
--- a/tests/expected/json/example44-alt01.json
+++ b/tests/expected/example44-alt01.txt.out
@@ -1,1 +1,3 @@
+"value" IS NULL OR "value" BETWEEN 10 AND 20 
+((value IS NULL) OR (value BETWEEN 10 AND 20))
 {"op":"or","args":[{"op":"isNull","args":[{"property":"value"}]},{"op":"between","args":[{"property":"value"},10.0,20.0]}]}
diff --git a/tests/expected/example44.json.out b/tests/expected/example44.json.out
new file mode 100644
index 0000000..8128786
--- /dev/null
+++ b/tests/expected/example44.json.out
@@ -0,0 +1,3 @@
+{"op":"or","args":[{"op":"isNull","args":[{"property":"value"}]},{"op":"between","args":[{"property":"value"},10,20]}]}
+((value IS NULL) OR (value BETWEEN 10 AND 20))
+{"op":"or","args":[{"op":"isNull","args":[{"property":"value"}]},{"op":"between","args":[{"property":"value"},10.0,20.0]}]}
diff --git a/tests/expected/json/example44.json b/tests/expected/example44.txt.out
similarity index 56%
rename from tests/expected/json/example44.json
rename to tests/expected/example44.txt.out
index 37bc6b3..c248f2b 100644
--- a/tests/expected/json/example44.json
+++ b/tests/expected/example44.txt.out
@@ -1,1 +1,3 @@
+("value" IS NULL OR "value" BETWEEN 10 AND 20) 
+((value IS NULL) OR (value BETWEEN 10 AND 20))
 {"op":"or","args":[{"op":"isNull","args":[{"property":"value"}]},{"op":"between","args":[{"property":"value"},10.0,20.0]}]}
diff --git a/tests/expected/example45.json.out b/tests/expected/example45.json.out
new file mode 100644
index 0000000..4b188bd
--- /dev/null
+++ b/tests/expected/example45.json.out
@@ -0,0 +1,3 @@
+{"op":"s_intersects","args":[{"property":"geometry"},{"bbox":[-128.098193,-1.1,-99999.0,180.0,90.0,100000.0]}]}
+s_intersects(geometry, BBOX(-128.098193, -1.1, -99999, 180, 90, 100000))
+{"op":"s_intersects","args":[{"property":"geometry"},{"bbox":[-128.098193,-1.1,-99999.0,180.0,90.0,100000.0]}]}
diff --git a/tests/expected/text/example45.json b/tests/expected/example45.txt.out
similarity index 53%
rename from tests/expected/text/example45.json
rename to tests/expected/example45.txt.out
index 412a747..0412593 100644
--- a/tests/expected/text/example45.json
+++ b/tests/expected/example45.txt.out
@@ -1,1 +1,3 @@
+S_INTERSECTS("geometry", BBOX(-128.098193, -1.1, -99999.0, 180.0, 90.0, 100000.0)) 
+s_intersects(geometry, bbox(-1 * 128.098193, -1 * 1.1, -1 * 99999, 180, 90, 100000))
 {"op":"s_intersects","args":[{"property":"geometry"},{"op":"bbox","args":[{"op":"*","args":[-1.0,128.098193]},{"op":"*","args":[-1.0,1.1]},{"op":"*","args":[-1.0,99999.0]},180.0,90.0,100000.0]}]}
diff --git a/tests/expected/example46-alt01.txt.out b/tests/expected/example46-alt01.txt.out
new file mode 100644
index 0000000..29f254f
--- /dev/null
+++ b/tests/expected/example46-alt01.txt.out
@@ -0,0 +1,3 @@
+S_EQUALS(     POLYGON (         (-0.333333 89.0, -102.723546 -0.5, -179.0 -89.0, -1.9 89.0, -0.0 89.0, 2.00001 -1.9, -0.333333 89.0)     ),     "geometry" ) 
+s_equals(POLYGON (         (-0.333333 89.0, -102.723546 -0.5, -179.0 -89.0, -1.9 89.0, -0.0 89.0, 2.00001 -1.9, -0.333333 89.0)     ), geometry)
+{"op":"s_equals","args":[{"type":"Polygon","coordinates":[[[-0.333333,89.0],[-102.723546,-0.5],[-179.0,-89.0],[-1.9,89.0],[-0.0,89.0],[2.00001,-1.9],[-0.333333,89.0]]]},{"property":"geometry"}]}
diff --git a/tests/expected/example46.json.out b/tests/expected/example46.json.out
new file mode 100644
index 0000000..3b47a3e
--- /dev/null
+++ b/tests/expected/example46.json.out
@@ -0,0 +1,3 @@
+{"op":"s_equals","args":[{"type":"Polygon","coordinates":[[[-0.333333,89.0],[-102.723546,-0.5],[-179.0,-89.0],[-1.9,89.0],[-0.0,89.0],[2.00001,-1.9],[-0.333333,89.0]]]},{"property":"geometry"}]}
+s_equals(POLYGON((-0.333333 89,-102.723546 -0.5,-179 -89,-1.9 89,-0 89,2.00001 -1.9,-0.333333 89)), geometry)
+{"op":"s_equals","args":[{"type":"Polygon","coordinates":[[[-0.333333,89.0],[-102.723546,-0.5],[-179.0,-89.0],[-1.9,89.0],[-0.0,89.0],[2.00001,-1.9],[-0.333333,89.0]]]},{"property":"geometry"}]}
diff --git a/tests/expected/example46.txt.out b/tests/expected/example46.txt.out
new file mode 100644
index 0000000..a612544
--- /dev/null
+++ b/tests/expected/example46.txt.out
@@ -0,0 +1,3 @@
+S_EQUALS(POLYGON ((-0.333333 89.0, -102.723546 -0.5, -179.0 -89.0, -1.9 89.0, -0.0 89.0, 2.00001 -1.9, -0.333333 89.0)), "geometry") 
+s_equals(POLYGON ((-0.333333 89.0, -102.723546 -0.5, -179.0 -89.0, -1.9 89.0, -0.0 89.0, 2.00001 -1.9, -0.333333 89.0)), geometry)
+{"op":"s_equals","args":[{"type":"Polygon","coordinates":[[[-0.333333,89.0],[-102.723546,-0.5],[-179.0,-89.0],[-1.9,89.0],[-0.0,89.0],[2.00001,-1.9],[-0.333333,89.0]]]},{"property":"geometry"}]}
diff --git a/tests/expected/example47.json.out b/tests/expected/example47.json.out
new file mode 100644
index 0000000..83c5cdf
--- /dev/null
+++ b/tests/expected/example47.json.out
@@ -0,0 +1,3 @@
+{"op":"s_disjoint","args":[{"property":"geometry"},{"type":"MultiPolygon","coordinates":[[[[144.022387,45.176126],[-1.1,0.0],[180.0,47.808086],[144.022387,45.176126]]]]}]}
+s_disjoint(geometry, MULTIPOLYGON(((144.022387 45.176126,-1.1 0,180 47.808086,144.022387 45.176126))))
+{"op":"s_disjoint","args":[{"property":"geometry"},{"type":"MultiPolygon","coordinates":[[[[144.022387,45.176126],[-1.1,0.0],[180.0,47.808086],[144.022387,45.176126]]]]}]}
diff --git a/tests/expected/example47.txt.out b/tests/expected/example47.txt.out
new file mode 100644
index 0000000..6c0975f
--- /dev/null
+++ b/tests/expected/example47.txt.out
@@ -0,0 +1,3 @@
+S_DISJOINT("geometry", MULTIPOLYGON (((144.022387 45.176126, -1.1 0.0, 180.0 47.808086, 144.022387 45.176126)))) 
+s_disjoint(geometry, MULTIPOLYGON (((144.022387 45.176126, -1.1 0.0, 180.0 47.808086, 144.022387 45.176126))))
+{"op":"s_disjoint","args":[{"property":"geometry"},{"type":"MultiPolygon","coordinates":[[[[144.022387,45.176126],[-1.1,0.0],[180.0,47.808086],[144.022387,45.176126]]]]}]}
diff --git a/tests/expected/example48.json.out b/tests/expected/example48.json.out
new file mode 100644
index 0000000..f230493
--- /dev/null
+++ b/tests/expected/example48.json.out
@@ -0,0 +1,3 @@
+{"op":"s_touches","args":[{"property":"geometry"},{"type":"MultiLineString","coordinates":[[[-1.9,-0.99999],[75.292574,1.5],[-0.5,-4.016458],[-31.708594,-74.743801],[179.0,-90.0]],[[-1.9,-1.1],[1.5,8.547371]]]}]}
+s_touches(geometry, MULTILINESTRING((-1.9 -0.99999,75.292574 1.5,-0.5 -4.016458,-31.708594 -74.743801,179 -90),(-1.9 -1.1,1.5 8.547371)))
+{"op":"s_touches","args":[{"property":"geometry"},{"type":"MultiLineString","coordinates":[[[-1.9,-0.99999],[75.292574,1.5],[-0.5,-4.016458],[-31.708594,-74.743801],[179.0,-90.0]],[[-1.9,-1.1],[1.5,8.547371]]]}]}
diff --git a/tests/expected/example48.txt.out b/tests/expected/example48.txt.out
new file mode 100644
index 0000000..138c589
--- /dev/null
+++ b/tests/expected/example48.txt.out
@@ -0,0 +1,3 @@
+S_TOUCHES("geometry", MULTILINESTRING ((-1.9 -0.99999, 75.292574 1.5, -0.5 -4.016458, -31.708594 -74.743801, 179.0 -90.0),(-1.9 -1.1, 1.5 8.547371))) 
+s_touches(geometry, MULTILINESTRING ((-1.9 -0.99999, 75.292574 1.5, -0.5 -4.016458, -31.708594 -74.743801, 179.0 -90.0),(-1.9 -1.1, 1.5 8.547371)))
+{"op":"s_touches","args":[{"property":"geometry"},{"type":"MultiLineString","coordinates":[[[-1.9,-0.99999],[75.292574,1.5],[-0.5,-4.016458],[-31.708594,-74.743801],[179.0,-90.0]],[[-1.9,-1.1],[1.5,8.547371]]]}]}
diff --git a/tests/expected/example49-alt01.txt.out b/tests/expected/example49-alt01.txt.out
new file mode 100644
index 0000000..e459b64
--- /dev/null
+++ b/tests/expected/example49-alt01.txt.out
@@ -0,0 +1,3 @@
+S_WITHIN(POLYGON ((-49.88024 0.5 -75993.341684, -1.5 -0.99999 -100000.0, 0.0 0.5 -0.333333, -49.88024 0.5 -75993.341684), (-65.887123 2.00001 -100000.0, 0.333333 -53.017711 -79471.332949, 180.0 0.0 1852.616704, -65.887123 2.00001 -100000.0)), "geometry") 
+s_within(POLYGON Z((-49.88024 0.5 -75993.341684, -1.5 -0.99999 -100000.0, 0.0 0.5 -0.333333, -49.88024 0.5 -75993.341684), (-65.887123 2.00001 -100000.0, 0.333333 -53.017711 -79471.332949, 180.0 0.0 1852.616704, -65.887123 2.00001 -100000.0)), geometry)
+{"op":"s_within","args":[{"type":"Polygon","coordinates":[[[-49.88024,0.5],[-1.5,-0.99999],[0.0,0.5],[-49.88024,0.5]],[[-65.887123,2.00001],[0.333333,-53.017711],[180.0,0.0],[-65.887123,2.00001]]]},{"property":"geometry"}]}
diff --git a/tests/expected/example49.json.out b/tests/expected/example49.json.out
new file mode 100644
index 0000000..74779f6
--- /dev/null
+++ b/tests/expected/example49.json.out
@@ -0,0 +1,3 @@
+{"op":"s_within","args":[{"type":"Polygon","coordinates":[[[-49.88024,0.5,-75993.341684],[-1.5,-0.99999,-100000.0],[0.0,0.5,-0.333333],[-49.88024,0.5,-75993.341684]],[[-65.887123,2.00001,-100000.0],[0.333333,-53.017711,-79471.332949],[180.0,0.0,1852.616704],[-65.887123,2.00001,-100000.0]]]},{"property":"geometry"}]}
+s_within(POLYGON((-49.88024 0.5,-1.5 -0.99999,0 0.5,-49.88024 0.5),(-65.887123 2.00001,0.333333 -53.017711,180 0,-65.887123 2.00001)), geometry)
+{"op":"s_within","args":[{"type":"Polygon","coordinates":[[[-49.88024,0.5,-75993.341684],[-1.5,-0.99999,-100000.0],[0.0,0.5,-0.333333],[-49.88024,0.5,-75993.341684]],[[-65.887123,2.00001,-100000.0],[0.333333,-53.017711,-79471.332949],[180.0,0.0,1852.616704],[-65.887123,2.00001,-100000.0]]]},{"property":"geometry"}]}
diff --git a/tests/expected/example49.txt.out b/tests/expected/example49.txt.out
new file mode 100644
index 0000000..c3f7dea
--- /dev/null
+++ b/tests/expected/example49.txt.out
@@ -0,0 +1,3 @@
+S_WITHIN(POLYGON Z ((-49.88024 0.5 -75993.341684, -1.5 -0.99999 -100000.0, 0.0 0.5 -0.333333, -49.88024 0.5 -75993.341684), (-65.887123 2.00001 -100000.0, 0.333333 -53.017711 -79471.332949, 180.0 0.0 1852.616704, -65.887123 2.00001 -100000.0)), "geometry") 
+s_within(POLYGON Z ((-49.88024 0.5 -75993.341684, -1.5 -0.99999 -100000.0, 0.0 0.5 -0.333333, -49.88024 0.5 -75993.341684), (-65.887123 2.00001 -100000.0, 0.333333 -53.017711 -79471.332949, 180.0 0.0 1852.616704, -65.887123 2.00001 -100000.0)), geometry)
+{"op":"s_within","args":[{"type":"Polygon","coordinates":[[[-49.88024,0.5],[-1.5,-0.99999],[0.0,0.5],[-49.88024,0.5]],[[-65.887123,2.00001],[0.333333,-53.017711],[180.0,0.0],[-65.887123,2.00001]]]},{"property":"geometry"}]}
diff --git a/tests/expected/example50.json.out b/tests/expected/example50.json.out
new file mode 100644
index 0000000..c6aa375
--- /dev/null
+++ b/tests/expected/example50.json.out
@@ -0,0 +1,3 @@
+{"op":"s_overlaps","args":[{"property":"geometry"},{"bbox":[-179.912109,1.9,180.0,16.897016]}]}
+s_overlaps(geometry, BBOX(-179.912109, 1.9, 180, 16.897016))
+{"op":"s_overlaps","args":[{"property":"geometry"},{"bbox":[-179.912109,1.9,180.0,16.897016]}]}
diff --git a/tests/expected/text/example50.json b/tests/expected/example50.txt.out
similarity index 50%
rename from tests/expected/text/example50.json
rename to tests/expected/example50.txt.out
index d854b94..edccdb6 100644
--- a/tests/expected/text/example50.json
+++ b/tests/expected/example50.txt.out
@@ -1,1 +1,3 @@
+S_OVERLAPS("geometry", BBOX(-179.912109, 1.9, 180.0, 16.897016)) 
+s_overlaps(geometry, bbox(-1 * 179.912109, 1.9, 180, 16.897016))
 {"op":"s_overlaps","args":[{"property":"geometry"},{"op":"bbox","args":[{"op":"*","args":[-1.0,179.912109]},1.9,180.0,16.897016]}]}
diff --git a/tests/expected/example51.json.out b/tests/expected/example51.json.out
new file mode 100644
index 0000000..6d1dd41
--- /dev/null
+++ b/tests/expected/example51.json.out
@@ -0,0 +1,3 @@
+{"op":"s_crosses","args":[{"property":"geometry"},{"type":"LineString","coordinates":[[172.03086,1.5],[1.1,-90.0],[-159.757695,0.99999],[-180.0,0.5],[-12.111235,81.336403],[-0.5,64.43958],[0.0,81.991815],[-155.93831,90.0]]}]}
+s_crosses(geometry, LINESTRING(172.03086 1.5,1.1 -90,-159.757695 0.99999,-180 0.5,-12.111235 81.336403,-0.5 64.43958,0 81.991815,-155.93831 90))
+{"op":"s_crosses","args":[{"property":"geometry"},{"type":"LineString","coordinates":[[172.03086,1.5],[1.1,-90.0],[-159.757695,0.99999],[-180.0,0.5],[-12.111235,81.336403],[-0.5,64.43958],[0.0,81.991815],[-155.93831,90.0]]}]}
diff --git a/tests/expected/example51.txt.out b/tests/expected/example51.txt.out
new file mode 100644
index 0000000..4dc1937
--- /dev/null
+++ b/tests/expected/example51.txt.out
@@ -0,0 +1,3 @@
+S_CROSSES("geometry", LINESTRING (172.03086 1.5, 1.1 -90.0, -159.757695 0.99999, -180.0 0.5, -12.111235 81.336403, -0.5 64.43958, 0.0 81.991815, -155.93831 90.0)) 
+s_crosses(geometry, LINESTRING (172.03086 1.5, 1.1 -90.0, -159.757695 0.99999, -180.0 0.5, -12.111235 81.336403, -0.5 64.43958, 0.0 81.991815, -155.93831 90.0))
+{"op":"s_crosses","args":[{"property":"geometry"},{"type":"LineString","coordinates":[[172.03086,1.5],[1.1,-90.0],[-159.757695,0.99999],[-180.0,0.5],[-12.111235,81.336403],[-0.5,64.43958],[0.0,81.991815],[-155.93831,90.0]]}]}
diff --git a/tests/expected/example52.json.out b/tests/expected/example52.json.out
new file mode 100644
index 0000000..7a75b18
--- /dev/null
+++ b/tests/expected/example52.json.out
@@ -0,0 +1,3 @@
+{"op":"s_contains","args":[{"property":"geometry"},{"type":"Point","coordinates":[-3.508362,-1.754181]}]}
+s_contains(geometry, POINT(-3.508362 -1.754181))
+{"op":"s_contains","args":[{"property":"geometry"},{"type":"Point","coordinates":[-3.508362,-1.754181]}]}
diff --git a/tests/expected/json/example52.json b/tests/expected/example52.txt.out
similarity index 50%
rename from tests/expected/json/example52.json
rename to tests/expected/example52.txt.out
index 45e115d..233483d 100644
--- a/tests/expected/json/example52.json
+++ b/tests/expected/example52.txt.out
@@ -1,1 +1,3 @@
+S_CONTAINS("geometry", POINT (-3.508362 -1.754181)) 
+s_contains(geometry, POINT (-3.508362 -1.754181))
 {"op":"s_contains","args":[{"property":"geometry"},{"type":"Point","coordinates":[-3.508362,-1.754181]}]}
diff --git a/tests/expected/example53.json.out b/tests/expected/example53.json.out
new file mode 100644
index 0000000..0817469
--- /dev/null
+++ b/tests/expected/example53.json.out
@@ -0,0 +1,3 @@
+{"op":"t_after","args":[{"property":"updated_at"},{"date":"2010-02-10"}]}
+t_after(updated_at, DATE('2010-02-10'))
+{"op":"t_after","args":[{"property":"updated_at"},{"date":"2010-02-10"}]}
diff --git a/tests/expected/example53.txt.out b/tests/expected/example53.txt.out
new file mode 100644
index 0000000..8223c50
--- /dev/null
+++ b/tests/expected/example53.txt.out
@@ -0,0 +1,3 @@
+T_AFTER("updated_at", DATE('2010-02-10')) 
+t_after(updated_at, DATE('2010-02-10'))
+{"op":"t_after","args":[{"property":"updated_at"},{"date":"2010-02-10"}]}
diff --git a/tests/expected/example54-alt01.txt.out b/tests/expected/example54-alt01.txt.out
new file mode 100644
index 0000000..c067017
--- /dev/null
+++ b/tests/expected/example54-alt01.txt.out
@@ -0,0 +1,3 @@
+T_BEFORE(updated_at, TIMESTAMP('2012-08-10T05:30:00Z')) 
+t_before(updated_at, TIMESTAMP('2012-08-10T05:30:00Z'))
+{"op":"t_before","args":[{"property":"updated_at"},{"timestamp":"2012-08-10T05:30:00Z"}]}
diff --git a/tests/expected/example54.json.out b/tests/expected/example54.json.out
new file mode 100644
index 0000000..64e1310
--- /dev/null
+++ b/tests/expected/example54.json.out
@@ -0,0 +1,3 @@
+{"op":"t_before","args":[{"property":"updated_at"},{"timestamp":"2012-08-10T05:30:00Z"}]}
+t_before(updated_at, TIMESTAMP('2012-08-10T05:30:00Z'))
+{"op":"t_before","args":[{"property":"updated_at"},{"timestamp":"2012-08-10T05:30:00Z"}]}
diff --git a/tests/expected/example54.txt.out b/tests/expected/example54.txt.out
new file mode 100644
index 0000000..9b83cb5
--- /dev/null
+++ b/tests/expected/example54.txt.out
@@ -0,0 +1,3 @@
+T_BEFORE("updated_at", TIMESTAMP('2012-08-10T05:30:00.000000Z')) 
+t_before(updated_at, TIMESTAMP('2012-08-10T05:30:00.000000Z'))
+{"op":"t_before","args":[{"property":"updated_at"},{"timestamp":"2012-08-10T05:30:00.000000Z"}]}
diff --git a/tests/expected/example55-alt01.txt.out b/tests/expected/example55-alt01.txt.out
new file mode 100644
index 0000000..6c00029
--- /dev/null
+++ b/tests/expected/example55-alt01.txt.out
@@ -0,0 +1,3 @@
+T_CONTAINS(INTERVAL('2000-01-01T00:00:00Z', '2005-01-10T01:01:01.393216Z'), INTERVAL(starts_at, ends_at)) 
+t_contains(INTERVAL('2000-01-01T00:00:00Z','2005-01-10T01:01:01.393216Z'), INTERVAL(starts_at,ends_at))
+{"op":"t_contains","args":[{"interval":["2000-01-01T00:00:00Z","2005-01-10T01:01:01.393216Z"]},{"interval":[{"property":"starts_at"},{"property":"ends_at"}]}]}
diff --git a/tests/expected/example55.json.out b/tests/expected/example55.json.out
new file mode 100644
index 0000000..64f802a
--- /dev/null
+++ b/tests/expected/example55.json.out
@@ -0,0 +1,3 @@
+{"op":"t_contains","args":[{"interval":["2000-01-01T00:00:00Z","2005-01-10T01:01:01.393216Z"]},{"interval":[{"property":"starts_at"},{"property":"ends_at"}]}]}
+t_contains(INTERVAL('2000-01-01T00:00:00Z','2005-01-10T01:01:01.393216Z'), INTERVAL(starts_at,ends_at))
+{"op":"t_contains","args":[{"interval":["2000-01-01T00:00:00Z","2005-01-10T01:01:01.393216Z"]},{"interval":[{"property":"starts_at"},{"property":"ends_at"}]}]}
diff --git a/tests/expected/example55.txt.out b/tests/expected/example55.txt.out
new file mode 100644
index 0000000..d19d23a
--- /dev/null
+++ b/tests/expected/example55.txt.out
@@ -0,0 +1,3 @@
+T_CONTAINS(INTERVAL('2000-01-01T00:00:00.000000Z', '2005-01-10T01:01:01.393216Z'), INTERVAL(starts_at, ends_at)) 
+t_contains(INTERVAL('2000-01-01T00:00:00.000000Z','2005-01-10T01:01:01.393216Z'), INTERVAL(starts_at,ends_at))
+{"op":"t_contains","args":[{"interval":["2000-01-01T00:00:00.000000Z","2005-01-10T01:01:01.393216Z"]},{"interval":[{"property":"starts_at"},{"property":"ends_at"}]}]}
diff --git a/tests/expected/example56.json.out b/tests/expected/example56.json.out
new file mode 100644
index 0000000..3a46234
--- /dev/null
+++ b/tests/expected/example56.json.out
@@ -0,0 +1,3 @@
+{"op":"t_disjoint","args":[{"interval":["..","2005-01-10T01:01:01.393216Z"]},{"interval":[{"property":"starts_at"},{"property":"ends_at"}]}]}
+t_disjoint(INTERVAL('..','2005-01-10T01:01:01.393216Z'), INTERVAL(starts_at,ends_at))
+{"op":"t_disjoint","args":[{"interval":["..","2005-01-10T01:01:01.393216Z"]},{"interval":[{"property":"starts_at"},{"property":"ends_at"}]}]}
diff --git a/tests/expected/example56.txt.out b/tests/expected/example56.txt.out
new file mode 100644
index 0000000..85bac82
--- /dev/null
+++ b/tests/expected/example56.txt.out
@@ -0,0 +1,3 @@
+T_DISJOINT(INTERVAL('..', '2005-01-10T01:01:01.393216Z'), INTERVAL(starts_at, ends_at)) 
+t_disjoint(INTERVAL('..','2005-01-10T01:01:01.393216Z'), INTERVAL(starts_at,ends_at))
+{"op":"t_disjoint","args":[{"interval":["..","2005-01-10T01:01:01.393216Z"]},{"interval":[{"property":"starts_at"},{"property":"ends_at"}]}]}
diff --git a/tests/expected/example57.json.out b/tests/expected/example57.json.out
new file mode 100644
index 0000000..9174f35
--- /dev/null
+++ b/tests/expected/example57.json.out
@@ -0,0 +1,3 @@
+{"op":"t_during","args":[{"interval":[{"property":"starts_at"},{"property":"ends_at"}]},{"interval":["2005-01-10","2010-02-10"]}]}
+t_during(INTERVAL(starts_at,ends_at), INTERVAL('2005-01-10','2010-02-10'))
+{"op":"t_during","args":[{"interval":[{"property":"starts_at"},{"property":"ends_at"}]},{"interval":["2005-01-10","2010-02-10"]}]}
diff --git a/tests/expected/example57.txt.out b/tests/expected/example57.txt.out
new file mode 100644
index 0000000..d6e5f9d
--- /dev/null
+++ b/tests/expected/example57.txt.out
@@ -0,0 +1,3 @@
+T_DURING(INTERVAL(starts_at, ends_at), INTERVAL('2005-01-10', '2010-02-10')) 
+t_during(INTERVAL(starts_at,ends_at), INTERVAL('2005-01-10','2010-02-10'))
+{"op":"t_during","args":[{"interval":[{"property":"starts_at"},{"property":"ends_at"}]},{"interval":["2005-01-10","2010-02-10"]}]}
diff --git a/tests/expected/example58.json.out b/tests/expected/example58.json.out
new file mode 100644
index 0000000..bf0b96d
--- /dev/null
+++ b/tests/expected/example58.json.out
@@ -0,0 +1,3 @@
+{"op":"t_equals","args":[{"property":"updated_at"},{"date":"1851-04-29"}]}
+t_equals(updated_at, DATE('1851-04-29'))
+{"op":"t_equals","args":[{"property":"updated_at"},{"date":"1851-04-29"}]}
diff --git a/tests/expected/example58.txt.out b/tests/expected/example58.txt.out
new file mode 100644
index 0000000..0e968c7
--- /dev/null
+++ b/tests/expected/example58.txt.out
@@ -0,0 +1,3 @@
+T_EQUALS("updated_at", DATE('1851-04-29')) 
+t_equals(updated_at, DATE('1851-04-29'))
+{"op":"t_equals","args":[{"property":"updated_at"},{"date":"1851-04-29"}]}
diff --git a/tests/expected/example59.json.out b/tests/expected/example59.json.out
new file mode 100644
index 0000000..56faad8
--- /dev/null
+++ b/tests/expected/example59.json.out
@@ -0,0 +1,3 @@
+{"op":"t_finishedBy","args":[{"interval":[{"property":"starts_at"},{"property":"ends_at"}]},{"interval":["1991-10-07T08:21:06.393262Z","2010-02-10T05:29:20.073225Z"]}]}
+"t_finishedBy"(INTERVAL(starts_at,ends_at), INTERVAL('1991-10-07T08:21:06.393262Z','2010-02-10T05:29:20.073225Z'))
+{"op":"t_finishedBy","args":[{"interval":[{"property":"starts_at"},{"property":"ends_at"}]},{"interval":["1991-10-07T08:21:06.393262Z","2010-02-10T05:29:20.073225Z"]}]}
diff --git a/tests/expected/example59.txt.out b/tests/expected/example59.txt.out
new file mode 100644
index 0000000..47e1859
--- /dev/null
+++ b/tests/expected/example59.txt.out
@@ -0,0 +1,3 @@
+T_FINISHEDBY(INTERVAL(starts_at, ends_at), INTERVAL('1991-10-07T08:21:06.393262Z', '2010-02-10T05:29:20.073225Z')) 
+t_finishedby(INTERVAL(starts_at,ends_at), INTERVAL('1991-10-07T08:21:06.393262Z','2010-02-10T05:29:20.073225Z'))
+{"op":"t_finishedby","args":[{"interval":[{"property":"starts_at"},{"property":"ends_at"}]},{"interval":["1991-10-07T08:21:06.393262Z","2010-02-10T05:29:20.073225Z"]}]}
diff --git a/tests/expected/example60.json.out b/tests/expected/example60.json.out
new file mode 100644
index 0000000..43eeee5
--- /dev/null
+++ b/tests/expected/example60.json.out
@@ -0,0 +1,3 @@
+{"op":"t_finishes","args":[{"interval":[{"property":"starts_at"},{"property":"ends_at"}]},{"interval":["1991-10-07","2010-02-10T05:29:20.073225Z"]}]}
+t_finishes(INTERVAL(starts_at,ends_at), INTERVAL('1991-10-07','2010-02-10T05:29:20.073225Z'))
+{"op":"t_finishes","args":[{"interval":[{"property":"starts_at"},{"property":"ends_at"}]},{"interval":["1991-10-07","2010-02-10T05:29:20.073225Z"]}]}
diff --git a/tests/expected/example60.txt.out b/tests/expected/example60.txt.out
new file mode 100644
index 0000000..b5071b7
--- /dev/null
+++ b/tests/expected/example60.txt.out
@@ -0,0 +1,3 @@
+T_FINISHES(INTERVAL(starts_at, ends_at), INTERVAL('1991-10-07', '2010-02-10T05:29:20.073225Z')) 
+t_finishes(INTERVAL(starts_at,ends_at), INTERVAL('1991-10-07','2010-02-10T05:29:20.073225Z'))
+{"op":"t_finishes","args":[{"interval":[{"property":"starts_at"},{"property":"ends_at"}]},{"interval":["1991-10-07","2010-02-10T05:29:20.073225Z"]}]}
diff --git a/tests/expected/example61.json.out b/tests/expected/example61.json.out
new file mode 100644
index 0000000..74f1df8
--- /dev/null
+++ b/tests/expected/example61.json.out
@@ -0,0 +1,3 @@
+{"op":"t_intersects","args":[{"interval":[{"property":"starts_at"},{"property":"ends_at"}]},{"interval":["1991-10-07T08:21:06.393262Z","2010-02-10T05:29:20.073225Z"]}]}
+t_intersects(INTERVAL(starts_at,ends_at), INTERVAL('1991-10-07T08:21:06.393262Z','2010-02-10T05:29:20.073225Z'))
+{"op":"t_intersects","args":[{"interval":[{"property":"starts_at"},{"property":"ends_at"}]},{"interval":["1991-10-07T08:21:06.393262Z","2010-02-10T05:29:20.073225Z"]}]}
diff --git a/tests/expected/example61.txt.out b/tests/expected/example61.txt.out
new file mode 100644
index 0000000..f9770d6
--- /dev/null
+++ b/tests/expected/example61.txt.out
@@ -0,0 +1,3 @@
+T_INTERSECTS(INTERVAL(starts_at, ends_at), INTERVAL('1991-10-07T08:21:06.393262Z', '2010-02-10T05:29:20.073225Z')) 
+t_intersects(INTERVAL(starts_at,ends_at), INTERVAL('1991-10-07T08:21:06.393262Z','2010-02-10T05:29:20.073225Z'))
+{"op":"t_intersects","args":[{"interval":[{"property":"starts_at"},{"property":"ends_at"}]},{"interval":["1991-10-07T08:21:06.393262Z","2010-02-10T05:29:20.073225Z"]}]}
diff --git a/tests/expected/example62.json.out b/tests/expected/example62.json.out
new file mode 100644
index 0000000..2460cb5
--- /dev/null
+++ b/tests/expected/example62.json.out
@@ -0,0 +1,3 @@
+{"op":"t_meets","args":[{"interval":["2005-01-10","2010-02-10"]},{"interval":[{"property":"starts_at"},{"property":"ends_at"}]}]}
+t_meets(INTERVAL('2005-01-10','2010-02-10'), INTERVAL(starts_at,ends_at))
+{"op":"t_meets","args":[{"interval":["2005-01-10","2010-02-10"]},{"interval":[{"property":"starts_at"},{"property":"ends_at"}]}]}
diff --git a/tests/expected/example62.txt.out b/tests/expected/example62.txt.out
new file mode 100644
index 0000000..4c699fc
--- /dev/null
+++ b/tests/expected/example62.txt.out
@@ -0,0 +1,3 @@
+T_MEETS(INTERVAL('2005-01-10', '2010-02-10'), INTERVAL(starts_at, ends_at)) 
+t_meets(INTERVAL('2005-01-10','2010-02-10'), INTERVAL(starts_at,ends_at))
+{"op":"t_meets","args":[{"interval":["2005-01-10","2010-02-10"]},{"interval":[{"property":"starts_at"},{"property":"ends_at"}]}]}
diff --git a/tests/expected/example63.json.out b/tests/expected/example63.json.out
new file mode 100644
index 0000000..da08b37
--- /dev/null
+++ b/tests/expected/example63.json.out
@@ -0,0 +1,3 @@
+{"op":"t_metBy","args":[{"interval":["2010-02-10T05:29:20.073225Z","2010-10-07"]},{"interval":[{"property":"starts_at"},{"property":"ends_at"}]}]}
+"t_metBy"(INTERVAL('2010-02-10T05:29:20.073225Z','2010-10-07'), INTERVAL(starts_at,ends_at))
+{"op":"t_metBy","args":[{"interval":["2010-02-10T05:29:20.073225Z","2010-10-07"]},{"interval":[{"property":"starts_at"},{"property":"ends_at"}]}]}
diff --git a/tests/expected/example63.txt.out b/tests/expected/example63.txt.out
new file mode 100644
index 0000000..246fd3a
--- /dev/null
+++ b/tests/expected/example63.txt.out
@@ -0,0 +1,3 @@
+T_METBY(INTERVAL('2010-02-10T05:29:20.073225Z', '2010-10-07'), INTERVAL(starts_at, ends_at)) 
+t_metby(INTERVAL('2010-02-10T05:29:20.073225Z','2010-10-07'), INTERVAL(starts_at,ends_at))
+{"op":"t_metby","args":[{"interval":["2010-02-10T05:29:20.073225Z","2010-10-07"]},{"interval":[{"property":"starts_at"},{"property":"ends_at"}]}]}
diff --git a/tests/expected/example64.json.out b/tests/expected/example64.json.out
new file mode 100644
index 0000000..6bba4eb
--- /dev/null
+++ b/tests/expected/example64.json.out
@@ -0,0 +1,3 @@
+{"op":"t_overlappedBy","args":[{"interval":["1991-10-07T08:21:06.393262Z","2010-02-10T05:29:20.073225Z"]},{"interval":[{"property":"starts_at"},{"property":"ends_at"}]}]}
+"t_overlappedBy"(INTERVAL('1991-10-07T08:21:06.393262Z','2010-02-10T05:29:20.073225Z'), INTERVAL(starts_at,ends_at))
+{"op":"t_overlappedBy","args":[{"interval":["1991-10-07T08:21:06.393262Z","2010-02-10T05:29:20.073225Z"]},{"interval":[{"property":"starts_at"},{"property":"ends_at"}]}]}
diff --git a/tests/expected/example64.txt.out b/tests/expected/example64.txt.out
new file mode 100644
index 0000000..46c7352
--- /dev/null
+++ b/tests/expected/example64.txt.out
@@ -0,0 +1,3 @@
+T_OVERLAPPEDBY(INTERVAL('1991-10-07T08:21:06.393262Z', '2010-02-10T05:29:20.073225Z'), INTERVAL(starts_at, ends_at)) 
+t_overlappedby(INTERVAL('1991-10-07T08:21:06.393262Z','2010-02-10T05:29:20.073225Z'), INTERVAL(starts_at,ends_at))
+{"op":"t_overlappedby","args":[{"interval":["1991-10-07T08:21:06.393262Z","2010-02-10T05:29:20.073225Z"]},{"interval":[{"property":"starts_at"},{"property":"ends_at"}]}]}
diff --git a/tests/expected/example65.json.out b/tests/expected/example65.json.out
new file mode 100644
index 0000000..60abd5d
--- /dev/null
+++ b/tests/expected/example65.json.out
@@ -0,0 +1,3 @@
+{"op":"t_overlaps","args":[{"interval":[{"property":"starts_at"},{"property":"ends_at"}]},{"interval":["1991-10-07T08:21:06.393262Z","1992-10-09T08:08:08.393473Z"]}]}
+t_overlaps(INTERVAL(starts_at,ends_at), INTERVAL('1991-10-07T08:21:06.393262Z','1992-10-09T08:08:08.393473Z'))
+{"op":"t_overlaps","args":[{"interval":[{"property":"starts_at"},{"property":"ends_at"}]},{"interval":["1991-10-07T08:21:06.393262Z","1992-10-09T08:08:08.393473Z"]}]}
diff --git a/tests/expected/example65.txt.out b/tests/expected/example65.txt.out
new file mode 100644
index 0000000..f9b6902
--- /dev/null
+++ b/tests/expected/example65.txt.out
@@ -0,0 +1,3 @@
+T_OVERLAPS(INTERVAL(starts_at, ends_at), INTERVAL('1991-10-07T08:21:06.393262Z', '1992-10-09T08:08:08.393473Z')) 
+t_overlaps(INTERVAL(starts_at,ends_at), INTERVAL('1991-10-07T08:21:06.393262Z','1992-10-09T08:08:08.393473Z'))
+{"op":"t_overlaps","args":[{"interval":[{"property":"starts_at"},{"property":"ends_at"}]},{"interval":["1991-10-07T08:21:06.393262Z","1992-10-09T08:08:08.393473Z"]}]}
diff --git a/tests/expected/example66.json.out b/tests/expected/example66.json.out
new file mode 100644
index 0000000..4074d8e
--- /dev/null
+++ b/tests/expected/example66.json.out
@@ -0,0 +1,3 @@
+{"op":"t_startedBy","args":[{"interval":["1991-10-07T08:21:06.393262Z","2010-02-10T05:29:20.073225Z"]},{"interval":[{"property":"starts_at"},{"property":"ends_at"}]}]}
+"t_startedBy"(INTERVAL('1991-10-07T08:21:06.393262Z','2010-02-10T05:29:20.073225Z'), INTERVAL(starts_at,ends_at))
+{"op":"t_startedBy","args":[{"interval":["1991-10-07T08:21:06.393262Z","2010-02-10T05:29:20.073225Z"]},{"interval":[{"property":"starts_at"},{"property":"ends_at"}]}]}
diff --git a/tests/expected/example66.txt.out b/tests/expected/example66.txt.out
new file mode 100644
index 0000000..2caef9d
--- /dev/null
+++ b/tests/expected/example66.txt.out
@@ -0,0 +1,3 @@
+T_STARTEDBY(INTERVAL('1991-10-07T08:21:06.393262Z', '2010-02-10T05:29:20.073225Z'), INTERVAL(starts_at, ends_at)) 
+t_startedby(INTERVAL('1991-10-07T08:21:06.393262Z','2010-02-10T05:29:20.073225Z'), INTERVAL(starts_at,ends_at))
+{"op":"t_startedby","args":[{"interval":["1991-10-07T08:21:06.393262Z","2010-02-10T05:29:20.073225Z"]},{"interval":[{"property":"starts_at"},{"property":"ends_at"}]}]}
diff --git a/tests/expected/example67.json.out b/tests/expected/example67.json.out
new file mode 100644
index 0000000..8abf11f
--- /dev/null
+++ b/tests/expected/example67.json.out
@@ -0,0 +1,3 @@
+{"op":"t_starts","args":[{"interval":[{"property":"starts_at"},{"property":"ends_at"}]},{"interval":["1991-10-07T08:21:06.393262Z",".."]}]}
+t_starts(INTERVAL(starts_at,ends_at), INTERVAL('1991-10-07T08:21:06.393262Z','..'))
+{"op":"t_starts","args":[{"interval":[{"property":"starts_at"},{"property":"ends_at"}]},{"interval":["1991-10-07T08:21:06.393262Z",".."]}]}
diff --git a/tests/expected/example67.txt.out b/tests/expected/example67.txt.out
new file mode 100644
index 0000000..b3c34b4
--- /dev/null
+++ b/tests/expected/example67.txt.out
@@ -0,0 +1,3 @@
+T_STARTS(INTERVAL(starts_at, ends_at), INTERVAL('1991-10-07T08:21:06.393262Z', '..')) 
+t_starts(INTERVAL(starts_at,ends_at), INTERVAL('1991-10-07T08:21:06.393262Z','..'))
+{"op":"t_starts","args":[{"interval":[{"property":"starts_at"},{"property":"ends_at"}]},{"interval":["1991-10-07T08:21:06.393262Z",".."]}]}
diff --git a/tests/expected/example68.json.out b/tests/expected/example68.json.out
new file mode 100644
index 0000000..9d19077
--- /dev/null
+++ b/tests/expected/example68.json.out
@@ -0,0 +1,3 @@
+{"op":"=","args":[{"op":"Foo","args":[{"property":"geometry"}]},true]}
+("Foo"(geometry) = true)
+{"op":"=","args":[{"op":"Foo","args":[{"property":"geometry"}]},true]}
diff --git a/tests/expected/text/example68.json b/tests/expected/example68.txt.out
similarity index 60%
rename from tests/expected/text/example68.json
rename to tests/expected/example68.txt.out
index ef7d2fd..cadd38f 100644
--- a/tests/expected/text/example68.json
+++ b/tests/expected/example68.txt.out
@@ -1,1 +1,3 @@
+Foo("geometry") = TRUE 
+(foo(geometry) = true)
 {"op":"=","args":[{"op":"foo","args":[{"property":"geometry"}]},true]}
diff --git a/tests/expected/example69.json.out b/tests/expected/example69.json.out
new file mode 100644
index 0000000..c05cc9e
--- /dev/null
+++ b/tests/expected/example69.json.out
@@ -0,0 +1,3 @@
+{"op":"<>","args":[false,{"op":"Bar","args":[{"property":"geometry"},100,"a","b",false]}]}
+(false <> "Bar"(geometry, 100, 'a', 'b', false))
+{"op":"<>","args":[false,{"op":"Bar","args":[{"property":"geometry"},100.0,"a","b",false]}]}
diff --git a/tests/expected/example69.txt.out b/tests/expected/example69.txt.out
new file mode 100644
index 0000000..68a7762
--- /dev/null
+++ b/tests/expected/example69.txt.out
@@ -0,0 +1,3 @@
+FALSE <> Bar("geometry", 100, 'a', 'b', FALSE) 
+(false <> bar(geometry, 100, 'a', 'b', false))
+{"op":"<>","args":[false,{"op":"bar","args":[{"property":"geometry"},100.0,"a","b",false]}]}
diff --git a/tests/expected/example70.json.out b/tests/expected/example70.json.out
new file mode 100644
index 0000000..8be0aa7
--- /dev/null
+++ b/tests/expected/example70.json.out
@@ -0,0 +1,3 @@
+{"op":"=","args":[{"op":"accenti","args":[{"property":"owner"}]},{"op":"accenti","args":["Beyoncé"]}]}
+(accenti(owner) = accenti('Beyoncé'))
+{"op":"=","args":[{"op":"accenti","args":[{"property":"owner"}]},{"op":"accenti","args":["Beyoncé"]}]}
diff --git a/tests/expected/json/example70.json b/tests/expected/example70.txt.out
similarity index 56%
rename from tests/expected/json/example70.json
rename to tests/expected/example70.txt.out
index 4a98289..f60e7d4 100644
--- a/tests/expected/json/example70.json
+++ b/tests/expected/example70.txt.out
@@ -1,1 +1,3 @@
+ACCENTI("owner") = ACCENTI('Beyoncé') 
+(accenti(owner) = accenti('Beyoncé'))
 {"op":"=","args":[{"op":"accenti","args":[{"property":"owner"}]},{"op":"accenti","args":["Beyoncé"]}]}
diff --git a/tests/expected/example71.json.out b/tests/expected/example71.json.out
new file mode 100644
index 0000000..bff9fbb
--- /dev/null
+++ b/tests/expected/example71.json.out
@@ -0,0 +1,3 @@
+{"op":"=","args":[{"op":"casei","args":[{"property":"owner"}]},{"op":"casei","args":["somebody else"]}]}
+(casei(owner) = casei('somebody else'))
+{"op":"=","args":[{"op":"casei","args":[{"property":"owner"}]},{"op":"casei","args":["somebody else"]}]}
diff --git a/tests/expected/json/example71.json b/tests/expected/example71.txt.out
similarity index 56%
rename from tests/expected/json/example71.json
rename to tests/expected/example71.txt.out
index 9dc0968..163f48a 100644
--- a/tests/expected/json/example71.json
+++ b/tests/expected/example71.txt.out
@@ -1,1 +1,3 @@
+CASEI("owner") = CASEI('somebody else') 
+(casei(owner) = casei('somebody else'))
 {"op":"=","args":[{"op":"casei","args":[{"property":"owner"}]},{"op":"casei","args":["somebody else"]}]}
diff --git a/tests/expected/example72.json.out b/tests/expected/example72.json.out
new file mode 100644
index 0000000..e507611
--- /dev/null
+++ b/tests/expected/example72.json.out
@@ -0,0 +1,3 @@
+{"op":">","args":[{"property":"value"},{"op":"+","args":[{"property":"foo"},10]}]}
+(value > foo + 10)
+{"op":">","args":[{"property":"value"},{"op":"+","args":[{"property":"foo"},10.0]}]}
diff --git a/tests/expected/json/example72.json b/tests/expected/example72.txt.out
similarity index 66%
rename from tests/expected/json/example72.json
rename to tests/expected/example72.txt.out
index a881422..ad0edb7 100644
--- a/tests/expected/json/example72.json
+++ b/tests/expected/example72.txt.out
@@ -1,1 +1,3 @@
+"value" > ("foo" + 10) 
+(value > foo + 10)
 {"op":">","args":[{"property":"value"},{"op":"+","args":[{"property":"foo"},10.0]}]}
diff --git a/tests/expected/example73.json.out b/tests/expected/example73.json.out
new file mode 100644
index 0000000..e59ed27
--- /dev/null
+++ b/tests/expected/example73.json.out
@@ -0,0 +1,3 @@
+{"op":"<","args":[{"property":"value"},{"op":"-","args":[{"property":"foo"},10]}]}
+(value < foo - 10)
+{"op":"<","args":[{"property":"value"},{"op":"-","args":[{"property":"foo"},10.0]}]}
diff --git a/tests/expected/json/example73.json b/tests/expected/example73.txt.out
similarity index 66%
rename from tests/expected/json/example73.json
rename to tests/expected/example73.txt.out
index adc0291..43cc23e 100644
--- a/tests/expected/json/example73.json
+++ b/tests/expected/example73.txt.out
@@ -1,1 +1,3 @@
+"value" < ("foo" - 10) 
+(value < foo - 10)
 {"op":"<","args":[{"property":"value"},{"op":"-","args":[{"property":"foo"},10.0]}]}
diff --git a/tests/expected/example74.json.out b/tests/expected/example74.json.out
new file mode 100644
index 0000000..9f6253d
--- /dev/null
+++ b/tests/expected/example74.json.out
@@ -0,0 +1,3 @@
+{"op":"<>","args":[{"property":"value"},{"op":"*","args":[22.1,{"property":"foo"}]}]}
+(value <> 22.1 * foo)
+{"op":"<>","args":[{"property":"value"},{"op":"*","args":[22.1,{"property":"foo"}]}]}
diff --git a/tests/expected/json/example74.json b/tests/expected/example74.txt.out
similarity index 63%
rename from tests/expected/json/example74.json
rename to tests/expected/example74.txt.out
index e6d0daf..69a3955 100644
--- a/tests/expected/json/example74.json
+++ b/tests/expected/example74.txt.out
@@ -1,1 +1,3 @@
+"value" <> (22.1 * "foo") 
+(value <> 22.1 * foo)
 {"op":"<>","args":[{"property":"value"},{"op":"*","args":[22.1,{"property":"foo"}]}]}
diff --git a/tests/expected/example75.json.out b/tests/expected/example75.json.out
new file mode 100644
index 0000000..647750a
--- /dev/null
+++ b/tests/expected/example75.json.out
@@ -0,0 +1,3 @@
+{"op":"=","args":[{"property":"value"},{"op":"/","args":[2,{"property":"foo"}]}]}
+(value = 2 / foo)
+{"op":"=","args":[{"property":"value"},{"op":"/","args":[2.0,{"property":"foo"}]}]}
diff --git a/tests/expected/json/example75.json b/tests/expected/example75.txt.out
similarity index 67%
rename from tests/expected/json/example75.json
rename to tests/expected/example75.txt.out
index b0ccbc8..c144db9 100644
--- a/tests/expected/json/example75.json
+++ b/tests/expected/example75.txt.out
@@ -1,1 +1,3 @@
+"value" = (2 / "foo") 
+(value = 2 / foo)
 {"op":"=","args":[{"property":"value"},{"op":"/","args":[2.0,{"property":"foo"}]}]}
diff --git a/tests/expected/example76.json.out b/tests/expected/example76.json.out
new file mode 100644
index 0000000..fa89963
--- /dev/null
+++ b/tests/expected/example76.json.out
@@ -0,0 +1,3 @@
+{"op":"<=","args":[{"property":"value"},{"op":"^","args":[2,{"property":"foo"}]}]}
+(value <= (2 ^ foo))
+{"op":"<=","args":[{"property":"value"},{"op":"^","args":[2.0,{"property":"foo"}]}]}
diff --git a/tests/expected/json/example76.json b/tests/expected/example76.txt.out
similarity index 65%
rename from tests/expected/json/example76.json
rename to tests/expected/example76.txt.out
index 4f93e58..f365fb2 100644
--- a/tests/expected/json/example76.json
+++ b/tests/expected/example76.txt.out
@@ -1,1 +1,3 @@
+"value" <= (2 ^ "foo") 
+(value <= (2 ^ foo))
 {"op":"<=","args":[{"property":"value"},{"op":"^","args":[2.0,{"property":"foo"}]}]}
diff --git a/tests/expected/example77.json.out b/tests/expected/example77.json.out
new file mode 100644
index 0000000..5b5919d
--- /dev/null
+++ b/tests/expected/example77.json.out
@@ -0,0 +1,3 @@
+{"op":"=","args":[0,{"op":"%","args":[{"property":"foo"},2]}]}
+(0 = foo % 2)
+{"op":"=","args":[0.0,{"op":"%","args":[{"property":"foo"},2.0]}]}
diff --git a/tests/expected/text/example77.json b/tests/expected/example77.txt.out
similarity index 68%
rename from tests/expected/text/example77.json
rename to tests/expected/example77.txt.out
index 1af0d17..0aa0236 100644
--- a/tests/expected/text/example77.json
+++ b/tests/expected/example77.txt.out
@@ -1,1 +1,3 @@
+0 = ("foo" % 2) 
+(0 = foo % 2)
 {"op":"=","args":[0.0,{"op":"%","args":[{"property":"foo"},2.0]}]}
diff --git a/tests/expected/example78.json.out b/tests/expected/example78.json.out
new file mode 100644
index 0000000..3bc815f
--- /dev/null
+++ b/tests/expected/example78.json.out
@@ -0,0 +1,3 @@
+{"op":"=","args":[1,{"op":"div","args":[{"property":"foo"},2]}]}
+(1 = div(foo, 2))
+{"op":"=","args":[1.0,{"op":"div","args":[{"property":"foo"},2.0]}]}
diff --git a/tests/expected/json/example78.json b/tests/expected/example78.txt.out
similarity index 65%
rename from tests/expected/json/example78.json
rename to tests/expected/example78.txt.out
index 844db58..cafc8c6 100644
--- a/tests/expected/json/example78.json
+++ b/tests/expected/example78.txt.out
@@ -1,1 +1,3 @@
+1 = ("foo" div 2) 
+(1 = div(foo, 2))
 {"op":"=","args":[1.0,{"op":"div","args":[{"property":"foo"},2.0]}]}
diff --git a/tests/expected/example79.json.out b/tests/expected/example79.json.out
new file mode 100644
index 0000000..1703da7
--- /dev/null
+++ b/tests/expected/example79.json.out
@@ -0,0 +1,3 @@
+{"op":"a_containedBy","args":[{"property":"values"},["a","b","c"]]}
+"a_containedBy"("values", ('a', 'b', 'c'))
+{"op":"a_containedBy","args":[{"property":"values"},["a","b","c"]]}
diff --git a/tests/expected/example79.txt.out b/tests/expected/example79.txt.out
new file mode 100644
index 0000000..1b0759a
--- /dev/null
+++ b/tests/expected/example79.txt.out
@@ -0,0 +1,3 @@
+A_CONTAINEDBY("values", ('a', 'b', 'c')) 
+a_containedby("values", ('a', 'b', 'c'))
+{"op":"a_containedby","args":[{"property":"values"},["a","b","c"]]}
diff --git a/tests/expected/example80.json.out b/tests/expected/example80.json.out
new file mode 100644
index 0000000..3d13a41
--- /dev/null
+++ b/tests/expected/example80.json.out
@@ -0,0 +1,3 @@
+{"op":"a_contains","args":[{"property":"values"},["a","b","c"]]}
+a_contains("values", ('a', 'b', 'c'))
+{"op":"a_contains","args":[{"property":"values"},["a","b","c"]]}
diff --git a/tests/expected/example80.txt.out b/tests/expected/example80.txt.out
new file mode 100644
index 0000000..88a2ffa
--- /dev/null
+++ b/tests/expected/example80.txt.out
@@ -0,0 +1,3 @@
+A_CONTAINS("values", ('a', 'b', 'c')) 
+a_contains("values", ('a', 'b', 'c'))
+{"op":"a_contains","args":[{"property":"values"},["a","b","c"]]}
diff --git a/tests/expected/example81.json.out b/tests/expected/example81.json.out
new file mode 100644
index 0000000..e54b98a
--- /dev/null
+++ b/tests/expected/example81.json.out
@@ -0,0 +1,3 @@
+{"op":"a_equals","args":[["a",true,1.0,8],{"property":"values"}]}
+a_equals(('a', true, 1, 8), "values")
+{"op":"a_equals","args":[["a",true,1.0,8.0],{"property":"values"}]}
diff --git a/tests/expected/example81.txt.out b/tests/expected/example81.txt.out
new file mode 100644
index 0000000..fe1fb0e
--- /dev/null
+++ b/tests/expected/example81.txt.out
@@ -0,0 +1,3 @@
+A_EQUALS(('a', TRUE, 1.0, 8), "values") 
+a_equals(('a', true, 1, 8), "values")
+{"op":"a_equals","args":[["a",true,1.0,8.0],{"property":"values"}]}
diff --git a/tests/expected/example82.json.out b/tests/expected/example82.json.out
new file mode 100644
index 0000000..a7689f7
--- /dev/null
+++ b/tests/expected/example82.json.out
@@ -0,0 +1,3 @@
+{"op":"a_overlaps","args":[{"property":"values"},[{"timestamp":"2012-08-10T05:30:00Z"},{"date":"2010-02-10"},false]]}
+a_overlaps("values", (TIMESTAMP('2012-08-10T05:30:00Z'), DATE('2010-02-10'), false))
+{"op":"a_overlaps","args":[{"property":"values"},[{"timestamp":"2012-08-10T05:30:00Z"},{"date":"2010-02-10"},false]]}
diff --git a/tests/expected/example82.txt.out b/tests/expected/example82.txt.out
new file mode 100644
index 0000000..3cafe71
--- /dev/null
+++ b/tests/expected/example82.txt.out
@@ -0,0 +1,3 @@
+A_OVERLAPS("values", (TIMESTAMP('2012-08-10T05:30:00.000000Z'), DATE('2010-02-10'), FALSE)) 
+a_overlaps("values", (TIMESTAMP('2012-08-10T05:30:00.000000Z'), DATE('2010-02-10'), false))
+{"op":"a_overlaps","args":[{"property":"values"},[{"timestamp":"2012-08-10T05:30:00.000000Z"},{"date":"2010-02-10"},false]]}
diff --git a/tests/expected/example83.json.out b/tests/expected/example83.json.out
new file mode 100644
index 0000000..3b0608c
--- /dev/null
+++ b/tests/expected/example83.json.out
@@ -0,0 +1,3 @@
+{"op":"s_equals","args":[{"type":"MultiPoint","coordinates":[[180.0,-0.5],[179.0,-47.121701],[180.0,-0.0],[33.470475,-0.99999],[179.0,-15.333062]]},{"property":"geometry"}]}
+s_equals(MULTIPOINT(180 -0.5,179 -47.121701,180 -0,33.470475 -0.99999,179 -15.333062), geometry)
+{"op":"s_equals","args":[{"type":"MultiPoint","coordinates":[[180.0,-0.5],[179.0,-47.121701],[180.0,-0.0],[33.470475,-0.99999],[179.0,-15.333062]]},{"property":"geometry"}]}
diff --git a/tests/expected/example83.txt.out b/tests/expected/example83.txt.out
new file mode 100644
index 0000000..3e3dd20
--- /dev/null
+++ b/tests/expected/example83.txt.out
@@ -0,0 +1,3 @@
+S_EQUALS(MULTIPOINT ((180.0 -0.5), (179.0 -47.121701), (180.0 -0.0), (33.470475 -0.99999), (179.0 -15.333062)), "geometry") 
+s_equals(MULTIPOINT ((180.0 -0.5), (179.0 -47.121701), (180.0 -0.0), (33.470475 -0.99999), (179.0 -15.333062)), geometry)
+{"op":"s_equals","args":[{"type":"MultiPoint","coordinates":[[180.0,-0.5],[179.0,-47.121701],[180.0,-0.0],[33.470475,-0.99999],[179.0,-15.333062]]},{"property":"geometry"}]}
diff --git a/tests/expected/example84.json.out b/tests/expected/example84.json.out
new file mode 100644
index 0000000..839a3f4
--- /dev/null
+++ b/tests/expected/example84.json.out
@@ -0,0 +1,3 @@
+{"op":"s_equals","args":[{"type":"GeometryCollection","geometries":[{"type":"Point","coordinates":[1.9,2.00001]},{"type":"Point","coordinates":[0.0,-2.00001]},{"type":"MultiLineString","coordinates":[[[-2.00001,-0.0],[-77.292642,-0.5],[-87.515626,-0.0],[-180.0,12.502773],[21.204842,-1.5],[-21.878857,-90.0]]]},{"type":"Point","coordinates":[1.9,0.5]},{"type":"LineString","coordinates":[[179.0,1.179148],[-148.192487,-65.007816],[0.5,0.333333]]}]},{"property":"geometry"}]}
+s_equals(GEOMETRYCOLLECTION(POINT(1.9 2.00001),POINT(0 -2.00001),MULTILINESTRING((-2.00001 -0,-77.292642 -0.5,-87.515626 -0,-180 12.502773,21.204842 -1.5,-21.878857 -90)),POINT(1.9 0.5),LINESTRING(179 1.179148,-148.192487 -65.007816,0.5 0.333333)), geometry)
+{"op":"s_equals","args":[{"type":"GeometryCollection","geometries":[{"type":"Point","coordinates":[1.9,2.00001]},{"type":"Point","coordinates":[0.0,-2.00001]},{"type":"MultiLineString","coordinates":[[[-2.00001,-0.0],[-77.292642,-0.5],[-87.515626,-0.0],[-180.0,12.502773],[21.204842,-1.5],[-21.878857,-90.0]]]},{"type":"Point","coordinates":[1.9,0.5]},{"type":"LineString","coordinates":[[179.0,1.179148],[-148.192487,-65.007816],[0.5,0.333333]]}]},{"property":"geometry"}]}
diff --git a/tests/expected/example84.txt.out b/tests/expected/example84.txt.out
new file mode 100644
index 0000000..0dbc9a0
--- /dev/null
+++ b/tests/expected/example84.txt.out
@@ -0,0 +1,3 @@
+S_EQUALS(GEOMETRYCOLLECTION (POINT (1.9 2.00001), POINT (0.0 -2.00001), MULTILINESTRING ((-2.00001 -0.0, -77.292642 -0.5, -87.515626 -0.0, -180.0 12.502773, 21.204842 -1.5, -21.878857 -90.0)), POINT (1.9 0.5), LINESTRING (179.0 1.179148, -148.192487 -65.007816, 0.5 0.333333)), "geometry") 
+s_equals(GEOMETRYCOLLECTION (POINT (1.9 2.00001), POINT (0.0 -2.00001), MULTILINESTRING ((-2.00001 -0.0, -77.292642 -0.5, -87.515626 -0.0, -180.0 12.502773, 21.204842 -1.5, -21.878857 -90.0)), POINT (1.9 0.5), LINESTRING (179.0 1.179148, -148.192487 -65.007816, 0.5 0.333333)), geometry)
+{"op":"s_equals","args":[{"type":"GeometryCollection","geometries":[{"type":"Point","coordinates":[1.9,2.00001]},{"type":"Point","coordinates":[0.0,-2.00001]},{"type":"MultiLineString","coordinates":[[[-2.00001,-0.0],[-77.292642,-0.5],[-87.515626,-0.0],[-180.0,12.502773],[21.204842,-1.5],[-21.878857,-90.0]]]},{"type":"Point","coordinates":[1.9,0.5]},{"type":"LineString","coordinates":[[179.0,1.179148],[-148.192487,-65.007816],[0.5,0.333333]]}]},{"property":"geometry"}]}
diff --git a/tests/expected/json/example85-alt01.json b/tests/expected/example85-alt01.txt.out
similarity index 70%
rename from tests/expected/json/example85-alt01.json
rename to tests/expected/example85-alt01.txt.out
index 13b9703..856f1ad 100644
--- a/tests/expected/json/example85-alt01.json
+++ b/tests/expected/example85-alt01.txt.out
@@ -1,1 +1,3 @@
+value = - foo * 2.0 + "bar" / 6.1234 - "x" ^ 2.0 
+(value = -1 * foo * 2 + bar / 6.1234 - (x ^ 2))
 {"op":"=","args":[{"property":"value"},{"op":"-","args":[{"op":"+","args":[{"op":"*","args":[{"op":"*","args":[-1.0,{"property":"foo"}]},2.0]},{"op":"/","args":[{"property":"bar"},6.1234]}]},{"op":"^","args":[{"property":"x"},2.0]}]}]}
diff --git a/tests/expected/example85.json.out b/tests/expected/example85.json.out
new file mode 100644
index 0000000..cf2504d
--- /dev/null
+++ b/tests/expected/example85.json.out
@@ -0,0 +1,3 @@
+{"op":"=","args":[{"property":"value"},{"op":"-","args":[{"op":"+","args":[{"op":"*","args":[{"op":"*","args":[-1,{"property":"foo"}]},2.0]},{"op":"/","args":[{"property":"bar"},6.1234]}]},{"op":"^","args":[{"property":"x"},2.0]}]}]}
+(value = -1 * foo * 2 + bar / 6.1234 - (x ^ 2))
+{"op":"=","args":[{"property":"value"},{"op":"-","args":[{"op":"+","args":[{"op":"*","args":[{"op":"*","args":[-1.0,{"property":"foo"}]},2.0]},{"op":"/","args":[{"property":"bar"},6.1234]}]},{"op":"^","args":[{"property":"x"},2.0]}]}]}
diff --git a/tests/expected/text/example85.json b/tests/expected/example85.txt.out
similarity index 68%
rename from tests/expected/text/example85.json
rename to tests/expected/example85.txt.out
index 602d8f7..67a6469 100644
--- a/tests/expected/text/example85.json
+++ b/tests/expected/example85.txt.out
@@ -1,1 +1,3 @@
+"value" = ((((-1 * "foo") * 2.0) + ("bar" / 6.1234)) - ("x" ^ 2.0)) 
+(value = -1 * 1 * foo * 2 + bar / 6.1234 - (x ^ 2))
 {"op":"=","args":[{"property":"value"},{"op":"-","args":[{"op":"+","args":[{"op":"*","args":[{"op":"*","args":[{"op":"*","args":[-1.0,1.0]},{"property":"foo"}]},2.0]},{"op":"/","args":[{"property":"bar"},6.1234]}]},{"op":"^","args":[{"property":"x"},2.0]}]}]}
diff --git a/tests/expected/example86.json.out b/tests/expected/example86.json.out
new file mode 100644
index 0000000..71c4912
--- /dev/null
+++ b/tests/expected/example86.json.out
@@ -0,0 +1,3 @@
+{"op":"like","args":[{"property":"name"},{"op":"casei","args":["FOO%"]}]}
+(name LIKE casei('FOO%'))
+{"op":"like","args":[{"property":"name"},{"op":"casei","args":["FOO%"]}]}
diff --git a/tests/expected/json/example86.json b/tests/expected/example86.txt.out
similarity index 58%
rename from tests/expected/json/example86.json
rename to tests/expected/example86.txt.out
index 71c574a..578a68e 100644
--- a/tests/expected/json/example86.json
+++ b/tests/expected/example86.txt.out
@@ -1,1 +1,3 @@
+"name" LIKE CASEI('FOO%') 
+(name LIKE casei('FOO%'))
 {"op":"like","args":[{"property":"name"},{"op":"casei","args":["FOO%"]}]}
diff --git a/tests/expected/json/clause6_01.txt b/tests/expected/json/clause6_01.txt
deleted file mode 100644
index 7da7915..0000000
--- a/tests/expected/json/clause6_01.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-avg("windSpeed")
diff --git a/tests/expected/json/clause6_02a.json b/tests/expected/json/clause6_02a.json
deleted file mode 100644
index 21be46c..0000000
--- a/tests/expected/json/clause6_02a.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"=","args":[{"property":"city"},"Toronto"]}
diff --git a/tests/expected/json/clause6_02a.txt b/tests/expected/json/clause6_02a.txt
deleted file mode 100644
index 9eadc2d..0000000
--- a/tests/expected/json/clause6_02a.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-("city" = 'Toronto')
diff --git a/tests/expected/json/clause6_02b.txt b/tests/expected/json/clause6_02b.txt
deleted file mode 100644
index 8e74c1c..0000000
--- a/tests/expected/json/clause6_02b.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-(avg("windSpeed") < 4)
diff --git a/tests/expected/json/clause6_02c.txt b/tests/expected/json/clause6_02c.txt
deleted file mode 100644
index 04a3306..0000000
--- a/tests/expected/json/clause6_02c.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-(("balance" - 150) > 0)
diff --git a/tests/expected/json/clause6_02d.txt b/tests/expected/json/clause6_02d.txt
deleted file mode 100644
index 652b385..0000000
--- a/tests/expected/json/clause6_02d.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-("updated" >= DATE('1970-01-01'))
diff --git a/tests/expected/json/clause6_03.txt b/tests/expected/json/clause6_03.txt
deleted file mode 100644
index a220659..0000000
--- a/tests/expected/json/clause6_03.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-(NOT isNull("geometry"))
diff --git a/tests/expected/json/clause7_01.txt b/tests/expected/json/clause7_01.txt
deleted file mode 100644
index 5775a98..0000000
--- a/tests/expected/json/clause7_01.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-like("name", 'Smith%')
diff --git a/tests/expected/json/clause7_02.txt b/tests/expected/json/clause7_02.txt
deleted file mode 100644
index 2ef194b..0000000
--- a/tests/expected/json/clause7_02.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-("depth" BETWEEN 100 AND 150)
diff --git a/tests/expected/json/clause7_03a.json b/tests/expected/json/clause7_03a.json
deleted file mode 100644
index 2e6269b..0000000
--- a/tests/expected/json/clause7_03a.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"in","args":[{"property":"cityName"},["Toronto","Frankfurt","Tokyo","New York"]]}
diff --git a/tests/expected/json/clause7_03a.txt b/tests/expected/json/clause7_03a.txt
deleted file mode 100644
index 2db8c38..0000000
--- a/tests/expected/json/clause7_03a.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-in("cityName", ('Toronto', 'Frankfurt', 'Tokyo', 'New York'))
diff --git a/tests/expected/json/clause7_03b.txt b/tests/expected/json/clause7_03b.txt
deleted file mode 100644
index d6823b3..0000000
--- a/tests/expected/json/clause7_03b.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-(NOT in("category", (1, 2, 3, 4)))
diff --git a/tests/expected/json/clause7_04.txt b/tests/expected/json/clause7_04.txt
deleted file mode 100644
index cf16575..0000000
--- a/tests/expected/json/clause7_04.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-in(casei("road_class"), (casei('Οδος'), casei('Straße')))
diff --git a/tests/expected/json/clause7_05.txt b/tests/expected/json/clause7_05.txt
deleted file mode 100644
index 2899d9e..0000000
--- a/tests/expected/json/clause7_05.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-(accenti("etat_vol") = accenti('débárquér'))
diff --git a/tests/expected/json/clause7_07.txt b/tests/expected/json/clause7_07.txt
deleted file mode 100644
index eeb90f9..0000000
--- a/tests/expected/json/clause7_07.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-s_intersects("geometry", POINT(36.319836 32.288087))
diff --git a/tests/expected/json/clause7_10.json b/tests/expected/json/clause7_10.json
deleted file mode 100644
index c71f5ff..0000000
--- a/tests/expected/json/clause7_10.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"s_crosses","args":[{"property":"road"},{"type":"Polygon","coordinates":[[[43.7286,-79.2986],[43.7311,-79.2996],[43.7323,-79.2972],[43.7326,-79.2971],[43.735,-79.2981],[43.735,-79.2982],[43.7352,-79.2982],[43.7357,-79.2956],[43.7337,-79.2948],[43.7343,-79.2933],[43.7339,-79.2923],[43.7327,-79.2947],[43.732,-79.2942],[43.7322,-79.2937],[43.7306,-79.293],[43.7303,-79.293],[43.7299,-79.2928],[43.7286,-79.2986]]]}]}
diff --git a/tests/expected/json/clause7_10.txt b/tests/expected/json/clause7_10.txt
deleted file mode 100644
index 3286a73..0000000
--- a/tests/expected/json/clause7_10.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-s_crosses("road", POLYGON((43.7286 -79.2986,43.7311 -79.2996,43.7323 -79.2972,43.7326 -79.2971,43.735 -79.2981,43.735 -79.2982,43.7352 -79.2982,43.7357 -79.2956,43.7337 -79.2948,43.7343 -79.2933,43.7339 -79.2923,43.7327 -79.2947,43.732 -79.2942,43.7322 -79.2937,43.7306 -79.293,43.7303 -79.293,43.7299 -79.2928,43.7286 -79.2986)))
diff --git a/tests/expected/json/clause7_12.json b/tests/expected/json/clause7_12.json
deleted file mode 100644
index 281c144..0000000
--- a/tests/expected/json/clause7_12.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"t_intersects","args":[{"property":"event_time"},{"interval":["1969-07-16T05:32:00Z","1969-07-24T16:50:35Z"]}]}
diff --git a/tests/expected/json/clause7_12.txt b/tests/expected/json/clause7_12.txt
deleted file mode 100644
index 4dc5306..0000000
--- a/tests/expected/json/clause7_12.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-t_intersects("event_time", INTERVAL('1969-07-16T05:32:00Z','1969-07-24T16:50:35Z'))
diff --git a/tests/expected/json/clause7_13.json b/tests/expected/json/clause7_13.json
deleted file mode 100644
index 29d93dd..0000000
--- a/tests/expected/json/clause7_13.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"t_during","args":[{"interval":[{"property":"touchdown"},{"property":"liftOff"}]},{"interval":["1969-07-16T13:32:00Z","1969-07-24T16:50:35Z"]}]}
diff --git a/tests/expected/json/clause7_13.txt b/tests/expected/json/clause7_13.txt
deleted file mode 100644
index bb6c3dc..0000000
--- a/tests/expected/json/clause7_13.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-t_during(INTERVAL("touchdown","liftOff"), INTERVAL('1969-07-16T13:32:00Z','1969-07-24T16:50:35Z'))
diff --git a/tests/expected/json/clause7_15.json b/tests/expected/json/clause7_15.json
deleted file mode 100644
index c88bf36..0000000
--- a/tests/expected/json/clause7_15.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"a_contains","args":[{"property":"layer:ids"},["layers-ca","layers-us"]]}
diff --git a/tests/expected/json/clause7_15.txt b/tests/expected/json/clause7_15.txt
deleted file mode 100644
index 53d5bb4..0000000
--- a/tests/expected/json/clause7_15.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-a_contains("layer:ids", ('layers-ca', 'layers-us'))
diff --git a/tests/expected/json/clause7_16.json b/tests/expected/json/clause7_16.json
deleted file mode 100644
index 8b03b4c..0000000
--- a/tests/expected/json/clause7_16.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"s_crosses","args":[{"type":"LineString","coordinates":[[43.72992,-79.2998],[43.73005,-79.2991],[43.73006,-79.2984],[43.7314,-79.2956],[43.73259,-79.295],[43.73266,-79.2945],[43.7332,-79.2936],[43.73378,-79.2936],[43.73486,-79.2917]]},{"type":"Polygon","coordinates":[[[43.7286,-79.2986],[43.7311,-79.2996],[43.7323,-79.2972],[43.7326,-79.2971],[43.735,-79.2981],[43.735,-79.2982],[43.7352,-79.2982],[43.7357,-79.2956],[43.7337,-79.2948],[43.7343,-79.2933],[43.7339,-79.2923],[43.7327,-79.2947],[43.732,-79.2942],[43.7322,-79.2937],[43.7306,-79.293],[43.7303,-79.293],[43.7299,-79.2928],[43.7286,-79.2986]]]}]}
diff --git a/tests/expected/json/clause7_16.txt b/tests/expected/json/clause7_16.txt
deleted file mode 100644
index 0072784..0000000
--- a/tests/expected/json/clause7_16.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-s_crosses(LINESTRING(43.72992 -79.2998,43.73005 -79.2991,43.73006 -79.2984,43.7314 -79.2956,43.73259 -79.295,43.73266 -79.2945,43.7332 -79.2936,43.73378 -79.2936,43.73486 -79.2917), POLYGON((43.7286 -79.2986,43.7311 -79.2996,43.7323 -79.2972,43.7326 -79.2971,43.735 -79.2981,43.735 -79.2982,43.7352 -79.2982,43.7357 -79.2956,43.7337 -79.2948,43.7343 -79.2933,43.7339 -79.2923,43.7327 -79.2947,43.732 -79.2942,43.7322 -79.2937,43.7306 -79.293,43.7303 -79.293,43.7299 -79.2928,43.7286 -79.2986)))
diff --git a/tests/expected/json/clause7_17.json b/tests/expected/json/clause7_17.json
deleted file mode 100644
index 325540c..0000000
--- a/tests/expected/json/clause7_17.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"t_during","args":[{"interval":["1969-07-20T20:17:40Z","1969-07-21T17:54:00Z"]},{"interval":["1969-07-16T13:32:00Z","1969-07-24T16:50:35Z"]}]}
diff --git a/tests/expected/json/clause7_17.txt b/tests/expected/json/clause7_17.txt
deleted file mode 100644
index 1a5313e..0000000
--- a/tests/expected/json/clause7_17.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-t_during(INTERVAL('1969-07-20T20:17:40Z','1969-07-21T17:54:00Z'), INTERVAL('1969-07-16T13:32:00Z','1969-07-24T16:50:35Z'))
diff --git a/tests/expected/json/clause7_18.json b/tests/expected/json/clause7_18.json
deleted file mode 100644
index e23a36e..0000000
--- a/tests/expected/json/clause7_18.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"s_within","args":[{"property":"road"},{"op":"Buffer","args":[{"property":"geometry"},10.0,"m"]}]}
diff --git a/tests/expected/json/clause7_18.txt b/tests/expected/json/clause7_18.txt
deleted file mode 100644
index 8e597aa..0000000
--- a/tests/expected/json/clause7_18.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-s_within("road", Buffer("geometry", 10, 'm'))
diff --git a/tests/expected/json/clause7_19.txt b/tests/expected/json/clause7_19.txt
deleted file mode 100644
index 2401b91..0000000
--- a/tests/expected/json/clause7_19.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-("vehicle_height" > ("bridge_clearance" - 1))
diff --git a/tests/expected/json/example01.json b/tests/expected/json/example01.json
deleted file mode 100644
index b5de01a..0000000
--- a/tests/expected/json/example01.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"=","args":[{"property":"landsat:scene_id"},"LC82030282019133LGN00"]}
diff --git a/tests/expected/json/example01.txt b/tests/expected/json/example01.txt
deleted file mode 100644
index 8ea0134..0000000
--- a/tests/expected/json/example01.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-("landsat:scene_id" = 'LC82030282019133LGN00')
diff --git a/tests/expected/json/example02.txt b/tests/expected/json/example02.txt
deleted file mode 100644
index c7b9388..0000000
--- a/tests/expected/json/example02.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-like("eo:instrument", 'OLI%')
diff --git a/tests/expected/json/example03.json b/tests/expected/json/example03.json
deleted file mode 100644
index a3a8e9d..0000000
--- a/tests/expected/json/example03.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"in","args":[{"property":"landsat:wrs_path"},["153","154","15X"]]}
diff --git a/tests/expected/json/example03.txt b/tests/expected/json/example03.txt
deleted file mode 100644
index 51dd73b..0000000
--- a/tests/expected/json/example03.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-in("landsat:wrs_path", ('153', '154', '15X'))
diff --git a/tests/expected/json/example04.txt b/tests/expected/json/example04.txt
deleted file mode 100644
index a3b155c..0000000
--- a/tests/expected/json/example04.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-(("eo:cloud_cover" < 0.1) AND ("landsat:wrs_row" = 28) AND ("landsat:wrs_path" = 203))
diff --git a/tests/expected/json/example05a.txt b/tests/expected/json/example05a.txt
deleted file mode 100644
index 203915c..0000000
--- a/tests/expected/json/example05a.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-(("eo:cloud_cover" = 0.1) OR ("eo:cloud_cover" = 0.2))
diff --git a/tests/expected/json/example05b.json b/tests/expected/json/example05b.json
deleted file mode 100644
index 22874a2..0000000
--- a/tests/expected/json/example05b.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"in","args":[{"property":"eo:cloud_cover"},[0.1,0.2]]}
diff --git a/tests/expected/json/example05b.txt b/tests/expected/json/example05b.txt
deleted file mode 100644
index d86d13f..0000000
--- a/tests/expected/json/example05b.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-in("eo:cloud_cover", (0.1, 0.2))
diff --git a/tests/expected/json/example06a.json b/tests/expected/json/example06a.json
deleted file mode 100644
index 543a16e..0000000
--- a/tests/expected/json/example06a.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"and","args":[{"op":"between","args":[{"property":"eo:cloud_cover"},0.1,0.2]},{"op":"=","args":[{"property":"landsat:wrs_row"},28.0]},{"op":"=","args":[{"property":"landsat:wrs_path"},203.0]}]}
diff --git a/tests/expected/json/example06a.txt b/tests/expected/json/example06a.txt
deleted file mode 100644
index f3e83f9..0000000
--- a/tests/expected/json/example06a.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-(("eo:cloud_cover" BETWEEN 0.1 AND 0.2) AND ("landsat:wrs_row" = 28) AND ("landsat:wrs_path" = 203))
diff --git a/tests/expected/json/example06b.txt b/tests/expected/json/example06b.txt
deleted file mode 100644
index f369547..0000000
--- a/tests/expected/json/example06b.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-(("eo:cloud_cover" >= 0.1) AND ("eo:cloud_cover" <= 0.2) AND ("landsat:wrs_row" = 28) AND ("landsat:wrs_path" = 203))
diff --git a/tests/expected/json/example07.json b/tests/expected/json/example07.json
deleted file mode 100644
index 8b7ec9f..0000000
--- a/tests/expected/json/example07.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"and","args":[{"op":"like","args":[{"property":"eo:instrument"},"OLI%"]},{"op":"s_intersects","args":[{"property":"footprint"},{"type":"Polygon","coordinates":[[[43.5845,-79.5442],[43.6079,-79.4893],[43.5677,-79.4632],[43.6129,-79.3925],[43.6223,-79.3238],[43.6576,-79.3163],[43.7945,-79.1178],[43.8144,-79.1542],[43.8555,-79.1714],[43.7509,-79.639],[43.5845,-79.5442]]]}]}]}
diff --git a/tests/expected/json/example07.txt b/tests/expected/json/example07.txt
deleted file mode 100644
index e7f6d32..0000000
--- a/tests/expected/json/example07.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-(like("eo:instrument", 'OLI%') AND s_intersects("footprint", POLYGON((43.5845 -79.5442,43.6079 -79.4893,43.5677 -79.4632,43.6129 -79.3925,43.6223 -79.3238,43.6576 -79.3163,43.7945 -79.1178,43.8144 -79.1542,43.8555 -79.1714,43.7509 -79.639,43.5845 -79.5442))))
diff --git a/tests/expected/json/example08.json b/tests/expected/json/example08.json
deleted file mode 100644
index 7193360..0000000
--- a/tests/expected/json/example08.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"and","args":[{"op":"=","args":[{"property":"beamMode"},"ScanSAR Narrow"]},{"op":"=","args":[{"property":"swathDirection"},"ascending"]},{"op":"=","args":[{"property":"polarization"},"HH+VV+HV+VH"]},{"op":"s_intersects","args":[{"property":"footprint"},{"type":"Polygon","coordinates":[[[-77.117938,38.93686],[-77.040604,39.995648],[-76.910536,38.892912],[-77.039359,38.791753],[-77.047906,38.841462],[-77.034183,38.840655],[-77.033142,38.85749],[-77.117938,38.93686]]]}]}]}
diff --git a/tests/expected/json/example08.txt b/tests/expected/json/example08.txt
deleted file mode 100644
index 3b5001b..0000000
--- a/tests/expected/json/example08.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-(("beamMode" = 'ScanSAR Narrow') AND ("swathDirection" = 'ascending') AND ("polarization" = 'HH+VV+HV+VH') AND s_intersects("footprint", POLYGON((-77.117938 38.93686,-77.040604 39.995648,-76.910536 38.892912,-77.039359 38.791753,-77.047906 38.841462,-77.034183 38.840655,-77.033142 38.85749,-77.117938 38.93686))))
diff --git a/tests/expected/json/example09.txt b/tests/expected/json/example09.txt
deleted file mode 100644
index c8147f0..0000000
--- a/tests/expected/json/example09.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-("floors" > 5)
diff --git a/tests/expected/json/example10.txt b/tests/expected/json/example10.txt
deleted file mode 100644
index 281c134..0000000
--- a/tests/expected/json/example10.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-("taxes" <= 500)
diff --git a/tests/expected/json/example11.txt b/tests/expected/json/example11.txt
deleted file mode 100644
index 294411f..0000000
--- a/tests/expected/json/example11.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-like("owner", '%Jones%')
diff --git a/tests/expected/json/example12.txt b/tests/expected/json/example12.txt
deleted file mode 100644
index 2415deb..0000000
--- a/tests/expected/json/example12.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-like("owner", 'Mike%')
diff --git a/tests/expected/json/example13.txt b/tests/expected/json/example13.txt
deleted file mode 100644
index c2a78da..0000000
--- a/tests/expected/json/example13.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-(NOT like("owner", '%Mike%'))
diff --git a/tests/expected/json/example14.txt b/tests/expected/json/example14.txt
deleted file mode 100644
index bcec8de..0000000
--- a/tests/expected/json/example14.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-("swimming_pool" = true)
diff --git a/tests/expected/json/example15.txt b/tests/expected/json/example15.txt
deleted file mode 100644
index 2ead8f9..0000000
--- a/tests/expected/json/example15.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-(("floors" > 5) AND ("swimming_pool" = true))
diff --git a/tests/expected/json/example16.json b/tests/expected/json/example16.json
deleted file mode 100644
index 325c276..0000000
--- a/tests/expected/json/example16.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"and","args":[{"op":"=","args":[{"property":"swimming_pool"},true]},{"op":"or","args":[{"op":">","args":[{"property":"floors"},5.0]},{"op":"like","args":[{"property":"material"},"brick%"]},{"op":"like","args":[{"property":"material"},"%brick"]}]}]}
diff --git a/tests/expected/json/example16.txt b/tests/expected/json/example16.txt
deleted file mode 100644
index d978b57..0000000
--- a/tests/expected/json/example16.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-(("swimming_pool" = true) AND (("floors" > 5) OR like("material", 'brick%') OR like("material", '%brick')))
diff --git a/tests/expected/json/example17.txt b/tests/expected/json/example17.txt
deleted file mode 100644
index 7e613fc..0000000
--- a/tests/expected/json/example17.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-((("floors" > 5) AND ("material" = 'brick')) OR ("swimming_pool" = true))
diff --git a/tests/expected/json/example18.txt b/tests/expected/json/example18.txt
deleted file mode 100644
index fee5683..0000000
--- a/tests/expected/json/example18.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-((NOT ("floors" < 5)) OR ("swimming_pool" = true))
diff --git a/tests/expected/json/example19.txt b/tests/expected/json/example19.txt
deleted file mode 100644
index ef51aab..0000000
--- a/tests/expected/json/example19.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-((like("owner", 'mike%') OR like("owner", 'Mike%')) AND ("floors" < 4))
diff --git a/tests/expected/json/example20.json b/tests/expected/json/example20.json
deleted file mode 100644
index facdd89..0000000
--- a/tests/expected/json/example20.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"t_before","args":[{"property":"built"},{"date":"2015-01-01"}]}
diff --git a/tests/expected/json/example20.txt b/tests/expected/json/example20.txt
deleted file mode 100644
index dc901d8..0000000
--- a/tests/expected/json/example20.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-t_before("built", DATE('2015-01-01'))
diff --git a/tests/expected/json/example21.json b/tests/expected/json/example21.json
deleted file mode 100644
index 34d7afe..0000000
--- a/tests/expected/json/example21.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"t_after","args":[{"property":"built"},{"date":"2012-06-05"}]}
diff --git a/tests/expected/json/example21.txt b/tests/expected/json/example21.txt
deleted file mode 100644
index d16a195..0000000
--- a/tests/expected/json/example21.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-t_after("built", DATE('2012-06-05'))
diff --git a/tests/expected/json/example22.json b/tests/expected/json/example22.json
deleted file mode 100644
index 23d224e..0000000
--- a/tests/expected/json/example22.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"t_during","args":[{"interval":[{"property":"starts_at"},{"property":"ends_at"}]},{"interval":["2017-06-10T07:30:00Z","2017-06-11T10:30:00Z"]}]}
diff --git a/tests/expected/json/example22.txt b/tests/expected/json/example22.txt
deleted file mode 100644
index 01aab7d..0000000
--- a/tests/expected/json/example22.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-t_during(INTERVAL("starts_at","ends_at"), INTERVAL('2017-06-10T07:30:00Z','2017-06-11T10:30:00Z'))
diff --git a/tests/expected/json/example23.json b/tests/expected/json/example23.json
deleted file mode 100644
index c49dfa4..0000000
--- a/tests/expected/json/example23.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"s_within","args":[{"property":"location"},{"bbox":[-118.0,33.8,-117.9,34.0]}]}
diff --git a/tests/expected/json/example23.txt b/tests/expected/json/example23.txt
deleted file mode 100644
index 83c1598..0000000
--- a/tests/expected/json/example23.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-s_within("location", BBOX(-118, 33.8, -117.9, 34))
diff --git a/tests/expected/json/example24.json b/tests/expected/json/example24.json
deleted file mode 100644
index 647b084..0000000
--- a/tests/expected/json/example24.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"s_intersects","args":[{"property":"geometry"},{"type":"Polygon","coordinates":[[[-10.0,-10.0],[10.0,-10.0],[10.0,10.0],[-10.0,-10.0]]]}]}
diff --git a/tests/expected/json/example24.txt b/tests/expected/json/example24.txt
deleted file mode 100644
index c895573..0000000
--- a/tests/expected/json/example24.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-s_intersects("geometry", POLYGON((-10 -10,10 -10,10 10,-10 -10)))
diff --git a/tests/expected/json/example25.json b/tests/expected/json/example25.json
deleted file mode 100644
index 5a597a6..0000000
--- a/tests/expected/json/example25.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"and","args":[{"op":">","args":[{"property":"floors"},5.0]},{"op":"s_within","args":[{"property":"geometry"},{"bbox":[-118.0,33.8,-117.9,34.0]}]}]}
diff --git a/tests/expected/json/example25.txt b/tests/expected/json/example25.txt
deleted file mode 100644
index 28acd26..0000000
--- a/tests/expected/json/example25.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-(("floors" > 5) AND s_within("geometry", BBOX(-118, 33.8, -117.9, 34)))
diff --git a/tests/expected/json/example26.txt b/tests/expected/json/example26.txt
deleted file mode 100644
index cf16575..0000000
--- a/tests/expected/json/example26.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-in(casei("road_class"), (casei('Οδος'), casei('Straße')))
diff --git a/tests/expected/json/example27.txt b/tests/expected/json/example27.txt
deleted file mode 100644
index 2899d9e..0000000
--- a/tests/expected/json/example27.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-(accenti("etat_vol") = accenti('débárquér'))
diff --git a/tests/expected/json/example28.json b/tests/expected/json/example28.json
deleted file mode 100644
index cf06616..0000000
--- a/tests/expected/json/example28.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"like","args":[{"op":"casei","args":[{"property":"geophys:SURVEY_NAME"}]},{"op":"casei","args":["%calcutta%"]}]}
diff --git a/tests/expected/json/example28.txt b/tests/expected/json/example28.txt
deleted file mode 100644
index 8e9d36a..0000000
--- a/tests/expected/json/example28.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-like(casei("geophys:SURVEY_NAME"), casei('%calcutta%'))
diff --git a/tests/expected/json/example29.json b/tests/expected/json/example29.json
deleted file mode 100644
index a6d759e..0000000
--- a/tests/expected/json/example29.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"=","args":[{"property":"id"},"fa7e1920-9107-422d-a3db-c468cbc5d6df"]}
diff --git a/tests/expected/json/example29.txt b/tests/expected/json/example29.txt
deleted file mode 100644
index 80f33e9..0000000
--- a/tests/expected/json/example29.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-("id" = 'fa7e1920-9107-422d-a3db-c468cbc5d6df')
diff --git a/tests/expected/json/example30.json b/tests/expected/json/example30.json
deleted file mode 100644
index 55c1252..0000000
--- a/tests/expected/json/example30.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"<>","args":[{"property":"id"},"fa7e1920-9107-422d-a3db-c468cbc5d6df"]}
diff --git a/tests/expected/json/example30.txt b/tests/expected/json/example30.txt
deleted file mode 100644
index 0578a6f..0000000
--- a/tests/expected/json/example30.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-("id" <> 'fa7e1920-9107-422d-a3db-c468cbc5d6df')
diff --git a/tests/expected/json/example31.txt b/tests/expected/json/example31.txt
deleted file mode 100644
index d65390e..0000000
--- a/tests/expected/json/example31.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-("value" < 10)
diff --git a/tests/expected/json/example32.txt b/tests/expected/json/example32.txt
deleted file mode 100644
index a89adf5..0000000
--- a/tests/expected/json/example32.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-("value" > 10)
diff --git a/tests/expected/json/example33.txt b/tests/expected/json/example33.txt
deleted file mode 100644
index 43f85fc..0000000
--- a/tests/expected/json/example33.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-("value" <= 10)
diff --git a/tests/expected/json/example34.txt b/tests/expected/json/example34.txt
deleted file mode 100644
index c822d1b..0000000
--- a/tests/expected/json/example34.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-("value" >= 10)
diff --git a/tests/expected/json/example35.txt b/tests/expected/json/example35.txt
deleted file mode 100644
index ace7a16..0000000
--- a/tests/expected/json/example35.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-like("name", 'foo%')
diff --git a/tests/expected/json/example36.txt b/tests/expected/json/example36.txt
deleted file mode 100644
index 2dc6954..0000000
--- a/tests/expected/json/example36.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-(NOT like("name", 'foo%'))
diff --git a/tests/expected/json/example37.txt b/tests/expected/json/example37.txt
deleted file mode 100644
index 3c7e2d9..0000000
--- a/tests/expected/json/example37.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-("value" BETWEEN 10 AND 20)
diff --git a/tests/expected/json/example38.txt b/tests/expected/json/example38.txt
deleted file mode 100644
index ea5ce7d..0000000
--- a/tests/expected/json/example38.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-(NOT ("value" BETWEEN 10 AND 20))
diff --git a/tests/expected/json/example39.txt b/tests/expected/json/example39.txt
deleted file mode 100644
index a5e9ecd..0000000
--- a/tests/expected/json/example39.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-in("value", (1, 2, 3))
diff --git a/tests/expected/json/example40.txt b/tests/expected/json/example40.txt
deleted file mode 100644
index 9f12f73..0000000
--- a/tests/expected/json/example40.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-(NOT in("value", ('a', 'b', 'c')))
diff --git a/tests/expected/json/example41.txt b/tests/expected/json/example41.txt
deleted file mode 100644
index 31a61df..0000000
--- a/tests/expected/json/example41.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-isNull("value")
diff --git a/tests/expected/json/example42-alt01.json b/tests/expected/json/example42-alt01.json
deleted file mode 100644
index 565934d..0000000
--- a/tests/expected/json/example42-alt01.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"isNull","args":[{"property":"value"}]}
diff --git a/tests/expected/json/example42.txt b/tests/expected/json/example42.txt
deleted file mode 100644
index a8e0524..0000000
--- a/tests/expected/json/example42.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-(NOT isNull("value"))
diff --git a/tests/expected/json/example43.txt b/tests/expected/json/example43.txt
deleted file mode 100644
index 2ca4815..0000000
--- a/tests/expected/json/example43.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-((NOT like("name", 'foo%')) AND ("value" > 10))
diff --git a/tests/expected/json/example44.txt b/tests/expected/json/example44.txt
deleted file mode 100644
index e6a1ef6..0000000
--- a/tests/expected/json/example44.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-(isNull("value") OR ("value" BETWEEN 10 AND 20))
diff --git a/tests/expected/json/example45.json b/tests/expected/json/example45.json
deleted file mode 100644
index aef9d64..0000000
--- a/tests/expected/json/example45.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"s_intersects","args":[{"property":"geometry"},{"bbox":[-128.098193,-1.1,-99999.0,180.0,90.0,100000.0]}]}
diff --git a/tests/expected/json/example45.txt b/tests/expected/json/example45.txt
deleted file mode 100644
index 759d6e8..0000000
--- a/tests/expected/json/example45.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-s_intersects("geometry", BBOX(-128.098193, -1.1, -99999, 180, 90, 100000))
diff --git a/tests/expected/json/example46-alt01.json b/tests/expected/json/example46-alt01.json
deleted file mode 100644
index f887385..0000000
--- a/tests/expected/json/example46-alt01.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"s_equals","args":[{"type":"Polygon","coordinates":[[[-0.333333,89],[-102.723546,-0.5],[-179,-89],[-1.9,89],[-0.0,89],[2.00001,-1.9],[-0.333333,89]]]},{"property":"geometry"}]}
diff --git a/tests/expected/json/example46.json b/tests/expected/json/example46.json
deleted file mode 100644
index 3e4574b..0000000
--- a/tests/expected/json/example46.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"s_equals","args":[{"type":"Polygon","coordinates":[[[-0.333333,89.0],[-102.723546,-0.5],[-179.0,-89.0],[-1.9,89.0],[-0.0,89.0],[2.00001,-1.9],[-0.333333,89.0]]]},{"property":"geometry"}]}
diff --git a/tests/expected/json/example46.txt b/tests/expected/json/example46.txt
deleted file mode 100644
index bb9567f..0000000
--- a/tests/expected/json/example46.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-s_equals(POLYGON((-0.333333 89,-102.723546 -0.5,-179 -89,-1.9 89,-0 89,2.00001 -1.9,-0.333333 89)), "geometry")
diff --git a/tests/expected/json/example47.json b/tests/expected/json/example47.json
deleted file mode 100644
index f8ab5ae..0000000
--- a/tests/expected/json/example47.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"s_disjoint","args":[{"property":"geometry"},{"type":"MultiPolygon","coordinates":[[[[144.022387,45.176126],[-1.1,0.0],[180.0,47.808086],[144.022387,45.176126]]]]}]}
diff --git a/tests/expected/json/example47.txt b/tests/expected/json/example47.txt
deleted file mode 100644
index 0f33e66..0000000
--- a/tests/expected/json/example47.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-s_disjoint("geometry", MULTIPOLYGON(((144.022387 45.176126,-1.1 0,180 47.808086,144.022387 45.176126))))
diff --git a/tests/expected/json/example48.json b/tests/expected/json/example48.json
deleted file mode 100644
index acaa6d0..0000000
--- a/tests/expected/json/example48.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"s_touches","args":[{"property":"geometry"},{"type":"MultiLineString","coordinates":[[[-1.9,-0.99999],[75.292574,1.5],[-0.5,-4.016458],[-31.708594,-74.743801],[179.0,-90.0]],[[-1.9,-1.1],[1.5,8.547371]]]}]}
diff --git a/tests/expected/json/example48.txt b/tests/expected/json/example48.txt
deleted file mode 100644
index 70b9299..0000000
--- a/tests/expected/json/example48.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-s_touches("geometry", MULTILINESTRING((-1.9 -0.99999,75.292574 1.5,-0.5 -4.016458,-31.708594 -74.743801,179 -90),(-1.9 -1.1,1.5 8.547371)))
diff --git a/tests/expected/json/example49-alt01.json b/tests/expected/json/example49-alt01.json
deleted file mode 100644
index 347a400..0000000
--- a/tests/expected/json/example49-alt01.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"s_within","args":[{"type":"Polygon","coordinates":[[[-49.88024,0.5],[-1.5,-0.99999],[0,0.5],[-49.88024,0.5]],[[-65.887123,2.00001],[0.333333,-53.017711],[180,0],[-65.887123,2.00001]]]},{"property":"geometry"}]}
diff --git a/tests/expected/json/example49.json b/tests/expected/json/example49.json
deleted file mode 100644
index 3c32691..0000000
--- a/tests/expected/json/example49.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"s_within","args":[{"type":"Polygon","coordinates":[[[-49.88024,0.5,-75993.341684],[-1.5,-0.99999,-100000.0],[0.0,0.5,-0.333333],[-49.88024,0.5,-75993.341684]],[[-65.887123,2.00001,-100000.0],[0.333333,-53.017711,-79471.332949],[180.0,0.0,1852.616704],[-65.887123,2.00001,-100000.0]]]},{"property":"geometry"}]}
diff --git a/tests/expected/json/example49.txt b/tests/expected/json/example49.txt
deleted file mode 100644
index 566c287..0000000
--- a/tests/expected/json/example49.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-s_within(POLYGON((-49.88024 0.5,-1.5 -0.99999,0 0.5,-49.88024 0.5),(-65.887123 2.00001,0.333333 -53.017711,180 0,-65.887123 2.00001)), "geometry")
diff --git a/tests/expected/json/example50.json b/tests/expected/json/example50.json
deleted file mode 100644
index c7f5021..0000000
--- a/tests/expected/json/example50.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"s_overlaps","args":[{"property":"geometry"},{"bbox":[-179.912109,1.9,180.0,16.897016]}]}
diff --git a/tests/expected/json/example50.txt b/tests/expected/json/example50.txt
deleted file mode 100644
index f23035b..0000000
--- a/tests/expected/json/example50.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-s_overlaps("geometry", BBOX(-179.912109, 1.9, 180, 16.897016))
diff --git a/tests/expected/json/example51.json b/tests/expected/json/example51.json
deleted file mode 100644
index a1b90f1..0000000
--- a/tests/expected/json/example51.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"s_crosses","args":[{"property":"geometry"},{"type":"LineString","coordinates":[[172.03086,1.5],[1.1,-90.0],[-159.757695,0.99999],[-180.0,0.5],[-12.111235,81.336403],[-0.5,64.43958],[0.0,81.991815],[-155.93831,90.0]]}]}
diff --git a/tests/expected/json/example51.txt b/tests/expected/json/example51.txt
deleted file mode 100644
index 43f9619..0000000
--- a/tests/expected/json/example51.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-s_crosses("geometry", LINESTRING(172.03086 1.5,1.1 -90,-159.757695 0.99999,-180 0.5,-12.111235 81.336403,-0.5 64.43958,0 81.991815,-155.93831 90))
diff --git a/tests/expected/json/example52.txt b/tests/expected/json/example52.txt
deleted file mode 100644
index d970c3f..0000000
--- a/tests/expected/json/example52.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-s_contains("geometry", POINT(-3.508362 -1.754181))
diff --git a/tests/expected/json/example53.json b/tests/expected/json/example53.json
deleted file mode 100644
index d80d04b..0000000
--- a/tests/expected/json/example53.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"t_after","args":[{"property":"updated_at"},{"date":"2010-02-10"}]}
diff --git a/tests/expected/json/example53.txt b/tests/expected/json/example53.txt
deleted file mode 100644
index d6a5f63..0000000
--- a/tests/expected/json/example53.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-t_after("updated_at", DATE('2010-02-10'))
diff --git a/tests/expected/json/example54-alt01.json b/tests/expected/json/example54-alt01.json
deleted file mode 100644
index 236abaf..0000000
--- a/tests/expected/json/example54-alt01.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"t_before","args":[{"property":"updated_at"},{"timestamp":"2012-08-10T05:30:00Z"}]}
diff --git a/tests/expected/json/example54.json b/tests/expected/json/example54.json
deleted file mode 100644
index 236abaf..0000000
--- a/tests/expected/json/example54.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"t_before","args":[{"property":"updated_at"},{"timestamp":"2012-08-10T05:30:00Z"}]}
diff --git a/tests/expected/json/example54.txt b/tests/expected/json/example54.txt
deleted file mode 100644
index 68b5d2f..0000000
--- a/tests/expected/json/example54.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-t_before("updated_at", TIMESTAMP('2012-08-10T05:30:00Z'))
diff --git a/tests/expected/json/example55-alt01.json b/tests/expected/json/example55-alt01.json
deleted file mode 100644
index 66c10b7..0000000
--- a/tests/expected/json/example55-alt01.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"t_contains","args":[{"interval":["2000-01-01T00:00:00Z","2005-01-10T01:01:01.393216Z"]},{"interval":[{"property":"starts_at"},{"property":"ends_at"}]}]}
diff --git a/tests/expected/json/example55.json b/tests/expected/json/example55.json
deleted file mode 100644
index 66c10b7..0000000
--- a/tests/expected/json/example55.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"t_contains","args":[{"interval":["2000-01-01T00:00:00Z","2005-01-10T01:01:01.393216Z"]},{"interval":[{"property":"starts_at"},{"property":"ends_at"}]}]}
diff --git a/tests/expected/json/example55.txt b/tests/expected/json/example55.txt
deleted file mode 100644
index 0d38bb8..0000000
--- a/tests/expected/json/example55.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-t_contains(INTERVAL('2000-01-01T00:00:00Z','2005-01-10T01:01:01.393216Z'), INTERVAL("starts_at","ends_at"))
diff --git a/tests/expected/json/example56.json b/tests/expected/json/example56.json
deleted file mode 100644
index faf8fe7..0000000
--- a/tests/expected/json/example56.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"t_disjoint","args":[{"interval":["..","2005-01-10T01:01:01.393216Z"]},{"interval":[{"property":"starts_at"},{"property":"ends_at"}]}]}
diff --git a/tests/expected/json/example56.txt b/tests/expected/json/example56.txt
deleted file mode 100644
index 3e8e4f4..0000000
--- a/tests/expected/json/example56.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-t_disjoint(INTERVAL('..','2005-01-10T01:01:01.393216Z'), INTERVAL("starts_at","ends_at"))
diff --git a/tests/expected/json/example57.json b/tests/expected/json/example57.json
deleted file mode 100644
index 4d96d5a..0000000
--- a/tests/expected/json/example57.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"t_during","args":[{"interval":[{"property":"starts_at"},{"property":"ends_at"}]},{"interval":["2005-01-10","2010-02-10"]}]}
diff --git a/tests/expected/json/example57.txt b/tests/expected/json/example57.txt
deleted file mode 100644
index 3ece6c7..0000000
--- a/tests/expected/json/example57.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-t_during(INTERVAL("starts_at","ends_at"), INTERVAL('2005-01-10','2010-02-10'))
diff --git a/tests/expected/json/example58.json b/tests/expected/json/example58.json
deleted file mode 100644
index 5c28290..0000000
--- a/tests/expected/json/example58.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"t_equals","args":[{"property":"updated_at"},{"date":"1851-04-29"}]}
diff --git a/tests/expected/json/example58.txt b/tests/expected/json/example58.txt
deleted file mode 100644
index eca6a7f..0000000
--- a/tests/expected/json/example58.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-t_equals("updated_at", DATE('1851-04-29'))
diff --git a/tests/expected/json/example59.json b/tests/expected/json/example59.json
deleted file mode 100644
index c38432f..0000000
--- a/tests/expected/json/example59.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"t_finishedBy","args":[{"interval":[{"property":"starts_at"},{"property":"ends_at"}]},{"interval":["1991-10-07T08:21:06.393262Z","2010-02-10T05:29:20.073225Z"]}]}
diff --git a/tests/expected/json/example59.txt b/tests/expected/json/example59.txt
deleted file mode 100644
index a605c7d..0000000
--- a/tests/expected/json/example59.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-t_finishedBy(INTERVAL("starts_at","ends_at"), INTERVAL('1991-10-07T08:21:06.393262Z','2010-02-10T05:29:20.073225Z'))
diff --git a/tests/expected/json/example60.json b/tests/expected/json/example60.json
deleted file mode 100644
index b4baaad..0000000
--- a/tests/expected/json/example60.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"t_finishes","args":[{"interval":[{"property":"starts_at"},{"property":"ends_at"}]},{"interval":["1991-10-07","2010-02-10T05:29:20.073225Z"]}]}
diff --git a/tests/expected/json/example60.txt b/tests/expected/json/example60.txt
deleted file mode 100644
index 1623e78..0000000
--- a/tests/expected/json/example60.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-t_finishes(INTERVAL("starts_at","ends_at"), INTERVAL('1991-10-07','2010-02-10T05:29:20.073225Z'))
diff --git a/tests/expected/json/example61.json b/tests/expected/json/example61.json
deleted file mode 100644
index 0bc2a8f..0000000
--- a/tests/expected/json/example61.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"t_intersects","args":[{"interval":[{"property":"starts_at"},{"property":"ends_at"}]},{"interval":["1991-10-07T08:21:06.393262Z","2010-02-10T05:29:20.073225Z"]}]}
diff --git a/tests/expected/json/example61.txt b/tests/expected/json/example61.txt
deleted file mode 100644
index 3991a60..0000000
--- a/tests/expected/json/example61.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-t_intersects(INTERVAL("starts_at","ends_at"), INTERVAL('1991-10-07T08:21:06.393262Z','2010-02-10T05:29:20.073225Z'))
diff --git a/tests/expected/json/example62.json b/tests/expected/json/example62.json
deleted file mode 100644
index b97c114..0000000
--- a/tests/expected/json/example62.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"t_meets","args":[{"interval":["2005-01-10","2010-02-10"]},{"interval":[{"property":"starts_at"},{"property":"ends_at"}]}]}
diff --git a/tests/expected/json/example62.txt b/tests/expected/json/example62.txt
deleted file mode 100644
index 09c0680..0000000
--- a/tests/expected/json/example62.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-t_meets(INTERVAL('2005-01-10','2010-02-10'), INTERVAL("starts_at","ends_at"))
diff --git a/tests/expected/json/example63.json b/tests/expected/json/example63.json
deleted file mode 100644
index 8e3aa82..0000000
--- a/tests/expected/json/example63.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"t_metBy","args":[{"interval":["2010-02-10T05:29:20.073225Z","2010-10-07"]},{"interval":[{"property":"starts_at"},{"property":"ends_at"}]}]}
diff --git a/tests/expected/json/example63.txt b/tests/expected/json/example63.txt
deleted file mode 100644
index 25166d3..0000000
--- a/tests/expected/json/example63.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-t_metBy(INTERVAL('2010-02-10T05:29:20.073225Z','2010-10-07'), INTERVAL("starts_at","ends_at"))
diff --git a/tests/expected/json/example64.json b/tests/expected/json/example64.json
deleted file mode 100644
index ec45400..0000000
--- a/tests/expected/json/example64.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"t_overlappedBy","args":[{"interval":["1991-10-07T08:21:06.393262Z","2010-02-10T05:29:20.073225Z"]},{"interval":[{"property":"starts_at"},{"property":"ends_at"}]}]}
diff --git a/tests/expected/json/example64.txt b/tests/expected/json/example64.txt
deleted file mode 100644
index 7552b48..0000000
--- a/tests/expected/json/example64.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-t_overlappedBy(INTERVAL('1991-10-07T08:21:06.393262Z','2010-02-10T05:29:20.073225Z'), INTERVAL("starts_at","ends_at"))
diff --git a/tests/expected/json/example65.json b/tests/expected/json/example65.json
deleted file mode 100644
index 4d90a9b..0000000
--- a/tests/expected/json/example65.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"t_overlaps","args":[{"interval":[{"property":"starts_at"},{"property":"ends_at"}]},{"interval":["1991-10-07T08:21:06.393262Z","1992-10-09T08:08:08.393473Z"]}]}
diff --git a/tests/expected/json/example65.txt b/tests/expected/json/example65.txt
deleted file mode 100644
index 9555c86..0000000
--- a/tests/expected/json/example65.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-t_overlaps(INTERVAL("starts_at","ends_at"), INTERVAL('1991-10-07T08:21:06.393262Z','1992-10-09T08:08:08.393473Z'))
diff --git a/tests/expected/json/example66.json b/tests/expected/json/example66.json
deleted file mode 100644
index c915800..0000000
--- a/tests/expected/json/example66.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"t_startedBy","args":[{"interval":["1991-10-07T08:21:06.393262Z","2010-02-10T05:29:20.073225Z"]},{"interval":[{"property":"starts_at"},{"property":"ends_at"}]}]}
diff --git a/tests/expected/json/example66.txt b/tests/expected/json/example66.txt
deleted file mode 100644
index b02ad02..0000000
--- a/tests/expected/json/example66.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-t_startedBy(INTERVAL('1991-10-07T08:21:06.393262Z','2010-02-10T05:29:20.073225Z'), INTERVAL("starts_at","ends_at"))
diff --git a/tests/expected/json/example67.json b/tests/expected/json/example67.json
deleted file mode 100644
index 7087df4..0000000
--- a/tests/expected/json/example67.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"t_starts","args":[{"interval":[{"property":"starts_at"},{"property":"ends_at"}]},{"interval":["1991-10-07T08:21:06.393262Z",".."]}]}
diff --git a/tests/expected/json/example67.txt b/tests/expected/json/example67.txt
deleted file mode 100644
index d1686e8..0000000
--- a/tests/expected/json/example67.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-t_starts(INTERVAL("starts_at","ends_at"), INTERVAL('1991-10-07T08:21:06.393262Z','..'))
diff --git a/tests/expected/json/example68.json b/tests/expected/json/example68.json
deleted file mode 100644
index 2f66a6a..0000000
--- a/tests/expected/json/example68.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"=","args":[{"op":"Foo","args":[{"property":"geometry"}]},true]}
diff --git a/tests/expected/json/example68.txt b/tests/expected/json/example68.txt
deleted file mode 100644
index 5fa4c46..0000000
--- a/tests/expected/json/example68.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-(Foo("geometry") = true)
diff --git a/tests/expected/json/example69.json b/tests/expected/json/example69.json
deleted file mode 100644
index 0e6c6ac..0000000
--- a/tests/expected/json/example69.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"<>","args":[false,{"op":"Bar","args":[{"property":"geometry"},100.0,"a","b",false]}]}
diff --git a/tests/expected/json/example69.txt b/tests/expected/json/example69.txt
deleted file mode 100644
index 90e5559..0000000
--- a/tests/expected/json/example69.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-(false <> Bar("geometry", 100, 'a', 'b', false))
diff --git a/tests/expected/json/example70.txt b/tests/expected/json/example70.txt
deleted file mode 100644
index 814053a..0000000
--- a/tests/expected/json/example70.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-(accenti("owner") = accenti('Beyoncé'))
diff --git a/tests/expected/json/example71.txt b/tests/expected/json/example71.txt
deleted file mode 100644
index 86fa908..0000000
--- a/tests/expected/json/example71.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-(casei("owner") = casei('somebody else'))
diff --git a/tests/expected/json/example72.txt b/tests/expected/json/example72.txt
deleted file mode 100644
index 645c50e..0000000
--- a/tests/expected/json/example72.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-("value" > ("foo" + 10))
diff --git a/tests/expected/json/example73.txt b/tests/expected/json/example73.txt
deleted file mode 100644
index 5ebc664..0000000
--- a/tests/expected/json/example73.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-("value" < ("foo" - 10))
diff --git a/tests/expected/json/example74.txt b/tests/expected/json/example74.txt
deleted file mode 100644
index a13f3c6..0000000
--- a/tests/expected/json/example74.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-("value" <> (22.1 * "foo"))
diff --git a/tests/expected/json/example75.txt b/tests/expected/json/example75.txt
deleted file mode 100644
index 63b6f5c..0000000
--- a/tests/expected/json/example75.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-("value" = (2 / "foo"))
diff --git a/tests/expected/json/example76.txt b/tests/expected/json/example76.txt
deleted file mode 100644
index 7bb0e19..0000000
--- a/tests/expected/json/example76.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-("value" <= (2 ^ "foo"))
diff --git a/tests/expected/json/example77.json b/tests/expected/json/example77.json
deleted file mode 100644
index 1af0d17..0000000
--- a/tests/expected/json/example77.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"=","args":[0.0,{"op":"%","args":[{"property":"foo"},2.0]}]}
diff --git a/tests/expected/json/example77.txt b/tests/expected/json/example77.txt
deleted file mode 100644
index 65652b2..0000000
--- a/tests/expected/json/example77.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-(0 = ("foo" % 2))
diff --git a/tests/expected/json/example78.txt b/tests/expected/json/example78.txt
deleted file mode 100644
index 35cb1e9..0000000
--- a/tests/expected/json/example78.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-(1 = div("foo", 2))
diff --git a/tests/expected/json/example79.json b/tests/expected/json/example79.json
deleted file mode 100644
index 1e64eaa..0000000
--- a/tests/expected/json/example79.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"a_containedBy","args":[{"property":"values"},["a","b","c"]]}
diff --git a/tests/expected/json/example79.txt b/tests/expected/json/example79.txt
deleted file mode 100644
index 55a4224..0000000
--- a/tests/expected/json/example79.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-a_containedBy("values", ('a', 'b', 'c'))
diff --git a/tests/expected/json/example80.json b/tests/expected/json/example80.json
deleted file mode 100644
index 92709df..0000000
--- a/tests/expected/json/example80.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"a_contains","args":[{"property":"values"},["a","b","c"]]}
diff --git a/tests/expected/json/example80.txt b/tests/expected/json/example80.txt
deleted file mode 100644
index 499551b..0000000
--- a/tests/expected/json/example80.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-a_contains("values", ('a', 'b', 'c'))
diff --git a/tests/expected/json/example81.json b/tests/expected/json/example81.json
deleted file mode 100644
index e92d98c..0000000
--- a/tests/expected/json/example81.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"a_equals","args":[["a",true,1.0,8.0],{"property":"values"}]}
diff --git a/tests/expected/json/example81.txt b/tests/expected/json/example81.txt
deleted file mode 100644
index 0183818..0000000
--- a/tests/expected/json/example81.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-a_equals(('a', true, 1, 8), "values")
diff --git a/tests/expected/json/example82.json b/tests/expected/json/example82.json
deleted file mode 100644
index ea8416a..0000000
--- a/tests/expected/json/example82.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"a_overlaps","args":[{"property":"values"},[{"timestamp":"2012-08-10T05:30:00Z"},{"date":"2010-02-10"},false]]}
diff --git a/tests/expected/json/example82.txt b/tests/expected/json/example82.txt
deleted file mode 100644
index 3920190..0000000
--- a/tests/expected/json/example82.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-a_overlaps("values", (TIMESTAMP('2012-08-10T05:30:00Z'), DATE('2010-02-10'), false))
diff --git a/tests/expected/json/example83.json b/tests/expected/json/example83.json
deleted file mode 100644
index 8cd0d1b..0000000
--- a/tests/expected/json/example83.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"s_equals","args":[{"type":"MultiPoint","coordinates":[[180.0,-0.5],[179.0,-47.121701],[180.0,-0.0],[33.470475,-0.99999],[179.0,-15.333062]]},{"property":"geometry"}]}
diff --git a/tests/expected/json/example83.txt b/tests/expected/json/example83.txt
deleted file mode 100644
index 680973f..0000000
--- a/tests/expected/json/example83.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-s_equals(MULTIPOINT(180 -0.5,179 -47.121701,180 -0,33.470475 -0.99999,179 -15.333062), "geometry")
diff --git a/tests/expected/json/example84.json b/tests/expected/json/example84.json
deleted file mode 100644
index 475c6e4..0000000
--- a/tests/expected/json/example84.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"s_equals","args":[{"type":"GeometryCollection","geometries":[{"type":"Point","coordinates":[1.9,2.00001]},{"type":"Point","coordinates":[0.0,-2.00001]},{"type":"MultiLineString","coordinates":[[[-2.00001,-0.0],[-77.292642,-0.5],[-87.515626,-0.0],[-180.0,12.502773],[21.204842,-1.5],[-21.878857,-90.0]]]},{"type":"Point","coordinates":[1.9,0.5]},{"type":"LineString","coordinates":[[179.0,1.179148],[-148.192487,-65.007816],[0.5,0.333333]]}]},{"property":"geometry"}]}
diff --git a/tests/expected/json/example84.txt b/tests/expected/json/example84.txt
deleted file mode 100644
index 894380d..0000000
--- a/tests/expected/json/example84.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-s_equals(GEOMETRYCOLLECTION(POINT(1.9 2.00001),POINT(0 -2.00001),MULTILINESTRING((-2.00001 -0,-77.292642 -0.5,-87.515626 -0,-180 12.502773,21.204842 -1.5,-21.878857 -90)),POINT(1.9 0.5),LINESTRING(179 1.179148,-148.192487 -65.007816,0.5 0.333333)), "geometry")
diff --git a/tests/expected/json/example85.json b/tests/expected/json/example85.json
deleted file mode 100644
index 13b9703..0000000
--- a/tests/expected/json/example85.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"=","args":[{"property":"value"},{"op":"-","args":[{"op":"+","args":[{"op":"*","args":[{"op":"*","args":[-1.0,{"property":"foo"}]},2.0]},{"op":"/","args":[{"property":"bar"},6.1234]}]},{"op":"^","args":[{"property":"x"},2.0]}]}]}
diff --git a/tests/expected/json/example85.txt b/tests/expected/json/example85.txt
deleted file mode 100644
index fe6f575..0000000
--- a/tests/expected/json/example85.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-("value" = ((((-1 * "foo") * 2) + ("bar" / 6.1234)) - ("x" ^ 2)))
diff --git a/tests/expected/json/example86.txt b/tests/expected/json/example86.txt
deleted file mode 100644
index e648cfc..0000000
--- a/tests/expected/json/example86.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-like("name", casei('FOO%'))
diff --git a/tests/expected/text/clause6_01.json b/tests/expected/text/clause6_01.json
deleted file mode 100644
index fe3290a..0000000
--- a/tests/expected/text/clause6_01.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"avg","args":[{"property":"windSpeed"}]}
diff --git a/tests/expected/text/clause6_01.txt b/tests/expected/text/clause6_01.txt
deleted file mode 100644
index 7da7915..0000000
--- a/tests/expected/text/clause6_01.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-avg("windSpeed")
diff --git a/tests/expected/text/clause6_02a.txt b/tests/expected/text/clause6_02a.txt
deleted file mode 100644
index 9eadc2d..0000000
--- a/tests/expected/text/clause6_02a.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-("city" = 'Toronto')
diff --git a/tests/expected/text/clause6_02b.json b/tests/expected/text/clause6_02b.json
deleted file mode 100644
index 7f5a3ea..0000000
--- a/tests/expected/text/clause6_02b.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"<","args":[{"op":"avg","args":[{"property":"windSpeed"}]},4.0]}
diff --git a/tests/expected/text/clause6_02b.txt b/tests/expected/text/clause6_02b.txt
deleted file mode 100644
index 8e74c1c..0000000
--- a/tests/expected/text/clause6_02b.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-(avg("windSpeed") < 4)
diff --git a/tests/expected/text/clause6_02c.json b/tests/expected/text/clause6_02c.json
deleted file mode 100644
index 9f04c8b..0000000
--- a/tests/expected/text/clause6_02c.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":">","args":[{"op":"-","args":[{"property":"balance"},150.0]},0.0]}
diff --git a/tests/expected/text/clause6_02c.txt b/tests/expected/text/clause6_02c.txt
deleted file mode 100644
index 04a3306..0000000
--- a/tests/expected/text/clause6_02c.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-(("balance" - 150) > 0)
diff --git a/tests/expected/text/clause6_02d.json b/tests/expected/text/clause6_02d.json
deleted file mode 100644
index 87d2bd3..0000000
--- a/tests/expected/text/clause6_02d.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":">=","args":[{"property":"updated"},{"date":"1970-01-01"}]}
diff --git a/tests/expected/text/clause6_02d.txt b/tests/expected/text/clause6_02d.txt
deleted file mode 100644
index 652b385..0000000
--- a/tests/expected/text/clause6_02d.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-("updated" >= DATE('1970-01-01'))
diff --git a/tests/expected/text/clause6_03.json b/tests/expected/text/clause6_03.json
deleted file mode 100644
index c5ae41c..0000000
--- a/tests/expected/text/clause6_03.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"isNull","args":[{"property":"geometry"}]}
diff --git a/tests/expected/text/clause6_03.txt b/tests/expected/text/clause6_03.txt
deleted file mode 100644
index 37bb3e2..0000000
--- a/tests/expected/text/clause6_03.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-isNull("geometry")
diff --git a/tests/expected/text/clause7_01.json b/tests/expected/text/clause7_01.json
deleted file mode 100644
index 2b121e5..0000000
--- a/tests/expected/text/clause7_01.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"like","args":[{"property":"name"},"Smith%"]}
diff --git a/tests/expected/text/clause7_01.txt b/tests/expected/text/clause7_01.txt
deleted file mode 100644
index 5775a98..0000000
--- a/tests/expected/text/clause7_01.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-like("name", 'Smith%')
diff --git a/tests/expected/text/clause7_02.json b/tests/expected/text/clause7_02.json
deleted file mode 100644
index 1493b69..0000000
--- a/tests/expected/text/clause7_02.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"between","args":[{"property":"depth"},100.0,150.0]}
diff --git a/tests/expected/text/clause7_02.txt b/tests/expected/text/clause7_02.txt
deleted file mode 100644
index 2ef194b..0000000
--- a/tests/expected/text/clause7_02.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-("depth" BETWEEN 100 AND 150)
diff --git a/tests/expected/text/clause7_03a.json b/tests/expected/text/clause7_03a.json
deleted file mode 100644
index 2e6269b..0000000
--- a/tests/expected/text/clause7_03a.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"in","args":[{"property":"cityName"},["Toronto","Frankfurt","Tokyo","New York"]]}
diff --git a/tests/expected/text/clause7_03a.txt b/tests/expected/text/clause7_03a.txt
deleted file mode 100644
index 2db8c38..0000000
--- a/tests/expected/text/clause7_03a.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-in("cityName", ('Toronto', 'Frankfurt', 'Tokyo', 'New York'))
diff --git a/tests/expected/text/clause7_03b.json b/tests/expected/text/clause7_03b.json
deleted file mode 100644
index 9bda911..0000000
--- a/tests/expected/text/clause7_03b.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"not","args":[{"op":"in","args":[{"property":"category"},[1.0,2.0,3.0,4.0]]}]}
diff --git a/tests/expected/text/clause7_03b.txt b/tests/expected/text/clause7_03b.txt
deleted file mode 100644
index d6823b3..0000000
--- a/tests/expected/text/clause7_03b.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-(NOT in("category", (1, 2, 3, 4)))
diff --git a/tests/expected/text/clause7_04.json b/tests/expected/text/clause7_04.json
deleted file mode 100644
index 918f401..0000000
--- a/tests/expected/text/clause7_04.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"in","args":[{"op":"casei","args":[{"property":"road_class"}]},[{"op":"casei","args":["Οδος"]},{"op":"casei","args":["Straße"]}]]}
diff --git a/tests/expected/text/clause7_04.txt b/tests/expected/text/clause7_04.txt
deleted file mode 100644
index cf16575..0000000
--- a/tests/expected/text/clause7_04.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-in(casei("road_class"), (casei('Οδος'), casei('Straße')))
diff --git a/tests/expected/text/clause7_05.json b/tests/expected/text/clause7_05.json
deleted file mode 100644
index 5903327..0000000
--- a/tests/expected/text/clause7_05.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"=","args":[{"op":"accenti","args":[{"property":"etat_vol"}]},{"op":"accenti","args":["débárquér"]}]}
diff --git a/tests/expected/text/clause7_05.txt b/tests/expected/text/clause7_05.txt
deleted file mode 100644
index 2899d9e..0000000
--- a/tests/expected/text/clause7_05.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-(accenti("etat_vol") = accenti('débárquér'))
diff --git a/tests/expected/text/clause7_07.json b/tests/expected/text/clause7_07.json
deleted file mode 100644
index 466c96e..0000000
--- a/tests/expected/text/clause7_07.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"s_intersects","args":[{"property":"geometry"},{"type":"Point","coordinates":[36.319836,32.288087]}]}
diff --git a/tests/expected/text/clause7_07.txt b/tests/expected/text/clause7_07.txt
deleted file mode 100644
index eeb90f9..0000000
--- a/tests/expected/text/clause7_07.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-s_intersects("geometry", POINT(36.319836 32.288087))
diff --git a/tests/expected/text/clause7_10.json b/tests/expected/text/clause7_10.json
deleted file mode 100644
index c71f5ff..0000000
--- a/tests/expected/text/clause7_10.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"s_crosses","args":[{"property":"road"},{"type":"Polygon","coordinates":[[[43.7286,-79.2986],[43.7311,-79.2996],[43.7323,-79.2972],[43.7326,-79.2971],[43.735,-79.2981],[43.735,-79.2982],[43.7352,-79.2982],[43.7357,-79.2956],[43.7337,-79.2948],[43.7343,-79.2933],[43.7339,-79.2923],[43.7327,-79.2947],[43.732,-79.2942],[43.7322,-79.2937],[43.7306,-79.293],[43.7303,-79.293],[43.7299,-79.2928],[43.7286,-79.2986]]]}]}
diff --git a/tests/expected/text/clause7_10.txt b/tests/expected/text/clause7_10.txt
deleted file mode 100644
index 26549b0..0000000
--- a/tests/expected/text/clause7_10.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-s_crosses("road", POLYGON((43.7286 -79.2986, 43.7311 -79.2996, 43.7323 -79.2972,
-                        43.7326 -79.2971, 43.7350 -79.2981, 43.7350 -79.2982,
-                        43.7352 -79.2982, 43.7357 -79.2956, 43.7337 -79.2948,
-                        43.7343 -79.2933, 43.7339 -79.2923, 43.7327 -79.2947,
-                        43.7320 -79.2942, 43.7322 -79.2937, 43.7306 -79.2930,
-                        43.7303 -79.2930, 43.7299 -79.2928, 43.7286 -79.2986)))
diff --git a/tests/expected/text/clause7_12.json b/tests/expected/text/clause7_12.json
deleted file mode 100644
index 281c144..0000000
--- a/tests/expected/text/clause7_12.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"t_intersects","args":[{"property":"event_time"},{"interval":["1969-07-16T05:32:00Z","1969-07-24T16:50:35Z"]}]}
diff --git a/tests/expected/text/clause7_12.txt b/tests/expected/text/clause7_12.txt
deleted file mode 100644
index 4dc5306..0000000
--- a/tests/expected/text/clause7_12.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-t_intersects("event_time", INTERVAL('1969-07-16T05:32:00Z','1969-07-24T16:50:35Z'))
diff --git a/tests/expected/text/clause7_13.json b/tests/expected/text/clause7_13.json
deleted file mode 100644
index 29d93dd..0000000
--- a/tests/expected/text/clause7_13.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"t_during","args":[{"interval":[{"property":"touchdown"},{"property":"liftOff"}]},{"interval":["1969-07-16T13:32:00Z","1969-07-24T16:50:35Z"]}]}
diff --git a/tests/expected/text/clause7_13.txt b/tests/expected/text/clause7_13.txt
deleted file mode 100644
index bb6c3dc..0000000
--- a/tests/expected/text/clause7_13.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-t_during(INTERVAL("touchdown","liftOff"), INTERVAL('1969-07-16T13:32:00Z','1969-07-24T16:50:35Z'))
diff --git a/tests/expected/text/clause7_15.json b/tests/expected/text/clause7_15.json
deleted file mode 100644
index c88bf36..0000000
--- a/tests/expected/text/clause7_15.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"a_contains","args":[{"property":"layer:ids"},["layers-ca","layers-us"]]}
diff --git a/tests/expected/text/clause7_15.txt b/tests/expected/text/clause7_15.txt
deleted file mode 100644
index 53d5bb4..0000000
--- a/tests/expected/text/clause7_15.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-a_contains("layer:ids", ('layers-ca', 'layers-us'))
diff --git a/tests/expected/text/clause7_16.json b/tests/expected/text/clause7_16.json
deleted file mode 100644
index 8b03b4c..0000000
--- a/tests/expected/text/clause7_16.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"s_crosses","args":[{"type":"LineString","coordinates":[[43.72992,-79.2998],[43.73005,-79.2991],[43.73006,-79.2984],[43.7314,-79.2956],[43.73259,-79.295],[43.73266,-79.2945],[43.7332,-79.2936],[43.73378,-79.2936],[43.73486,-79.2917]]},{"type":"Polygon","coordinates":[[[43.7286,-79.2986],[43.7311,-79.2996],[43.7323,-79.2972],[43.7326,-79.2971],[43.735,-79.2981],[43.735,-79.2982],[43.7352,-79.2982],[43.7357,-79.2956],[43.7337,-79.2948],[43.7343,-79.2933],[43.7339,-79.2923],[43.7327,-79.2947],[43.732,-79.2942],[43.7322,-79.2937],[43.7306,-79.293],[43.7303,-79.293],[43.7299,-79.2928],[43.7286,-79.2986]]]}]}
diff --git a/tests/expected/text/clause7_16.txt b/tests/expected/text/clause7_16.txt
deleted file mode 100644
index 995d226..0000000
--- a/tests/expected/text/clause7_16.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-s_crosses(LINESTRING(43.72992 -79.2998, 43.73005 -79.2991, 43.73006 -79.2984,
-                     43.73140 -79.2956, 43.73259 -79.2950, 43.73266 -79.2945,
-                     43.73320 -79.2936, 43.73378 -79.2936, 43.73486 -79.2917), POLYGON((43.7286 -79.2986, 43.7311 -79.2996, 43.7323 -79.2972, 43.7326 -79.2971,
-                 43.7350 -79.2981, 43.7350 -79.2982, 43.7352 -79.2982, 43.7357 -79.2956,
-                 43.7337 -79.2948, 43.7343 -79.2933, 43.7339 -79.2923, 43.7327 -79.2947,
-                 43.7320 -79.2942, 43.7322 -79.2937, 43.7306 -79.2930, 43.7303 -79.2930,
-                 43.7299 -79.2928, 43.7286 -79.2986)))
diff --git a/tests/expected/text/clause7_17.json b/tests/expected/text/clause7_17.json
deleted file mode 100644
index 325540c..0000000
--- a/tests/expected/text/clause7_17.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"t_during","args":[{"interval":["1969-07-20T20:17:40Z","1969-07-21T17:54:00Z"]},{"interval":["1969-07-16T13:32:00Z","1969-07-24T16:50:35Z"]}]}
diff --git a/tests/expected/text/clause7_17.txt b/tests/expected/text/clause7_17.txt
deleted file mode 100644
index 1a5313e..0000000
--- a/tests/expected/text/clause7_17.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-t_during(INTERVAL('1969-07-20T20:17:40Z','1969-07-21T17:54:00Z'), INTERVAL('1969-07-16T13:32:00Z','1969-07-24T16:50:35Z'))
diff --git a/tests/expected/text/clause7_18.txt b/tests/expected/text/clause7_18.txt
deleted file mode 100644
index a15b9a6..0000000
--- a/tests/expected/text/clause7_18.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-s_within("road", buffer("geometry", 10, 'm'))
diff --git a/tests/expected/text/clause7_19.json b/tests/expected/text/clause7_19.json
deleted file mode 100644
index a07993f..0000000
--- a/tests/expected/text/clause7_19.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":">","args":[{"property":"vehicle_height"},{"op":"-","args":[{"property":"bridge_clearance"},1.0]}]}
diff --git a/tests/expected/text/clause7_19.txt b/tests/expected/text/clause7_19.txt
deleted file mode 100644
index 2401b91..0000000
--- a/tests/expected/text/clause7_19.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-("vehicle_height" > ("bridge_clearance" - 1))
diff --git a/tests/expected/text/example01.json b/tests/expected/text/example01.json
deleted file mode 100644
index b5de01a..0000000
--- a/tests/expected/text/example01.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"=","args":[{"property":"landsat:scene_id"},"LC82030282019133LGN00"]}
diff --git a/tests/expected/text/example01.txt b/tests/expected/text/example01.txt
deleted file mode 100644
index 8ea0134..0000000
--- a/tests/expected/text/example01.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-("landsat:scene_id" = 'LC82030282019133LGN00')
diff --git a/tests/expected/text/example02.json b/tests/expected/text/example02.json
deleted file mode 100644
index 001ff68..0000000
--- a/tests/expected/text/example02.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"like","args":[{"property":"eo:instrument"},"OLI%"]}
diff --git a/tests/expected/text/example02.txt b/tests/expected/text/example02.txt
deleted file mode 100644
index c7b9388..0000000
--- a/tests/expected/text/example02.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-like("eo:instrument", 'OLI%')
diff --git a/tests/expected/text/example03.json b/tests/expected/text/example03.json
deleted file mode 100644
index a3a8e9d..0000000
--- a/tests/expected/text/example03.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"in","args":[{"property":"landsat:wrs_path"},["153","154","15X"]]}
diff --git a/tests/expected/text/example03.txt b/tests/expected/text/example03.txt
deleted file mode 100644
index 51dd73b..0000000
--- a/tests/expected/text/example03.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-in("landsat:wrs_path", ('153', '154', '15X'))
diff --git a/tests/expected/text/example04.json b/tests/expected/text/example04.json
deleted file mode 100644
index f2df389..0000000
--- a/tests/expected/text/example04.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"and","args":[{"op":"<","args":[{"property":"eo:cloud_cover"},0.1]},{"op":"=","args":[{"property":"landsat:wrs_row"},28.0]},{"op":"=","args":[{"property":"landsat:wrs_path"},203.0]}]}
diff --git a/tests/expected/text/example04.txt b/tests/expected/text/example04.txt
deleted file mode 100644
index a3b155c..0000000
--- a/tests/expected/text/example04.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-(("eo:cloud_cover" < 0.1) AND ("landsat:wrs_row" = 28) AND ("landsat:wrs_path" = 203))
diff --git a/tests/expected/text/example05a.json b/tests/expected/text/example05a.json
deleted file mode 100644
index 29e996b..0000000
--- a/tests/expected/text/example05a.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"or","args":[{"op":"=","args":[{"property":"eo:cloud_cover"},0.1]},{"op":"=","args":[{"property":"eo:cloud_cover"},0.2]}]}
diff --git a/tests/expected/text/example05a.txt b/tests/expected/text/example05a.txt
deleted file mode 100644
index 203915c..0000000
--- a/tests/expected/text/example05a.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-(("eo:cloud_cover" = 0.1) OR ("eo:cloud_cover" = 0.2))
diff --git a/tests/expected/text/example05b.json b/tests/expected/text/example05b.json
deleted file mode 100644
index 22874a2..0000000
--- a/tests/expected/text/example05b.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"in","args":[{"property":"eo:cloud_cover"},[0.1,0.2]]}
diff --git a/tests/expected/text/example05b.txt b/tests/expected/text/example05b.txt
deleted file mode 100644
index d86d13f..0000000
--- a/tests/expected/text/example05b.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-in("eo:cloud_cover", (0.1, 0.2))
diff --git a/tests/expected/text/example06a.json b/tests/expected/text/example06a.json
deleted file mode 100644
index 8838489..0000000
--- a/tests/expected/text/example06a.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"between","args":[{"property":"eo:cloud_cover"},0.1,0.2]}
diff --git a/tests/expected/text/example06a.txt b/tests/expected/text/example06a.txt
deleted file mode 100644
index 048ae4e..0000000
--- a/tests/expected/text/example06a.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-("eo:cloud_cover" BETWEEN 0.1 AND 0.2)
diff --git a/tests/expected/text/example06b.json b/tests/expected/text/example06b.json
deleted file mode 100644
index f986256..0000000
--- a/tests/expected/text/example06b.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"and","args":[{"op":">=","args":[{"property":"eo:cloud_cover"},0.1]},{"op":"<=","args":[{"property":"eo:cloud_cover"},0.2]},{"op":"=","args":[{"property":"landsat:wrs_row"},28.0]},{"op":"=","args":[{"property":"landsat:wrs_path"},203.0]}]}
diff --git a/tests/expected/text/example06b.txt b/tests/expected/text/example06b.txt
deleted file mode 100644
index f369547..0000000
--- a/tests/expected/text/example06b.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-(("eo:cloud_cover" >= 0.1) AND ("eo:cloud_cover" <= 0.2) AND ("landsat:wrs_row" = 28) AND ("landsat:wrs_path" = 203))
diff --git a/tests/expected/text/example07.json b/tests/expected/text/example07.json
deleted file mode 100644
index 8b7ec9f..0000000
--- a/tests/expected/text/example07.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"and","args":[{"op":"like","args":[{"property":"eo:instrument"},"OLI%"]},{"op":"s_intersects","args":[{"property":"footprint"},{"type":"Polygon","coordinates":[[[43.5845,-79.5442],[43.6079,-79.4893],[43.5677,-79.4632],[43.6129,-79.3925],[43.6223,-79.3238],[43.6576,-79.3163],[43.7945,-79.1178],[43.8144,-79.1542],[43.8555,-79.1714],[43.7509,-79.639],[43.5845,-79.5442]]]}]}]}
diff --git a/tests/expected/text/example07.txt b/tests/expected/text/example07.txt
deleted file mode 100644
index f1d5689..0000000
--- a/tests/expected/text/example07.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-(like("eo:instrument", 'OLI%') AND s_intersects("footprint", POLYGON((43.5845 -79.5442,
-                                                    43.6079 -79.4893,
-                                                    43.5677 -79.4632,
-                                                    43.6129 -79.3925,
-                                                    43.6223 -79.3238,
-                                                    43.6576 -79.3163,
-                                                    43.7945 -79.1178,
-                                                    43.8144 -79.1542,
-                                                    43.8555 -79.1714,
-                                                    43.7509 -79.6390,
-                                                    43.5845 -79.5442))))
diff --git a/tests/expected/text/example08.json b/tests/expected/text/example08.json
deleted file mode 100644
index 7193360..0000000
--- a/tests/expected/text/example08.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"and","args":[{"op":"=","args":[{"property":"beamMode"},"ScanSAR Narrow"]},{"op":"=","args":[{"property":"swathDirection"},"ascending"]},{"op":"=","args":[{"property":"polarization"},"HH+VV+HV+VH"]},{"op":"s_intersects","args":[{"property":"footprint"},{"type":"Polygon","coordinates":[[[-77.117938,38.93686],[-77.040604,39.995648],[-76.910536,38.892912],[-77.039359,38.791753],[-77.047906,38.841462],[-77.034183,38.840655],[-77.033142,38.85749],[-77.117938,38.93686]]]}]}]}
diff --git a/tests/expected/text/example08.txt b/tests/expected/text/example08.txt
deleted file mode 100644
index c7223c2..0000000
--- a/tests/expected/text/example08.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-(("beamMode" = 'ScanSAR Narrow') AND ("swathDirection" = 'ascending') AND ("polarization" = 'HH+VV+HV+VH') AND s_intersects("footprint", POLYGON((-77.117938 38.936860,
-                                    -77.040604 39.995648,
-                                    -76.910536 38.892912,
-                                    -77.039359 38.791753,
-                                    -77.047906 38.841462,
-                                    -77.034183 38.840655,
-                                    -77.033142 38.857490,
-                                    -77.117938 38.936860))))
diff --git a/tests/expected/text/example09.json b/tests/expected/text/example09.json
deleted file mode 100644
index 9fc6caa..0000000
--- a/tests/expected/text/example09.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":">","args":[{"property":"floors"},5.0]}
diff --git a/tests/expected/text/example09.txt b/tests/expected/text/example09.txt
deleted file mode 100644
index c8147f0..0000000
--- a/tests/expected/text/example09.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-("floors" > 5)
diff --git a/tests/expected/text/example10.json b/tests/expected/text/example10.json
deleted file mode 100644
index 1dd499d..0000000
--- a/tests/expected/text/example10.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"<=","args":[{"property":"taxes"},500.0]}
diff --git a/tests/expected/text/example10.txt b/tests/expected/text/example10.txt
deleted file mode 100644
index 281c134..0000000
--- a/tests/expected/text/example10.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-("taxes" <= 500)
diff --git a/tests/expected/text/example11.json b/tests/expected/text/example11.json
deleted file mode 100644
index c690b9a..0000000
--- a/tests/expected/text/example11.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"like","args":[{"property":"owner"},"%Jones%"]}
diff --git a/tests/expected/text/example11.txt b/tests/expected/text/example11.txt
deleted file mode 100644
index 294411f..0000000
--- a/tests/expected/text/example11.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-like("owner", '%Jones%')
diff --git a/tests/expected/text/example12.json b/tests/expected/text/example12.json
deleted file mode 100644
index a52bf05..0000000
--- a/tests/expected/text/example12.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"like","args":[{"property":"owner"},"Mike%"]}
diff --git a/tests/expected/text/example12.txt b/tests/expected/text/example12.txt
deleted file mode 100644
index 2415deb..0000000
--- a/tests/expected/text/example12.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-like("owner", 'Mike%')
diff --git a/tests/expected/text/example13.json b/tests/expected/text/example13.json
deleted file mode 100644
index 7395264..0000000
--- a/tests/expected/text/example13.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"not","args":[{"op":"like","args":[{"property":"owner"},"%Mike%"]}]}
diff --git a/tests/expected/text/example13.txt b/tests/expected/text/example13.txt
deleted file mode 100644
index c2a78da..0000000
--- a/tests/expected/text/example13.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-(NOT like("owner", '%Mike%'))
diff --git a/tests/expected/text/example14.json b/tests/expected/text/example14.json
deleted file mode 100644
index ca167d2..0000000
--- a/tests/expected/text/example14.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"=","args":[{"property":"swimming_pool"},true]}
diff --git a/tests/expected/text/example14.txt b/tests/expected/text/example14.txt
deleted file mode 100644
index bcec8de..0000000
--- a/tests/expected/text/example14.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-("swimming_pool" = true)
diff --git a/tests/expected/text/example15.json b/tests/expected/text/example15.json
deleted file mode 100644
index 97d1cd3..0000000
--- a/tests/expected/text/example15.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"and","args":[{"op":">","args":[{"property":"floors"},5.0]},{"op":"=","args":[{"property":"swimming_pool"},true]}]}
diff --git a/tests/expected/text/example15.txt b/tests/expected/text/example15.txt
deleted file mode 100644
index 2ead8f9..0000000
--- a/tests/expected/text/example15.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-(("floors" > 5) AND ("swimming_pool" = true))
diff --git a/tests/expected/text/example16.txt b/tests/expected/text/example16.txt
deleted file mode 100644
index 5e9a01a..0000000
--- a/tests/expected/text/example16.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-(("swimming_pool" = true) AND ((("floors" > 5) OR like("material", 'brick%')) OR like("material", '%brick')))
diff --git a/tests/expected/text/example17.json b/tests/expected/text/example17.json
deleted file mode 100644
index 496875c..0000000
--- a/tests/expected/text/example17.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"and","args":[{"op":">","args":[{"property":"floors"},5.0]},{"op":"=","args":[{"property":"material"},"brick"]},{"op":"=","args":[{"property":"swimming_pool"},true]}]}
diff --git a/tests/expected/text/example17.txt b/tests/expected/text/example17.txt
deleted file mode 100644
index 72a912d..0000000
--- a/tests/expected/text/example17.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-(("floors" > 5) AND ("material" = 'brick') AND ("swimming_pool" = true))
diff --git a/tests/expected/text/example18.json b/tests/expected/text/example18.json
deleted file mode 100644
index 79a847a..0000000
--- a/tests/expected/text/example18.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"or","args":[{"op":"not","args":[{"op":"<","args":[{"property":"floors"},5.0]}]},{"op":"=","args":[{"property":"swimming_pool"},true]}]}
diff --git a/tests/expected/text/example18.txt b/tests/expected/text/example18.txt
deleted file mode 100644
index fee5683..0000000
--- a/tests/expected/text/example18.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-((NOT ("floors" < 5)) OR ("swimming_pool" = true))
diff --git a/tests/expected/text/example19.json b/tests/expected/text/example19.json
deleted file mode 100644
index b619042..0000000
--- a/tests/expected/text/example19.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"and","args":[{"op":"or","args":[{"op":"like","args":[{"property":"owner"},"mike%"]},{"op":"like","args":[{"property":"owner"},"Mike%"]}]},{"op":"<","args":[{"property":"floors"},4.0]}]}
diff --git a/tests/expected/text/example19.txt b/tests/expected/text/example19.txt
deleted file mode 100644
index ef51aab..0000000
--- a/tests/expected/text/example19.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-((like("owner", 'mike%') OR like("owner", 'Mike%')) AND ("floors" < 4))
diff --git a/tests/expected/text/example20.json b/tests/expected/text/example20.json
deleted file mode 100644
index facdd89..0000000
--- a/tests/expected/text/example20.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"t_before","args":[{"property":"built"},{"date":"2015-01-01"}]}
diff --git a/tests/expected/text/example20.txt b/tests/expected/text/example20.txt
deleted file mode 100644
index dc901d8..0000000
--- a/tests/expected/text/example20.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-t_before("built", DATE('2015-01-01'))
diff --git a/tests/expected/text/example21.json b/tests/expected/text/example21.json
deleted file mode 100644
index 34d7afe..0000000
--- a/tests/expected/text/example21.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"t_after","args":[{"property":"built"},{"date":"2012-06-05"}]}
diff --git a/tests/expected/text/example21.txt b/tests/expected/text/example21.txt
deleted file mode 100644
index d16a195..0000000
--- a/tests/expected/text/example21.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-t_after("built", DATE('2012-06-05'))
diff --git a/tests/expected/text/example22.json b/tests/expected/text/example22.json
deleted file mode 100644
index 23d224e..0000000
--- a/tests/expected/text/example22.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"t_during","args":[{"interval":[{"property":"starts_at"},{"property":"ends_at"}]},{"interval":["2017-06-10T07:30:00Z","2017-06-11T10:30:00Z"]}]}
diff --git a/tests/expected/text/example22.txt b/tests/expected/text/example22.txt
deleted file mode 100644
index 01aab7d..0000000
--- a/tests/expected/text/example22.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-t_during(INTERVAL("starts_at","ends_at"), INTERVAL('2017-06-10T07:30:00Z','2017-06-11T10:30:00Z'))
diff --git a/tests/expected/text/example23.txt b/tests/expected/text/example23.txt
deleted file mode 100644
index b9b17a5..0000000
--- a/tests/expected/text/example23.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-s_within("location", bbox((-1 * 118), 33.8, (-1 * 117.9), 34))
diff --git a/tests/expected/text/example24.json b/tests/expected/text/example24.json
deleted file mode 100644
index 647b084..0000000
--- a/tests/expected/text/example24.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"s_intersects","args":[{"property":"geometry"},{"type":"Polygon","coordinates":[[[-10.0,-10.0],[10.0,-10.0],[10.0,10.0],[-10.0,-10.0]]]}]}
diff --git a/tests/expected/text/example24.txt b/tests/expected/text/example24.txt
deleted file mode 100644
index db51e2c..0000000
--- a/tests/expected/text/example24.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-s_intersects("geometry", POLYGON((-10.0 -10.0,10.0 -10.0,10.0 10.0,-10.0 -10.0)))
diff --git a/tests/expected/text/example25.txt b/tests/expected/text/example25.txt
deleted file mode 100644
index 27ceecd..0000000
--- a/tests/expected/text/example25.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-(("floors" > 5) AND s_within("geometry", bbox((-1 * 118), 33.8, (-1 * 117.9), 34)))
diff --git a/tests/expected/text/example26.json b/tests/expected/text/example26.json
deleted file mode 100644
index 918f401..0000000
--- a/tests/expected/text/example26.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"in","args":[{"op":"casei","args":[{"property":"road_class"}]},[{"op":"casei","args":["Οδος"]},{"op":"casei","args":["Straße"]}]]}
diff --git a/tests/expected/text/example26.txt b/tests/expected/text/example26.txt
deleted file mode 100644
index cf16575..0000000
--- a/tests/expected/text/example26.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-in(casei("road_class"), (casei('Οδος'), casei('Straße')))
diff --git a/tests/expected/text/example27.json b/tests/expected/text/example27.json
deleted file mode 100644
index 5903327..0000000
--- a/tests/expected/text/example27.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"=","args":[{"op":"accenti","args":[{"property":"etat_vol"}]},{"op":"accenti","args":["débárquér"]}]}
diff --git a/tests/expected/text/example27.txt b/tests/expected/text/example27.txt
deleted file mode 100644
index 2899d9e..0000000
--- a/tests/expected/text/example27.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-(accenti("etat_vol") = accenti('débárquér'))
diff --git a/tests/expected/text/example28.txt b/tests/expected/text/example28.txt
deleted file mode 100644
index 8e9d36a..0000000
--- a/tests/expected/text/example28.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-like(casei("geophys:SURVEY_NAME"), casei('%calcutta%'))
diff --git a/tests/expected/text/example29.json b/tests/expected/text/example29.json
deleted file mode 100644
index a6d759e..0000000
--- a/tests/expected/text/example29.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"=","args":[{"property":"id"},"fa7e1920-9107-422d-a3db-c468cbc5d6df"]}
diff --git a/tests/expected/text/example29.txt b/tests/expected/text/example29.txt
deleted file mode 100644
index 80f33e9..0000000
--- a/tests/expected/text/example29.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-("id" = 'fa7e1920-9107-422d-a3db-c468cbc5d6df')
diff --git a/tests/expected/text/example30.json b/tests/expected/text/example30.json
deleted file mode 100644
index 55c1252..0000000
--- a/tests/expected/text/example30.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"<>","args":[{"property":"id"},"fa7e1920-9107-422d-a3db-c468cbc5d6df"]}
diff --git a/tests/expected/text/example30.txt b/tests/expected/text/example30.txt
deleted file mode 100644
index 0578a6f..0000000
--- a/tests/expected/text/example30.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-("id" <> 'fa7e1920-9107-422d-a3db-c468cbc5d6df')
diff --git a/tests/expected/text/example31.json b/tests/expected/text/example31.json
deleted file mode 100644
index c0ace76..0000000
--- a/tests/expected/text/example31.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"<","args":[{"property":"value"},10.0]}
diff --git a/tests/expected/text/example31.txt b/tests/expected/text/example31.txt
deleted file mode 100644
index d65390e..0000000
--- a/tests/expected/text/example31.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-("value" < 10)
diff --git a/tests/expected/text/example32.json b/tests/expected/text/example32.json
deleted file mode 100644
index 7246dea..0000000
--- a/tests/expected/text/example32.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":">","args":[{"property":"value"},10.0]}
diff --git a/tests/expected/text/example32.txt b/tests/expected/text/example32.txt
deleted file mode 100644
index a89adf5..0000000
--- a/tests/expected/text/example32.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-("value" > 10)
diff --git a/tests/expected/text/example33.json b/tests/expected/text/example33.json
deleted file mode 100644
index cce72a7..0000000
--- a/tests/expected/text/example33.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"<=","args":[{"property":"value"},10.0]}
diff --git a/tests/expected/text/example33.txt b/tests/expected/text/example33.txt
deleted file mode 100644
index 43f85fc..0000000
--- a/tests/expected/text/example33.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-("value" <= 10)
diff --git a/tests/expected/text/example34.json b/tests/expected/text/example34.json
deleted file mode 100644
index 0039003..0000000
--- a/tests/expected/text/example34.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":">=","args":[{"property":"value"},10.0]}
diff --git a/tests/expected/text/example34.txt b/tests/expected/text/example34.txt
deleted file mode 100644
index c822d1b..0000000
--- a/tests/expected/text/example34.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-("value" >= 10)
diff --git a/tests/expected/text/example35.json b/tests/expected/text/example35.json
deleted file mode 100644
index 3f84e73..0000000
--- a/tests/expected/text/example35.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"like","args":[{"property":"name"},"foo%"]}
diff --git a/tests/expected/text/example35.txt b/tests/expected/text/example35.txt
deleted file mode 100644
index ace7a16..0000000
--- a/tests/expected/text/example35.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-like("name", 'foo%')
diff --git a/tests/expected/text/example36-alt01.json b/tests/expected/text/example36-alt01.json
deleted file mode 100644
index d2fa835..0000000
--- a/tests/expected/text/example36-alt01.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"not","args":[{"op":"like","args":[{"property":"name"},"foo%"]}]}
diff --git a/tests/expected/text/example36-alt01.txt b/tests/expected/text/example36-alt01.txt
deleted file mode 100644
index 2dc6954..0000000
--- a/tests/expected/text/example36-alt01.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-(NOT like("name", 'foo%'))
diff --git a/tests/expected/text/example36.json b/tests/expected/text/example36.json
deleted file mode 100644
index d2fa835..0000000
--- a/tests/expected/text/example36.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"not","args":[{"op":"like","args":[{"property":"name"},"foo%"]}]}
diff --git a/tests/expected/text/example36.txt b/tests/expected/text/example36.txt
deleted file mode 100644
index 2dc6954..0000000
--- a/tests/expected/text/example36.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-(NOT like("name", 'foo%'))
diff --git a/tests/expected/text/example37.json b/tests/expected/text/example37.json
deleted file mode 100644
index 2f6a943..0000000
--- a/tests/expected/text/example37.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"between","args":[{"property":"value"},10.0,20.0]}
diff --git a/tests/expected/text/example37.txt b/tests/expected/text/example37.txt
deleted file mode 100644
index 3c7e2d9..0000000
--- a/tests/expected/text/example37.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-("value" BETWEEN 10 AND 20)
diff --git a/tests/expected/text/example38-alt01.json b/tests/expected/text/example38-alt01.json
deleted file mode 100644
index c7399bf..0000000
--- a/tests/expected/text/example38-alt01.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"not","args":[{"op":"between","args":[{"property":"value"},10.0,20.0]}]}
diff --git a/tests/expected/text/example38-alt01.txt b/tests/expected/text/example38-alt01.txt
deleted file mode 100644
index ea5ce7d..0000000
--- a/tests/expected/text/example38-alt01.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-(NOT ("value" BETWEEN 10 AND 20))
diff --git a/tests/expected/text/example38.json b/tests/expected/text/example38.json
deleted file mode 100644
index c7399bf..0000000
--- a/tests/expected/text/example38.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"not","args":[{"op":"between","args":[{"property":"value"},10.0,20.0]}]}
diff --git a/tests/expected/text/example38.txt b/tests/expected/text/example38.txt
deleted file mode 100644
index ea5ce7d..0000000
--- a/tests/expected/text/example38.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-(NOT ("value" BETWEEN 10 AND 20))
diff --git a/tests/expected/text/example39.json b/tests/expected/text/example39.json
deleted file mode 100644
index 2ae873d..0000000
--- a/tests/expected/text/example39.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"in","args":[{"property":"value"},[1.0,2.0,3.0]]}
diff --git a/tests/expected/text/example39.txt b/tests/expected/text/example39.txt
deleted file mode 100644
index a5e9ecd..0000000
--- a/tests/expected/text/example39.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-in("value", (1, 2, 3))
diff --git a/tests/expected/text/example40-alt01.json b/tests/expected/text/example40-alt01.json
deleted file mode 100644
index 6332a99..0000000
--- a/tests/expected/text/example40-alt01.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"not","args":[{"op":"in","args":[{"property":"value"},["a","b","c"]]}]}
diff --git a/tests/expected/text/example40-alt01.txt b/tests/expected/text/example40-alt01.txt
deleted file mode 100644
index 9f12f73..0000000
--- a/tests/expected/text/example40-alt01.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-(NOT in("value", ('a', 'b', 'c')))
diff --git a/tests/expected/text/example40.json b/tests/expected/text/example40.json
deleted file mode 100644
index 6332a99..0000000
--- a/tests/expected/text/example40.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"not","args":[{"op":"in","args":[{"property":"value"},["a","b","c"]]}]}
diff --git a/tests/expected/text/example40.txt b/tests/expected/text/example40.txt
deleted file mode 100644
index 9f12f73..0000000
--- a/tests/expected/text/example40.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-(NOT in("value", ('a', 'b', 'c')))
diff --git a/tests/expected/text/example41.json b/tests/expected/text/example41.json
deleted file mode 100644
index 565934d..0000000
--- a/tests/expected/text/example41.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"isNull","args":[{"property":"value"}]}
diff --git a/tests/expected/text/example41.txt b/tests/expected/text/example41.txt
deleted file mode 100644
index 31a61df..0000000
--- a/tests/expected/text/example41.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-isNull("value")
diff --git a/tests/expected/text/example42-alt01.json b/tests/expected/text/example42-alt01.json
deleted file mode 100644
index 565934d..0000000
--- a/tests/expected/text/example42-alt01.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"isNull","args":[{"property":"value"}]}
diff --git a/tests/expected/text/example42-alt01.txt b/tests/expected/text/example42-alt01.txt
deleted file mode 100644
index 31a61df..0000000
--- a/tests/expected/text/example42-alt01.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-isNull("value")
diff --git a/tests/expected/text/example42.txt b/tests/expected/text/example42.txt
deleted file mode 100644
index a8e0524..0000000
--- a/tests/expected/text/example42.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-(NOT isNull("value"))
diff --git a/tests/expected/text/example43-alt01.json b/tests/expected/text/example43-alt01.json
deleted file mode 100644
index 8fcc319..0000000
--- a/tests/expected/text/example43-alt01.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"and","args":[{"op":"not","args":[{"op":"like","args":[{"property":"name"},"foo%"]}]},{"op":">","args":[{"property":"value"},10.0]}]}
diff --git a/tests/expected/text/example43-alt01.txt b/tests/expected/text/example43-alt01.txt
deleted file mode 100644
index 2ca4815..0000000
--- a/tests/expected/text/example43-alt01.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-((NOT like("name", 'foo%')) AND ("value" > 10))
diff --git a/tests/expected/text/example43.json b/tests/expected/text/example43.json
deleted file mode 100644
index 8fcc319..0000000
--- a/tests/expected/text/example43.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"and","args":[{"op":"not","args":[{"op":"like","args":[{"property":"name"},"foo%"]}]},{"op":">","args":[{"property":"value"},10.0]}]}
diff --git a/tests/expected/text/example43.txt b/tests/expected/text/example43.txt
deleted file mode 100644
index 2ca4815..0000000
--- a/tests/expected/text/example43.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-((NOT like("name", 'foo%')) AND ("value" > 10))
diff --git a/tests/expected/text/example44-alt01.json b/tests/expected/text/example44-alt01.json
deleted file mode 100644
index 37bc6b3..0000000
--- a/tests/expected/text/example44-alt01.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"or","args":[{"op":"isNull","args":[{"property":"value"}]},{"op":"between","args":[{"property":"value"},10.0,20.0]}]}
diff --git a/tests/expected/text/example44-alt01.txt b/tests/expected/text/example44-alt01.txt
deleted file mode 100644
index e6a1ef6..0000000
--- a/tests/expected/text/example44-alt01.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-(isNull("value") OR ("value" BETWEEN 10 AND 20))
diff --git a/tests/expected/text/example44.json b/tests/expected/text/example44.json
deleted file mode 100644
index 37bc6b3..0000000
--- a/tests/expected/text/example44.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"or","args":[{"op":"isNull","args":[{"property":"value"}]},{"op":"between","args":[{"property":"value"},10.0,20.0]}]}
diff --git a/tests/expected/text/example44.txt b/tests/expected/text/example44.txt
deleted file mode 100644
index e6a1ef6..0000000
--- a/tests/expected/text/example44.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-(isNull("value") OR ("value" BETWEEN 10 AND 20))
diff --git a/tests/expected/text/example45.txt b/tests/expected/text/example45.txt
deleted file mode 100644
index 78253eb..0000000
--- a/tests/expected/text/example45.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-s_intersects("geometry", bbox((-1 * 128.098193), (-1 * 1.1), (-1 * 99999), 180, 90, 100000))
diff --git a/tests/expected/text/example46-alt01.json b/tests/expected/text/example46-alt01.json
deleted file mode 100644
index 3e4574b..0000000
--- a/tests/expected/text/example46-alt01.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"s_equals","args":[{"type":"Polygon","coordinates":[[[-0.333333,89.0],[-102.723546,-0.5],[-179.0,-89.0],[-1.9,89.0],[-0.0,89.0],[2.00001,-1.9],[-0.333333,89.0]]]},{"property":"geometry"}]}
diff --git a/tests/expected/text/example46-alt01.txt b/tests/expected/text/example46-alt01.txt
deleted file mode 100644
index 3543e32..0000000
--- a/tests/expected/text/example46-alt01.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-s_equals(POLYGON (
-        (-0.333333 89.0, -102.723546 -0.5, -179.0 -89.0, -1.9 89.0, -0.0 89.0, 2.00001 -1.9, -0.333333 89.0)
-    ), "geometry")
diff --git a/tests/expected/text/example46.json b/tests/expected/text/example46.json
deleted file mode 100644
index 3e4574b..0000000
--- a/tests/expected/text/example46.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"s_equals","args":[{"type":"Polygon","coordinates":[[[-0.333333,89.0],[-102.723546,-0.5],[-179.0,-89.0],[-1.9,89.0],[-0.0,89.0],[2.00001,-1.9],[-0.333333,89.0]]]},{"property":"geometry"}]}
diff --git a/tests/expected/text/example46.txt b/tests/expected/text/example46.txt
deleted file mode 100644
index 6d81c78..0000000
--- a/tests/expected/text/example46.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-s_equals(POLYGON ((-0.333333 89.0, -102.723546 -0.5, -179.0 -89.0, -1.9 89.0, -0.0 89.0, 2.00001 -1.9, -0.333333 89.0)), "geometry")
diff --git a/tests/expected/text/example47.json b/tests/expected/text/example47.json
deleted file mode 100644
index f8ab5ae..0000000
--- a/tests/expected/text/example47.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"s_disjoint","args":[{"property":"geometry"},{"type":"MultiPolygon","coordinates":[[[[144.022387,45.176126],[-1.1,0.0],[180.0,47.808086],[144.022387,45.176126]]]]}]}
diff --git a/tests/expected/text/example47.txt b/tests/expected/text/example47.txt
deleted file mode 100644
index 5915229..0000000
--- a/tests/expected/text/example47.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-s_disjoint("geometry", MULTIPOLYGON (((144.022387 45.176126, -1.1 0.0, 180.0 47.808086, 144.022387 45.176126))))
diff --git a/tests/expected/text/example48.json b/tests/expected/text/example48.json
deleted file mode 100644
index acaa6d0..0000000
--- a/tests/expected/text/example48.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"s_touches","args":[{"property":"geometry"},{"type":"MultiLineString","coordinates":[[[-1.9,-0.99999],[75.292574,1.5],[-0.5,-4.016458],[-31.708594,-74.743801],[179.0,-90.0]],[[-1.9,-1.1],[1.5,8.547371]]]}]}
diff --git a/tests/expected/text/example48.txt b/tests/expected/text/example48.txt
deleted file mode 100644
index e190d62..0000000
--- a/tests/expected/text/example48.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-s_touches("geometry", MULTILINESTRING ((-1.9 -0.99999, 75.292574 1.5, -0.5 -4.016458, -31.708594 -74.743801, 179.0 -90.0),(-1.9 -1.1, 1.5 8.547371)))
diff --git a/tests/expected/text/example49-alt01.json b/tests/expected/text/example49-alt01.json
deleted file mode 100644
index 56a412e..0000000
--- a/tests/expected/text/example49-alt01.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"s_within","args":[{"type":"Polygon","coordinates":[[[-49.88024,0.5],[-1.5,-0.99999],[0.0,0.5],[-49.88024,0.5]],[[-65.887123,2.00001],[0.333333,-53.017711],[180.0,0.0],[-65.887123,2.00001]]]},{"property":"geometry"}]}
diff --git a/tests/expected/text/example49-alt01.txt b/tests/expected/text/example49-alt01.txt
deleted file mode 100644
index fc17db5..0000000
--- a/tests/expected/text/example49-alt01.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-s_within(POLYGON Z((-49.88024 0.5 -75993.341684, -1.5 -0.99999 -100000.0, 0.0 0.5 -0.333333, -49.88024 0.5 -75993.341684), (-65.887123 2.00001 -100000.0, 0.333333 -53.017711 -79471.332949, 180.0 0.0 1852.616704, -65.887123 2.00001 -100000.0)), "geometry")
diff --git a/tests/expected/text/example49.json b/tests/expected/text/example49.json
deleted file mode 100644
index 56a412e..0000000
--- a/tests/expected/text/example49.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"s_within","args":[{"type":"Polygon","coordinates":[[[-49.88024,0.5],[-1.5,-0.99999],[0.0,0.5],[-49.88024,0.5]],[[-65.887123,2.00001],[0.333333,-53.017711],[180.0,0.0],[-65.887123,2.00001]]]},{"property":"geometry"}]}
diff --git a/tests/expected/text/example49.txt b/tests/expected/text/example49.txt
deleted file mode 100644
index d175592..0000000
--- a/tests/expected/text/example49.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-s_within(POLYGON Z ((-49.88024 0.5 -75993.341684, -1.5 -0.99999 -100000.0, 0.0 0.5 -0.333333, -49.88024 0.5 -75993.341684), (-65.887123 2.00001 -100000.0, 0.333333 -53.017711 -79471.332949, 180.0 0.0 1852.616704, -65.887123 2.00001 -100000.0)), "geometry")
diff --git a/tests/expected/text/example50.txt b/tests/expected/text/example50.txt
deleted file mode 100644
index b708743..0000000
--- a/tests/expected/text/example50.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-s_overlaps("geometry", bbox((-1 * 179.912109), 1.9, 180, 16.897016))
diff --git a/tests/expected/text/example51.json b/tests/expected/text/example51.json
deleted file mode 100644
index a1b90f1..0000000
--- a/tests/expected/text/example51.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"s_crosses","args":[{"property":"geometry"},{"type":"LineString","coordinates":[[172.03086,1.5],[1.1,-90.0],[-159.757695,0.99999],[-180.0,0.5],[-12.111235,81.336403],[-0.5,64.43958],[0.0,81.991815],[-155.93831,90.0]]}]}
diff --git a/tests/expected/text/example51.txt b/tests/expected/text/example51.txt
deleted file mode 100644
index 4666f5a..0000000
--- a/tests/expected/text/example51.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-s_crosses("geometry", LINESTRING (172.03086 1.5, 1.1 -90.0, -159.757695 0.99999, -180.0 0.5, -12.111235 81.336403, -0.5 64.43958, 0.0 81.991815, -155.93831 90.0))
diff --git a/tests/expected/text/example52.json b/tests/expected/text/example52.json
deleted file mode 100644
index 45e115d..0000000
--- a/tests/expected/text/example52.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"s_contains","args":[{"property":"geometry"},{"type":"Point","coordinates":[-3.508362,-1.754181]}]}
diff --git a/tests/expected/text/example52.txt b/tests/expected/text/example52.txt
deleted file mode 100644
index 357ee7a..0000000
--- a/tests/expected/text/example52.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-s_contains("geometry", POINT (-3.508362 -1.754181))
diff --git a/tests/expected/text/example53.json b/tests/expected/text/example53.json
deleted file mode 100644
index d80d04b..0000000
--- a/tests/expected/text/example53.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"t_after","args":[{"property":"updated_at"},{"date":"2010-02-10"}]}
diff --git a/tests/expected/text/example53.txt b/tests/expected/text/example53.txt
deleted file mode 100644
index d6a5f63..0000000
--- a/tests/expected/text/example53.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-t_after("updated_at", DATE('2010-02-10'))
diff --git a/tests/expected/text/example54-alt01.json b/tests/expected/text/example54-alt01.json
deleted file mode 100644
index 236abaf..0000000
--- a/tests/expected/text/example54-alt01.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"t_before","args":[{"property":"updated_at"},{"timestamp":"2012-08-10T05:30:00Z"}]}
diff --git a/tests/expected/text/example54-alt01.txt b/tests/expected/text/example54-alt01.txt
deleted file mode 100644
index 68b5d2f..0000000
--- a/tests/expected/text/example54-alt01.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-t_before("updated_at", TIMESTAMP('2012-08-10T05:30:00Z'))
diff --git a/tests/expected/text/example54.json b/tests/expected/text/example54.json
deleted file mode 100644
index 46ff37b..0000000
--- a/tests/expected/text/example54.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"t_before","args":[{"property":"updated_at"},{"timestamp":"2012-08-10T05:30:00.000000Z"}]}
diff --git a/tests/expected/text/example54.txt b/tests/expected/text/example54.txt
deleted file mode 100644
index 06d9402..0000000
--- a/tests/expected/text/example54.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-t_before("updated_at", TIMESTAMP('2012-08-10T05:30:00.000000Z'))
diff --git a/tests/expected/text/example55-alt01.json b/tests/expected/text/example55-alt01.json
deleted file mode 100644
index 66c10b7..0000000
--- a/tests/expected/text/example55-alt01.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"t_contains","args":[{"interval":["2000-01-01T00:00:00Z","2005-01-10T01:01:01.393216Z"]},{"interval":[{"property":"starts_at"},{"property":"ends_at"}]}]}
diff --git a/tests/expected/text/example55-alt01.txt b/tests/expected/text/example55-alt01.txt
deleted file mode 100644
index 0d38bb8..0000000
--- a/tests/expected/text/example55-alt01.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-t_contains(INTERVAL('2000-01-01T00:00:00Z','2005-01-10T01:01:01.393216Z'), INTERVAL("starts_at","ends_at"))
diff --git a/tests/expected/text/example55.json b/tests/expected/text/example55.json
deleted file mode 100644
index 50fe3d9..0000000
--- a/tests/expected/text/example55.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"t_contains","args":[{"interval":["2000-01-01T00:00:00.000000Z","2005-01-10T01:01:01.393216Z"]},{"interval":[{"property":"starts_at"},{"property":"ends_at"}]}]}
diff --git a/tests/expected/text/example55.txt b/tests/expected/text/example55.txt
deleted file mode 100644
index 88ae33f..0000000
--- a/tests/expected/text/example55.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-t_contains(INTERVAL('2000-01-01T00:00:00.000000Z','2005-01-10T01:01:01.393216Z'), INTERVAL("starts_at","ends_at"))
diff --git a/tests/expected/text/example56.json b/tests/expected/text/example56.json
deleted file mode 100644
index faf8fe7..0000000
--- a/tests/expected/text/example56.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"t_disjoint","args":[{"interval":["..","2005-01-10T01:01:01.393216Z"]},{"interval":[{"property":"starts_at"},{"property":"ends_at"}]}]}
diff --git a/tests/expected/text/example56.txt b/tests/expected/text/example56.txt
deleted file mode 100644
index 3e8e4f4..0000000
--- a/tests/expected/text/example56.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-t_disjoint(INTERVAL('..','2005-01-10T01:01:01.393216Z'), INTERVAL("starts_at","ends_at"))
diff --git a/tests/expected/text/example57.json b/tests/expected/text/example57.json
deleted file mode 100644
index 4d96d5a..0000000
--- a/tests/expected/text/example57.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"t_during","args":[{"interval":[{"property":"starts_at"},{"property":"ends_at"}]},{"interval":["2005-01-10","2010-02-10"]}]}
diff --git a/tests/expected/text/example57.txt b/tests/expected/text/example57.txt
deleted file mode 100644
index 3ece6c7..0000000
--- a/tests/expected/text/example57.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-t_during(INTERVAL("starts_at","ends_at"), INTERVAL('2005-01-10','2010-02-10'))
diff --git a/tests/expected/text/example58.json b/tests/expected/text/example58.json
deleted file mode 100644
index 5c28290..0000000
--- a/tests/expected/text/example58.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"t_equals","args":[{"property":"updated_at"},{"date":"1851-04-29"}]}
diff --git a/tests/expected/text/example58.txt b/tests/expected/text/example58.txt
deleted file mode 100644
index eca6a7f..0000000
--- a/tests/expected/text/example58.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-t_equals("updated_at", DATE('1851-04-29'))
diff --git a/tests/expected/text/example59.json b/tests/expected/text/example59.json
deleted file mode 100644
index 8a938b8..0000000
--- a/tests/expected/text/example59.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"t_finishedby","args":[{"interval":[{"property":"starts_at"},{"property":"ends_at"}]},{"interval":["1991-10-07T08:21:06.393262Z","2010-02-10T05:29:20.073225Z"]}]}
diff --git a/tests/expected/text/example59.txt b/tests/expected/text/example59.txt
deleted file mode 100644
index 0cd8a05..0000000
--- a/tests/expected/text/example59.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-t_finishedby(INTERVAL("starts_at","ends_at"), INTERVAL('1991-10-07T08:21:06.393262Z','2010-02-10T05:29:20.073225Z'))
diff --git a/tests/expected/text/example60.json b/tests/expected/text/example60.json
deleted file mode 100644
index b4baaad..0000000
--- a/tests/expected/text/example60.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"t_finishes","args":[{"interval":[{"property":"starts_at"},{"property":"ends_at"}]},{"interval":["1991-10-07","2010-02-10T05:29:20.073225Z"]}]}
diff --git a/tests/expected/text/example60.txt b/tests/expected/text/example60.txt
deleted file mode 100644
index 1623e78..0000000
--- a/tests/expected/text/example60.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-t_finishes(INTERVAL("starts_at","ends_at"), INTERVAL('1991-10-07','2010-02-10T05:29:20.073225Z'))
diff --git a/tests/expected/text/example61.json b/tests/expected/text/example61.json
deleted file mode 100644
index 0bc2a8f..0000000
--- a/tests/expected/text/example61.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"t_intersects","args":[{"interval":[{"property":"starts_at"},{"property":"ends_at"}]},{"interval":["1991-10-07T08:21:06.393262Z","2010-02-10T05:29:20.073225Z"]}]}
diff --git a/tests/expected/text/example61.txt b/tests/expected/text/example61.txt
deleted file mode 100644
index 3991a60..0000000
--- a/tests/expected/text/example61.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-t_intersects(INTERVAL("starts_at","ends_at"), INTERVAL('1991-10-07T08:21:06.393262Z','2010-02-10T05:29:20.073225Z'))
diff --git a/tests/expected/text/example62.json b/tests/expected/text/example62.json
deleted file mode 100644
index b97c114..0000000
--- a/tests/expected/text/example62.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"t_meets","args":[{"interval":["2005-01-10","2010-02-10"]},{"interval":[{"property":"starts_at"},{"property":"ends_at"}]}]}
diff --git a/tests/expected/text/example62.txt b/tests/expected/text/example62.txt
deleted file mode 100644
index 09c0680..0000000
--- a/tests/expected/text/example62.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-t_meets(INTERVAL('2005-01-10','2010-02-10'), INTERVAL("starts_at","ends_at"))
diff --git a/tests/expected/text/example63.json b/tests/expected/text/example63.json
deleted file mode 100644
index 8c963f4..0000000
--- a/tests/expected/text/example63.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"t_metby","args":[{"interval":["2010-02-10T05:29:20.073225Z","2010-10-07"]},{"interval":[{"property":"starts_at"},{"property":"ends_at"}]}]}
diff --git a/tests/expected/text/example63.txt b/tests/expected/text/example63.txt
deleted file mode 100644
index b31542d..0000000
--- a/tests/expected/text/example63.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-t_metby(INTERVAL('2010-02-10T05:29:20.073225Z','2010-10-07'), INTERVAL("starts_at","ends_at"))
diff --git a/tests/expected/text/example64.json b/tests/expected/text/example64.json
deleted file mode 100644
index 00df7c5..0000000
--- a/tests/expected/text/example64.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"t_overlappedby","args":[{"interval":["1991-10-07T08:21:06.393262Z","2010-02-10T05:29:20.073225Z"]},{"interval":[{"property":"starts_at"},{"property":"ends_at"}]}]}
diff --git a/tests/expected/text/example64.txt b/tests/expected/text/example64.txt
deleted file mode 100644
index c9b9e72..0000000
--- a/tests/expected/text/example64.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-t_overlappedby(INTERVAL('1991-10-07T08:21:06.393262Z','2010-02-10T05:29:20.073225Z'), INTERVAL("starts_at","ends_at"))
diff --git a/tests/expected/text/example65.json b/tests/expected/text/example65.json
deleted file mode 100644
index 4d90a9b..0000000
--- a/tests/expected/text/example65.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"t_overlaps","args":[{"interval":[{"property":"starts_at"},{"property":"ends_at"}]},{"interval":["1991-10-07T08:21:06.393262Z","1992-10-09T08:08:08.393473Z"]}]}
diff --git a/tests/expected/text/example65.txt b/tests/expected/text/example65.txt
deleted file mode 100644
index 9555c86..0000000
--- a/tests/expected/text/example65.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-t_overlaps(INTERVAL("starts_at","ends_at"), INTERVAL('1991-10-07T08:21:06.393262Z','1992-10-09T08:08:08.393473Z'))
diff --git a/tests/expected/text/example66.json b/tests/expected/text/example66.json
deleted file mode 100644
index 21b0675..0000000
--- a/tests/expected/text/example66.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"t_startedby","args":[{"interval":["1991-10-07T08:21:06.393262Z","2010-02-10T05:29:20.073225Z"]},{"interval":[{"property":"starts_at"},{"property":"ends_at"}]}]}
diff --git a/tests/expected/text/example66.txt b/tests/expected/text/example66.txt
deleted file mode 100644
index 8cb017e..0000000
--- a/tests/expected/text/example66.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-t_startedby(INTERVAL('1991-10-07T08:21:06.393262Z','2010-02-10T05:29:20.073225Z'), INTERVAL("starts_at","ends_at"))
diff --git a/tests/expected/text/example67.json b/tests/expected/text/example67.json
deleted file mode 100644
index 7087df4..0000000
--- a/tests/expected/text/example67.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"t_starts","args":[{"interval":[{"property":"starts_at"},{"property":"ends_at"}]},{"interval":["1991-10-07T08:21:06.393262Z",".."]}]}
diff --git a/tests/expected/text/example67.txt b/tests/expected/text/example67.txt
deleted file mode 100644
index d1686e8..0000000
--- a/tests/expected/text/example67.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-t_starts(INTERVAL("starts_at","ends_at"), INTERVAL('1991-10-07T08:21:06.393262Z','..'))
diff --git a/tests/expected/text/example68.txt b/tests/expected/text/example68.txt
deleted file mode 100644
index cb0f9cb..0000000
--- a/tests/expected/text/example68.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-(foo("geometry") = true)
diff --git a/tests/expected/text/example69.json b/tests/expected/text/example69.json
deleted file mode 100644
index 3811dc5..0000000
--- a/tests/expected/text/example69.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"<>","args":[false,{"op":"bar","args":[{"property":"geometry"},100.0,"a","b",false]}]}
diff --git a/tests/expected/text/example69.txt b/tests/expected/text/example69.txt
deleted file mode 100644
index f5d005d..0000000
--- a/tests/expected/text/example69.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-(false <> bar("geometry", 100, 'a', 'b', false))
diff --git a/tests/expected/text/example70.json b/tests/expected/text/example70.json
deleted file mode 100644
index 4a98289..0000000
--- a/tests/expected/text/example70.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"=","args":[{"op":"accenti","args":[{"property":"owner"}]},{"op":"accenti","args":["Beyoncé"]}]}
diff --git a/tests/expected/text/example70.txt b/tests/expected/text/example70.txt
deleted file mode 100644
index 814053a..0000000
--- a/tests/expected/text/example70.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-(accenti("owner") = accenti('Beyoncé'))
diff --git a/tests/expected/text/example71.json b/tests/expected/text/example71.json
deleted file mode 100644
index 9dc0968..0000000
--- a/tests/expected/text/example71.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"=","args":[{"op":"casei","args":[{"property":"owner"}]},{"op":"casei","args":["somebody else"]}]}
diff --git a/tests/expected/text/example71.txt b/tests/expected/text/example71.txt
deleted file mode 100644
index 86fa908..0000000
--- a/tests/expected/text/example71.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-(casei("owner") = casei('somebody else'))
diff --git a/tests/expected/text/example72.json b/tests/expected/text/example72.json
deleted file mode 100644
index a881422..0000000
--- a/tests/expected/text/example72.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":">","args":[{"property":"value"},{"op":"+","args":[{"property":"foo"},10.0]}]}
diff --git a/tests/expected/text/example72.txt b/tests/expected/text/example72.txt
deleted file mode 100644
index 645c50e..0000000
--- a/tests/expected/text/example72.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-("value" > ("foo" + 10))
diff --git a/tests/expected/text/example73.json b/tests/expected/text/example73.json
deleted file mode 100644
index adc0291..0000000
--- a/tests/expected/text/example73.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"<","args":[{"property":"value"},{"op":"-","args":[{"property":"foo"},10.0]}]}
diff --git a/tests/expected/text/example73.txt b/tests/expected/text/example73.txt
deleted file mode 100644
index 5ebc664..0000000
--- a/tests/expected/text/example73.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-("value" < ("foo" - 10))
diff --git a/tests/expected/text/example74.json b/tests/expected/text/example74.json
deleted file mode 100644
index e6d0daf..0000000
--- a/tests/expected/text/example74.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"<>","args":[{"property":"value"},{"op":"*","args":[22.1,{"property":"foo"}]}]}
diff --git a/tests/expected/text/example74.txt b/tests/expected/text/example74.txt
deleted file mode 100644
index a13f3c6..0000000
--- a/tests/expected/text/example74.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-("value" <> (22.1 * "foo"))
diff --git a/tests/expected/text/example75.json b/tests/expected/text/example75.json
deleted file mode 100644
index b0ccbc8..0000000
--- a/tests/expected/text/example75.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"=","args":[{"property":"value"},{"op":"/","args":[2.0,{"property":"foo"}]}]}
diff --git a/tests/expected/text/example75.txt b/tests/expected/text/example75.txt
deleted file mode 100644
index 63b6f5c..0000000
--- a/tests/expected/text/example75.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-("value" = (2 / "foo"))
diff --git a/tests/expected/text/example76.json b/tests/expected/text/example76.json
deleted file mode 100644
index 4f93e58..0000000
--- a/tests/expected/text/example76.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"<=","args":[{"property":"value"},{"op":"^","args":[2.0,{"property":"foo"}]}]}
diff --git a/tests/expected/text/example76.txt b/tests/expected/text/example76.txt
deleted file mode 100644
index 7bb0e19..0000000
--- a/tests/expected/text/example76.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-("value" <= (2 ^ "foo"))
diff --git a/tests/expected/text/example77.txt b/tests/expected/text/example77.txt
deleted file mode 100644
index 65652b2..0000000
--- a/tests/expected/text/example77.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-(0 = ("foo" % 2))
diff --git a/tests/expected/text/example78.json b/tests/expected/text/example78.json
deleted file mode 100644
index 844db58..0000000
--- a/tests/expected/text/example78.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"=","args":[1.0,{"op":"div","args":[{"property":"foo"},2.0]}]}
diff --git a/tests/expected/text/example78.txt b/tests/expected/text/example78.txt
deleted file mode 100644
index 35cb1e9..0000000
--- a/tests/expected/text/example78.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-(1 = div("foo", 2))
diff --git a/tests/expected/text/example79.json b/tests/expected/text/example79.json
deleted file mode 100644
index 2856b6c..0000000
--- a/tests/expected/text/example79.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"a_containedby","args":[{"property":"values"},["a","b","c"]]}
diff --git a/tests/expected/text/example79.txt b/tests/expected/text/example79.txt
deleted file mode 100644
index cd0d2c9..0000000
--- a/tests/expected/text/example79.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-a_containedby("values", ('a', 'b', 'c'))
diff --git a/tests/expected/text/example80.json b/tests/expected/text/example80.json
deleted file mode 100644
index 92709df..0000000
--- a/tests/expected/text/example80.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"a_contains","args":[{"property":"values"},["a","b","c"]]}
diff --git a/tests/expected/text/example80.txt b/tests/expected/text/example80.txt
deleted file mode 100644
index 499551b..0000000
--- a/tests/expected/text/example80.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-a_contains("values", ('a', 'b', 'c'))
diff --git a/tests/expected/text/example81.json b/tests/expected/text/example81.json
deleted file mode 100644
index e92d98c..0000000
--- a/tests/expected/text/example81.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"a_equals","args":[["a",true,1.0,8.0],{"property":"values"}]}
diff --git a/tests/expected/text/example81.txt b/tests/expected/text/example81.txt
deleted file mode 100644
index 0183818..0000000
--- a/tests/expected/text/example81.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-a_equals(('a', true, 1, 8), "values")
diff --git a/tests/expected/text/example82.json b/tests/expected/text/example82.json
deleted file mode 100644
index 78689ce..0000000
--- a/tests/expected/text/example82.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"a_overlaps","args":[{"property":"values"},[{"timestamp":"2012-08-10T05:30:00.000000Z"},{"date":"2010-02-10"},false]]}
diff --git a/tests/expected/text/example82.txt b/tests/expected/text/example82.txt
deleted file mode 100644
index 90ca8dd..0000000
--- a/tests/expected/text/example82.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-a_overlaps("values", (TIMESTAMP('2012-08-10T05:30:00.000000Z'), DATE('2010-02-10'), false))
diff --git a/tests/expected/text/example83.json b/tests/expected/text/example83.json
deleted file mode 100644
index 8cd0d1b..0000000
--- a/tests/expected/text/example83.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"s_equals","args":[{"type":"MultiPoint","coordinates":[[180.0,-0.5],[179.0,-47.121701],[180.0,-0.0],[33.470475,-0.99999],[179.0,-15.333062]]},{"property":"geometry"}]}
diff --git a/tests/expected/text/example83.txt b/tests/expected/text/example83.txt
deleted file mode 100644
index 4c89ff6..0000000
--- a/tests/expected/text/example83.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-s_equals(MULTIPOINT ((180.0 -0.5), (179.0 -47.121701), (180.0 -0.0), (33.470475 -0.99999), (179.0 -15.333062)), "geometry")
diff --git a/tests/expected/text/example84.json b/tests/expected/text/example84.json
deleted file mode 100644
index 475c6e4..0000000
--- a/tests/expected/text/example84.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"s_equals","args":[{"type":"GeometryCollection","geometries":[{"type":"Point","coordinates":[1.9,2.00001]},{"type":"Point","coordinates":[0.0,-2.00001]},{"type":"MultiLineString","coordinates":[[[-2.00001,-0.0],[-77.292642,-0.5],[-87.515626,-0.0],[-180.0,12.502773],[21.204842,-1.5],[-21.878857,-90.0]]]},{"type":"Point","coordinates":[1.9,0.5]},{"type":"LineString","coordinates":[[179.0,1.179148],[-148.192487,-65.007816],[0.5,0.333333]]}]},{"property":"geometry"}]}
diff --git a/tests/expected/text/example84.txt b/tests/expected/text/example84.txt
deleted file mode 100644
index ac58619..0000000
--- a/tests/expected/text/example84.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-s_equals(GEOMETRYCOLLECTION (POINT (1.9 2.00001), POINT (0.0 -2.00001), MULTILINESTRING ((-2.00001 -0.0, -77.292642 -0.5, -87.515626 -0.0, -180.0 12.502773, 21.204842 -1.5, -21.878857 -90.0)), POINT (1.9 0.5), LINESTRING (179.0 1.179148, -148.192487 -65.007816, 0.5 0.333333)), "geometry")
diff --git a/tests/expected/text/example85-alt01.json b/tests/expected/text/example85-alt01.json
deleted file mode 100644
index 13b9703..0000000
--- a/tests/expected/text/example85-alt01.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"=","args":[{"property":"value"},{"op":"-","args":[{"op":"+","args":[{"op":"*","args":[{"op":"*","args":[-1.0,{"property":"foo"}]},2.0]},{"op":"/","args":[{"property":"bar"},6.1234]}]},{"op":"^","args":[{"property":"x"},2.0]}]}]}
diff --git a/tests/expected/text/example85-alt01.txt b/tests/expected/text/example85-alt01.txt
deleted file mode 100644
index fe6f575..0000000
--- a/tests/expected/text/example85-alt01.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-("value" = ((((-1 * "foo") * 2) + ("bar" / 6.1234)) - ("x" ^ 2)))
diff --git a/tests/expected/text/example85.txt b/tests/expected/text/example85.txt
deleted file mode 100644
index 20cb25d..0000000
--- a/tests/expected/text/example85.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-("value" = (((((-1 * 1) * "foo") * 2) + ("bar" / 6.1234)) - ("x" ^ 2)))
diff --git a/tests/expected/text/example86.json b/tests/expected/text/example86.json
deleted file mode 100644
index 71c574a..0000000
--- a/tests/expected/text/example86.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"op":"like","args":[{"property":"name"},{"op":"casei","args":["FOO%"]}]}
diff --git a/tests/expected/text/example86.txt b/tests/expected/text/example86.txt
deleted file mode 100644
index e648cfc..0000000
--- a/tests/expected/text/example86.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-like("name", casei('FOO%'))
diff --git a/tests/generate-expected b/tests/generate-expected
index 838451b..5d48fb7 100755
--- a/tests/generate-expected
+++ b/tests/generate-expected
@@ -9,7 +9,7 @@ cargo build
 tests=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &> /dev/null && pwd)
 root=$(dirname "$tests")
 expected="$tests/expected"
-fixtures="$root/fixtures"
+fixtures="$root/examples"
 
 for input_format in json text; do
     if [ $input_format = "json" ]; then
diff --git a/tests/ogc_tests.rs b/tests/ogc_tests.rs
index 525bba0..fa8ed54 100644
--- a/tests/ogc_tests.rs
+++ b/tests/ogc_tests.rs
@@ -15,27 +15,48 @@ fn validate_str(s: &str) -> Expr {
     expr
 }
 
-fn validate_path(path: impl AsRef<Path>) {
+fn validate_example_path(path: impl AsRef<Path>) {
     let path = path.as_ref();
-    let file_name = path.file_name().unwrap();
-    let expr = validate_str(&std::fs::read_to_string(path).unwrap());
+    validate_str(&std::fs::read_to_string(path).unwrap());
+}
+
+fn read_lines(filename: impl AsRef<Path>) -> Vec<String> {
+    std::fs::read_to_string(filename)
+        .unwrap() // panic on possible file-reading errors
+        .lines() // split the string into an iterator of string slices
+        .map(String::from) // make each slice into a string
+        .collect() // gather them together into a vector
+}
+
+fn validate_expected_path(path: impl AsRef<Path>) {
+    let path = path.as_ref();
+    let lines = read_lines(path);
+
+    let input = &lines[0];
+    let outtext = &lines[1];
+    let outjson = &lines[2];
 
-    let input_format = path.parent().unwrap().file_stem().unwrap();
-    let expected = Path::new("tests/expected").join(input_format);
+    let expr = validate_str(input);
 
-    let json = std::fs::read_to_string(expected.join(file_name).with_extension("json")).unwrap();
-    assert_eq!(json.trim(), expr.to_json().unwrap());
+    assert_eq!(*outtext, expr.to_text().unwrap());
+    assert_eq!(*outjson, expr.to_json().unwrap());
+}
 
-    let text = std::fs::read_to_string(expected.join(file_name).with_extension("txt")).unwrap();
-    assert_eq!(text.trim(), expr.to_text().unwrap());
+#[rstest]
+fn validate_text_fixtures(#[files("examples/text/*.txt")] path: PathBuf) {
+    validate_example_path(path);
 }
 
 #[rstest]
-fn validate_text_fixtures(#[files("fixtures/text/*.txt")] path: PathBuf) {
-    validate_path(path);
+fn validate_json_fixtures(#[files("examples/json/*.json")] path: PathBuf) {
+    validate_example_path(path);
 }
 
+// Expected tests should have three lines.
+// Line 1: input in text or json.
+// Line 2: expected output in text.
+// Line 3: expected output in json.
 #[rstest]
-fn validate_json_fixtures(#[files("fixtures/json/*.json")] path: PathBuf) {
-    validate_path(path);
+fn validate_expected(#[files("tests/expected/*.out")] path: PathBuf) {
+    validate_expected_path(path);
 }